summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitattributes4
-rw-r--r--.gitignore6
-rw-r--r--README.md9
-rw-r--r--SConstruct40
-rw-r--r--bin/tests/test_gdscript.cpp6
-rw-r--r--bin/tests/test_python.cpp2
-rw-r--r--core/array.cpp31
-rw-r--r--core/array.h2
-rw-r--r--core/bind/core_bind.cpp49
-rw-r--r--core/bind/core_bind.h4
-rw-r--r--core/command_queue_mt.h126
-rw-r--r--core/dictionary.cpp14
-rw-r--r--core/dictionary.h1
-rw-r--r--core/dvector.h13
-rw-r--r--core/global_constants.cpp14
-rw-r--r--core/globals.cpp1
-rw-r--r--core/hq2x.cpp2636
-rw-r--r--core/hq2x.h19
-rw-r--r--core/image.cpp40
-rw-r--r--core/image.h1
-rw-r--r--core/input_map.cpp92
-rw-r--r--core/input_map.h3
-rw-r--r--core/io/LICENSE-InfoZip.txt60
-rw-r--r--core/io/LICENSE-MiniZip.txt32
-rw-r--r--core/io/file_access_memory.cpp2
-rw-r--r--core/io/http_client.cpp4
-rw-r--r--core/io/http_client.h2
-rw-r--r--core/io/ioapi.c2
-rw-r--r--core/io/ioapi.h2
-rw-r--r--core/io/resource_loader.cpp7
-rw-r--r--core/io/translation_loader_po.cpp25
-rw-r--r--core/io/translation_loader_po.h4
-rw-r--r--core/io/unzip.c2
-rw-r--r--core/io/unzip.h2
-rw-r--r--core/io/zip.c2
-rw-r--r--core/io/zip.h2
-rw-r--r--core/math/math_defs.h1
-rw-r--r--core/object.cpp35
-rw-r--r--core/object.h6
-rw-r--r--core/os/input.cpp1
-rw-r--r--core/os/input.h1
-rw-r--r--core/os/main_loop.cpp10
-rw-r--r--core/os/main_loop.h2
-rw-r--r--core/os/memory.h9
-rw-r--r--core/os/os.cpp18
-rw-r--r--core/os/os.h7
-rw-r--r--core/print_string.cpp2
-rw-r--r--core/profile_clock.cpp3
-rw-r--r--core/profile_clock.h7
-rw-r--r--core/resource.cpp28
-rw-r--r--core/resource.h4
-rw-r--r--core/script_debugger_local.cpp121
-rw-r--r--core/script_debugger_local.h19
-rw-r--r--core/script_debugger_remote.cpp313
-rw-r--r--core/script_debugger_remote.h41
-rw-r--r--core/script_language.cpp2
-rw-r--r--core/script_language.h29
-rw-r--r--core/translation.cpp6
-rw-r--r--core/ustring.cpp2
-rw-r--r--core/variant_call.cpp12
-rw-r--r--core/variant_op.cpp10
-rw-r--r--core/variant_parser.cpp39
-rw-r--r--demos/2d/area_input/box_area.pngbin1246 -> 0 bytes
-rw-r--r--demos/2d/area_input/circle_area.pngbin3030 -> 0 bytes
-rw-r--r--demos/2d/area_input/engine.cfg5
-rw-r--r--demos/2d/area_input/icon.pngbin3416 -> 0 bytes
-rw-r--r--demos/2d/area_input/input.gd15
-rw-r--r--demos/2d/area_input/input.tscn109
-rw-r--r--demos/2d/dynamic_collision_shapes/ball.gd17
-rw-r--r--demos/2d/dynamic_collision_shapes/ball.pngbin321 -> 0 bytes
-rw-r--r--demos/2d/dynamic_collision_shapes/ball.tscn47
-rw-r--r--demos/2d/dynamic_collision_shapes/box.pngbin253 -> 0 bytes
-rw-r--r--demos/2d/dynamic_collision_shapes/circle.pngbin889 -> 0 bytes
-rw-r--r--demos/2d/dynamic_collision_shapes/dynamic_colobjs.gd19
-rw-r--r--demos/2d/dynamic_collision_shapes/dynamic_colobjs.tscn178
-rw-r--r--demos/2d/dynamic_collision_shapes/engine.cfg5
-rw-r--r--demos/2d/dynamic_collision_shapes/icon.pngbin1563 -> 0 bytes
-rw-r--r--demos/2d/dynamic_collision_shapes/poly.pngbin1638 -> 0 bytes
-rw-r--r--demos/2d/fog_of_war/engine.cfg12
-rw-r--r--demos/2d/fog_of_war/floor.pngbin572 -> 0 bytes
-rw-r--r--demos/2d/fog_of_war/fog.gd78
-rw-r--r--demos/2d/fog_of_war/fog.pngbin31448 -> 0 bytes
-rw-r--r--demos/2d/fog_of_war/fog.tscn51
-rw-r--r--demos/2d/fog_of_war/icon.pngbin8681 -> 0 bytes
-rw-r--r--demos/2d/fog_of_war/tileset.tres32
-rw-r--r--demos/2d/fog_of_war/tileset_edit.tscn30
-rw-r--r--demos/2d/fog_of_war/troll.gd38
-rw-r--r--demos/2d/fog_of_war/troll.pngbin7246 -> 0 bytes
-rw-r--r--demos/2d/fog_of_war/troll.tscn52
-rw-r--r--demos/2d/hdr/beach_cave.gd21
-rw-r--r--demos/2d/hdr/beach_cave.tscn88
-rw-r--r--demos/2d/hdr/engine.cfg14
-rw-r--r--demos/2d/hdr/icon.pngbin3962 -> 0 bytes
-rw-r--r--demos/2d/hdr/ocean_beach.pngbin443558 -> 0 bytes
-rw-r--r--demos/2d/hdr/ocean_beach.png.flags1
-rw-r--r--demos/2d/hdr/ocean_cave.pngbin745215 -> 0 bytes
-rw-r--r--demos/2d/hdr/ocean_cave.png.flags1
-rw-r--r--demos/2d/hexamap/WWT-01.pngbin20369 -> 0 bytes
-rw-r--r--demos/2d/hexamap/WWT-02.pngbin21993 -> 0 bytes
-rw-r--r--demos/2d/hexamap/WWT-03.pngbin22703 -> 0 bytes
-rw-r--r--demos/2d/hexamap/WWT-04.pngbin20615 -> 0 bytes
-rw-r--r--demos/2d/hexamap/WWT-05.pngbin22293 -> 0 bytes
-rw-r--r--demos/2d/hexamap/WWT-06.pngbin22971 -> 0 bytes
-rw-r--r--demos/2d/hexamap/WWT-07.pngbin22306 -> 0 bytes
-rw-r--r--demos/2d/hexamap/WWT-08.pngbin22084 -> 0 bytes
-rw-r--r--demos/2d/hexamap/WWT-09.pngbin22066 -> 0 bytes
-rw-r--r--demos/2d/hexamap/WWT-10.pngbin22019 -> 0 bytes
-rw-r--r--demos/2d/hexamap/WWT-11.pngbin21546 -> 0 bytes
-rw-r--r--demos/2d/hexamap/WWT-12.pngbin21405 -> 0 bytes
-rw-r--r--demos/2d/hexamap/WWT-13.pngbin19682 -> 0 bytes
-rw-r--r--demos/2d/hexamap/WWT-14.pngbin20491 -> 0 bytes
-rw-r--r--demos/2d/hexamap/WWT-15.pngbin21237 -> 0 bytes
-rw-r--r--demos/2d/hexamap/WWT-16.pngbin20673 -> 0 bytes
-rw-r--r--demos/2d/hexamap/WWT-17.pngbin20628 -> 0 bytes
-rw-r--r--demos/2d/hexamap/WWT-18.pngbin22559 -> 0 bytes
-rw-r--r--demos/2d/hexamap/WWT-19.pngbin21600 -> 0 bytes
-rw-r--r--demos/2d/hexamap/WWT-20.pngbin21130 -> 0 bytes
-rw-r--r--demos/2d/hexamap/WWT-21.pngbin21114 -> 0 bytes
-rw-r--r--demos/2d/hexamap/WWT-22.pngbin21440 -> 0 bytes
-rw-r--r--demos/2d/hexamap/WWT-23.pngbin20817 -> 0 bytes
-rw-r--r--demos/2d/hexamap/WWT-24.pngbin19964 -> 0 bytes
-rw-r--r--demos/2d/hexamap/WWT-25.pngbin20584 -> 0 bytes
-rw-r--r--demos/2d/hexamap/WWT-26.pngbin21405 -> 0 bytes
-rw-r--r--demos/2d/hexamap/engine.cfg12
-rw-r--r--demos/2d/hexamap/icon.pngbin5925 -> 0 bytes
-rw-r--r--demos/2d/hexamap/map.tscn31
-rw-r--r--demos/2d/hexamap/tileset.tres240
-rw-r--r--demos/2d/hexamap/tileset_edit.tscn214
-rw-r--r--demos/2d/hexamap/troll.gd38
-rw-r--r--demos/2d/hexamap/troll.pngbin7246 -> 0 bytes
-rw-r--r--demos/2d/hexamap/troll.tscn52
-rw-r--r--demos/2d/isometric/dungeon.tscn49
-rw-r--r--demos/2d/isometric/engine.cfg21
-rw-r--r--demos/2d/isometric/icon.pngbin9377 -> 0 bytes
-rw-r--r--demos/2d/isometric/isotiles.pngbin222339 -> 0 bytes
-rw-r--r--demos/2d/isometric/tileset.tres67
-rw-r--r--demos/2d/isometric/tileset_edit.tscn130
-rw-r--r--demos/2d/isometric/troll.gd38
-rw-r--r--demos/2d/isometric/troll.pngbin7246 -> 0 bytes
-rw-r--r--demos/2d/isometric/troll.tscn53
-rw-r--r--demos/2d/isometric_light/character_shader.tres12
-rw-r--r--demos/2d/isometric_light/column.tscn52
-rw-r--r--demos/2d/isometric_light/cubio.gd85
-rw-r--r--demos/2d/isometric_light/cubio.tscn327
-rw-r--r--demos/2d/isometric_light/cubio/idle0001.pngbin7163 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0002.pngbin7182 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0003.pngbin7173 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0004.pngbin7174 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0005.pngbin7207 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0006.pngbin7302 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0007.pngbin7296 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0008.pngbin7332 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0009.pngbin7320 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0010.pngbin7311 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0011.pngbin7359 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0012.pngbin7392 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0013.pngbin7398 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0014.pngbin7399 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0015.pngbin7340 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0016.pngbin7278 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0017.pngbin7342 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0018.pngbin7370 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0019.pngbin7379 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0020.pngbin7432 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0021.pngbin7391 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0022.pngbin7381 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0023.pngbin7330 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0024.pngbin7363 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0025.pngbin7368 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0026.pngbin7356 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0027.pngbin7358 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0028.pngbin7294 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0029.pngbin7342 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0030.pngbin7402 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0031.pngbin7442 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0032.pngbin7409 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0033.pngbin7407 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0034.pngbin7389 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0035.pngbin7351 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0036.pngbin7348 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0037.pngbin7356 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0038.pngbin7318 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0039.pngbin7366 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0040.pngbin7385 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0041.pngbin7400 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0042.pngbin7397 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0043.pngbin7363 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0044.pngbin7377 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0045.pngbin7368 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0046.pngbin7346 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0047.pngbin7333 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0048.pngbin7305 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0049.pngbin7328 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0050.pngbin7319 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0051.pngbin7256 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0052.pngbin7287 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0053.pngbin7236 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0054.pngbin7182 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0055.pngbin7169 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0056.pngbin7166 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0057.pngbin7146 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0058.pngbin7174 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0059.pngbin7163 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/idle0060.pngbin7163 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-b-0001.pngbin7027 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-b-0002.pngbin7234 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-b-0003.pngbin7658 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-b-0004.pngbin7999 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-b-0005.pngbin8086 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-b-0006.pngbin8004 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-b-0007.pngbin7759 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-b-0008.pngbin7485 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-b-0009.pngbin7066 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-b-0010.pngbin6925 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-b-0011.pngbin7003 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-b-0012.pngbin7316 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-b-0013.pngbin7607 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-b-0014.pngbin7924 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-b-0015.pngbin8000 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-b-0016.pngbin8025 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-b-0017.pngbin7918 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-b-0018.pngbin7532 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-b-0019.pngbin7247 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-b-0020.pngbin7035 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-bl-0001.pngbin7097 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-bl-0002.pngbin7074 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-bl-0003.pngbin7273 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-bl-0004.pngbin7778 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-bl-0005.pngbin7717 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-bl-0006.pngbin8142 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-bl-0007.pngbin8300 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-bl-0008.pngbin8653 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-bl-0009.pngbin8846 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-bl-0010.pngbin8824 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-bl-0011.pngbin8848 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-bl-0012.pngbin8649 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-bl-0013.pngbin8695 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-bl-0014.pngbin8435 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-bl-0015.pngbin8226 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-bl-0016.pngbin7895 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-bl-0017.pngbin7712 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-bl-0018.pngbin7103 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-bl-0019.pngbin7094 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-bl-0020.pngbin7051 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-l-0001.pngbin8257 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-l-0002.pngbin7883 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-l-0003.pngbin6680 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-l-0004.pngbin6278 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-l-0005.pngbin6348 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-l-0006.pngbin5629 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-l-0007.pngbin6754 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-l-0008.pngbin7612 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-l-0009.pngbin8044 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-l-0010.pngbin8013 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-l-0011.pngbin7917 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-l-0012.pngbin7692 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-l-0013.pngbin6778 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-l-0014.pngbin6176 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-l-0015.pngbin6263 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-l-0016.pngbin6004 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-l-0017.pngbin6483 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-l-0018.pngbin7276 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-l-0019.pngbin7899 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-l-0020.pngbin8119 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-u-0001.pngbin7095 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-u-0002.pngbin7064 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-u-0003.pngbin6854 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-u-0004.pngbin6801 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-u-0005.pngbin6900 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-u-0006.pngbin7017 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-u-0007.pngbin7128 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-u-0008.pngbin7065 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-u-0009.pngbin7000 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-u-0010.pngbin6980 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-u-0011.pngbin6978 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-u-0012.pngbin7139 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-u-0013.pngbin7191 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-u-0014.pngbin7119 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-u-0015.pngbin7051 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-u-0016.pngbin6995 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-u-0017.pngbin6832 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-u-0018.pngbin6962 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-u-0019.pngbin7049 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-u-0020.pngbin7067 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-ul-0001.pngbin8202 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-ul-0002.pngbin8074 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-ul-0003.pngbin7716 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-ul-0004.pngbin7587 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-ul-0005.pngbin7383 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-ul-0006.pngbin7107 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-ul-0007.pngbin6671 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-ul-0008.pngbin6847 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-ul-0009.pngbin6892 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-ul-0010.pngbin6858 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-ul-0011.pngbin7067 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-ul-0012.pngbin6985 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-ul-0013.pngbin6600 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-ul-0014.pngbin7104 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-ul-0015.pngbin7320 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-ul-0016.pngbin7478 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-ul-0017.pngbin7736 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-ul-0018.pngbin7960 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-ul-0019.pngbin7982 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/cubio/norm-ul-0020.pngbin8137 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/energy.pngbin6968 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/engine.cfg20
-rw-r--r--demos/2d/isometric_light/faceColor.pngbin47941 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/faceMask.pngbin3106 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/faceNormal.pngbin54844 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/fire.pngbin8116 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/floor_shader.tres14
-rw-r--r--demos/2d/isometric_light/icon.pngbin7675 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/light2.pngbin3500 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/map.gd7
-rw-r--r--demos/2d/isometric_light/map.tscn261
-rw-r--r--demos/2d/isometric_light/shadow_blob.pngbin884 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/shoot.gd21
-rw-r--r--demos/2d/isometric_light/shoot.tscn172
-rw-r--r--demos/2d/isometric_light/shoot_halo.pngbin91312 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/tileset.tres216
-rw-r--r--demos/2d/isometric_light/tileset_edit.tscn446
-rw-r--r--demos/2d/isometric_light/torch.tscn138
-rw-r--r--demos/2d/isometric_light/torch_light.pngbin1262 -> 0 bytes
-rw-r--r--demos/2d/isometric_light/torch_shader.tres14
-rw-r--r--demos/2d/isometric_light/wall_shader.tres16
-rw-r--r--demos/2d/kinematic_char/circle.pngbin6107 -> 0 bytes
-rw-r--r--demos/2d/kinematic_char/colworld.gd8
-rw-r--r--demos/2d/kinematic_char/colworld.tscn422
-rw-r--r--demos/2d/kinematic_char/engine.cfg20
-rw-r--r--demos/2d/kinematic_char/icon.pngbin1513 -> 0 bytes
-rw-r--r--demos/2d/kinematic_char/long_obstacle.pngbin534 -> 0 bytes
-rw-r--r--demos/2d/kinematic_char/obstacle.pngbin490 -> 0 bytes
-rw-r--r--demos/2d/kinematic_char/player.gd123
-rw-r--r--demos/2d/kinematic_char/player.pngbin502 -> 0 bytes
-rw-r--r--demos/2d/kinematic_char/player.tscn33
-rw-r--r--demos/2d/kinematic_char/princess.pngbin504 -> 0 bytes
-rw-r--r--demos/2d/kinematic_col/colworld.tscn47
-rw-r--r--demos/2d/kinematic_col/engine.cfg12
-rw-r--r--demos/2d/kinematic_col/icon.pngbin1426 -> 0 bytes
-rw-r--r--demos/2d/kinematic_col/obstacle.pngbin453 -> 0 bytes
-rw-r--r--demos/2d/kinematic_col/player.gd31
-rw-r--r--demos/2d/kinematic_col/player.pngbin502 -> 0 bytes
-rw-r--r--demos/2d/kinematic_col/player.tscn32
-rw-r--r--demos/2d/light_mask/burano.pngbin974437 -> 0 bytes
-rw-r--r--demos/2d/light_mask/engine.cfg9
-rw-r--r--demos/2d/light_mask/icon.pngbin6285 -> 0 bytes
-rw-r--r--demos/2d/light_mask/lightmask.tscn134
-rw-r--r--demos/2d/light_mask/splat.pngbin18255 -> 0 bytes
-rw-r--r--demos/2d/lights_shadows/bg.pngbin294 -> 0 bytes
-rw-r--r--demos/2d/lights_shadows/caster.pngbin122 -> 0 bytes
-rw-r--r--demos/2d/lights_shadows/engine.cfg16
-rw-r--r--demos/2d/lights_shadows/icon.pngbin3988 -> 0 bytes
-rw-r--r--demos/2d/lights_shadows/light.pngbin243776 -> 0 bytes
-rw-r--r--demos/2d/lights_shadows/light_shadows.tscn326
-rw-r--r--demos/2d/lights_shadows/spot.pngbin3699 -> 0 bytes
-rw-r--r--demos/2d/lookat/arrow.pngbin2528 -> 0 bytes
-rw-r--r--demos/2d/lookat/engine.cfg5
-rw-r--r--demos/2d/lookat/icon.pngbin1495 -> 0 bytes
-rw-r--r--demos/2d/lookat/lookat.gd33
-rw-r--r--demos/2d/lookat/lookat.tscn32
-rw-r--r--demos/2d/motion/car.pngbin2086 -> 0 bytes
-rw-r--r--demos/2d/motion/engine.cfg12
-rw-r--r--demos/2d/motion/icon.pngbin2621 -> 0 bytes
-rw-r--r--demos/2d/motion/motion.gd33
-rw-r--r--demos/2d/motion/motion.tscn135
-rw-r--r--demos/2d/navpoly/agent.pngbin2508 -> 0 bytes
-rw-r--r--demos/2d/navpoly/engine.cfg12
-rw-r--r--demos/2d/navpoly/icon.pngbin3642 -> 0 bytes
-rw-r--r--demos/2d/navpoly/navigation.gd53
-rw-r--r--demos/2d/navpoly/navigation.tscn34
-rw-r--r--demos/2d/navpoly/path.pngbin309506 -> 0 bytes
-rw-r--r--demos/2d/normalmaps/diffuse.jpgbin309334 -> 0 bytes
-rw-r--r--demos/2d/normalmaps/engine.cfg12
-rw-r--r--demos/2d/normalmaps/icon.pngbin10402 -> 0 bytes
-rw-r--r--demos/2d/normalmaps/light.pngbin243776 -> 0 bytes
-rw-r--r--demos/2d/normalmaps/normal.jpgbin501428 -> 0 bytes
-rw-r--r--demos/2d/normalmaps/normal_material.tres14
-rw-r--r--demos/2d/normalmaps/normalmap.tscn63
-rw-r--r--demos/2d/particles/engine.cfg5
-rw-r--r--demos/2d/particles/fire_particle.pngbin6022 -> 0 bytes
-rw-r--r--demos/2d/particles/icon.pngbin4900 -> 0 bytes
-rw-r--r--demos/2d/particles/mask.pngbin4226 -> 0 bytes
-rw-r--r--demos/2d/particles/particles.tscn174
-rw-r--r--demos/2d/particles/smoke_particle.pngbin7008 -> 0 bytes
-rw-r--r--demos/2d/particles/spark_particle2.pngbin428 -> 0 bytes
-rw-r--r--demos/2d/platformer/bullet.gd16
-rw-r--r--demos/2d/platformer/bullet.pngbin319 -> 0 bytes
-rw-r--r--demos/2d/platformer/bullet.tscn115
-rw-r--r--demos/2d/platformer/coin.gd19
-rw-r--r--demos/2d/platformer/coin.pngbin3133 -> 0 bytes
-rw-r--r--demos/2d/platformer/coin.tscn146
-rw-r--r--demos/2d/platformer/enemy.gd83
-rw-r--r--demos/2d/platformer/enemy.pngbin3552 -> 0 bytes
-rw-r--r--demos/2d/platformer/enemy.tscn206
-rw-r--r--demos/2d/platformer/engine.cfg42
-rw-r--r--demos/2d/platformer/icon.pngbin1002 -> 0 bytes
-rw-r--r--demos/2d/platformer/moving_platform.gd20
-rw-r--r--demos/2d/platformer/moving_platform.pngbin2143 -> 0 bytes
-rw-r--r--demos/2d/platformer/moving_platform.tscn52
-rw-r--r--demos/2d/platformer/music.oggbin1692019 -> 0 bytes
-rw-r--r--demos/2d/platformer/one_way_platform.pngbin2287 -> 0 bytes
-rw-r--r--demos/2d/platformer/one_way_platform.tscn36
-rw-r--r--demos/2d/platformer/osb_fire.pngbin2233 -> 0 bytes
-rw-r--r--demos/2d/platformer/osb_jump.pngbin1374 -> 0 bytes
-rw-r--r--demos/2d/platformer/osb_left.pngbin1366 -> 0 bytes
-rw-r--r--demos/2d/platformer/osb_right.pngbin1368 -> 0 bytes
-rw-r--r--demos/2d/platformer/parallax_bg.tscn101
-rw-r--r--demos/2d/platformer/plank.pngbin270 -> 0 bytes
-rw-r--r--demos/2d/platformer/plankpin.pngbin253 -> 0 bytes
-rw-r--r--demos/2d/platformer/player.gd232
-rw-r--r--demos/2d/platformer/player.tscn330
-rw-r--r--demos/2d/platformer/robot_demo.pngbin12399 -> 0 bytes
-rw-r--r--demos/2d/platformer/scroll_bg_cloud_1.pngbin531 -> 0 bytes
-rw-r--r--demos/2d/platformer/scroll_bg_cloud_2.pngbin719 -> 0 bytes
-rw-r--r--demos/2d/platformer/scroll_bg_cloud_3.pngbin394 -> 0 bytes
-rw-r--r--demos/2d/platformer/scroll_bg_fg_1.pngbin12137 -> 0 bytes
-rw-r--r--demos/2d/platformer/scroll_bg_fg_2.pngbin13073 -> 0 bytes
-rw-r--r--demos/2d/platformer/scroll_bg_sky.pngbin3023 -> 0 bytes
-rw-r--r--demos/2d/platformer/seesaw.tscn60
-rw-r--r--demos/2d/platformer/sound_coin.wavbin63952 -> 0 bytes
-rw-r--r--demos/2d/platformer/sound_explode.wavbin75832 -> 0 bytes
-rw-r--r--demos/2d/platformer/sound_hit.wavbin71932 -> 0 bytes
-rw-r--r--demos/2d/platformer/sound_jump.wavbin82076 -> 0 bytes
-rw-r--r--demos/2d/platformer/sound_shoot.wavbin78888 -> 0 bytes
-rw-r--r--demos/2d/platformer/stage.tscn352
-rw-r--r--demos/2d/platformer/tiles_demo.pngbin10066 -> 0 bytes
-rw-r--r--demos/2d/platformer/tiles_demo.png.flags1
-rw-r--r--demos/2d/platformer/tileset.tres195
-rw-r--r--demos/2d/platformer/tileset_edit.tscn432
-rw-r--r--demos/2d/pong/ball.pngbin203 -> 0 bytes
-rw-r--r--demos/2d/pong/engine.cfg22
-rw-r--r--demos/2d/pong/icon.pngbin956 -> 0 bytes
-rw-r--r--demos/2d/pong/left_pallete.pngbin200 -> 0 bytes
-rw-r--r--demos/2d/pong/pong.gd67
-rw-r--r--demos/2d/pong/pong.tscn33
-rw-r--r--demos/2d/pong/right_pallete.pngbin202 -> 0 bytes
-rw-r--r--demos/2d/pong/separator.pngbin203 -> 0 bytes
-rw-r--r--demos/2d/rubegoldberg/art/bowling_ball.pngbin4637 -> 0 bytes
-rw-r--r--demos/2d/rubegoldberg/art/box.pngbin3300 -> 0 bytes
-rw-r--r--demos/2d/rubegoldberg/art/domino.pngbin246 -> 0 bytes
-rw-r--r--demos/2d/rubegoldberg/art/platform.pngbin4137 -> 0 bytes
-rw-r--r--demos/2d/rubegoldberg/art/seesaw_base.pngbin2936 -> 0 bytes
-rw-r--r--demos/2d/rubegoldberg/art/seesaw_top.pngbin3636 -> 0 bytes
-rw-r--r--demos/2d/rubegoldberg/ball.tscn44
-rw-r--r--demos/2d/rubegoldberg/box.tscn44
-rw-r--r--demos/2d/rubegoldberg/domino.tscn44
-rw-r--r--demos/2d/rubegoldberg/engine.cfg10
-rw-r--r--demos/2d/rubegoldberg/icon.pngbin3508 -> 0 bytes
-rw-r--r--demos/2d/rubegoldberg/pendulum.tscn248
-rw-r--r--demos/2d/rubegoldberg/platform.tscn33
-rw-r--r--demos/2d/rubegoldberg/rubegoldberg.tscn98
-rw-r--r--demos/2d/rubegoldberg/seesaw.tscn89
-rw-r--r--demos/2d/screen_space_shaders/art/burano.jpgbin265390 -> 0 bytes
-rw-r--r--demos/2d/screen_space_shaders/art/filmgrain.pngbin290595 -> 0 bytes
-rw-r--r--demos/2d/screen_space_shaders/art/filmgrain.png.flags1
-rw-r--r--demos/2d/screen_space_shaders/art/forest.jpgbin314190 -> 0 bytes
-rw-r--r--demos/2d/screen_space_shaders/art/mountains.jpgbin214974 -> 0 bytes
-rw-r--r--demos/2d/screen_space_shaders/art/platformer.jpgbin116815 -> 0 bytes
-rw-r--r--demos/2d/screen_space_shaders/art/vignette.pngbin4075 -> 0 bytes
-rw-r--r--demos/2d/screen_space_shaders/art/white.pngbin174 -> 0 bytes
-rw-r--r--demos/2d/screen_space_shaders/engine.cfg12
-rw-r--r--demos/2d/screen_space_shaders/icon.pngbin7479 -> 0 bytes
-rw-r--r--demos/2d/screen_space_shaders/screen_shaders.gd25
-rw-r--r--demos/2d/screen_space_shaders/screen_shaders.tscn512
-rw-r--r--demos/2d/sdf_font/KaushanScript-Regular.otfbin89168 -> 0 bytes
-rw-r--r--demos/2d/sdf_font/engine.cfg5
-rw-r--r--demos/2d/sdf_font/font.fntbin180332 -> 0 bytes
-rw-r--r--demos/2d/sdf_font/icon.pngbin3560 -> 0 bytes
-rw-r--r--demos/2d/sdf_font/sdf.tscn74
-rw-r--r--demos/2d/shower_of_bullets/bullet.pngbin477 -> 0 bytes
-rw-r--r--demos/2d/shower_of_bullets/bullets.gd71
-rw-r--r--demos/2d/shower_of_bullets/engine.cfg16
-rw-r--r--demos/2d/shower_of_bullets/face_happy.pngbin1243 -> 0 bytes
-rw-r--r--demos/2d/shower_of_bullets/face_sad.pngbin1240 -> 0 bytes
-rw-r--r--demos/2d/shower_of_bullets/icon.pngbin2777 -> 0 bytes
-rw-r--r--demos/2d/shower_of_bullets/shower.gd25
-rw-r--r--demos/2d/shower_of_bullets/shower.tscn51
-rw-r--r--demos/2d/space_shooter/asteroid.gd43
-rw-r--r--demos/2d/space_shooter/asteroid.tscn129
-rw-r--r--demos/2d/space_shooter/bg_gradient.pngbin1572 -> 0 bytes
-rw-r--r--demos/2d/space_shooter/big_star.pngbin275 -> 0 bytes
-rw-r--r--demos/2d/space_shooter/enemy1.gd36
-rw-r--r--demos/2d/space_shooter/enemy1.pngbin7048 -> 0 bytes
-rw-r--r--demos/2d/space_shooter/enemy1.tscn108
-rw-r--r--demos/2d/space_shooter/enemy2.gd51
-rw-r--r--demos/2d/space_shooter/enemy2.pngbin5676 -> 0 bytes
-rw-r--r--demos/2d/space_shooter/enemy2.tscn98
-rw-r--r--demos/2d/space_shooter/enemy_shot.gd31
-rw-r--r--demos/2d/space_shooter/enemy_shot.pngbin330 -> 0 bytes
-rw-r--r--demos/2d/space_shooter/enemy_shot.tscn99
-rw-r--r--demos/2d/space_shooter/engine.cfg22
-rw-r--r--demos/2d/space_shooter/explosion.tscn37
-rw-r--r--demos/2d/space_shooter/fire.pngbin357 -> 0 bytes
-rw-r--r--demos/2d/space_shooter/game_state.gd22
-rw-r--r--demos/2d/space_shooter/icon.pngbin6931 -> 0 bytes
-rw-r--r--demos/2d/space_shooter/level.tscn354
-rw-r--r--demos/2d/space_shooter/main_menu.gd11
-rw-r--r--demos/2d/space_shooter/main_menu.tscn64
-rw-r--r--demos/2d/space_shooter/meteorite.pngbin6072 -> 0 bytes
-rw-r--r--demos/2d/space_shooter/parallax.tscn201
-rw-r--r--demos/2d/space_shooter/rail.gd19
-rw-r--r--demos/2d/space_shooter/ship.gd81
-rw-r--r--demos/2d/space_shooter/ship.pngbin2815 -> 0 bytes
-rw-r--r--demos/2d/space_shooter/ship.tscn229
-rw-r--r--demos/2d/space_shooter/shoot.pngbin222 -> 0 bytes
-rw-r--r--demos/2d/space_shooter/shot.gd40
-rw-r--r--demos/2d/space_shooter/shot.tscn103
-rw-r--r--demos/2d/space_shooter/small_star.pngbin90 -> 0 bytes
-rw-r--r--demos/2d/space_shooter/sound_explode.wavbin75832 -> 0 bytes
-rw-r--r--demos/2d/space_shooter/sound_shoot.wavbin78888 -> 0 bytes
-rw-r--r--demos/2d/space_shooter/tile.pngbin810 -> 0 bytes
-rw-r--r--demos/2d/space_shooter/tileset.tres20
-rw-r--r--demos/2d/space_shooter/tileset_edit.tscn35
-rw-r--r--demos/2d/splash/bg.pngbin14419 -> 0 bytes
-rw-r--r--demos/2d/splash/bg_layer_1.pngbin13335 -> 0 bytes
-rw-r--r--demos/2d/splash/bg_layer_2.pngbin16026 -> 0 bytes
-rw-r--r--demos/2d/splash/button.pngbin3666 -> 0 bytes
-rw-r--r--demos/2d/splash/button_pressed.pngbin3573 -> 0 bytes
-rw-r--r--demos/2d/splash/engine.cfg9
-rw-r--r--demos/2d/splash/freesans.fntbin29950 -> 0 bytes
-rw-r--r--demos/2d/splash/icon.pngbin7041 -> 0 bytes
-rw-r--r--demos/2d/splash/splash.tscn274
-rw-r--r--demos/2d/splash/splash_01.pngbin42593 -> 0 bytes
-rw-r--r--demos/2d/splash/splash_02.pngbin48376 -> 0 bytes
-rw-r--r--demos/2d/splash/splash_03.pngbin53073 -> 0 bytes
-rw-r--r--demos/2d/splash/splash_04.pngbin55571 -> 0 bytes
-rw-r--r--demos/2d/splash/splash_05.pngbin56686 -> 0 bytes
-rw-r--r--demos/2d/splash/splash_06.pngbin56576 -> 0 bytes
-rw-r--r--demos/2d/splash/splash_07.pngbin56694 -> 0 bytes
-rw-r--r--demos/2d/splash/splash_08.pngbin56810 -> 0 bytes
-rw-r--r--demos/2d/splash/splash_09.pngbin58112 -> 0 bytes
-rw-r--r--demos/2d/sprite_shaders/cubio.pngbin26579 -> 0 bytes
-rw-r--r--demos/2d/sprite_shaders/engine.cfg5
-rw-r--r--demos/2d/sprite_shaders/icon.pngbin8209 -> 0 bytes
-rw-r--r--demos/2d/sprite_shaders/sprite_shaders.tscn163
-rw-r--r--demos/2d/tetris/block.pngbin556 -> 0 bytes
-rw-r--r--demos/2d/tetris/engine.cfg17
-rw-r--r--demos/2d/tetris/grid.gd194
-rw-r--r--demos/2d/tetris/grid.tscn47
-rw-r--r--demos/2d/tetris/tetris.pngbin789 -> 0 bytes
-rw-r--r--demos/2d/tetris/tetris.tscn67
-rw-r--r--demos/2d/texscreen/OpenCV_Chessboard.pngbin44884 -> 0 bytes
-rw-r--r--demos/2d/texscreen/bubble.pngbin18619 -> 0 bytes
-rw-r--r--demos/2d/texscreen/bubbles.gd11
-rw-r--r--demos/2d/texscreen/bubbles.tscn32
-rw-r--r--demos/2d/texscreen/burano.pngbin974437 -> 0 bytes
-rw-r--r--demos/2d/texscreen/engine.cfg12
-rw-r--r--demos/2d/texscreen/icon.pngbin9245 -> 0 bytes
-rw-r--r--demos/2d/texscreen/lens.gd32
-rw-r--r--demos/2d/texscreen/lens.tscn29
-rw-r--r--demos/3d/fixed_materials/brick_color.pngbin100525 -> 0 bytes
-rw-r--r--demos/3d/fixed_materials/brick_detail.pngbin142504 -> 0 bytes
-rw-r--r--demos/3d/fixed_materials/brick_detail_emission.pngbin29314 -> 0 bytes
-rw-r--r--demos/3d/fixed_materials/brick_detail_glow.pngbin26033 -> 0 bytes
-rw-r--r--demos/3d/fixed_materials/brick_emission.pngbin32504 -> 0 bytes
-rw-r--r--demos/3d/fixed_materials/brick_normal.pngbin82605 -> 0 bytes
-rw-r--r--demos/3d/fixed_materials/engine.cfg9
-rw-r--r--demos/3d/fixed_materials/fixed_materials.scnbin8271 -> 0 bytes
-rw-r--r--demos/3d/fixed_materials/icon.pngbin3066 -> 0 bytes
-rw-r--r--demos/3d/fixed_materials/refmap.pngbin17649 -> 0 bytes
-rw-r--r--demos/3d/fixed_materials/rim.pngbin37128 -> 0 bytes
-rw-r--r--demos/3d/fixed_materials/rocky_specular.pngbin24263 -> 0 bytes
-rw-r--r--demos/3d/fixed_materials/s.xml72
-rw-r--r--demos/3d/fixed_materials/tournesol.pngbin88375 -> 0 bytes
-rw-r--r--demos/3d/inverse_kinematics/engine.cfg0
-rw-r--r--demos/3d/inverse_kinematics/main.scnbin503 -> 0 bytes
-rw-r--r--demos/3d/kinematic_char/cubelib.resbin11532 -> 0 bytes
-rw-r--r--demos/3d/kinematic_char/cubio.gd86
-rw-r--r--demos/3d/kinematic_char/engine.cfg17
-rw-r--r--demos/3d/kinematic_char/follow_camera.gd57
-rw-r--r--demos/3d/kinematic_char/kinebody3d.pngbin6078 -> 0 bytes
-rw-r--r--demos/3d/kinematic_char/level.scnbin18847 -> 0 bytes
-rw-r--r--demos/3d/kinematic_char/purple_wood.texbin173520 -> 0 bytes
-rw-r--r--demos/3d/kinematic_char/purplecube.scnbin7927 -> 0 bytes
-rw-r--r--demos/3d/kinematic_char/twood.texbin168054 -> 0 bytes
-rw-r--r--demos/3d/kinematic_char/white_wood.texbin169001 -> 0 bytes
-rw-r--r--demos/3d/mousepick_test/engine.cfg5
-rw-r--r--demos/3d/mousepick_test/icon.pngbin2451 -> 0 bytes
-rw-r--r--demos/3d/mousepick_test/mousepick.gd24
-rw-r--r--demos/3d/mousepick_test/mousepick.scnbin40434 -> 0 bytes
-rw-r--r--demos/3d/navmesh/engine.cfg9
-rw-r--r--demos/3d/navmesh/icon.pngbin4902 -> 0 bytes
-rw-r--r--demos/3d/navmesh/navmesh.gd95
-rw-r--r--demos/3d/navmesh/navmesh.scnbin40827 -> 0 bytes
-rw-r--r--demos/3d/navmesh/particle.pngbin260 -> 0 bytes
-rw-r--r--demos/3d/platformer/bullet.gd5
-rw-r--r--demos/3d/platformer/bullet.scnbin7303 -> 0 bytes
-rw-r--r--demos/3d/platformer/coin.gd11
-rw-r--r--demos/3d/platformer/coin.scnbin7785 -> 0 bytes
-rw-r--r--demos/3d/platformer/cutout.pngbin151310 -> 0 bytes
-rw-r--r--demos/3d/platformer/enemy.gd78
-rw-r--r--demos/3d/platformer/enemy.scnbin39181 -> 0 bytes
-rw-r--r--demos/3d/platformer/engine.cfg28
-rw-r--r--demos/3d/platformer/follow_camera.gd80
-rw-r--r--demos/3d/platformer/icon.pngbin8736 -> 0 bytes
-rw-r--r--demos/3d/platformer/osb_down.pngbin1398 -> 0 bytes
-rw-r--r--demos/3d/platformer/osb_fire.pngbin2233 -> 0 bytes
-rw-r--r--demos/3d/platformer/osb_jump.pngbin1374 -> 0 bytes
-rw-r--r--demos/3d/platformer/osb_left.pngbin1366 -> 0 bytes
-rw-r--r--demos/3d/platformer/osb_right.pngbin1368 -> 0 bytes
-rw-r--r--demos/3d/platformer/osb_up.pngbin1386 -> 0 bytes
-rw-r--r--demos/3d/platformer/player.gd211
-rw-r--r--demos/3d/platformer/player.scnbin107922 -> 0 bytes
-rw-r--r--demos/3d/platformer/robotrigged.scnbin110973 -> 0 bytes
-rw-r--r--demos/3d/platformer/sb.cube7
-rw-r--r--demos/3d/platformer/sb_back.pngbin71888 -> 0 bytes
-rw-r--r--demos/3d/platformer/sb_bottom.pngbin1873 -> 0 bytes
-rw-r--r--demos/3d/platformer/sb_front.pngbin103495 -> 0 bytes
-rw-r--r--demos/3d/platformer/sb_left.pngbin75693 -> 0 bytes
-rw-r--r--demos/3d/platformer/sb_right.pngbin65121 -> 0 bytes
-rw-r--r--demos/3d/platformer/sb_top.pngbin1873 -> 0 bytes
-rw-r--r--demos/3d/platformer/shine.pngbin319 -> 0 bytes
-rw-r--r--demos/3d/platformer/sound_coin.wavbin63952 -> 0 bytes
-rw-r--r--demos/3d/platformer/sound_explode.wavbin75832 -> 0 bytes
-rw-r--r--demos/3d/platformer/sound_hit.wavbin71932 -> 0 bytes
-rw-r--r--demos/3d/platformer/sound_jump.wavbin82076 -> 0 bytes
-rw-r--r--demos/3d/platformer/sound_shoot.wavbin78888 -> 0 bytes
-rw-r--r--demos/3d/platformer/stage.scnbin17714 -> 0 bytes
-rw-r--r--demos/3d/platformer/texture.texbin18209 -> 0 bytes
-rw-r--r--demos/3d/platformer/tiles.resbin81631 -> 0 bytes
-rw-r--r--demos/3d/platformer/tiles.scnbin23305 -> 0 bytes
-rw-r--r--demos/3d/platformer/tiles.xcfbin34655 -> 0 bytes
-rw-r--r--demos/3d/sat_test/box.scnbin27363 -> 0 bytes
-rw-r--r--demos/3d/sat_test/capsule.scnbin22718 -> 0 bytes
-rw-r--r--demos/3d/sat_test/convex.scnbin25617 -> 0 bytes
-rw-r--r--demos/3d/sat_test/engine.cfg5
-rw-r--r--demos/3d/sat_test/icon.pngbin4628 -> 0 bytes
-rw-r--r--demos/3d/sat_test/sat_test.scnbin3430 -> 0 bytes
-rw-r--r--demos/3d/sat_test/shapes.dae368
-rw-r--r--demos/3d/sat_test/shapes.scnbin25887 -> 0 bytes
-rw-r--r--demos/3d/sat_test/sphere.scnbin41375 -> 0 bytes
-rw-r--r--demos/3d/shader_materials/brick_color.pngbin100525 -> 0 bytes
-rw-r--r--demos/3d/shader_materials/brick_detail.pngbin142504 -> 0 bytes
-rw-r--r--demos/3d/shader_materials/brick_detail_emission.pngbin29314 -> 0 bytes
-rw-r--r--demos/3d/shader_materials/brick_detail_glow.pngbin26033 -> 0 bytes
-rw-r--r--demos/3d/shader_materials/brick_emission.pngbin32504 -> 0 bytes
-rw-r--r--demos/3d/shader_materials/brick_normal.pngbin82605 -> 0 bytes
-rw-r--r--demos/3d/shader_materials/engine.cfg9
-rw-r--r--demos/3d/shader_materials/icon.pngbin2980 -> 0 bytes
-rw-r--r--demos/3d/shader_materials/refmap.pngbin17649 -> 0 bytes
-rw-r--r--demos/3d/shader_materials/rim.pngbin37128 -> 0 bytes
-rw-r--r--demos/3d/shader_materials/rocky_specular.pngbin24263 -> 0 bytes
-rw-r--r--demos/3d/shader_materials/s.xml72
-rw-r--r--demos/3d/shader_materials/sb.cube7
-rw-r--r--demos/3d/shader_materials/sb_back.pngbin71888 -> 0 bytes
-rw-r--r--demos/3d/shader_materials/sb_bottom.pngbin1873 -> 0 bytes
-rw-r--r--demos/3d/shader_materials/sb_front.pngbin103495 -> 0 bytes
-rw-r--r--demos/3d/shader_materials/sb_left.pngbin75693 -> 0 bytes
-rw-r--r--demos/3d/shader_materials/sb_right.pngbin65121 -> 0 bytes
-rw-r--r--demos/3d/shader_materials/sb_top.pngbin1873 -> 0 bytes
-rw-r--r--demos/3d/shader_materials/shader_materials.scnbin9892 -> 0 bytes
-rw-r--r--demos/3d/shader_materials/tournesol.pngbin88375 -> 0 bytes
-rw-r--r--demos/3d/truck_town/car_base.scnbin13459 -> 0 bytes
-rw-r--r--demos/3d/truck_town/car_select.gd32
-rw-r--r--demos/3d/truck_town/car_select.scnbin1968 -> 0 bytes
-rw-r--r--demos/3d/truck_town/cement.texbin169836 -> 0 bytes
-rw-r--r--demos/3d/truck_town/choose_tow.pngbin20702 -> 0 bytes
-rw-r--r--demos/3d/truck_town/choose_trailer.pngbin15646 -> 0 bytes
-rw-r--r--demos/3d/truck_town/choose_van.pngbin10106 -> 0 bytes
-rw-r--r--demos/3d/truck_town/crane.scnbin26350 -> 0 bytes
-rw-r--r--demos/3d/truck_town/engine.cfg14
-rw-r--r--demos/3d/truck_town/follow_camera.gd57
-rw-r--r--demos/3d/truck_town/grass.texbin177762 -> 0 bytes
-rw-r--r--demos/3d/truck_town/icon.pngbin6878 -> 0 bytes
-rw-r--r--demos/3d/truck_town/trailer_truck.scnbin22400 -> 0 bytes
-rw-r--r--demos/3d/truck_town/truck_scene.scnbin1889480 -> 0 bytes
-rw-r--r--demos/3d/truck_town/trucktown.scnbin165689 -> 0 bytes
-rw-r--r--demos/3d/truck_town/vehicle.gd45
-rw-r--r--demos/LICENSE.md27
-rw-r--r--demos/gui/drag_and_drop/drag_and_drop.scnbin2947 -> 0 bytes
-rw-r--r--demos/gui/drag_and_drop/drag_drop_script.gd20
-rw-r--r--demos/gui/drag_and_drop/engine.cfg5
-rw-r--r--demos/gui/drag_and_drop/icon.pngbin806 -> 0 bytes
-rw-r--r--demos/gui/input_mapping/controls.gd56
-rw-r--r--demos/gui/input_mapping/controls.scnbin2026 -> 0 bytes
-rw-r--r--demos/gui/input_mapping/engine.cfg18
-rw-r--r--demos/gui/input_mapping/icon.pngbin1503 -> 0 bytes
-rw-r--r--demos/gui/rich_text_bbcode/OFL.txt92
-rw-r--r--demos/gui/rich_text_bbcode/TitilliumWeb-Bold.ttfbin59908 -> 0 bytes
-rw-r--r--demos/gui/rich_text_bbcode/TitilliumWeb-BoldItalic.ttfbin69796 -> 0 bytes
-rw-r--r--demos/gui/rich_text_bbcode/TitilliumWeb-Italic.ttfbin72416 -> 0 bytes
-rw-r--r--demos/gui/rich_text_bbcode/TitilliumWeb-Regular.ttfbin63752 -> 0 bytes
-rw-r--r--demos/gui/rich_text_bbcode/engine.cfg5
-rw-r--r--demos/gui/rich_text_bbcode/icon.pngbin4304 -> 0 bytes
-rw-r--r--demos/gui/rich_text_bbcode/rich_text_bbcode.gd6
-rw-r--r--demos/gui/rich_text_bbcode/rich_text_bbcode.scnbin3217 -> 0 bytes
-rw-r--r--demos/gui/rich_text_bbcode/titilium-bold.fntbin36224 -> 0 bytes
-rw-r--r--demos/gui/rich_text_bbcode/titilium-bolditalic.fntbin36814 -> 0 bytes
-rw-r--r--demos/gui/rich_text_bbcode/titilium-italic.fntbin35274 -> 0 bytes
-rw-r--r--demos/gui/rich_text_bbcode/titilium-regular.fntbin34511 -> 0 bytes
-rw-r--r--demos/gui/rich_text_bbcode/unicorn_icon.pngbin850 -> 0 bytes
-rw-r--r--demos/gui/translation/controls.gd9
-rw-r--r--demos/gui/translation/controls.scnbin2272 -> 0 bytes
-rw-r--r--demos/gui/translation/engine.cfg10
-rw-r--r--demos/gui/translation/flag_japan.pngbin1473 -> 0 bytes
-rw-r--r--demos/gui/translation/flag_spain.pngbin3048 -> 0 bytes
-rw-r--r--demos/gui/translation/flag_uk.pngbin6544 -> 0 bytes
-rw-r--r--demos/gui/translation/icon.pngbin2557 -> 0 bytes
-rw-r--r--demos/gui/translation/main.gd32
-rw-r--r--demos/gui/translation/main.scnbin2119 -> 0 bytes
-rw-r--r--demos/gui/translation/noto.fntbin9171 -> 0 bytes
-rw-r--r--demos/gui/translation/text.csv3
-rw-r--r--demos/gui/translation/translations/text.en.xlbin575 -> 0 bytes
-rw-r--r--demos/gui/translation/translations/text.es.xlbin579 -> 0 bytes
-rw-r--r--demos/gui/translation/translations/text.ja.xlbin595 -> 0 bytes
-rw-r--r--demos/misc/autoload/engine.cfg8
-rw-r--r--demos/misc/autoload/global.gd36
-rw-r--r--demos/misc/autoload/scene_a.gd5
-rw-r--r--demos/misc/autoload/scene_a.scnbin1660 -> 0 bytes
-rw-r--r--demos/misc/autoload/scene_b.gd5
-rw-r--r--demos/misc/autoload/scene_b.scnbin1639 -> 0 bytes
-rw-r--r--demos/misc/instancing/ball.scnbin1885 -> 0 bytes
-rw-r--r--demos/misc/instancing/bowling_ball.pngbin4637 -> 0 bytes
-rw-r--r--demos/misc/instancing/container.pngbin15504 -> 0 bytes
-rw-r--r--demos/misc/instancing/container.scnbin3137 -> 0 bytes
-rw-r--r--demos/misc/instancing/engine.cfg9
-rw-r--r--demos/misc/instancing/icon.pngbin3396 -> 0 bytes
-rw-r--r--demos/misc/joysticks/diagram.pngbin171519 -> 0 bytes
-rw-r--r--demos/misc/joysticks/engine.cfg10
-rw-r--r--demos/misc/joysticks/icon.pngbin2916 -> 0 bytes
-rw-r--r--demos/misc/joysticks/indicators.pngbin1069 -> 0 bytes
-rw-r--r--demos/misc/joysticks/joysticks.gd61
-rw-r--r--demos/misc/joysticks/joysticks.scnbin4064 -> 0 bytes
-rw-r--r--demos/misc/joysticks/jsdiagram.xscn115
-rw-r--r--demos/misc/pause/engine.cfg5
-rw-r--r--demos/misc/pause/icon.pngbin5236 -> 0 bytes
-rw-r--r--demos/misc/pause/spinpause.gd13
-rw-r--r--demos/misc/pause/spinpause.scnbin5399 -> 0 bytes
-rw-r--r--demos/misc/regex/engine.cfg5
-rw-r--r--demos/misc/regex/icon.pngbin2215 -> 0 bytes
-rw-r--r--demos/misc/regex/regex.gd28
-rw-r--r--demos/misc/regex/regex.scnbin1775 -> 0 bytes
-rw-r--r--demos/misc/scene_changer/engine.cfg4
-rw-r--r--demos/misc/scene_changer/scene_a.gd16
-rw-r--r--demos/misc/scene_changer/scene_a.scnbin1660 -> 0 bytes
-rw-r--r--demos/misc/scene_changer/scene_b.gd16
-rw-r--r--demos/misc/scene_changer/scene_b.scnbin1639 -> 0 bytes
-rw-r--r--demos/misc/threads/engine.cfg4
-rw-r--r--demos/misc/threads/mona.pngbin98894 -> 0 bytes
-rw-r--r--demos/misc/threads/thread.gd31
-rw-r--r--demos/misc/threads/thread.scnbin1586 -> 0 bytes
-rw-r--r--demos/misc/tween/engine.cfg11
-rw-r--r--demos/misc/tween/icon.pngbin2831 -> 0 bytes
-rw-r--r--demos/misc/tween/main.gd165
-rw-r--r--demos/misc/tween/main.scnbin5216 -> 0 bytes
-rw-r--r--demos/misc/udp_chat/chat.gd66
-rw-r--r--demos/misc/udp_chat/chat.scnbin3359 -> 0 bytes
-rw-r--r--demos/misc/udp_chat/engine.cfg5
-rw-r--r--demos/misc/udp_chat/icon.pngbin2388 -> 0 bytes
-rw-r--r--demos/misc/window_management/control.gd186
-rw-r--r--demos/misc/window_management/engine.cfg19
-rw-r--r--demos/misc/window_management/icon.pngbin4210 -> 0 bytes
-rw-r--r--demos/misc/window_management/observer/observer.gd78
-rw-r--r--demos/misc/window_management/observer/observer.scnbin3824 -> 0 bytes
-rw-r--r--demos/misc/window_management/window_management.scnbin4384 -> 0 bytes
-rw-r--r--demos/plugins/custom_dock/custom_dock.scnbin1494 -> 0 bytes
-rw-r--r--demos/plugins/custom_dock/dock_plugin.gd23
-rw-r--r--demos/plugins/custom_dock/plugin.cfg14
-rw-r--r--demos/plugins/custom_import_plugin/import_plugin.gd81
-rw-r--r--demos/plugins/custom_import_plugin/material_dialog.gd67
-rw-r--r--demos/plugins/custom_import_plugin/material_dialog.tscn111
-rw-r--r--demos/plugins/custom_import_plugin/material_import.gd22
-rw-r--r--demos/plugins/custom_import_plugin/plugin.cfg14
-rw-r--r--demos/plugins/custom_import_plugin/test.mtxt1
-rw-r--r--demos/plugins/custom_node/heart.gd12
-rw-r--r--demos/plugins/custom_node/heart.pngbin12584 -> 0 bytes
-rw-r--r--demos/plugins/custom_node/heart_icon.pngbin809 -> 0 bytes
-rw-r--r--demos/plugins/custom_node/heart_plugin.gd18
-rw-r--r--demos/plugins/custom_node/plugin.cfg14
-rw-r--r--demos/plugins/readme.txt13
-rw-r--r--demos/viewport/2d_in_3d/ball.pngbin203 -> 0 bytes
-rw-r--r--demos/viewport/2d_in_3d/engine.cfg22
-rw-r--r--demos/viewport/2d_in_3d/icon.pngbin956 -> 0 bytes
-rw-r--r--demos/viewport/2d_in_3d/left_pallete.pngbin200 -> 0 bytes
-rw-r--r--demos/viewport/2d_in_3d/pong.gd66
-rw-r--r--demos/viewport/2d_in_3d/pong.scnbin1417 -> 0 bytes
-rw-r--r--demos/viewport/2d_in_3d/pong3d.gd7
-rw-r--r--demos/viewport/2d_in_3d/pong3d.scnbin5236 -> 0 bytes
-rw-r--r--demos/viewport/2d_in_3d/right_pallete.pngbin202 -> 0 bytes
-rw-r--r--demos/viewport/2d_in_3d/separator.pngbin203 -> 0 bytes
-rw-r--r--demos/viewport/3d_in_2d/engine.cfg5
-rw-r--r--demos/viewport/3d_in_2d/icon.pngbin3758 -> 0 bytes
-rw-r--r--demos/viewport/3d_in_2d/main.scnbin1685 -> 0 bytes
-rw-r--r--demos/viewport/3d_in_2d/player.scnbin107246 -> 0 bytes
-rw-r--r--demos/viewport/3d_in_2d/player_2d.scnbin1834 -> 0 bytes
-rw-r--r--demos/viewport/3d_in_2d/player_3d.scnbin1688 -> 0 bytes
-rw-r--r--demos/viewport/3d_in_2d/robot_demo.pngbin12399 -> 0 bytes
-rw-r--r--demos/viewport/gui_in_3d/engine.cfg5
-rw-r--r--demos/viewport/gui_in_3d/gui.scnbin2579 -> 0 bytes
-rw-r--r--demos/viewport/gui_in_3d/gui_3d.gd37
-rw-r--r--demos/viewport/gui_in_3d/gui_3d.scnbin6137 -> 0 bytes
-rw-r--r--demos/viewport/gui_in_3d/icon.pngbin3770 -> 0 bytes
-rw-r--r--demos/viewport/screen_capture/engine.cfg9
-rw-r--r--demos/viewport/screen_capture/icon.pngbin7350 -> 0 bytes
-rw-r--r--demos/viewport/screen_capture/mountains.pngbin927435 -> 0 bytes
-rw-r--r--demos/viewport/screen_capture/screen_capture.gd16
-rw-r--r--demos/viewport/screen_capture/screen_capture.scnbin3482 -> 0 bytes
-rw-r--r--doc/base/classes.xml1125
-rw-r--r--drivers/SCsub32
-rw-r--r--drivers/builtin_openssl2/SCsub18
-rw-r--r--drivers/etc1/SCsub3
-rw-r--r--drivers/etc1/texture_loader_pkm.cpp84
-rw-r--r--drivers/etc1/texture_loader_pkm.h18
-rw-r--r--drivers/freetype/FTL.TXT169
-rw-r--r--drivers/freetype/LICENSE.TXT39
-rw-r--r--drivers/freetype/SCsub71
-rw-r--r--drivers/freetype/freetype/include/freetype/config/ftconfig.h (renamed from tools/freetype/freetype/include/freetype/config/ftconfig.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/config/ftheader.h (renamed from tools/freetype/freetype/include/freetype/config/ftheader.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/config/ftmodule.h (renamed from tools/freetype/freetype/include/freetype/config/ftmodule.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/config/ftoption.h (renamed from tools/freetype/freetype/include/freetype/config/ftoption.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/config/ftstdlib.h (renamed from tools/freetype/freetype/include/freetype/config/ftstdlib.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/freetype.h (renamed from tools/freetype/freetype/include/freetype/freetype.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftadvanc.h (renamed from tools/freetype/freetype/include/freetype/ftadvanc.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftautoh.h (renamed from tools/freetype/freetype/include/freetype/ftautoh.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftbbox.h (renamed from tools/freetype/freetype/include/freetype/ftbbox.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftbdf.h (renamed from tools/freetype/freetype/include/freetype/ftbdf.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftbitmap.h (renamed from tools/freetype/freetype/include/freetype/ftbitmap.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftbzip2.h (renamed from tools/freetype/freetype/include/freetype/ftbzip2.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftcache.h (renamed from tools/freetype/freetype/include/freetype/ftcache.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftcffdrv.h (renamed from tools/freetype/freetype/include/freetype/ftcffdrv.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftchapters.h (renamed from tools/freetype/freetype/include/freetype/ftchapters.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftcid.h (renamed from tools/freetype/freetype/include/freetype/ftcid.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/fterrdef.h (renamed from tools/freetype/freetype/include/freetype/fterrdef.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/fterrors.h (renamed from tools/freetype/freetype/include/freetype/fterrors.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftgasp.h (renamed from tools/freetype/freetype/include/freetype/ftgasp.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftglyph.h (renamed from tools/freetype/freetype/include/freetype/ftglyph.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftgxval.h (renamed from tools/freetype/freetype/include/freetype/ftgxval.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftgzip.h (renamed from tools/freetype/freetype/include/freetype/ftgzip.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftimage.h (renamed from tools/freetype/freetype/include/freetype/ftimage.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftincrem.h (renamed from tools/freetype/freetype/include/freetype/ftincrem.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftlcdfil.h (renamed from tools/freetype/freetype/include/freetype/ftlcdfil.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftlist.h (renamed from tools/freetype/freetype/include/freetype/ftlist.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftlzw.h (renamed from tools/freetype/freetype/include/freetype/ftlzw.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftmac.h (renamed from tools/freetype/freetype/include/freetype/ftmac.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftmm.h (renamed from tools/freetype/freetype/include/freetype/ftmm.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftmodapi.h (renamed from tools/freetype/freetype/include/freetype/ftmodapi.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftmoderr.h (renamed from tools/freetype/freetype/include/freetype/ftmoderr.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftotval.h (renamed from tools/freetype/freetype/include/freetype/ftotval.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftoutln.h (renamed from tools/freetype/freetype/include/freetype/ftoutln.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftpfr.h (renamed from tools/freetype/freetype/include/freetype/ftpfr.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftrender.h (renamed from tools/freetype/freetype/include/freetype/ftrender.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftsizes.h (renamed from tools/freetype/freetype/include/freetype/ftsizes.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftsnames.h (renamed from tools/freetype/freetype/include/freetype/ftsnames.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftstroke.h (renamed from tools/freetype/freetype/include/freetype/ftstroke.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftsynth.h (renamed from tools/freetype/freetype/include/freetype/ftsynth.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftsystem.h (renamed from tools/freetype/freetype/include/freetype/ftsystem.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/fttrigon.h (renamed from tools/freetype/freetype/include/freetype/fttrigon.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftttdrv.h (renamed from tools/freetype/freetype/include/freetype/ftttdrv.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/fttypes.h (renamed from tools/freetype/freetype/include/freetype/fttypes.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftwinfnt.h (renamed from tools/freetype/freetype/include/freetype/ftwinfnt.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ftxf86.h (renamed from tools/freetype/freetype/include/freetype/ftxf86.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/autohint.h (renamed from tools/freetype/freetype/include/freetype/internal/autohint.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/ftcalc.h (renamed from tools/freetype/freetype/include/freetype/internal/ftcalc.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/ftdebug.h (renamed from tools/freetype/freetype/include/freetype/internal/ftdebug.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/ftdriver.h (renamed from tools/freetype/freetype/include/freetype/internal/ftdriver.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/ftgloadr.h (renamed from tools/freetype/freetype/include/freetype/internal/ftgloadr.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/ftmemory.h (renamed from tools/freetype/freetype/include/freetype/internal/ftmemory.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/ftobjs.h (renamed from tools/freetype/freetype/include/freetype/internal/ftobjs.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/ftpic.h (renamed from tools/freetype/freetype/include/freetype/internal/ftpic.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/ftrfork.h (renamed from tools/freetype/freetype/include/freetype/internal/ftrfork.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/ftserv.h (renamed from tools/freetype/freetype/include/freetype/internal/ftserv.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/ftstream.h (renamed from tools/freetype/freetype/include/freetype/internal/ftstream.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/fttrace.h (renamed from tools/freetype/freetype/include/freetype/internal/fttrace.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/ftvalid.h (renamed from tools/freetype/freetype/include/freetype/internal/ftvalid.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/internal.h (renamed from tools/freetype/freetype/include/freetype/internal/internal.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/psaux.h (renamed from tools/freetype/freetype/include/freetype/internal/psaux.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/pshints.h (renamed from tools/freetype/freetype/include/freetype/internal/pshints.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svbdf.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svbdf.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svcid.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svcid.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svgldict.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svgldict.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svgxval.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svgxval.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svkern.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svkern.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svmm.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svmm.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svotval.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svotval.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svpfr.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svpfr.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svpostnm.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svpostnm.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svprop.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svprop.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svpscmap.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svpscmap.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svpsinfo.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svpsinfo.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svsfnt.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svsfnt.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svttcmap.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svttcmap.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svtteng.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svtteng.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svttglyf.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svttglyf.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svwinfnt.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svwinfnt.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/services/svxf86nm.h (renamed from tools/freetype/freetype/include/freetype/internal/services/svxf86nm.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/sfnt.h (renamed from tools/freetype/freetype/include/freetype/internal/sfnt.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/t1types.h (renamed from tools/freetype/freetype/include/freetype/internal/t1types.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/internal/tttypes.h (renamed from tools/freetype/freetype/include/freetype/internal/tttypes.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/t1tables.h (renamed from tools/freetype/freetype/include/freetype/t1tables.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ttnameid.h (renamed from tools/freetype/freetype/include/freetype/ttnameid.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/tttables.h (renamed from tools/freetype/freetype/include/freetype/tttables.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/tttags.h (renamed from tools/freetype/freetype/include/freetype/tttags.h)0
-rw-r--r--drivers/freetype/freetype/include/freetype/ttunpat.h (renamed from tools/freetype/freetype/include/freetype/ttunpat.h)0
-rw-r--r--drivers/freetype/freetype/include/ftoption.h (renamed from tools/freetype/freetype/include/ftoption.h)0
-rw-r--r--drivers/freetype/freetype/src/Jamfile (renamed from tools/freetype/freetype/src/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/autofit/Jamfile (renamed from tools/freetype/freetype/src/autofit/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afangles.c (renamed from tools/freetype/freetype/src/autofit/afangles.c)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afangles.h (renamed from tools/freetype/freetype/src/autofit/afangles.h)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afcjk.c (renamed from tools/freetype/freetype/src/autofit/afcjk.c)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afcjk.h (renamed from tools/freetype/freetype/src/autofit/afcjk.h)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afdummy.c (renamed from tools/freetype/freetype/src/autofit/afdummy.c)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afdummy.h (renamed from tools/freetype/freetype/src/autofit/afdummy.h)0
-rw-r--r--drivers/freetype/freetype/src/autofit/aferrors.h (renamed from tools/freetype/freetype/src/autofit/aferrors.h)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afglobal.c (renamed from tools/freetype/freetype/src/autofit/afglobal.c)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afglobal.h (renamed from tools/freetype/freetype/src/autofit/afglobal.h)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afhints.c (renamed from tools/freetype/freetype/src/autofit/afhints.c)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afhints.h (renamed from tools/freetype/freetype/src/autofit/afhints.h)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afindic.c (renamed from tools/freetype/freetype/src/autofit/afindic.c)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afindic.h (renamed from tools/freetype/freetype/src/autofit/afindic.h)0
-rw-r--r--drivers/freetype/freetype/src/autofit/aflatin.c (renamed from tools/freetype/freetype/src/autofit/aflatin.c)0
-rw-r--r--drivers/freetype/freetype/src/autofit/aflatin.h (renamed from tools/freetype/freetype/src/autofit/aflatin.h)0
-rw-r--r--drivers/freetype/freetype/src/autofit/aflatin2.c (renamed from tools/freetype/freetype/src/autofit/aflatin2.c)0
-rw-r--r--drivers/freetype/freetype/src/autofit/aflatin2.h (renamed from tools/freetype/freetype/src/autofit/aflatin2.h)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afloader.c (renamed from tools/freetype/freetype/src/autofit/afloader.c)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afloader.h (renamed from tools/freetype/freetype/src/autofit/afloader.h)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afmodule.c (renamed from tools/freetype/freetype/src/autofit/afmodule.c)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afmodule.h (renamed from tools/freetype/freetype/src/autofit/afmodule.h)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afpic.c (renamed from tools/freetype/freetype/src/autofit/afpic.c)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afpic.h (renamed from tools/freetype/freetype/src/autofit/afpic.h)0
-rw-r--r--drivers/freetype/freetype/src/autofit/aftypes.h (renamed from tools/freetype/freetype/src/autofit/aftypes.h)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afwarp.c (renamed from tools/freetype/freetype/src/autofit/afwarp.c)0
-rw-r--r--drivers/freetype/freetype/src/autofit/afwarp.h (renamed from tools/freetype/freetype/src/autofit/afwarp.h)0
-rw-r--r--drivers/freetype/freetype/src/autofit/autofit.c (renamed from tools/freetype/freetype/src/autofit/autofit.c)0
-rw-r--r--drivers/freetype/freetype/src/autofit/module.mk (renamed from tools/freetype/freetype/src/autofit/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/autofit/rules.mk (renamed from tools/freetype/freetype/src/autofit/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/base/Jamfile (renamed from tools/freetype/freetype/src/base/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/base/basepic.c (renamed from tools/freetype/freetype/src/base/basepic.c)0
-rw-r--r--drivers/freetype/freetype/src/base/basepic.h (renamed from tools/freetype/freetype/src/base/basepic.h)0
-rw-r--r--drivers/freetype/freetype/src/base/ftadvanc.c (renamed from tools/freetype/freetype/src/base/ftadvanc.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftapi.c (renamed from tools/freetype/freetype/src/base/ftapi.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftbase.c (renamed from tools/freetype/freetype/src/base/ftbase.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftbase.h (renamed from tools/freetype/freetype/src/base/ftbase.h)0
-rw-r--r--drivers/freetype/freetype/src/base/ftbbox.c (renamed from tools/freetype/freetype/src/base/ftbbox.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftbdf.c (renamed from tools/freetype/freetype/src/base/ftbdf.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftbitmap.c (renamed from tools/freetype/freetype/src/base/ftbitmap.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftcalc.c (renamed from tools/freetype/freetype/src/base/ftcalc.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftcid.c (renamed from tools/freetype/freetype/src/base/ftcid.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftdbgmem.c (renamed from tools/freetype/freetype/src/base/ftdbgmem.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftdebug.c (renamed from tools/freetype/freetype/src/base/ftdebug.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftfstype.c (renamed from tools/freetype/freetype/src/base/ftfstype.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftgasp.c (renamed from tools/freetype/freetype/src/base/ftgasp.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftgloadr.c (renamed from tools/freetype/freetype/src/base/ftgloadr.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftglyph.c (renamed from tools/freetype/freetype/src/base/ftglyph.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftgxval.c (renamed from tools/freetype/freetype/src/base/ftgxval.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftinit.c (renamed from tools/freetype/freetype/src/base/ftinit.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftlcdfil.c (renamed from tools/freetype/freetype/src/base/ftlcdfil.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftmac.c (renamed from tools/freetype/freetype/src/base/ftmac.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftmm.c (renamed from tools/freetype/freetype/src/base/ftmm.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftobjs.c (renamed from tools/freetype/freetype/src/base/ftobjs.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftotval.c (renamed from tools/freetype/freetype/src/base/ftotval.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftoutln.c (renamed from tools/freetype/freetype/src/base/ftoutln.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftpatent.c (renamed from tools/freetype/freetype/src/base/ftpatent.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftpfr.c (renamed from tools/freetype/freetype/src/base/ftpfr.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftpic.c (renamed from tools/freetype/freetype/src/base/ftpic.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftrfork.c (renamed from tools/freetype/freetype/src/base/ftrfork.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftsnames.c (renamed from tools/freetype/freetype/src/base/ftsnames.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftstream.c (renamed from tools/freetype/freetype/src/base/ftstream.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftstroke.c (renamed from tools/freetype/freetype/src/base/ftstroke.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftsynth.c (renamed from tools/freetype/freetype/src/base/ftsynth.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftsystem.c (renamed from tools/freetype/freetype/src/base/ftsystem.c)0
-rw-r--r--drivers/freetype/freetype/src/base/fttrigon.c (renamed from tools/freetype/freetype/src/base/fttrigon.c)0
-rw-r--r--drivers/freetype/freetype/src/base/fttype1.c (renamed from tools/freetype/freetype/src/base/fttype1.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftutil.c (renamed from tools/freetype/freetype/src/base/ftutil.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftwinfnt.c (renamed from tools/freetype/freetype/src/base/ftwinfnt.c)0
-rw-r--r--drivers/freetype/freetype/src/base/ftxf86.c (renamed from tools/freetype/freetype/src/base/ftxf86.c)0
-rw-r--r--drivers/freetype/freetype/src/base/md5.c (renamed from tools/freetype/freetype/src/base/md5.c)0
-rw-r--r--drivers/freetype/freetype/src/base/md5.h (renamed from tools/freetype/freetype/src/base/md5.h)0
-rw-r--r--drivers/freetype/freetype/src/base/rules.mk (renamed from tools/freetype/freetype/src/base/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/bdf/Jamfile (renamed from tools/freetype/freetype/src/bdf/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/bdf/README (renamed from tools/freetype/freetype/src/bdf/README)0
-rw-r--r--drivers/freetype/freetype/src/bdf/bdf.c (renamed from tools/freetype/freetype/src/bdf/bdf.c)0
-rw-r--r--drivers/freetype/freetype/src/bdf/bdf.h (renamed from tools/freetype/freetype/src/bdf/bdf.h)0
-rw-r--r--drivers/freetype/freetype/src/bdf/bdfdrivr.c (renamed from tools/freetype/freetype/src/bdf/bdfdrivr.c)0
-rw-r--r--drivers/freetype/freetype/src/bdf/bdfdrivr.h (renamed from tools/freetype/freetype/src/bdf/bdfdrivr.h)0
-rw-r--r--drivers/freetype/freetype/src/bdf/bdferror.h (renamed from tools/freetype/freetype/src/bdf/bdferror.h)0
-rw-r--r--drivers/freetype/freetype/src/bdf/bdflib.c (renamed from tools/freetype/freetype/src/bdf/bdflib.c)0
-rw-r--r--drivers/freetype/freetype/src/bdf/module.mk (renamed from tools/freetype/freetype/src/bdf/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/bdf/rules.mk (renamed from tools/freetype/freetype/src/bdf/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/cache/Jamfile (renamed from tools/freetype/freetype/src/cache/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftcache.c (renamed from tools/freetype/freetype/src/cache/ftcache.c)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftcbasic.c (renamed from tools/freetype/freetype/src/cache/ftcbasic.c)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftccache.c (renamed from tools/freetype/freetype/src/cache/ftccache.c)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftccache.h (renamed from tools/freetype/freetype/src/cache/ftccache.h)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftccback.h (renamed from tools/freetype/freetype/src/cache/ftccback.h)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftccmap.c (renamed from tools/freetype/freetype/src/cache/ftccmap.c)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftcerror.h (renamed from tools/freetype/freetype/src/cache/ftcerror.h)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftcglyph.c (renamed from tools/freetype/freetype/src/cache/ftcglyph.c)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftcglyph.h (renamed from tools/freetype/freetype/src/cache/ftcglyph.h)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftcimage.c (renamed from tools/freetype/freetype/src/cache/ftcimage.c)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftcimage.h (renamed from tools/freetype/freetype/src/cache/ftcimage.h)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftcmanag.c (renamed from tools/freetype/freetype/src/cache/ftcmanag.c)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftcmanag.h (renamed from tools/freetype/freetype/src/cache/ftcmanag.h)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftcmru.c (renamed from tools/freetype/freetype/src/cache/ftcmru.c)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftcmru.h (renamed from tools/freetype/freetype/src/cache/ftcmru.h)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftcsbits.c (renamed from tools/freetype/freetype/src/cache/ftcsbits.c)0
-rw-r--r--drivers/freetype/freetype/src/cache/ftcsbits.h (renamed from tools/freetype/freetype/src/cache/ftcsbits.h)0
-rw-r--r--drivers/freetype/freetype/src/cache/rules.mk (renamed from tools/freetype/freetype/src/cache/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/cff/Jamfile (renamed from tools/freetype/freetype/src/cff/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2arrst.c (renamed from tools/freetype/freetype/src/cff/cf2arrst.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2arrst.h (renamed from tools/freetype/freetype/src/cff/cf2arrst.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2blues.c (renamed from tools/freetype/freetype/src/cff/cf2blues.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2blues.h (renamed from tools/freetype/freetype/src/cff/cf2blues.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2error.c (renamed from tools/freetype/freetype/src/cff/cf2error.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2error.h (renamed from tools/freetype/freetype/src/cff/cf2error.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2fixed.h (renamed from tools/freetype/freetype/src/cff/cf2fixed.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2font.c (renamed from tools/freetype/freetype/src/cff/cf2font.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2font.h (renamed from tools/freetype/freetype/src/cff/cf2font.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2ft.c (renamed from tools/freetype/freetype/src/cff/cf2ft.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2ft.h (renamed from tools/freetype/freetype/src/cff/cf2ft.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2glue.h (renamed from tools/freetype/freetype/src/cff/cf2glue.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2hints.c (renamed from tools/freetype/freetype/src/cff/cf2hints.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2hints.h (renamed from tools/freetype/freetype/src/cff/cf2hints.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2intrp.c (renamed from tools/freetype/freetype/src/cff/cf2intrp.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2intrp.h (renamed from tools/freetype/freetype/src/cff/cf2intrp.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2read.c (renamed from tools/freetype/freetype/src/cff/cf2read.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2read.h (renamed from tools/freetype/freetype/src/cff/cf2read.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2stack.c (renamed from tools/freetype/freetype/src/cff/cf2stack.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2stack.h (renamed from tools/freetype/freetype/src/cff/cf2stack.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cf2types.h (renamed from tools/freetype/freetype/src/cff/cf2types.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cff.c (renamed from tools/freetype/freetype/src/cff/cff.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cffcmap.c (renamed from tools/freetype/freetype/src/cff/cffcmap.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cffcmap.h (renamed from tools/freetype/freetype/src/cff/cffcmap.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cffdrivr.c (renamed from tools/freetype/freetype/src/cff/cffdrivr.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cffdrivr.h (renamed from tools/freetype/freetype/src/cff/cffdrivr.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cfferrs.h (renamed from tools/freetype/freetype/src/cff/cfferrs.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cffgload.c (renamed from tools/freetype/freetype/src/cff/cffgload.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cffgload.h (renamed from tools/freetype/freetype/src/cff/cffgload.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cffload.c (renamed from tools/freetype/freetype/src/cff/cffload.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cffload.h (renamed from tools/freetype/freetype/src/cff/cffload.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cffobjs.c (renamed from tools/freetype/freetype/src/cff/cffobjs.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cffobjs.h (renamed from tools/freetype/freetype/src/cff/cffobjs.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cffparse.c (renamed from tools/freetype/freetype/src/cff/cffparse.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cffparse.h (renamed from tools/freetype/freetype/src/cff/cffparse.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cffpic.c (renamed from tools/freetype/freetype/src/cff/cffpic.c)0
-rw-r--r--drivers/freetype/freetype/src/cff/cffpic.h (renamed from tools/freetype/freetype/src/cff/cffpic.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cfftoken.h (renamed from tools/freetype/freetype/src/cff/cfftoken.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/cfftypes.h (renamed from tools/freetype/freetype/src/cff/cfftypes.h)0
-rw-r--r--drivers/freetype/freetype/src/cff/module.mk (renamed from tools/freetype/freetype/src/cff/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/cff/rules.mk (renamed from tools/freetype/freetype/src/cff/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/cid/Jamfile (renamed from tools/freetype/freetype/src/cid/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/cid/ciderrs.h (renamed from tools/freetype/freetype/src/cid/ciderrs.h)0
-rw-r--r--drivers/freetype/freetype/src/cid/cidgload.c (renamed from tools/freetype/freetype/src/cid/cidgload.c)0
-rw-r--r--drivers/freetype/freetype/src/cid/cidgload.h (renamed from tools/freetype/freetype/src/cid/cidgload.h)0
-rw-r--r--drivers/freetype/freetype/src/cid/cidload.c (renamed from tools/freetype/freetype/src/cid/cidload.c)0
-rw-r--r--drivers/freetype/freetype/src/cid/cidload.h (renamed from tools/freetype/freetype/src/cid/cidload.h)0
-rw-r--r--drivers/freetype/freetype/src/cid/cidobjs.c (renamed from tools/freetype/freetype/src/cid/cidobjs.c)0
-rw-r--r--drivers/freetype/freetype/src/cid/cidobjs.h (renamed from tools/freetype/freetype/src/cid/cidobjs.h)0
-rw-r--r--drivers/freetype/freetype/src/cid/cidparse.c (renamed from tools/freetype/freetype/src/cid/cidparse.c)0
-rw-r--r--drivers/freetype/freetype/src/cid/cidparse.h (renamed from tools/freetype/freetype/src/cid/cidparse.h)0
-rw-r--r--drivers/freetype/freetype/src/cid/cidriver.c (renamed from tools/freetype/freetype/src/cid/cidriver.c)0
-rw-r--r--drivers/freetype/freetype/src/cid/cidriver.h (renamed from tools/freetype/freetype/src/cid/cidriver.h)0
-rw-r--r--drivers/freetype/freetype/src/cid/cidtoken.h (renamed from tools/freetype/freetype/src/cid/cidtoken.h)0
-rw-r--r--drivers/freetype/freetype/src/cid/module.mk (renamed from tools/freetype/freetype/src/cid/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/cid/rules.mk (renamed from tools/freetype/freetype/src/cid/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/cid/type1cid.c (renamed from tools/freetype/freetype/src/cid/type1cid.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/Jamfile (renamed from tools/freetype/freetype/src/gxvalid/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/README (renamed from tools/freetype/freetype/src/gxvalid/README)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvalid.c (renamed from tools/freetype/freetype/src/gxvalid/gxvalid.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvalid.h (renamed from tools/freetype/freetype/src/gxvalid/gxvalid.h)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvbsln.c (renamed from tools/freetype/freetype/src/gxvalid/gxvbsln.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvcommn.c (renamed from tools/freetype/freetype/src/gxvalid/gxvcommn.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvcommn.h (renamed from tools/freetype/freetype/src/gxvalid/gxvcommn.h)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxverror.h (renamed from tools/freetype/freetype/src/gxvalid/gxverror.h)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvfeat.c (renamed from tools/freetype/freetype/src/gxvalid/gxvfeat.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvfeat.h (renamed from tools/freetype/freetype/src/gxvalid/gxvfeat.h)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvfgen.c (renamed from tools/freetype/freetype/src/gxvalid/gxvfgen.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvjust.c (renamed from tools/freetype/freetype/src/gxvalid/gxvjust.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvkern.c (renamed from tools/freetype/freetype/src/gxvalid/gxvkern.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvlcar.c (renamed from tools/freetype/freetype/src/gxvalid/gxvlcar.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmod.c (renamed from tools/freetype/freetype/src/gxvalid/gxvmod.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmod.h (renamed from tools/freetype/freetype/src/gxvalid/gxvmod.h)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmort.c (renamed from tools/freetype/freetype/src/gxvalid/gxvmort.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmort.h (renamed from tools/freetype/freetype/src/gxvalid/gxvmort.h)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmort0.c (renamed from tools/freetype/freetype/src/gxvalid/gxvmort0.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmort1.c (renamed from tools/freetype/freetype/src/gxvalid/gxvmort1.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmort2.c (renamed from tools/freetype/freetype/src/gxvalid/gxvmort2.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmort4.c (renamed from tools/freetype/freetype/src/gxvalid/gxvmort4.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmort5.c (renamed from tools/freetype/freetype/src/gxvalid/gxvmort5.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmorx.c (renamed from tools/freetype/freetype/src/gxvalid/gxvmorx.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmorx.h (renamed from tools/freetype/freetype/src/gxvalid/gxvmorx.h)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmorx0.c (renamed from tools/freetype/freetype/src/gxvalid/gxvmorx0.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmorx1.c (renamed from tools/freetype/freetype/src/gxvalid/gxvmorx1.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmorx2.c (renamed from tools/freetype/freetype/src/gxvalid/gxvmorx2.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmorx4.c (renamed from tools/freetype/freetype/src/gxvalid/gxvmorx4.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvmorx5.c (renamed from tools/freetype/freetype/src/gxvalid/gxvmorx5.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvopbd.c (renamed from tools/freetype/freetype/src/gxvalid/gxvopbd.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvprop.c (renamed from tools/freetype/freetype/src/gxvalid/gxvprop.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/gxvtrak.c (renamed from tools/freetype/freetype/src/gxvalid/gxvtrak.c)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/module.mk (renamed from tools/freetype/freetype/src/gxvalid/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/gxvalid/rules.mk (renamed from tools/freetype/freetype/src/gxvalid/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/Jamfile (renamed from tools/freetype/freetype/src/otvalid/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/module.mk (renamed from tools/freetype/freetype/src/otvalid/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/otvalid.c (renamed from tools/freetype/freetype/src/otvalid/otvalid.c)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/otvalid.h (renamed from tools/freetype/freetype/src/otvalid/otvalid.h)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/otvbase.c (renamed from tools/freetype/freetype/src/otvalid/otvbase.c)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/otvcommn.c (renamed from tools/freetype/freetype/src/otvalid/otvcommn.c)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/otvcommn.h (renamed from tools/freetype/freetype/src/otvalid/otvcommn.h)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/otverror.h (renamed from tools/freetype/freetype/src/otvalid/otverror.h)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/otvgdef.c (renamed from tools/freetype/freetype/src/otvalid/otvgdef.c)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/otvgpos.c (renamed from tools/freetype/freetype/src/otvalid/otvgpos.c)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/otvgpos.h (renamed from tools/freetype/freetype/src/otvalid/otvgpos.h)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/otvgsub.c (renamed from tools/freetype/freetype/src/otvalid/otvgsub.c)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/otvjstf.c (renamed from tools/freetype/freetype/src/otvalid/otvjstf.c)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/otvmath.c (renamed from tools/freetype/freetype/src/otvalid/otvmath.c)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/otvmod.c (renamed from tools/freetype/freetype/src/otvalid/otvmod.c)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/otvmod.h (renamed from tools/freetype/freetype/src/otvalid/otvmod.h)0
-rw-r--r--drivers/freetype/freetype/src/otvalid/rules.mk (renamed from tools/freetype/freetype/src/otvalid/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/pcf/Jamfile (renamed from tools/freetype/freetype/src/pcf/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/pcf/README (renamed from tools/freetype/freetype/src/pcf/README)0
-rw-r--r--drivers/freetype/freetype/src/pcf/module.mk (renamed from tools/freetype/freetype/src/pcf/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/pcf/pcf.c (renamed from tools/freetype/freetype/src/pcf/pcf.c)0
-rw-r--r--drivers/freetype/freetype/src/pcf/pcf.h (renamed from tools/freetype/freetype/src/pcf/pcf.h)0
-rw-r--r--drivers/freetype/freetype/src/pcf/pcfdrivr.c (renamed from tools/freetype/freetype/src/pcf/pcfdrivr.c)0
-rw-r--r--drivers/freetype/freetype/src/pcf/pcfdrivr.h (renamed from tools/freetype/freetype/src/pcf/pcfdrivr.h)0
-rw-r--r--drivers/freetype/freetype/src/pcf/pcferror.h (renamed from tools/freetype/freetype/src/pcf/pcferror.h)0
-rw-r--r--drivers/freetype/freetype/src/pcf/pcfread.c (renamed from tools/freetype/freetype/src/pcf/pcfread.c)0
-rw-r--r--drivers/freetype/freetype/src/pcf/pcfread.h (renamed from tools/freetype/freetype/src/pcf/pcfread.h)0
-rw-r--r--drivers/freetype/freetype/src/pcf/pcfutil.c (renamed from tools/freetype/freetype/src/pcf/pcfutil.c)0
-rw-r--r--drivers/freetype/freetype/src/pcf/pcfutil.h (renamed from tools/freetype/freetype/src/pcf/pcfutil.h)0
-rw-r--r--drivers/freetype/freetype/src/pcf/rules.mk (renamed from tools/freetype/freetype/src/pcf/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/pfr/Jamfile (renamed from tools/freetype/freetype/src/pfr/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/pfr/module.mk (renamed from tools/freetype/freetype/src/pfr/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/pfr/pfr.c (renamed from tools/freetype/freetype/src/pfr/pfr.c)0
-rw-r--r--drivers/freetype/freetype/src/pfr/pfrcmap.c (renamed from tools/freetype/freetype/src/pfr/pfrcmap.c)0
-rw-r--r--drivers/freetype/freetype/src/pfr/pfrcmap.h (renamed from tools/freetype/freetype/src/pfr/pfrcmap.h)0
-rw-r--r--drivers/freetype/freetype/src/pfr/pfrdrivr.c (renamed from tools/freetype/freetype/src/pfr/pfrdrivr.c)0
-rw-r--r--drivers/freetype/freetype/src/pfr/pfrdrivr.h (renamed from tools/freetype/freetype/src/pfr/pfrdrivr.h)0
-rw-r--r--drivers/freetype/freetype/src/pfr/pfrerror.h (renamed from tools/freetype/freetype/src/pfr/pfrerror.h)0
-rw-r--r--drivers/freetype/freetype/src/pfr/pfrgload.c (renamed from tools/freetype/freetype/src/pfr/pfrgload.c)0
-rw-r--r--drivers/freetype/freetype/src/pfr/pfrgload.h (renamed from tools/freetype/freetype/src/pfr/pfrgload.h)0
-rw-r--r--drivers/freetype/freetype/src/pfr/pfrload.c (renamed from tools/freetype/freetype/src/pfr/pfrload.c)0
-rw-r--r--drivers/freetype/freetype/src/pfr/pfrload.h (renamed from tools/freetype/freetype/src/pfr/pfrload.h)0
-rw-r--r--drivers/freetype/freetype/src/pfr/pfrobjs.c (renamed from tools/freetype/freetype/src/pfr/pfrobjs.c)0
-rw-r--r--drivers/freetype/freetype/src/pfr/pfrobjs.h (renamed from tools/freetype/freetype/src/pfr/pfrobjs.h)0
-rw-r--r--drivers/freetype/freetype/src/pfr/pfrsbit.c (renamed from tools/freetype/freetype/src/pfr/pfrsbit.c)0
-rw-r--r--drivers/freetype/freetype/src/pfr/pfrsbit.h (renamed from tools/freetype/freetype/src/pfr/pfrsbit.h)0
-rw-r--r--drivers/freetype/freetype/src/pfr/pfrtypes.h (renamed from tools/freetype/freetype/src/pfr/pfrtypes.h)0
-rw-r--r--drivers/freetype/freetype/src/pfr/rules.mk (renamed from tools/freetype/freetype/src/pfr/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/psaux/Jamfile (renamed from tools/freetype/freetype/src/psaux/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/psaux/afmparse.c (renamed from tools/freetype/freetype/src/psaux/afmparse.c)0
-rw-r--r--drivers/freetype/freetype/src/psaux/afmparse.h (renamed from tools/freetype/freetype/src/psaux/afmparse.h)0
-rw-r--r--drivers/freetype/freetype/src/psaux/module.mk (renamed from tools/freetype/freetype/src/psaux/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/psaux/psaux.c (renamed from tools/freetype/freetype/src/psaux/psaux.c)0
-rw-r--r--drivers/freetype/freetype/src/psaux/psauxerr.h (renamed from tools/freetype/freetype/src/psaux/psauxerr.h)0
-rw-r--r--drivers/freetype/freetype/src/psaux/psauxmod.c (renamed from tools/freetype/freetype/src/psaux/psauxmod.c)0
-rw-r--r--drivers/freetype/freetype/src/psaux/psauxmod.h (renamed from tools/freetype/freetype/src/psaux/psauxmod.h)0
-rw-r--r--drivers/freetype/freetype/src/psaux/psconv.c (renamed from tools/freetype/freetype/src/psaux/psconv.c)0
-rw-r--r--drivers/freetype/freetype/src/psaux/psconv.h (renamed from tools/freetype/freetype/src/psaux/psconv.h)0
-rw-r--r--drivers/freetype/freetype/src/psaux/psobjs.c (renamed from tools/freetype/freetype/src/psaux/psobjs.c)0
-rw-r--r--drivers/freetype/freetype/src/psaux/psobjs.h (renamed from tools/freetype/freetype/src/psaux/psobjs.h)0
-rw-r--r--drivers/freetype/freetype/src/psaux/rules.mk (renamed from tools/freetype/freetype/src/psaux/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/psaux/t1cmap.c (renamed from tools/freetype/freetype/src/psaux/t1cmap.c)0
-rw-r--r--drivers/freetype/freetype/src/psaux/t1cmap.h (renamed from tools/freetype/freetype/src/psaux/t1cmap.h)0
-rw-r--r--drivers/freetype/freetype/src/psaux/t1decode.c (renamed from tools/freetype/freetype/src/psaux/t1decode.c)0
-rw-r--r--drivers/freetype/freetype/src/psaux/t1decode.h (renamed from tools/freetype/freetype/src/psaux/t1decode.h)0
-rw-r--r--drivers/freetype/freetype/src/pshinter/Jamfile (renamed from tools/freetype/freetype/src/pshinter/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/pshinter/module.mk (renamed from tools/freetype/freetype/src/pshinter/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/pshinter/pshalgo.c (renamed from tools/freetype/freetype/src/pshinter/pshalgo.c)0
-rw-r--r--drivers/freetype/freetype/src/pshinter/pshalgo.h (renamed from tools/freetype/freetype/src/pshinter/pshalgo.h)0
-rw-r--r--drivers/freetype/freetype/src/pshinter/pshglob.c (renamed from tools/freetype/freetype/src/pshinter/pshglob.c)0
-rw-r--r--drivers/freetype/freetype/src/pshinter/pshglob.h (renamed from tools/freetype/freetype/src/pshinter/pshglob.h)0
-rw-r--r--drivers/freetype/freetype/src/pshinter/pshinter.c (renamed from tools/freetype/freetype/src/pshinter/pshinter.c)0
-rw-r--r--drivers/freetype/freetype/src/pshinter/pshmod.c (renamed from tools/freetype/freetype/src/pshinter/pshmod.c)0
-rw-r--r--drivers/freetype/freetype/src/pshinter/pshmod.h (renamed from tools/freetype/freetype/src/pshinter/pshmod.h)0
-rw-r--r--drivers/freetype/freetype/src/pshinter/pshnterr.h (renamed from tools/freetype/freetype/src/pshinter/pshnterr.h)0
-rw-r--r--drivers/freetype/freetype/src/pshinter/pshpic.c (renamed from tools/freetype/freetype/src/pshinter/pshpic.c)0
-rw-r--r--drivers/freetype/freetype/src/pshinter/pshpic.h (renamed from tools/freetype/freetype/src/pshinter/pshpic.h)0
-rw-r--r--drivers/freetype/freetype/src/pshinter/pshrec.c (renamed from tools/freetype/freetype/src/pshinter/pshrec.c)0
-rw-r--r--drivers/freetype/freetype/src/pshinter/pshrec.h (renamed from tools/freetype/freetype/src/pshinter/pshrec.h)0
-rw-r--r--drivers/freetype/freetype/src/pshinter/rules.mk (renamed from tools/freetype/freetype/src/pshinter/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/psnames/Jamfile (renamed from tools/freetype/freetype/src/psnames/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/psnames/module.mk (renamed from tools/freetype/freetype/src/psnames/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/psnames/psmodule.c (renamed from tools/freetype/freetype/src/psnames/psmodule.c)0
-rw-r--r--drivers/freetype/freetype/src/psnames/psmodule.h (renamed from tools/freetype/freetype/src/psnames/psmodule.h)0
-rw-r--r--drivers/freetype/freetype/src/psnames/psnamerr.h (renamed from tools/freetype/freetype/src/psnames/psnamerr.h)0
-rw-r--r--drivers/freetype/freetype/src/psnames/psnames.c (renamed from tools/freetype/freetype/src/psnames/psnames.c)0
-rw-r--r--drivers/freetype/freetype/src/psnames/pspic.c (renamed from tools/freetype/freetype/src/psnames/pspic.c)0
-rw-r--r--drivers/freetype/freetype/src/psnames/pspic.h (renamed from tools/freetype/freetype/src/psnames/pspic.h)0
-rw-r--r--drivers/freetype/freetype/src/psnames/pstables.h (renamed from tools/freetype/freetype/src/psnames/pstables.h)0
-rw-r--r--drivers/freetype/freetype/src/psnames/rules.mk (renamed from tools/freetype/freetype/src/psnames/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/raster/Jamfile (renamed from tools/freetype/freetype/src/raster/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/raster/ftmisc.h (renamed from tools/freetype/freetype/src/raster/ftmisc.h)0
-rw-r--r--drivers/freetype/freetype/src/raster/ftraster.c (renamed from tools/freetype/freetype/src/raster/ftraster.c)0
-rw-r--r--drivers/freetype/freetype/src/raster/ftraster.h (renamed from tools/freetype/freetype/src/raster/ftraster.h)0
-rw-r--r--drivers/freetype/freetype/src/raster/ftrend1.c (renamed from tools/freetype/freetype/src/raster/ftrend1.c)0
-rw-r--r--drivers/freetype/freetype/src/raster/ftrend1.h (renamed from tools/freetype/freetype/src/raster/ftrend1.h)0
-rw-r--r--drivers/freetype/freetype/src/raster/module.mk (renamed from tools/freetype/freetype/src/raster/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/raster/raster.c (renamed from tools/freetype/freetype/src/raster/raster.c)0
-rw-r--r--drivers/freetype/freetype/src/raster/rasterrs.h (renamed from tools/freetype/freetype/src/raster/rasterrs.h)0
-rw-r--r--drivers/freetype/freetype/src/raster/rastpic.c (renamed from tools/freetype/freetype/src/raster/rastpic.c)0
-rw-r--r--drivers/freetype/freetype/src/raster/rastpic.h (renamed from tools/freetype/freetype/src/raster/rastpic.h)0
-rw-r--r--drivers/freetype/freetype/src/raster/rules.mk (renamed from tools/freetype/freetype/src/raster/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/Jamfile (renamed from tools/freetype/freetype/src/sfnt/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/module.mk (renamed from tools/freetype/freetype/src/sfnt/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/pngshim.c (renamed from tools/freetype/freetype/src/sfnt/pngshim.c)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/pngshim.h (renamed from tools/freetype/freetype/src/sfnt/pngshim.h)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/rules.mk (renamed from tools/freetype/freetype/src/sfnt/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/sfdriver.c (renamed from tools/freetype/freetype/src/sfnt/sfdriver.c)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/sfdriver.h (renamed from tools/freetype/freetype/src/sfnt/sfdriver.h)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/sferrors.h (renamed from tools/freetype/freetype/src/sfnt/sferrors.h)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/sfnt.c (renamed from tools/freetype/freetype/src/sfnt/sfnt.c)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/sfntpic.c (renamed from tools/freetype/freetype/src/sfnt/sfntpic.c)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/sfntpic.h (renamed from tools/freetype/freetype/src/sfnt/sfntpic.h)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/sfobjs.c (renamed from tools/freetype/freetype/src/sfnt/sfobjs.c)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/sfobjs.h (renamed from tools/freetype/freetype/src/sfnt/sfobjs.h)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/ttbdf.c (renamed from tools/freetype/freetype/src/sfnt/ttbdf.c)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/ttbdf.h (renamed from tools/freetype/freetype/src/sfnt/ttbdf.h)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/ttcmap.c (renamed from tools/freetype/freetype/src/sfnt/ttcmap.c)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/ttcmap.h (renamed from tools/freetype/freetype/src/sfnt/ttcmap.h)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/ttcmapc.h (renamed from tools/freetype/freetype/src/sfnt/ttcmapc.h)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/ttkern.c (renamed from tools/freetype/freetype/src/sfnt/ttkern.c)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/ttkern.h (renamed from tools/freetype/freetype/src/sfnt/ttkern.h)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/ttload.c (renamed from tools/freetype/freetype/src/sfnt/ttload.c)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/ttload.h (renamed from tools/freetype/freetype/src/sfnt/ttload.h)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/ttmtx.c (renamed from tools/freetype/freetype/src/sfnt/ttmtx.c)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/ttmtx.h (renamed from tools/freetype/freetype/src/sfnt/ttmtx.h)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/ttpost.c (renamed from tools/freetype/freetype/src/sfnt/ttpost.c)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/ttpost.h (renamed from tools/freetype/freetype/src/sfnt/ttpost.h)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/ttsbit.c (renamed from tools/freetype/freetype/src/sfnt/ttsbit.c)0
-rw-r--r--drivers/freetype/freetype/src/sfnt/ttsbit.h (renamed from tools/freetype/freetype/src/sfnt/ttsbit.h)0
-rw-r--r--drivers/freetype/freetype/src/smooth/Jamfile (renamed from tools/freetype/freetype/src/smooth/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/smooth/ftgrays.c (renamed from tools/freetype/freetype/src/smooth/ftgrays.c)0
-rw-r--r--drivers/freetype/freetype/src/smooth/ftgrays.h (renamed from tools/freetype/freetype/src/smooth/ftgrays.h)0
-rw-r--r--drivers/freetype/freetype/src/smooth/ftsmerrs.h (renamed from tools/freetype/freetype/src/smooth/ftsmerrs.h)0
-rw-r--r--drivers/freetype/freetype/src/smooth/ftsmooth.c (renamed from tools/freetype/freetype/src/smooth/ftsmooth.c)0
-rw-r--r--drivers/freetype/freetype/src/smooth/ftsmooth.h (renamed from tools/freetype/freetype/src/smooth/ftsmooth.h)0
-rw-r--r--drivers/freetype/freetype/src/smooth/ftspic.c (renamed from tools/freetype/freetype/src/smooth/ftspic.c)0
-rw-r--r--drivers/freetype/freetype/src/smooth/ftspic.h (renamed from tools/freetype/freetype/src/smooth/ftspic.h)0
-rw-r--r--drivers/freetype/freetype/src/smooth/module.mk (renamed from tools/freetype/freetype/src/smooth/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/smooth/rules.mk (renamed from tools/freetype/freetype/src/smooth/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/smooth/smooth.c (renamed from tools/freetype/freetype/src/smooth/smooth.c)0
-rw-r--r--drivers/freetype/freetype/src/truetype/Jamfile (renamed from tools/freetype/freetype/src/truetype/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/truetype/module.mk (renamed from tools/freetype/freetype/src/truetype/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/truetype/rules.mk (renamed from tools/freetype/freetype/src/truetype/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/truetype/truetype.c (renamed from tools/freetype/freetype/src/truetype/truetype.c)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttdriver.c (renamed from tools/freetype/freetype/src/truetype/ttdriver.c)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttdriver.h (renamed from tools/freetype/freetype/src/truetype/ttdriver.h)0
-rw-r--r--drivers/freetype/freetype/src/truetype/tterrors.h (renamed from tools/freetype/freetype/src/truetype/tterrors.h)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttgload.c (renamed from tools/freetype/freetype/src/truetype/ttgload.c)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttgload.h (renamed from tools/freetype/freetype/src/truetype/ttgload.h)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttgxvar.c (renamed from tools/freetype/freetype/src/truetype/ttgxvar.c)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttgxvar.h (renamed from tools/freetype/freetype/src/truetype/ttgxvar.h)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttinterp.c (renamed from tools/freetype/freetype/src/truetype/ttinterp.c)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttinterp.h (renamed from tools/freetype/freetype/src/truetype/ttinterp.h)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttobjs.c (renamed from tools/freetype/freetype/src/truetype/ttobjs.c)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttobjs.h (renamed from tools/freetype/freetype/src/truetype/ttobjs.h)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttpic.c (renamed from tools/freetype/freetype/src/truetype/ttpic.c)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttpic.h (renamed from tools/freetype/freetype/src/truetype/ttpic.h)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttpload.c (renamed from tools/freetype/freetype/src/truetype/ttpload.c)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttpload.h (renamed from tools/freetype/freetype/src/truetype/ttpload.h)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttsubpix.c (renamed from tools/freetype/freetype/src/truetype/ttsubpix.c)0
-rw-r--r--drivers/freetype/freetype/src/truetype/ttsubpix.h (renamed from tools/freetype/freetype/src/truetype/ttsubpix.h)0
-rw-r--r--drivers/freetype/freetype/src/type1/Jamfile (renamed from tools/freetype/freetype/src/type1/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/type1/module.mk (renamed from tools/freetype/freetype/src/type1/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/type1/rules.mk (renamed from tools/freetype/freetype/src/type1/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/type1/t1afm.c (renamed from tools/freetype/freetype/src/type1/t1afm.c)0
-rw-r--r--drivers/freetype/freetype/src/type1/t1afm.h (renamed from tools/freetype/freetype/src/type1/t1afm.h)0
-rw-r--r--drivers/freetype/freetype/src/type1/t1driver.c (renamed from tools/freetype/freetype/src/type1/t1driver.c)0
-rw-r--r--drivers/freetype/freetype/src/type1/t1driver.h (renamed from tools/freetype/freetype/src/type1/t1driver.h)0
-rw-r--r--drivers/freetype/freetype/src/type1/t1errors.h (renamed from tools/freetype/freetype/src/type1/t1errors.h)0
-rw-r--r--drivers/freetype/freetype/src/type1/t1gload.c (renamed from tools/freetype/freetype/src/type1/t1gload.c)0
-rw-r--r--drivers/freetype/freetype/src/type1/t1gload.h (renamed from tools/freetype/freetype/src/type1/t1gload.h)0
-rw-r--r--drivers/freetype/freetype/src/type1/t1load.c (renamed from tools/freetype/freetype/src/type1/t1load.c)0
-rw-r--r--drivers/freetype/freetype/src/type1/t1load.h (renamed from tools/freetype/freetype/src/type1/t1load.h)0
-rw-r--r--drivers/freetype/freetype/src/type1/t1objs.c (renamed from tools/freetype/freetype/src/type1/t1objs.c)0
-rw-r--r--drivers/freetype/freetype/src/type1/t1objs.h (renamed from tools/freetype/freetype/src/type1/t1objs.h)0
-rw-r--r--drivers/freetype/freetype/src/type1/t1parse.c (renamed from tools/freetype/freetype/src/type1/t1parse.c)0
-rw-r--r--drivers/freetype/freetype/src/type1/t1parse.h (renamed from tools/freetype/freetype/src/type1/t1parse.h)0
-rw-r--r--drivers/freetype/freetype/src/type1/t1tokens.h (renamed from tools/freetype/freetype/src/type1/t1tokens.h)0
-rw-r--r--drivers/freetype/freetype/src/type1/type1.c (renamed from tools/freetype/freetype/src/type1/type1.c)0
-rw-r--r--drivers/freetype/freetype/src/type42/Jamfile (renamed from tools/freetype/freetype/src/type42/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/type42/module.mk (renamed from tools/freetype/freetype/src/type42/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/type42/rules.mk (renamed from tools/freetype/freetype/src/type42/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/type42/t42drivr.c (renamed from tools/freetype/freetype/src/type42/t42drivr.c)0
-rw-r--r--drivers/freetype/freetype/src/type42/t42drivr.h (renamed from tools/freetype/freetype/src/type42/t42drivr.h)0
-rw-r--r--drivers/freetype/freetype/src/type42/t42error.h (renamed from tools/freetype/freetype/src/type42/t42error.h)0
-rw-r--r--drivers/freetype/freetype/src/type42/t42objs.c (renamed from tools/freetype/freetype/src/type42/t42objs.c)0
-rw-r--r--drivers/freetype/freetype/src/type42/t42objs.h (renamed from tools/freetype/freetype/src/type42/t42objs.h)0
-rw-r--r--drivers/freetype/freetype/src/type42/t42parse.c (renamed from tools/freetype/freetype/src/type42/t42parse.c)0
-rw-r--r--drivers/freetype/freetype/src/type42/t42parse.h (renamed from tools/freetype/freetype/src/type42/t42parse.h)0
-rw-r--r--drivers/freetype/freetype/src/type42/t42types.h (renamed from tools/freetype/freetype/src/type42/t42types.h)0
-rw-r--r--drivers/freetype/freetype/src/type42/type42.c (renamed from tools/freetype/freetype/src/type42/type42.c)0
-rw-r--r--drivers/freetype/freetype/src/winfonts/Jamfile (renamed from tools/freetype/freetype/src/winfonts/Jamfile)0
-rw-r--r--drivers/freetype/freetype/src/winfonts/fnterrs.h (renamed from tools/freetype/freetype/src/winfonts/fnterrs.h)0
-rw-r--r--drivers/freetype/freetype/src/winfonts/module.mk (renamed from tools/freetype/freetype/src/winfonts/module.mk)0
-rw-r--r--drivers/freetype/freetype/src/winfonts/rules.mk (renamed from tools/freetype/freetype/src/winfonts/rules.mk)0
-rw-r--r--drivers/freetype/freetype/src/winfonts/winfnt.c (renamed from tools/freetype/freetype/src/winfonts/winfnt.c)0
-rw-r--r--drivers/freetype/freetype/src/winfonts/winfnt.h (renamed from tools/freetype/freetype/src/winfonts/winfnt.h)0
-rw-r--r--drivers/freetype/ft2build.h (renamed from tools/freetype/ft2build.h)0
-rw-r--r--drivers/gl_context/context_gl.h6
-rw-r--r--drivers/gles2/rasterizer_gles2.cpp52
-rw-r--r--drivers/gles2/rasterizer_gles2.h4
-rw-r--r--drivers/ogg/COPYING28
-rw-r--r--drivers/openssl/SCsub6
-rw-r--r--drivers/opus/COPYING28
-rw-r--r--drivers/png/SCsub7
-rw-r--r--drivers/png/png.c10
-rw-r--r--drivers/png/png.h95
-rw-r--r--drivers/png/pngconf.h2
-rw-r--r--drivers/png/pnglibconf.h6
-rw-r--r--drivers/png/pngrutil.c2
-rw-r--r--drivers/register_driver_types.cpp17
-rw-r--r--drivers/theora/COPYING28
-rw-r--r--drivers/theora/LICENSE18
-rw-r--r--drivers/unix/os_unix.cpp2
-rw-r--r--drivers/vorbis/COPYING28
-rw-r--r--drivers/webp/AUTHORS26
-rw-r--r--drivers/webp/COPYING30
-rw-r--r--drivers/webp/PATENTS23
-rw-r--r--drivers/windows/dir_access_windows.cpp16
-rw-r--r--main/input_default.cpp14
-rw-r--r--main/input_default.h3
-rw-r--r--main/main.cpp62
-rw-r--r--modules/gdscript/gd_compiler.cpp119
-rw-r--r--modules/gdscript/gd_compiler.h4
-rw-r--r--modules/gdscript/gd_editor.cpp58
-rw-r--r--modules/gdscript/gd_function.cpp1429
-rw-r--r--modules/gdscript/gd_function.h207
-rw-r--r--modules/gdscript/gd_functions.cpp4
-rw-r--r--modules/gdscript/gd_parser.cpp2
-rw-r--r--modules/gdscript/gd_script.cpp1729
-rw-r--r--modules/gdscript/gd_script.h217
-rw-r--r--platform/android/SCsub6
-rw-r--r--platform/android/detect.py7
-rw-r--r--platform/android/globals/global_defaults.h2
-rw-r--r--platform/android/godot_android.cpp31
-rw-r--r--platform/android/java/res/drawable/icon.pngbin12574 -> 12525 bytes
-rw-r--r--platform/android/java/src/org/godotengine/godot/Godot.java13
-rw-r--r--platform/android/java/src/org/godotengine/godot/GodotLib.java1
-rw-r--r--platform/android/java_glue.cpp11
-rw-r--r--platform/android/java_glue.h1
-rw-r--r--platform/android/os_android.cpp5
-rw-r--r--platform/android/os_android.h1
-rw-r--r--platform/iphone/globals/global_defaults.h2
-rw-r--r--platform/iphone/rasterizer_iphone.cpp26
-rw-r--r--platform/javascript/dom_keys.h30
-rw-r--r--platform/osx/detect.py9
-rw-r--r--platform/osx/dir_access_osx.mm4
-rw-r--r--platform/osx/export/export.cpp9
-rw-r--r--platform/osx/os_osx.h19
-rw-r--r--platform/osx/os_osx.mm185
-rw-r--r--platform/windows/context_gl_win.cpp17
-rw-r--r--platform/windows/context_gl_win.h8
-rw-r--r--platform/windows/detect.py9
-rw-r--r--platform/windows/godot.icobin370070 -> 370070 bytes
-rw-r--r--platform/windows/os_windows.cpp128
-rw-r--r--platform/windows/os_windows.h8
-rw-r--r--platform/x11/context_gl_x11.cpp38
-rw-r--r--platform/x11/context_gl_x11.h4
-rw-r--r--platform/x11/detect.py4
-rw-r--r--platform/x11/os_x11.cpp179
-rw-r--r--platform/x11/os_x11.h15
-rw-r--r--scene/2d/area_2d.cpp6
-rw-r--r--scene/2d/canvas_item.cpp18
-rw-r--r--scene/2d/canvas_modulate.cpp2
-rw-r--r--scene/2d/light_2d.cpp6
-rw-r--r--scene/2d/path_2d.cpp2
-rw-r--r--scene/2d/polygon_2d.cpp27
-rw-r--r--scene/2d/polygon_2d.h4
-rw-r--r--scene/2d/sprite.cpp2
-rw-r--r--scene/3d/listener.cpp167
-rw-r--r--scene/3d/listener.h53
-rw-r--r--scene/3d/mesh_instance.cpp87
-rw-r--r--scene/3d/mesh_instance.h5
-rw-r--r--scene/3d/vehicle_body.cpp8
-rw-r--r--scene/3d/vehicle_body.h1
-rw-r--r--scene/animation/animation_player.cpp2
-rw-r--r--scene/gui/base_button.cpp53
-rw-r--r--scene/gui/base_button.h11
-rw-r--r--scene/gui/box_container.cpp1
-rw-r--r--scene/gui/button.cpp1
-rw-r--r--scene/gui/button.h4
-rw-r--r--scene/gui/control.cpp118
-rw-r--r--scene/gui/control.h9
-rw-r--r--scene/gui/dialogs.cpp87
-rw-r--r--scene/gui/dialogs.h7
-rw-r--r--scene/gui/input_action.cpp125
-rw-r--r--scene/gui/input_action.h26
-rw-r--r--scene/gui/item_list.cpp64
-rw-r--r--scene/gui/item_list.h14
-rw-r--r--scene/gui/line_edit.cpp7
-rw-r--r--scene/gui/link_button.cpp2
-rw-r--r--scene/gui/menu_button.cpp21
-rw-r--r--scene/gui/patch_9_frame.cpp38
-rw-r--r--scene/gui/patch_9_frame.h4
-rw-r--r--scene/gui/popup_menu.cpp176
-rw-r--r--scene/gui/popup_menu.h19
-rw-r--r--scene/gui/slider.cpp1
-rw-r--r--scene/gui/tab_container.cpp4
-rw-r--r--scene/gui/text_edit.cpp176
-rw-r--r--scene/gui/text_edit.h22
-rw-r--r--scene/gui/texture_frame.cpp46
-rw-r--r--scene/gui/texture_frame.h15
-rw-r--r--scene/gui/video_player.cpp2
-rw-r--r--scene/io/resource_format_image.cpp4
-rw-r--r--scene/main/http_request.cpp5
-rw-r--r--scene/main/node.cpp12
-rw-r--r--scene/main/node.h1
-rw-r--r--scene/main/scene_main_loop.cpp11
-rw-r--r--scene/main/scene_main_loop.h1
-rw-r--r--scene/main/viewport.cpp155
-rw-r--r--scene/main/viewport.h17
-rw-r--r--scene/register_scene_types.cpp8
-rw-r--r--scene/resources/bit_mask.h2
-rw-r--r--scene/resources/curve.cpp2
-rw-r--r--scene/resources/default_theme/default_theme.cpp277
-rw-r--r--scene/resources/default_theme/default_theme.h2
-rw-r--r--scene/resources/dynamic_font.cpp582
-rw-r--r--scene/resources/dynamic_font.h99
-rw-r--r--scene/resources/dynamic_font_stb.cpp527
-rw-r--r--scene/resources/dynamic_font_stb.h178
-rw-r--r--scene/resources/mesh.cpp5
-rw-r--r--scene/resources/stb_truetype.h44
-rw-r--r--scene/resources/style_box.cpp21
-rw-r--r--scene/resources/style_box.h4
-rw-r--r--scene/resources/theme.cpp2
-rw-r--r--scene/resources/world_2d.cpp10
-rw-r--r--scene/scene_string_names.cpp7
-rw-r--r--scene/scene_string_names.h6
-rw-r--r--servers/physics/joints/hinge_joint_sw.cpp1
-rw-r--r--servers/physics/physics_server_sw.cpp42
-rw-r--r--servers/physics/space_sw.cpp4
-rw-r--r--servers/physics/space_sw.h16
-rw-r--r--servers/physics/step_sw.cpp38
-rw-r--r--servers/physics_2d/physics_2d_server_sw.cpp45
-rw-r--r--servers/physics_2d/physics_2d_server_sw.h1
-rw-r--r--servers/physics_2d/space_2d_sw.cpp3
-rw-r--r--servers/physics_2d/space_2d_sw.h17
-rw-r--r--servers/physics_2d/step_2d_sw.cpp40
-rw-r--r--servers/physics_2d_server.h4
-rw-r--r--servers/server_wrap_mt_common.h61
-rw-r--r--servers/visual/rasterizer.h6
-rw-r--r--servers/visual/rasterizer_dummy.cpp3
-rw-r--r--servers/visual/rasterizer_dummy.h2
-rw-r--r--servers/visual/visual_server_raster.cpp41
-rw-r--r--servers/visual/visual_server_raster.h14
-rw-r--r--servers/visual/visual_server_wrap_mt.h4
-rw-r--r--servers/visual_server.cpp6
-rw-r--r--servers/visual_server.h6
-rw-r--r--tools/Godot.app/Contents/Resources/Godot.icnsbin260598 -> 120942 bytes
-rw-r--r--tools/SCsub110
-rw-r--r--tools/doc/doc_data.h3
-rw-r--r--tools/editor/addon_editor_plugin.cpp16
-rw-r--r--tools/editor/animation_editor.cpp28
-rw-r--r--tools/editor/call_dialog.cpp4
-rw-r--r--tools/editor/code_editor.cpp534
-rw-r--r--tools/editor/code_editor.h77
-rw-r--r--tools/editor/connections_dialog.cpp111
-rw-r--r--tools/editor/connections_dialog.h11
-rw-r--r--tools/editor/create_dialog.cpp36
-rw-r--r--tools/editor/create_dialog.h1
-rw-r--r--tools/editor/dependency_editor.cpp32
-rw-r--r--tools/editor/editor_file_dialog.cpp11
-rw-r--r--tools/editor/editor_file_system.cpp73
-rw-r--r--tools/editor/editor_file_system.h8
-rw-r--r--tools/editor/editor_fonts.cpp105
-rw-r--r--tools/editor/editor_help.cpp73
-rw-r--r--tools/editor/editor_help.h1
-rw-r--r--tools/editor/editor_import_export.cpp47
-rw-r--r--tools/editor/editor_import_export.h3
-rw-r--r--tools/editor/editor_node.cpp515
-rw-r--r--tools/editor/editor_node.h32
-rw-r--r--tools/editor/editor_plugin.cpp8
-rw-r--r--tools/editor/editor_plugin.h3
-rw-r--r--tools/editor/editor_plugin_settings.cpp9
-rw-r--r--tools/editor/editor_profiler.cpp753
-rw-r--r--tools/editor/editor_profiler.h145
-rw-r--r--tools/editor/editor_reimport_dialog.cpp4
-rw-r--r--tools/editor/editor_resource_preview.cpp99
-rw-r--r--tools/editor/editor_resource_preview.h5
-rw-r--r--tools/editor/editor_run_script.cpp10
-rw-r--r--tools/editor/editor_scale.cpp14
-rw-r--r--tools/editor/editor_scale.h8
-rw-r--r--tools/editor/editor_settings.cpp435
-rw-r--r--tools/editor/editor_settings.h25
-rw-r--r--tools/editor/editor_sub_scene.cpp2
-rw-r--r--tools/editor/groups_editor.cpp20
-rw-r--r--tools/editor/groups_editor.h4
-rw-r--r--tools/editor/icons/2x/icon_accept_dialog.pngbin0 -> 637 bytes
-rw-r--r--tools/editor/icons/2x/icon_add.pngbin0 -> 207 bytes
-rw-r--r--tools/editor/icons/2x/icon_add_track.pngbin0 -> 207 bytes
-rw-r--r--tools/editor/icons/2x/icon_anchor.pngbin0 -> 872 bytes
-rw-r--r--tools/editor/icons/2x/icon_animated_sprite.pngbin0 -> 1268 bytes
-rw-r--r--tools/editor/icons/2x/icon_animated_sprite_3d.pngbin0 -> 1181 bytes
-rw-r--r--tools/editor/icons/2x/icon_animation.pngbin0 -> 963 bytes
-rw-r--r--tools/editor/icons/2x/icon_animation_player.pngbin0 -> 230 bytes
-rw-r--r--tools/editor/icons/2x/icon_animation_tree.pngbin0 -> 527 bytes
-rw-r--r--tools/editor/icons/2x/icon_animation_tree_player.pngbin0 -> 527 bytes
-rw-r--r--tools/editor/icons/2x/icon_area.pngbin0 -> 287 bytes
-rw-r--r--tools/editor/icons/2x/icon_area_2d.pngbin0 -> 267 bytes
-rw-r--r--tools/editor/icons/2x/icon_arrow_left.pngbin0 -> 389 bytes
-rw-r--r--tools/editor/icons/2x/icon_arrow_right.pngbin0 -> 364 bytes
-rw-r--r--tools/editor/icons/2x/icon_arrow_up.pngbin0 -> 349 bytes
-rw-r--r--tools/editor/icons/2x/icon_atlas_texture.pngbin0 -> 438 bytes
-rw-r--r--tools/editor/icons/2x/icon_audio_stream_gibberish.pngbin0 -> 493 bytes
-rw-r--r--tools/editor/icons/2x/icon_auto_play.pngbin0 -> 752 bytes
-rw-r--r--tools/editor/icons/2x/icon_back.pngbin0 -> 379 bytes
-rw-r--r--tools/editor/icons/2x/icon_back_buffer_copy.pngbin0 -> 246 bytes
-rw-r--r--tools/editor/icons/2x/icon_bake.pngbin0 -> 323 bytes
-rw-r--r--tools/editor/icons/2x/icon_baked_light.pngbin0 -> 323 bytes
-rw-r--r--tools/editor/icons/2x/icon_baked_light_instance.pngbin0 -> 320 bytes
-rw-r--r--tools/editor/icons/2x/icon_bitmap_font.pngbin0 -> 311 bytes
-rw-r--r--tools/editor/icons/2x/icon_blend.pngbin0 -> 1147 bytes
-rw-r--r--tools/editor/icons/2x/icon_bone.pngbin0 -> 653 bytes
-rw-r--r--tools/editor/icons/2x/icon_bone_attachment.pngbin0 -> 632 bytes
-rw-r--r--tools/editor/icons/2x/icon_bone_track.pngbin0 -> 621 bytes
-rw-r--r--tools/editor/icons/2x/icon_bool.pngbin0 -> 227 bytes
-rw-r--r--tools/editor/icons/2x/icon_box_shape.pngbin0 -> 653 bytes
-rw-r--r--tools/editor/icons/2x/icon_button.pngbin0 -> 242 bytes
-rw-r--r--tools/editor/icons/2x/icon_button_group.pngbin0 -> 307 bytes
-rw-r--r--tools/editor/icons/2x/icon_camera.pngbin0 -> 408 bytes
-rw-r--r--tools/editor/icons/2x/icon_camera_2d.pngbin0 -> 420 bytes
-rw-r--r--tools/editor/icons/2x/icon_canvas_item.pngbin0 -> 765 bytes
-rw-r--r--tools/editor/icons/2x/icon_canvas_item_material.pngbin0 -> 696 bytes
-rw-r--r--tools/editor/icons/2x/icon_canvas_item_shader.pngbin0 -> 772 bytes
-rw-r--r--tools/editor/icons/2x/icon_canvas_item_shader_graph.pngbin0 -> 763 bytes
-rw-r--r--tools/editor/icons/2x/icon_canvas_layer.pngbin0 -> 913 bytes
-rw-r--r--tools/editor/icons/2x/icon_canvas_modulate.pngbin0 -> 592 bytes
-rw-r--r--tools/editor/icons/2x/icon_capsule_shape.pngbin0 -> 428 bytes
-rw-r--r--tools/editor/icons/2x/icon_center_container.pngbin0 -> 534 bytes
-rw-r--r--tools/editor/icons/2x/icon_check_box.pngbin0 -> 621 bytes
-rw-r--r--tools/editor/icons/2x/icon_check_button.pngbin0 -> 584 bytes
-rw-r--r--tools/editor/icons/2x/icon_class_list.pngbin0 -> 248 bytes
-rw-r--r--tools/editor/icons/2x/icon_close.pngbin0 -> 517 bytes
-rw-r--r--tools/editor/icons/2x/icon_collapse.pngbin0 -> 439 bytes
-rw-r--r--tools/editor/icons/2x/icon_collision_2d.pngbin0 -> 463 bytes
-rw-r--r--tools/editor/icons/2x/icon_collision_polygon.pngbin0 -> 453 bytes
-rw-r--r--tools/editor/icons/2x/icon_collision_polygon_2d.pngbin0 -> 463 bytes
-rw-r--r--tools/editor/icons/2x/icon_collision_shape.pngbin0 -> 495 bytes
-rw-r--r--tools/editor/icons/2x/icon_collision_shape_2d.pngbin0 -> 291 bytes
-rw-r--r--tools/editor/icons/2x/icon_color.pngbin0 -> 1435 bytes
-rw-r--r--tools/editor/icons/2x/icon_color_pick.pngbin0 -> 878 bytes
-rw-r--r--tools/editor/icons/2x/icon_color_picker.pngbin0 -> 893 bytes
-rw-r--r--tools/editor/icons/2x/icon_color_picker_button.pngbin0 -> 998 bytes
-rw-r--r--tools/editor/icons/2x/icon_color_ramp.pngbin0 -> 398 bytes
-rw-r--r--tools/editor/icons/2x/icon_concave_polygon_shape.pngbin0 -> 765 bytes
-rw-r--r--tools/editor/icons/2x/icon_confirmation_dialog.pngbin0 -> 750 bytes
-rw-r--r--tools/editor/icons/2x/icon_connect.pngbin0 -> 307 bytes
-rw-r--r--tools/editor/icons/2x/icon_connection_and_groups.pngbin0 -> 453 bytes
-rw-r--r--tools/editor/icons/2x/icon_container.pngbin0 -> 375 bytes
-rw-r--r--tools/editor/icons/2x/icon_control.pngbin0 -> 881 bytes
-rw-r--r--tools/editor/icons/2x/icon_control_align_bottom_center.pngbin0 -> 223 bytes
-rw-r--r--tools/editor/icons/2x/icon_control_align_bottom_left.pngbin0 -> 220 bytes
-rw-r--r--tools/editor/icons/2x/icon_control_align_bottom_right.pngbin0 -> 220 bytes
-rw-r--r--tools/editor/icons/2x/icon_control_align_bottom_wide.pngbin0 -> 222 bytes
-rw-r--r--tools/editor/icons/2x/icon_control_align_center.pngbin0 -> 235 bytes
-rw-r--r--tools/editor/icons/2x/icon_control_align_center_left.pngbin0 -> 186 bytes
-rw-r--r--tools/editor/icons/2x/icon_control_align_center_right.pngbin0 -> 183 bytes
-rw-r--r--tools/editor/icons/2x/icon_control_align_left_center.pngbin0 -> 234 bytes
-rw-r--r--tools/editor/icons/2x/icon_control_align_left_wide.pngbin0 -> 209 bytes
-rw-r--r--tools/editor/icons/2x/icon_control_align_right_center.pngbin0 -> 236 bytes
-rw-r--r--tools/editor/icons/2x/icon_control_align_right_wide.pngbin0 -> 207 bytes
-rw-r--r--tools/editor/icons/2x/icon_control_align_top_center.pngbin0 -> 231 bytes
-rw-r--r--tools/editor/icons/2x/icon_control_align_top_left.pngbin0 -> 226 bytes
-rw-r--r--tools/editor/icons/2x/icon_control_align_top_right.pngbin0 -> 232 bytes
-rw-r--r--tools/editor/icons/2x/icon_control_align_top_wide.pngbin0 -> 223 bytes
-rw-r--r--tools/editor/icons/2x/icon_control_align_wide.pngbin0 -> 208 bytes
-rw-r--r--tools/editor/icons/2x/icon_control_hcenter_wide.pngbin0 -> 232 bytes
-rw-r--r--tools/editor/icons/2x/icon_control_vcenter_wide.pngbin0 -> 213 bytes
-rw-r--r--tools/editor/icons/2x/icon_convex_polygon_shape.pngbin0 -> 704 bytes
-rw-r--r--tools/editor/icons/2x/icon_create_new_scene_from.pngbin0 -> 669 bytes
-rw-r--r--tools/editor/icons/2x/icon_curve_close.pngbin0 -> 666 bytes
-rw-r--r--tools/editor/icons/2x/icon_curve_constant.pngbin0 -> 218 bytes
-rw-r--r--tools/editor/icons/2x/icon_curve_create.pngbin0 -> 754 bytes
-rw-r--r--tools/editor/icons/2x/icon_curve_curve.pngbin0 -> 800 bytes
-rw-r--r--tools/editor/icons/2x/icon_curve_delete.pngbin0 -> 982 bytes
-rw-r--r--tools/editor/icons/2x/icon_curve_edit.pngbin0 -> 1010 bytes
-rw-r--r--tools/editor/icons/2x/icon_curve_in.pngbin0 -> 505 bytes
-rw-r--r--tools/editor/icons/2x/icon_curve_in_out.pngbin0 -> 550 bytes
-rw-r--r--tools/editor/icons/2x/icon_curve_linear.pngbin0 -> 339 bytes
-rw-r--r--tools/editor/icons/2x/icon_curve_out.pngbin0 -> 515 bytes
-rw-r--r--tools/editor/icons/2x/icon_curve_out_in.pngbin0 -> 545 bytes
-rw-r--r--tools/editor/icons/2x/icon_damped_spring_joint_2d.pngbin0 -> 552 bytes
-rw-r--r--tools/editor/icons/2x/icon_debug_continue.pngbin0 -> 581 bytes
-rw-r--r--tools/editor/icons/2x/icon_debug_next.pngbin0 -> 340 bytes
-rw-r--r--tools/editor/icons/2x/icon_debug_step.pngbin0 -> 373 bytes
-rw-r--r--tools/editor/icons/2x/icon_dependency_changed.pngbin0 -> 787 bytes
-rw-r--r--tools/editor/icons/2x/icon_dependency_changed_hl.pngbin0 -> 657 bytes
-rw-r--r--tools/editor/icons/2x/icon_dependency_local_changed.pngbin0 -> 1160 bytes
-rw-r--r--tools/editor/icons/2x/icon_dependency_local_changed_hl.pngbin0 -> 982 bytes
-rw-r--r--tools/editor/icons/2x/icon_dependency_ok.pngbin0 -> 1071 bytes
-rw-r--r--tools/editor/icons/2x/icon_dependency_ok_hl.pngbin0 -> 892 bytes
-rw-r--r--tools/editor/icons/2x/icon_directional_light.pngbin0 -> 812 bytes
-rw-r--r--tools/editor/icons/2x/icon_duplicate.pngbin0 -> 265 bytes
-rw-r--r--tools/editor/icons/2x/icon_dynamic_font.pngbin0 -> 439 bytes
-rw-r--r--tools/editor/icons/2x/icon_dynamic_font_data.pngbin0 -> 414 bytes
-rw-r--r--tools/editor/icons/2x/icon_edit.pngbin0 -> 581 bytes
-rw-r--r--tools/editor/icons/2x/icon_edit_key.pngbin0 -> 697 bytes
-rw-r--r--tools/editor/icons/2x/icon_edit_pivot.pngbin0 -> 651 bytes
-rw-r--r--tools/editor/icons/2x/icon_edit_resource.pngbin0 -> 454 bytes
-rw-r--r--tools/editor/icons/2x/icon_editor_3d_handle.pngbin0 -> 761 bytes
-rw-r--r--tools/editor/icons/2x/icon_editor_handle.pngbin0 -> 483 bytes
-rw-r--r--tools/editor/icons/2x/icon_editor_pivot.pngbin0 -> 254 bytes
-rw-r--r--tools/editor/icons/2x/icon_editor_plugin.pngbin0 -> 525 bytes
-rw-r--r--tools/editor/icons/2x/icon_enum.pngbin0 -> 193 bytes
-rw-r--r--tools/editor/icons/2x/icon_error.pngbin0 -> 160 bytes
-rw-r--r--tools/editor/icons/2x/icon_error_sign.pngbin0 -> 497 bytes
-rw-r--r--tools/editor/icons/2x/icon_event_player.pngbin0 -> 223 bytes
-rw-r--r--tools/editor/icons/2x/icon_favorites.pngbin0 -> 758 bytes
-rw-r--r--tools/editor/icons/2x/icon_file.pngbin0 -> 252 bytes
-rw-r--r--tools/editor/icons/2x/icon_file_big.pngbin0 -> 561 bytes
-rw-r--r--tools/editor/icons/2x/icon_file_dialog.pngbin0 -> 398 bytes
-rw-r--r--tools/editor/icons/2x/icon_file_list.pngbin0 -> 193 bytes
-rw-r--r--tools/editor/icons/2x/icon_file_server.pngbin0 -> 228 bytes
-rw-r--r--tools/editor/icons/2x/icon_file_server_active.pngbin0 -> 229 bytes
-rw-r--r--tools/editor/icons/2x/icon_file_thumbnail.pngbin0 -> 193 bytes
-rw-r--r--tools/editor/icons/2x/icon_filesystem.pngbin0 -> 248 bytes
-rw-r--r--tools/editor/icons/2x/icon_fixed_material.pngbin0 -> 792 bytes
-rw-r--r--tools/editor/icons/2x/icon_folder.pngbin0 -> 284 bytes
-rw-r--r--tools/editor/icons/2x/icon_folder_big.pngbin0 -> 1047 bytes
-rw-r--r--tools/editor/icons/2x/icon_font.pngbin0 -> 425 bytes
-rw-r--r--tools/editor/icons/2x/icon_forward.pngbin0 -> 382 bytes
-rw-r--r--tools/editor/icons/2x/icon_g_d_script.pngbin0 -> 815 bytes
-rw-r--r--tools/editor/icons/2x/icon_gizmo_directional_light.pngbin0 -> 1426 bytes
-rw-r--r--tools/editor/icons/2x/icon_gizmo_light.pngbin0 -> 1547 bytes
-rw-r--r--tools/editor/icons/2x/icon_gizmo_spatial_sample_player.pngbin0 -> 582 bytes
-rw-r--r--tools/editor/icons/2x/icon_gizmo_spatial_stream_player.pngbin0 -> 951 bytes
-rw-r--r--tools/editor/icons/2x/icon_godot.pngbin0 -> 1601 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_color_ramp.pngbin0 -> 398 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_comment.pngbin0 -> 208 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_cube_uniform.pngbin0 -> 851 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_curve_map.pngbin0 -> 643 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_default_texture.pngbin0 -> 310 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_edit.pngbin0 -> 843 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_input.pngbin0 -> 577 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_node.pngbin0 -> 685 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_rgb.pngbin0 -> 1007 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_rgb_op.pngbin0 -> 275 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_rgb_uniform.pngbin0 -> 752 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_scalar.pngbin0 -> 517 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_scalar_interp.pngbin0 -> 363 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_scalar_op.pngbin0 -> 446 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_scalar_uniform.pngbin0 -> 626 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_scalars_to_vec.pngbin0 -> 311 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_texscreen.pngbin0 -> 273 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_texture_uniform.pngbin0 -> 450 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_time.pngbin0 -> 875 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_vec_dp.pngbin0 -> 538 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_vec_interp.pngbin0 -> 363 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_vec_length.pngbin0 -> 569 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_vec_op.pngbin0 -> 443 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_vec_scalar_op.pngbin0 -> 487 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_vec_to_scalars.pngbin0 -> 313 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_vecs_to_xform.pngbin0 -> 336 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_vector.pngbin0 -> 676 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_vector_uniform.pngbin0 -> 774 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_xform.pngbin0 -> 436 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_xform_mult.pngbin0 -> 377 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_xform_scalar_func.pngbin0 -> 523 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_xform_to_vecs.pngbin0 -> 337 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_xform_uniform.pngbin0 -> 582 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_xform_vec_func.pngbin0 -> 532 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_xform_vec_imult.pngbin0 -> 657 bytes
-rw-r--r--tools/editor/icons/2x/icon_graph_xform_vec_mult.pngbin0 -> 656 bytes
-rw-r--r--tools/editor/icons/2x/icon_grid.pngbin0 -> 250 bytes
-rw-r--r--tools/editor/icons/2x/icon_grid_container.pngbin0 -> 385 bytes
-rw-r--r--tools/editor/icons/2x/icon_grid_map.pngbin0 -> 194 bytes
-rw-r--r--tools/editor/icons/2x/icon_groove_joint_2d.pngbin0 -> 235 bytes
-rw-r--r--tools/editor/icons/2x/icon_group.pngbin0 -> 838 bytes
-rw-r--r--tools/editor/icons/2x/icon_groups.pngbin0 -> 409 bytes
-rw-r--r--tools/editor/icons/2x/icon_h_box_container.pngbin0 -> 363 bytes
-rw-r--r--tools/editor/icons/2x/icon_h_button_array.pngbin0 -> 280 bytes
-rw-r--r--tools/editor/icons/2x/icon_h_scroll_bar.pngbin0 -> 380 bytes
-rw-r--r--tools/editor/icons/2x/icon_h_separator.pngbin0 -> 204 bytes
-rw-r--r--tools/editor/icons/2x/icon_h_slider.pngbin0 -> 416 bytes
-rw-r--r--tools/editor/icons/2x/icon_h_split_container.pngbin0 -> 455 bytes
-rw-r--r--tools/editor/icons/2x/icon_h_t_t_p_request.pngbin0 -> 236 bytes
-rw-r--r--tools/editor/icons/2x/icon_help.pngbin0 -> 1182 bytes
-rw-r--r--tools/editor/icons/2x/icon_hidden.pngbin0 -> 696 bytes
-rw-r--r--tools/editor/icons/2x/icon_history.pngbin0 -> 870 bytes
-rw-r--r--tools/editor/icons/2x/icon_hsize.pngbin0 -> 303 bytes
-rw-r--r--tools/editor/icons/2x/icon_image.pngbin0 -> 460 bytes
-rw-r--r--tools/editor/icons/2x/icon_image_texture.pngbin0 -> 318 bytes
-rw-r--r--tools/editor/icons/2x/icon_immediate_geometry.pngbin0 -> 762 bytes
-rw-r--r--tools/editor/icons/2x/icon_import_check.pngbin0 -> 442 bytes
-rw-r--r--tools/editor/icons/2x/icon_import_fail.pngbin0 -> 558 bytes
-rw-r--r--tools/editor/icons/2x/icon_instance.pngbin0 -> 873 bytes
-rw-r--r--tools/editor/icons/2x/icon_instance_options.pngbin0 -> 764 bytes
-rw-r--r--tools/editor/icons/2x/icon_integer.pngbin0 -> 203 bytes
-rw-r--r--tools/editor/icons/2x/icon_interp_cubic.pngbin0 -> 539 bytes
-rw-r--r--tools/editor/icons/2x/icon_interp_linear.pngbin0 -> 454 bytes
-rw-r--r--tools/editor/icons/2x/icon_interp_raw.pngbin0 -> 277 bytes
-rw-r--r--tools/editor/icons/2x/icon_invalid_key.pngbin0 -> 441 bytes
-rw-r--r--tools/editor/icons/2x/icon_inverse_kinematics.pngbin0 -> 515 bytes
-rw-r--r--tools/editor/icons/2x/icon_item_list.pngbin0 -> 394 bytes
-rw-r--r--tools/editor/icons/2x/icon_joy_axis.pngbin0 -> 481 bytes
-rw-r--r--tools/editor/icons/2x/icon_joy_button.pngbin0 -> 555 bytes
-rw-r--r--tools/editor/icons/2x/icon_joystick.pngbin0 -> 436 bytes
-rw-r--r--tools/editor/icons/2x/icon_key.pngbin0 -> 628 bytes
-rw-r--r--tools/editor/icons/2x/icon_key_hover.pngbin0 -> 432 bytes
-rw-r--r--tools/editor/icons/2x/icon_key_invalid.pngbin0 -> 441 bytes
-rw-r--r--tools/editor/icons/2x/icon_key_next.pngbin0 -> 590 bytes
-rw-r--r--tools/editor/icons/2x/icon_key_selected.pngbin0 -> 409 bytes
-rw-r--r--tools/editor/icons/2x/icon_key_value.pngbin0 -> 436 bytes
-rw-r--r--tools/editor/icons/2x/icon_key_xform.pngbin0 -> 444 bytes
-rw-r--r--tools/editor/icons/2x/icon_keyboard.pngbin0 -> 542 bytes
-rw-r--r--tools/editor/icons/2x/icon_kinematic_body.pngbin0 -> 253 bytes
-rw-r--r--tools/editor/icons/2x/icon_kinematic_body_2d.pngbin0 -> 260 bytes
-rw-r--r--tools/editor/icons/2x/icon_label.pngbin0 -> 426 bytes
-rw-r--r--tools/editor/icons/2x/icon_light_2d.pngbin0 -> 725 bytes
-rw-r--r--tools/editor/icons/2x/icon_light_occluder_2d.pngbin0 -> 231 bytes
-rw-r--r--tools/editor/icons/2x/icon_line_edit.pngbin0 -> 379 bytes
-rw-r--r--tools/editor/icons/2x/icon_link_button.pngbin0 -> 830 bytes
-rw-r--r--tools/editor/icons/2x/icon_list_select.pngbin0 -> 709 bytes
-rw-r--r--tools/editor/icons/2x/icon_load.pngbin0 -> 284 bytes
-rw-r--r--tools/editor/icons/2x/icon_lock.pngbin0 -> 497 bytes
-rw-r--r--tools/editor/icons/2x/icon_loop.pngbin0 -> 862 bytes
-rw-r--r--tools/editor/icons/2x/icon_main_play.pngbin0 -> 415 bytes
-rw-r--r--tools/editor/icons/2x/icon_main_stop.pngbin0 -> 253 bytes
-rw-r--r--tools/editor/icons/2x/icon_margin_container.pngbin0 -> 421 bytes
-rw-r--r--tools/editor/icons/2x/icon_material_preview_cube.pngbin0 -> 618 bytes
-rw-r--r--tools/editor/icons/2x/icon_material_preview_cube_off.pngbin0 -> 654 bytes
-rw-r--r--tools/editor/icons/2x/icon_material_preview_light_1.pngbin0 -> 780 bytes
-rw-r--r--tools/editor/icons/2x/icon_material_preview_light_1_off.pngbin0 -> 652 bytes
-rw-r--r--tools/editor/icons/2x/icon_material_preview_light_2.pngbin0 -> 796 bytes
-rw-r--r--tools/editor/icons/2x/icon_material_preview_light_2_off.pngbin0 -> 899 bytes
-rw-r--r--tools/editor/icons/2x/icon_material_preview_sphere.pngbin0 -> 760 bytes
-rw-r--r--tools/editor/icons/2x/icon_material_preview_sphere_off.pngbin0 -> 574 bytes
-rw-r--r--tools/editor/icons/2x/icon_material_shader.pngbin0 -> 824 bytes
-rw-r--r--tools/editor/icons/2x/icon_material_shader_graph.pngbin0 -> 763 bytes
-rw-r--r--tools/editor/icons/2x/icon_matrix.pngbin0 -> 241 bytes
-rw-r--r--tools/editor/icons/2x/icon_menu_button.pngbin0 -> 352 bytes
-rw-r--r--tools/editor/icons/2x/icon_mesh.pngbin0 -> 638 bytes
-rw-r--r--tools/editor/icons/2x/icon_mesh_instance.pngbin0 -> 619 bytes
-rw-r--r--tools/editor/icons/2x/icon_mirror_x.pngbin0 -> 303 bytes
-rw-r--r--tools/editor/icons/2x/icon_mirror_y.pngbin0 -> 296 bytes
-rw-r--r--tools/editor/icons/2x/icon_mouse.pngbin0 -> 532 bytes
-rw-r--r--tools/editor/icons/2x/icon_move_down.pngbin0 -> 413 bytes
-rw-r--r--tools/editor/icons/2x/icon_move_point.pngbin0 -> 1251 bytes
-rw-r--r--tools/editor/icons/2x/icon_move_up.pngbin0 -> 402 bytes
-rw-r--r--tools/editor/icons/2x/icon_multi_edit.pngbin0 -> 614 bytes
-rw-r--r--tools/editor/icons/2x/icon_multi_line.pngbin0 -> 222 bytes
-rw-r--r--tools/editor/icons/2x/icon_multi_mesh.pngbin0 -> 647 bytes
-rw-r--r--tools/editor/icons/2x/icon_multi_mesh_instance.pngbin0 -> 709 bytes
-rw-r--r--tools/editor/icons/2x/icon_multi_node_edit.pngbin0 -> 614 bytes
-rw-r--r--tools/editor/icons/2x/icon_navigation.pngbin0 -> 590 bytes
-rw-r--r--tools/editor/icons/2x/icon_navigation_2d.pngbin0 -> 614 bytes
-rw-r--r--tools/editor/icons/2x/icon_navigation_mesh_instance.pngbin0 -> 923 bytes
-rw-r--r--tools/editor/icons/2x/icon_navigation_polygon_instance.pngbin0 -> 768 bytes
-rw-r--r--tools/editor/icons/2x/icon_new.pngbin0 -> 252 bytes
-rw-r--r--tools/editor/icons/2x/icon_node.pngbin0 -> 844 bytes
-rw-r--r--tools/editor/icons/2x/icon_node_2d.pngbin0 -> 920 bytes
-rw-r--r--tools/editor/icons/2x/icon_node_warning.pngbin0 -> 501 bytes
-rw-r--r--tools/editor/icons/2x/icon_non_favorite.pngbin0 -> 1002 bytes
-rw-r--r--tools/editor/icons/2x/icon_object.pngbin0 -> 731 bytes
-rw-r--r--tools/editor/icons/2x/icon_occluder_polygon_2d.pngbin0 -> 440 bytes
-rw-r--r--tools/editor/icons/2x/icon_omni_light.pngbin0 -> 715 bytes
-rw-r--r--tools/editor/icons/2x/icon_option_button.pngbin0 -> 422 bytes
-rw-r--r--tools/editor/icons/2x/icon_p_hash_translation.pngbin0 -> 341 bytes
-rw-r--r--tools/editor/icons/2x/icon_packed_scene.pngbin0 -> 625 bytes
-rw-r--r--tools/editor/icons/2x/icon_panel.pngbin0 -> 333 bytes
-rw-r--r--tools/editor/icons/2x/icon_panel_container.pngbin0 -> 365 bytes
-rw-r--r--tools/editor/icons/2x/icon_panels_1.pngbin0 -> 180 bytes
-rw-r--r--tools/editor/icons/2x/icon_panels_2.pngbin0 -> 183 bytes
-rw-r--r--tools/editor/icons/2x/icon_panels_2_alt.pngbin0 -> 190 bytes
-rw-r--r--tools/editor/icons/2x/icon_panels_3.pngbin0 -> 197 bytes
-rw-r--r--tools/editor/icons/2x/icon_panels_3_alt.pngbin0 -> 208 bytes
-rw-r--r--tools/editor/icons/2x/icon_panels_4.pngbin0 -> 192 bytes
-rw-r--r--tools/editor/icons/2x/icon_parallax_background.pngbin0 -> 391 bytes
-rw-r--r--tools/editor/icons/2x/icon_parallax_layer.pngbin0 -> 525 bytes
-rw-r--r--tools/editor/icons/2x/icon_particle_attractor_2d.pngbin0 -> 1634 bytes
-rw-r--r--tools/editor/icons/2x/icon_particles.pngbin0 -> 742 bytes
-rw-r--r--tools/editor/icons/2x/icon_particles_2d.pngbin0 -> 784 bytes
-rw-r--r--tools/editor/icons/2x/icon_patch_9_frame.pngbin0 -> 218 bytes
-rw-r--r--tools/editor/icons/2x/icon_path.pngbin0 -> 722 bytes
-rw-r--r--tools/editor/icons/2x/icon_path_2d.pngbin0 -> 743 bytes
-rw-r--r--tools/editor/icons/2x/icon_path_follow.pngbin0 -> 781 bytes
-rw-r--r--tools/editor/icons/2x/icon_path_follow_2d.pngbin0 -> 781 bytes
-rw-r--r--tools/editor/icons/2x/icon_pause.pngbin0 -> 250 bytes
-rw-r--r--tools/editor/icons/2x/icon_pin.pngbin0 -> 378 bytes
-rw-r--r--tools/editor/icons/2x/icon_pin_joint.pngbin0 -> 742 bytes
-rw-r--r--tools/editor/icons/2x/icon_pin_joint_2d.pngbin0 -> 775 bytes
-rw-r--r--tools/editor/icons/2x/icon_pin_pressed.pngbin0 -> 378 bytes
-rw-r--r--tools/editor/icons/2x/icon_plane.pngbin0 -> 362 bytes
-rw-r--r--tools/editor/icons/2x/icon_plane_shape.pngbin0 -> 372 bytes
-rw-r--r--tools/editor/icons/2x/icon_play.pngbin0 -> 451 bytes
-rw-r--r--tools/editor/icons/2x/icon_play_backwards.pngbin0 -> 480 bytes
-rw-r--r--tools/editor/icons/2x/icon_play_custom.pngbin0 -> 628 bytes
-rw-r--r--tools/editor/icons/2x/icon_play_scene.pngbin0 -> 742 bytes
-rw-r--r--tools/editor/icons/2x/icon_play_start.pngbin0 -> 519 bytes
-rw-r--r--tools/editor/icons/2x/icon_play_start_backwards.pngbin0 -> 553 bytes
-rw-r--r--tools/editor/icons/2x/icon_polygon_2d.pngbin0 -> 463 bytes
-rw-r--r--tools/editor/icons/2x/icon_popup.pngbin0 -> 385 bytes
-rw-r--r--tools/editor/icons/2x/icon_popup_dialog.pngbin0 -> 403 bytes
-rw-r--r--tools/editor/icons/2x/icon_popup_menu.pngbin0 -> 357 bytes
-rw-r--r--tools/editor/icons/2x/icon_popup_panel.pngbin0 -> 335 bytes
-rw-r--r--tools/editor/icons/2x/icon_portal.pngbin0 -> 911 bytes
-rw-r--r--tools/editor/icons/2x/icon_position_2d.pngbin0 -> 208 bytes
-rw-r--r--tools/editor/icons/2x/icon_position_3d.pngbin0 -> 207 bytes
-rw-r--r--tools/editor/icons/2x/icon_progress_1.pngbin0 -> 837 bytes
-rw-r--r--tools/editor/icons/2x/icon_progress_2.pngbin0 -> 841 bytes
-rw-r--r--tools/editor/icons/2x/icon_progress_3.pngbin0 -> 856 bytes
-rw-r--r--tools/editor/icons/2x/icon_progress_4.pngbin0 -> 864 bytes
-rw-r--r--tools/editor/icons/2x/icon_progress_5.pngbin0 -> 863 bytes
-rw-r--r--tools/editor/icons/2x/icon_progress_6.pngbin0 -> 849 bytes
-rw-r--r--tools/editor/icons/2x/icon_progress_7.pngbin0 -> 871 bytes
-rw-r--r--tools/editor/icons/2x/icon_progress_8.pngbin0 -> 847 bytes
-rw-r--r--tools/editor/icons/2x/icon_progress_bar.pngbin0 -> 384 bytes
-rw-r--r--tools/editor/icons/2x/icon_proximity_group.pngbin0 -> 382 bytes
-rw-r--r--tools/editor/icons/2x/icon_quad.pngbin0 -> 345 bytes
-rw-r--r--tools/editor/icons/2x/icon_quat.pngbin0 -> 724 bytes
-rw-r--r--tools/editor/icons/2x/icon_range.pngbin0 -> 233 bytes
-rw-r--r--tools/editor/icons/2x/icon_ray_cast.pngbin0 -> 364 bytes
-rw-r--r--tools/editor/icons/2x/icon_ray_cast_2d.pngbin0 -> 393 bytes
-rw-r--r--tools/editor/icons/2x/icon_ray_shape.pngbin0 -> 597 bytes
-rw-r--r--tools/editor/icons/2x/icon_rayito.pngbin0 -> 505 bytes
-rw-r--r--tools/editor/icons/2x/icon_real.pngbin0 -> 479 bytes
-rw-r--r--tools/editor/icons/2x/icon_reference_frame.pngbin0 -> 216 bytes
-rw-r--r--tools/editor/icons/2x/icon_region_edit.pngbin0 -> 214 bytes
-rw-r--r--tools/editor/icons/2x/icon_reload.pngbin0 -> 842 bytes
-rw-r--r--tools/editor/icons/2x/icon_reload_small.pngbin0 -> 812 bytes
-rw-r--r--tools/editor/icons/2x/icon_remote.pngbin0 -> 880 bytes
-rw-r--r--tools/editor/icons/2x/icon_remote_transform_2d.pngbin0 -> 1253 bytes
-rw-r--r--tools/editor/icons/2x/icon_remove.pngbin0 -> 327 bytes
-rw-r--r--tools/editor/icons/2x/icon_rename.pngbin0 -> 271 bytes
-rw-r--r--tools/editor/icons/2x/icon_reparent.pngbin0 -> 687 bytes
-rw-r--r--tools/editor/icons/2x/icon_resource_preloader.pngbin0 -> 665 bytes
-rw-r--r--tools/editor/icons/2x/icon_rich_text_label.pngbin0 -> 369 bytes
-rw-r--r--tools/editor/icons/2x/icon_rigid_body.pngbin0 -> 1195 bytes
-rw-r--r--tools/editor/icons/2x/icon_rigid_body_2d.pngbin0 -> 1262 bytes
-rw-r--r--tools/editor/icons/2x/icon_room.pngbin0 -> 722 bytes
-rw-r--r--tools/editor/icons/2x/icon_rotate_0.pngbin0 -> 934 bytes
-rw-r--r--tools/editor/icons/2x/icon_rotate_180.pngbin0 -> 769 bytes
-rw-r--r--tools/editor/icons/2x/icon_rotate_270.pngbin0 -> 722 bytes
-rw-r--r--tools/editor/icons/2x/icon_rotate_90.pngbin0 -> 861 bytes
-rw-r--r--tools/editor/icons/2x/icon_sample.pngbin0 -> 253 bytes
-rw-r--r--tools/editor/icons/2x/icon_sample_player.pngbin0 -> 401 bytes
-rw-r--r--tools/editor/icons/2x/icon_sample_player_2d.pngbin0 -> 432 bytes
-rw-r--r--tools/editor/icons/2x/icon_save.pngbin0 -> 522 bytes
-rw-r--r--tools/editor/icons/2x/icon_script.pngbin0 -> 521 bytes
-rw-r--r--tools/editor/icons/2x/icon_scroll_bar.pngbin0 -> 380 bytes
-rw-r--r--tools/editor/icons/2x/icon_scroll_container.pngbin0 -> 539 bytes
-rw-r--r--tools/editor/icons/2x/icon_shader.pngbin0 -> 824 bytes
-rw-r--r--tools/editor/icons/2x/icon_shader_material.pngbin0 -> 824 bytes
-rw-r--r--tools/editor/icons/2x/icon_signal.pngbin0 -> 383 bytes
-rw-r--r--tools/editor/icons/2x/icon_skeleton.pngbin0 -> 705 bytes
-rw-r--r--tools/editor/icons/2x/icon_slider_joint.pngbin0 -> 236 bytes
-rw-r--r--tools/editor/icons/2x/icon_slot.pngbin0 -> 398 bytes
-rw-r--r--tools/editor/icons/2x/icon_snap.pngbin0 -> 605 bytes
-rw-r--r--tools/editor/icons/2x/icon_sound_room_params.pngbin0 -> 431 bytes
-rw-r--r--tools/editor/icons/2x/icon_spatial.pngbin0 -> 891 bytes
-rw-r--r--tools/editor/icons/2x/icon_spatial_sample_player.pngbin0 -> 409 bytes
-rw-r--r--tools/editor/icons/2x/icon_spatial_stream_player.pngbin0 -> 318 bytes
-rw-r--r--tools/editor/icons/2x/icon_sphere_shape.pngbin0 -> 768 bytes
-rw-r--r--tools/editor/icons/2x/icon_spin_box.pngbin0 -> 492 bytes
-rw-r--r--tools/editor/icons/2x/icon_spot_light.pngbin0 -> 770 bytes
-rw-r--r--tools/editor/icons/2x/icon_sprite.pngbin0 -> 897 bytes
-rw-r--r--tools/editor/icons/2x/icon_sprite_3d.pngbin0 -> 894 bytes
-rw-r--r--tools/editor/icons/2x/icon_static_body.pngbin0 -> 453 bytes
-rw-r--r--tools/editor/icons/2x/icon_static_body_2d.pngbin0 -> 473 bytes
-rw-r--r--tools/editor/icons/2x/icon_stream_player.pngbin0 -> 319 bytes
-rw-r--r--tools/editor/icons/2x/icon_string.pngbin0 -> 273 bytes
-rw-r--r--tools/editor/icons/2x/icon_tab_container.pngbin0 -> 386 bytes
-rw-r--r--tools/editor/icons/2x/icon_tabs.pngbin0 -> 266 bytes
-rw-r--r--tools/editor/icons/2x/icon_test_cube.pngbin0 -> 668 bytes
-rw-r--r--tools/editor/icons/2x/icon_text_edit.pngbin0 -> 385 bytes
-rw-r--r--tools/editor/icons/2x/icon_texture.pngbin0 -> 318 bytes
-rw-r--r--tools/editor/icons/2x/icon_texture_button.pngbin0 -> 246 bytes
-rw-r--r--tools/editor/icons/2x/icon_texture_frame.pngbin0 -> 257 bytes
-rw-r--r--tools/editor/icons/2x/icon_texture_progress.pngbin0 -> 400 bytes
-rw-r--r--tools/editor/icons/2x/icon_tile_map.pngbin0 -> 195 bytes
-rw-r--r--tools/editor/icons/2x/icon_timer.pngbin0 -> 965 bytes
-rw-r--r--tools/editor/icons/2x/icon_tool_move.pngbin0 -> 409 bytes
-rw-r--r--tools/editor/icons/2x/icon_tool_pan.pngbin0 -> 535 bytes
-rw-r--r--tools/editor/icons/2x/icon_tool_rotate.pngbin0 -> 842 bytes
-rw-r--r--tools/editor/icons/2x/icon_tool_scale.pngbin0 -> 618 bytes
-rw-r--r--tools/editor/icons/2x/icon_tool_select.pngbin0 -> 715 bytes
-rw-r--r--tools/editor/icons/2x/icon_tools.pngbin0 -> 815 bytes
-rw-r--r--tools/editor/icons/2x/icon_touch_screen_button.pngbin0 -> 567 bytes
-rw-r--r--tools/editor/icons/2x/icon_track_add_key.pngbin0 -> 181 bytes
-rw-r--r--tools/editor/icons/2x/icon_track_add_key_hl.pngbin0 -> 182 bytes
-rw-r--r--tools/editor/icons/2x/icon_track_continuous.pngbin0 -> 490 bytes
-rw-r--r--tools/editor/icons/2x/icon_track_discrete.pngbin0 -> 252 bytes
-rw-r--r--tools/editor/icons/2x/icon_translation.pngbin0 -> 341 bytes
-rw-r--r--tools/editor/icons/2x/icon_transpose.pngbin0 -> 266 bytes
-rw-r--r--tools/editor/icons/2x/icon_tree.pngbin0 -> 473 bytes
-rw-r--r--tools/editor/icons/2x/icon_tween.pngbin0 -> 371 bytes
-rw-r--r--tools/editor/icons/2x/icon_unbone.pngbin0 -> 717 bytes
-rw-r--r--tools/editor/icons/2x/icon_ungroup.pngbin0 -> 356 bytes
-rw-r--r--tools/editor/icons/2x/icon_unlock.pngbin0 -> 444 bytes
-rw-r--r--tools/editor/icons/2x/icon_uv.pngbin0 -> 558 bytes
-rw-r--r--tools/editor/icons/2x/icon_v_box_container.pngbin0 -> 383 bytes
-rw-r--r--tools/editor/icons/2x/icon_v_button_array.pngbin0 -> 287 bytes
-rw-r--r--tools/editor/icons/2x/icon_v_scroll_bar.pngbin0 -> 384 bytes
-rw-r--r--tools/editor/icons/2x/icon_v_separator.pngbin0 -> 210 bytes
-rw-r--r--tools/editor/icons/2x/icon_v_slider.pngbin0 -> 447 bytes
-rw-r--r--tools/editor/icons/2x/icon_v_split_container.pngbin0 -> 481 bytes
-rw-r--r--tools/editor/icons/2x/icon_vector.pngbin0 -> 326 bytes
-rw-r--r--tools/editor/icons/2x/icon_vector2.pngbin0 -> 197 bytes
-rw-r--r--tools/editor/icons/2x/icon_vehicle_body.pngbin0 -> 466 bytes
-rw-r--r--tools/editor/icons/2x/icon_vehicle_wheel.pngbin0 -> 1325 bytes
-rw-r--r--tools/editor/icons/2x/icon_video_player.pngbin0 -> 557 bytes
-rw-r--r--tools/editor/icons/2x/icon_viewport.pngbin0 -> 405 bytes
-rw-r--r--tools/editor/icons/2x/icon_viewport_sprite.pngbin0 -> 460 bytes
-rw-r--r--tools/editor/icons/2x/icon_visibility_enabler.pngbin0 -> 1162 bytes
-rw-r--r--tools/editor/icons/2x/icon_visibility_enabler_2d.pngbin0 -> 1170 bytes
-rw-r--r--tools/editor/icons/2x/icon_visibility_notifier.pngbin0 -> 888 bytes
-rw-r--r--tools/editor/icons/2x/icon_visibility_notifier_2d.pngbin0 -> 900 bytes
-rw-r--r--tools/editor/icons/2x/icon_visible.pngbin0 -> 1050 bytes
-rw-r--r--tools/editor/icons/2x/icon_vu_empty.pngbin0 -> 508 bytes
-rw-r--r--tools/editor/icons/2x/icon_vu_full.pngbin0 -> 411 bytes
-rw-r--r--tools/editor/icons/2x/icon_warning.pngbin0 -> 160 bytes
-rw-r--r--tools/editor/icons/2x/icon_window_dialog.pngbin0 -> 367 bytes
-rw-r--r--tools/editor/icons/2x/icon_world_environment.pngbin0 -> 1435 bytes
-rw-r--r--tools/editor/icons/2x/icon_y_sort.pngbin0 -> 349 bytes
-rw-r--r--tools/editor/icons/2x/icon_zoom.pngbin0 -> 818 bytes
-rw-r--r--tools/editor/icons/SCsub5
-rw-r--r--tools/editor/icons/icon_accept_dialog.pngbin419 -> 392 bytes
-rw-r--r--tools/editor/icons/icon_add.pngbin351 -> 185 bytes
-rw-r--r--tools/editor/icons/icon_add_track.pngbin165 -> 185 bytes
-rw-r--r--tools/editor/icons/icon_anchor.pngbin428 -> 497 bytes
-rw-r--r--tools/editor/icons/icon_animated_sprite.pngbin760 -> 640 bytes
-rw-r--r--tools/editor/icons/icon_animated_sprite_3d.pngbin753 -> 608 bytes
-rw-r--r--tools/editor/icons/icon_animation.pngbin595 -> 456 bytes
-rw-r--r--tools/editor/icons/icon_animation_player.pngbin273 -> 209 bytes
-rw-r--r--tools/editor/icons/icon_animation_tree.pngbin518 -> 335 bytes
-rw-r--r--tools/editor/icons/icon_animation_tree_player.pngbin518 -> 335 bytes
-rw-r--r--tools/editor/icons/icon_area.pngbin246 -> 252 bytes
-rw-r--r--tools/editor/icons/icon_area_2d.pngbin240 -> 238 bytes
-rw-r--r--tools/editor/icons/icon_arrow_left.pngbin243 -> 267 bytes
-rw-r--r--tools/editor/icons/icon_arrow_right.pngbin263 -> 271 bytes
-rw-r--r--tools/editor/icons/icon_arrow_up.pngbin259 -> 279 bytes
-rw-r--r--tools/editor/icons/icon_atlas_texture.pngbin402 -> 342 bytes
-rw-r--r--tools/editor/icons/icon_audio_stream_gibberish.pngbin406 -> 306 bytes
-rw-r--r--tools/editor/icons/icon_auto_play.pngbin181 -> 431 bytes
-rw-r--r--tools/editor/icons/icon_back.pngbin180 -> 279 bytes
-rw-r--r--tools/editor/icons/icon_back_buffer_copy.pngbin204 -> 214 bytes
-rw-r--r--tools/editor/icons/icon_bake.pngbin374 -> 236 bytes
-rw-r--r--tools/editor/icons/icon_baked_light.pngbin419 -> 236 bytes
-rw-r--r--tools/editor/icons/icon_baked_light_instance.pngbin380 -> 235 bytes
-rw-r--r--tools/editor/icons/icon_bitmap_font.pngbin362 -> 274 bytes
-rw-r--r--tools/editor/icons/icon_blend.pngbin443 -> 634 bytes
-rw-r--r--tools/editor/icons/icon_bone.pngbin297 -> 405 bytes
-rw-r--r--tools/editor/icons/icon_bone_attachment.pngbin433 -> 389 bytes
-rw-r--r--tools/editor/icons/icon_bone_track.pngbin383 -> 399 bytes
-rw-r--r--tools/editor/icons/icon_bool.pngbin164 -> 210 bytes
-rw-r--r--tools/editor/icons/icon_box_shape.pngbin540 -> 448 bytes
-rw-r--r--tools/editor/icons/icon_button.pngbin516 -> 219 bytes
-rw-r--r--tools/editor/icons/icon_button_group.pngbin0 -> 221 bytes
-rw-r--r--tools/editor/icons/icon_camera.pngbin539 -> 281 bytes
-rw-r--r--tools/editor/icons/icon_camera_2d.pngbin397 -> 285 bytes
-rw-r--r--tools/editor/icons/icon_canvas_item.pngbin434 -> 467 bytes
-rw-r--r--tools/editor/icons/icon_canvas_item_material.pngbin835 -> 406 bytes
-rw-r--r--tools/editor/icons/icon_canvas_item_shader.pngbin568 -> 471 bytes
-rw-r--r--tools/editor/icons/icon_canvas_item_shader_graph.pngbin575 -> 496 bytes
-rw-r--r--tools/editor/icons/icon_canvas_layer.pngbin0 -> 534 bytes
-rw-r--r--tools/editor/icons/icon_canvas_modulate.pngbin441 -> 404 bytes
-rw-r--r--tools/editor/icons/icon_capsule_shape.pngbin794 -> 281 bytes
-rw-r--r--tools/editor/icons/icon_center_container.pngbin259 -> 350 bytes
-rw-r--r--tools/editor/icons/icon_check_box.pngbin344 -> 460 bytes
-rw-r--r--tools/editor/icons/icon_check_button.pngbin420 -> 339 bytes
-rw-r--r--tools/editor/icons/icon_checkerboard.pngbin0 -> 253 bytes
-rw-r--r--tools/editor/icons/icon_class_list.pngbin241 -> 213 bytes
-rw-r--r--tools/editor/icons/icon_close.pngbin398 -> 381 bytes
-rw-r--r--tools/editor/icons/icon_collapse.pngbin351 -> 286 bytes
-rw-r--r--tools/editor/icons/icon_collision_2d.pngbin694 -> 337 bytes
-rw-r--r--tools/editor/icons/icon_collision_polygon.pngbin419 -> 343 bytes
-rw-r--r--tools/editor/icons/icon_collision_polygon_2d.pngbin662 -> 337 bytes
-rw-r--r--tools/editor/icons/icon_collision_shape.pngbin562 -> 334 bytes
-rw-r--r--tools/editor/icons/icon_collision_shape_2d.pngbin316 -> 220 bytes
-rw-r--r--tools/editor/icons/icon_color.pngbin301 -> 646 bytes
-rw-r--r--tools/editor/icons/icon_color_pick.pngbin0 -> 472 bytes
-rw-r--r--tools/editor/icons/icon_color_picker.pngbin329 -> 488 bytes
-rw-r--r--tools/editor/icons/icon_color_picker_button.pngbin441 -> 604 bytes
-rw-r--r--tools/editor/icons/icon_color_ramp.pngbin290 -> 278 bytes
-rw-r--r--tools/editor/icons/icon_concave_polygon_shape.pngbin629 -> 505 bytes
-rw-r--r--tools/editor/icons/icon_confirmation_dialog.pngbin491 -> 386 bytes
-rw-r--r--tools/editor/icons/icon_connect.pngbin592 -> 226 bytes
-rw-r--r--tools/editor/icons/icon_connection_and_groups.pngbin0 -> 284 bytes
-rw-r--r--tools/editor/icons/icon_container.pngbin0 -> 244 bytes
-rw-r--r--tools/editor/icons/icon_control.pngbin308 -> 470 bytes
-rw-r--r--tools/editor/icons/icon_control_align_bottom_center.pngbin174 -> 194 bytes
-rw-r--r--tools/editor/icons/icon_control_align_bottom_left.pngbin172 -> 194 bytes
-rw-r--r--tools/editor/icons/icon_control_align_bottom_right.pngbin174 -> 196 bytes
-rw-r--r--tools/editor/icons/icon_control_align_bottom_wide.pngbin174 -> 198 bytes
-rw-r--r--tools/editor/icons/icon_control_align_center.pngbin181 -> 206 bytes
-rw-r--r--tools/editor/icons/icon_control_align_center_left.pngbin172 -> 172 bytes
-rw-r--r--tools/editor/icons/icon_control_align_center_right.pngbin171 -> 173 bytes
-rw-r--r--tools/editor/icons/icon_control_align_left_center.pngbin183 -> 205 bytes
-rw-r--r--tools/editor/icons/icon_control_align_left_wide.pngbin166 -> 185 bytes
-rw-r--r--tools/editor/icons/icon_control_align_right_center.pngbin181 -> 206 bytes
-rw-r--r--tools/editor/icons/icon_control_align_right_wide.pngbin167 -> 185 bytes
-rw-r--r--tools/editor/icons/icon_control_align_top_center.pngbin181 -> 202 bytes
-rw-r--r--tools/editor/icons/icon_control_align_top_left.pngbin176 -> 196 bytes
-rw-r--r--tools/editor/icons/icon_control_align_top_right.pngbin183 -> 205 bytes
-rw-r--r--tools/editor/icons/icon_control_align_top_wide.pngbin179 -> 198 bytes
-rw-r--r--tools/editor/icons/icon_control_align_wide.pngbin165 -> 184 bytes
-rw-r--r--tools/editor/icons/icon_control_hcenter_wide.pngbin182 -> 204 bytes
-rw-r--r--tools/editor/icons/icon_control_vcenter_wide.pngbin171 -> 190 bytes
-rw-r--r--tools/editor/icons/icon_convex_polygon_shape.pngbin602 -> 460 bytes
-rw-r--r--tools/editor/icons/icon_create_new_scene_from.pngbin588 -> 378 bytes
-rw-r--r--tools/editor/icons/icon_curve_close.pngbin591 -> 407 bytes
-rw-r--r--tools/editor/icons/icon_curve_constant.pngbin222 -> 170 bytes
-rw-r--r--tools/editor/icons/icon_curve_create.pngbin585 -> 431 bytes
-rw-r--r--tools/editor/icons/icon_curve_curve.pngbin561 -> 468 bytes
-rw-r--r--tools/editor/icons/icon_curve_delete.pngbin702 -> 513 bytes
-rw-r--r--tools/editor/icons/icon_curve_edit.pngbin514 -> 544 bytes
-rw-r--r--tools/editor/icons/icon_curve_in.pngbin319 -> 313 bytes
-rw-r--r--tools/editor/icons/icon_curve_in_out.pngbin326 -> 338 bytes
-rw-r--r--tools/editor/icons/icon_curve_linear.pngbin275 -> 275 bytes
-rw-r--r--tools/editor/icons/icon_curve_out.pngbin319 -> 319 bytes
-rw-r--r--tools/editor/icons/icon_curve_out_in.pngbin318 -> 344 bytes
-rw-r--r--tools/editor/icons/icon_damped_spring_joint_2d.pngbin383 -> 372 bytes
-rw-r--r--tools/editor/icons/icon_debug_continue.pngbin325 -> 358 bytes
-rw-r--r--tools/editor/icons/icon_debug_next.pngbin275 -> 276 bytes
-rw-r--r--tools/editor/icons/icon_debug_step.pngbin261 -> 275 bytes
-rw-r--r--tools/editor/icons/icon_dependency_changed.pngbin651 -> 448 bytes
-rw-r--r--tools/editor/icons/icon_dependency_changed_hl.pngbin630 -> 386 bytes
-rw-r--r--tools/editor/icons/icon_dependency_local_changed.pngbin792 -> 627 bytes
-rw-r--r--tools/editor/icons/icon_dependency_local_changed_hl.pngbin769 -> 516 bytes
-rw-r--r--tools/editor/icons/icon_dependency_ok.pngbin685 -> 574 bytes
-rw-r--r--tools/editor/icons/icon_dependency_ok_hl.pngbin674 -> 469 bytes
-rw-r--r--tools/editor/icons/icon_directional_light.pngbin522 -> 482 bytes
-rw-r--r--tools/editor/icons/icon_down.pngbin317 -> 186 bytes
-rw-r--r--tools/editor/icons/icon_duplicate.pngbin327 -> 225 bytes
-rw-r--r--tools/editor/icons/icon_dynamic_font.pngbin414 -> 295 bytes
-rw-r--r--tools/editor/icons/icon_dynamic_font_data.pngbin397 -> 293 bytes
-rw-r--r--tools/editor/icons/icon_edit.pngbin475 -> 402 bytes
-rw-r--r--tools/editor/icons/icon_edit_key.pngbin478 -> 461 bytes
-rw-r--r--tools/editor/icons/icon_edit_pivot.pngbin407 -> 383 bytes
-rw-r--r--tools/editor/icons/icon_edit_resource.pngbin234 -> 288 bytes
-rw-r--r--tools/editor/icons/icon_editor_3d_handle.pngbin778 -> 406 bytes
-rw-r--r--tools/editor/icons/icon_editor_handle.pngbin250 -> 270 bytes
-rw-r--r--tools/editor/icons/icon_editor_pivot.pngbin296 -> 233 bytes
-rw-r--r--tools/editor/icons/icon_editor_plugin.pngbin0 -> 304 bytes
-rw-r--r--tools/editor/icons/icon_enum.pngbin193 -> 179 bytes
-rw-r--r--tools/editor/icons/icon_error.pngbin230 -> 153 bytes
-rw-r--r--tools/editor/icons/icon_error_sign.pngbin1501 -> 311 bytes
-rw-r--r--tools/editor/icons/icon_event_player.pngbin299 -> 198 bytes
-rw-r--r--tools/editor/icons/icon_favorites.pngbin412 -> 441 bytes
-rw-r--r--tools/editor/icons/icon_file.pngbin466 -> 213 bytes
-rw-r--r--tools/editor/icons/icon_file_big.pngbin986 -> 373 bytes
-rw-r--r--tools/editor/icons/icon_file_dialog.pngbin498 -> 276 bytes
-rw-r--r--tools/editor/icons/icon_file_list.pngbin288 -> 179 bytes
-rw-r--r--tools/editor/icons/icon_file_server.pngbin563 -> 201 bytes
-rw-r--r--tools/editor/icons/icon_file_server_active.pngbin632 -> 201 bytes
-rw-r--r--tools/editor/icons/icon_file_thumbnail.pngbin296 -> 172 bytes
-rw-r--r--tools/editor/icons/icon_filesystem.pngbin241 -> 213 bytes
-rw-r--r--tools/editor/icons/icon_fixed_material.pngbin851 -> 433 bytes
-rw-r--r--tools/editor/icons/icon_folder.pngbin428 -> 226 bytes
-rw-r--r--tools/editor/icons/icon_folder_big.pngbin1215 -> 538 bytes
-rw-r--r--tools/editor/icons/icon_font.pngbin248 -> 271 bytes
-rw-r--r--tools/editor/icons/icon_forward.pngbin191 -> 280 bytes
-rw-r--r--tools/editor/icons/icon_g_d_script.pngbin580 -> 448 bytes
-rw-r--r--tools/editor/icons/icon_gizmo_directional_light.pngbin1350 -> 839 bytes
-rw-r--r--tools/editor/icons/icon_gizmo_light.pngbin2719 -> 786 bytes
-rw-r--r--tools/editor/icons/icon_gizmo_listener.pngbin0 -> 1698 bytes
-rw-r--r--tools/editor/icons/icon_gizmo_spatial_sample_player.pngbin907 -> 367 bytes
-rw-r--r--tools/editor/icons/icon_gizmo_spatial_stream_player.pngbin1193 -> 557 bytes
-rw-r--r--tools/editor/icons/icon_godot.pngbin671 -> 751 bytes
-rw-r--r--tools/editor/icons/icon_graph_color_ramp.pngbin290 -> 278 bytes
-rw-r--r--tools/editor/icons/icon_graph_comment.pngbin310 -> 181 bytes
-rw-r--r--tools/editor/icons/icon_graph_cube_uniform.pngbin652 -> 501 bytes
-rw-r--r--tools/editor/icons/icon_graph_curve_map.pngbin619 -> 386 bytes
-rw-r--r--tools/editor/icons/icon_graph_default_texture.pngbin326 -> 252 bytes
-rw-r--r--tools/editor/icons/icon_graph_edit.pngbin0 -> 508 bytes
-rw-r--r--tools/editor/icons/icon_graph_input.pngbin585 -> 324 bytes
-rw-r--r--tools/editor/icons/icon_graph_node.pngbin0 -> 431 bytes
-rw-r--r--tools/editor/icons/icon_graph_rgb.pngbin174 -> 499 bytes
-rw-r--r--tools/editor/icons/icon_graph_rgb_op.pngbin280 -> 221 bytes
-rw-r--r--tools/editor/icons/icon_graph_rgb_uniform.pngbin419 -> 402 bytes
-rw-r--r--tools/editor/icons/icon_graph_scalar.pngbin328 -> 325 bytes
-rw-r--r--tools/editor/icons/icon_graph_scalar_interp.pngbin352 -> 292 bytes
-rw-r--r--tools/editor/icons/icon_graph_scalar_op.pngbin238 -> 322 bytes
-rw-r--r--tools/editor/icons/icon_graph_scalar_uniform.pngbin392 -> 363 bytes
-rw-r--r--tools/editor/icons/icon_graph_scalars_to_vec.pngbin300 -> 228 bytes
-rw-r--r--tools/editor/icons/icon_graph_texscreen.pngbin578 -> 207 bytes
-rw-r--r--tools/editor/icons/icon_graph_texture_uniform.pngbin358 -> 293 bytes
-rw-r--r--tools/editor/icons/icon_graph_time.pngbin678 -> 454 bytes
-rw-r--r--tools/editor/icons/icon_graph_vec_dp.pngbin279 -> 314 bytes
-rw-r--r--tools/editor/icons/icon_graph_vec_interp.pngbin332 -> 285 bytes
-rw-r--r--tools/editor/icons/icon_graph_vec_length.pngbin303 -> 361 bytes
-rw-r--r--tools/editor/icons/icon_graph_vec_op.pngbin256 -> 322 bytes
-rw-r--r--tools/editor/icons/icon_graph_vec_scalar_op.pngbin267 -> 355 bytes
-rw-r--r--tools/editor/icons/icon_graph_vec_to_scalars.pngbin306 -> 237 bytes
-rw-r--r--tools/editor/icons/icon_graph_vecs_to_xform.pngbin288 -> 242 bytes
-rw-r--r--tools/editor/icons/icon_graph_vector.pngbin480 -> 401 bytes
-rw-r--r--tools/editor/icons/icon_graph_vector_uniform.pngbin531 -> 446 bytes
-rw-r--r--tools/editor/icons/icon_graph_xform.pngbin262 -> 297 bytes
-rw-r--r--tools/editor/icons/icon_graph_xform_mult.pngbin311 -> 279 bytes
-rw-r--r--tools/editor/icons/icon_graph_xform_scalar_func.pngbin378 -> 331 bytes
-rw-r--r--tools/editor/icons/icon_graph_xform_to_vecs.pngbin272 -> 249 bytes
-rw-r--r--tools/editor/icons/icon_graph_xform_uniform.pngbin346 -> 366 bytes
-rw-r--r--tools/editor/icons/icon_graph_xform_vec_func.pngbin389 -> 333 bytes
-rw-r--r--tools/editor/icons/icon_graph_xform_vec_imult.pngbin430 -> 383 bytes
-rw-r--r--tools/editor/icons/icon_graph_xform_vec_mult.pngbin422 -> 392 bytes
-rw-r--r--tools/editor/icons/icon_grid.pngbin354 -> 221 bytes
-rw-r--r--tools/editor/icons/icon_grid_container.pngbin458 -> 272 bytes
-rw-r--r--tools/editor/icons/icon_grid_map.pngbin159 -> 178 bytes
-rw-r--r--tools/editor/icons/icon_groove_joint_2d.pngbin353 -> 206 bytes
-rw-r--r--tools/editor/icons/icon_group.pngbin357 -> 462 bytes
-rw-r--r--tools/editor/icons/icon_groups.pngbin507 -> 250 bytes
-rw-r--r--tools/editor/icons/icon_h_box_container.pngbin357 -> 257 bytes
-rw-r--r--tools/editor/icons/icon_h_button_array.pngbin403 -> 219 bytes
-rw-r--r--tools/editor/icons/icon_h_scroll_bar.pngbin348 -> 261 bytes
-rw-r--r--tools/editor/icons/icon_h_separator.pngbin148 -> 187 bytes
-rw-r--r--tools/editor/icons/icon_h_slider.pngbin358 -> 260 bytes
-rw-r--r--tools/editor/icons/icon_h_split_container.pngbin256 -> 315 bytes
-rw-r--r--tools/editor/icons/icon_h_t_t_p_request.pngbin573 -> 210 bytes
-rw-r--r--tools/editor/icons/icon_help.pngbin841 -> 634 bytes
-rw-r--r--tools/editor/icons/icon_hidden.pngbin500 -> 401 bytes
-rw-r--r--tools/editor/icons/icon_history.pngbin572 -> 493 bytes
-rw-r--r--tools/editor/icons/icon_hsize.pngbin182 -> 222 bytes
-rw-r--r--tools/editor/icons/icon_image.pngbin403 -> 319 bytes
-rw-r--r--tools/editor/icons/icon_image_texture.pngbin315 -> 256 bytes
-rw-r--r--tools/editor/icons/icon_immediate_geometry.pngbin363 -> 467 bytes
-rw-r--r--tools/editor/icons/icon_import_check.pngbin382 -> 322 bytes
-rw-r--r--tools/editor/icons/icon_import_fail.pngbin449 -> 401 bytes
-rw-r--r--tools/editor/icons/icon_instance.pngbin522 -> 498 bytes
-rw-r--r--tools/editor/icons/icon_instance_options.pngbin483 -> 421 bytes
-rw-r--r--tools/editor/icons/icon_integer.pngbin162 -> 182 bytes
-rw-r--r--tools/editor/icons/icon_interp_cubic.pngbin340 -> 337 bytes
-rw-r--r--tools/editor/icons/icon_interp_linear.pngbin134 -> 327 bytes
-rw-r--r--tools/editor/icons/icon_interp_raw.pngbin127 -> 212 bytes
-rw-r--r--tools/editor/icons/icon_inverse_kinematics.pngbin0 -> 318 bytes
-rw-r--r--tools/editor/icons/icon_item_list.pngbin341 -> 272 bytes
-rw-r--r--tools/editor/icons/icon_joy_axis.pngbin395 -> 316 bytes
-rw-r--r--tools/editor/icons/icon_joy_button.pngbin443 -> 328 bytes
-rw-r--r--tools/editor/icons/icon_joystick.pngbin666 -> 295 bytes
-rw-r--r--tools/editor/icons/icon_key.pngbin450 -> 341 bytes
-rw-r--r--tools/editor/icons/icon_key_hover.pngbin403 -> 262 bytes
-rw-r--r--tools/editor/icons/icon_key_invalid.pngbin239 -> 261 bytes
-rw-r--r--tools/editor/icons/icon_key_next.pngbin499 -> 358 bytes
-rw-r--r--tools/editor/icons/icon_key_selected.pngbin215 -> 259 bytes
-rw-r--r--tools/editor/icons/icon_key_value.pngbin265 -> 266 bytes
-rw-r--r--tools/editor/icons/icon_key_xform.pngbin265 -> 269 bytes
-rw-r--r--tools/editor/icons/icon_keyboard.pngbin786 -> 355 bytes
-rw-r--r--tools/editor/icons/icon_kinematic_body.pngbin474 -> 201 bytes
-rw-r--r--tools/editor/icons/icon_kinematic_body_2d.pngbin475 -> 203 bytes
-rw-r--r--tools/editor/icons/icon_label.pngbin182 -> 296 bytes
-rw-r--r--tools/editor/icons/icon_light_2d.pngbin342 -> 418 bytes
-rw-r--r--tools/editor/icons/icon_light_occluder_2d.pngbin516 -> 202 bytes
-rw-r--r--tools/editor/icons/icon_line_edit.pngbin284 -> 257 bytes
-rw-r--r--tools/editor/icons/icon_link_button.pngbin376 -> 465 bytes
-rw-r--r--tools/editor/icons/icon_list_select.pngbin470 -> 405 bytes
-rw-r--r--tools/editor/icons/icon_listener.pngbin0 -> 449 bytes
-rw-r--r--tools/editor/icons/icon_load.pngbin428 -> 226 bytes
-rw-r--r--tools/editor/icons/icon_lock.pngbin362 -> 327 bytes
-rw-r--r--tools/editor/icons/icon_loop.pngbin366 -> 468 bytes
-rw-r--r--tools/editor/icons/icon_main_play.pngbin311 -> 290 bytes
-rw-r--r--tools/editor/icons/icon_main_stop.pngbin263 -> 200 bytes
-rw-r--r--tools/editor/icons/icon_margin_container.pngbin294 -> 289 bytes
-rw-r--r--tools/editor/icons/icon_material_preview_cube.pngbin0 -> 430 bytes
-rw-r--r--tools/editor/icons/icon_material_preview_cube_off.pngbin0 -> 457 bytes
-rw-r--r--tools/editor/icons/icon_material_preview_light_1.pngbin0 -> 415 bytes
-rw-r--r--tools/editor/icons/icon_material_preview_light_1_off.pngbin0 -> 361 bytes
-rw-r--r--tools/editor/icons/icon_material_preview_light_2.pngbin0 -> 410 bytes
-rw-r--r--tools/editor/icons/icon_material_preview_light_2_off.pngbin0 -> 499 bytes
-rw-r--r--tools/editor/icons/icon_material_preview_sphere.pngbin0 -> 415 bytes
-rw-r--r--tools/editor/icons/icon_material_preview_sphere_off.pngbin0 -> 339 bytes
-rw-r--r--tools/editor/icons/icon_material_shader.pngbin844 -> 465 bytes
-rw-r--r--tools/editor/icons/icon_material_shader_graph.pngbin949 -> 496 bytes
-rw-r--r--tools/editor/icons/icon_matrix.pngbin382 -> 194 bytes
-rw-r--r--tools/editor/icons/icon_menu_button.pngbin531 -> 269 bytes
-rw-r--r--tools/editor/icons/icon_mesh.pngbin707 -> 399 bytes
-rw-r--r--tools/editor/icons/icon_mesh_instance.pngbin740 -> 370 bytes
-rw-r--r--tools/editor/icons/icon_mirror_x.pngbin187 -> 222 bytes
-rw-r--r--tools/editor/icons/icon_mirror_y.pngbin215 -> 224 bytes
-rw-r--r--tools/editor/icons/icon_mouse.pngbin678 -> 312 bytes
-rw-r--r--tools/editor/icons/icon_move_down.pngbin239 -> 324 bytes
-rw-r--r--tools/editor/icons/icon_move_point.pngbin315 -> 600 bytes
-rw-r--r--tools/editor/icons/icon_move_up.pngbin225 -> 325 bytes
-rw-r--r--tools/editor/icons/icon_multi_edit.pngbin576 -> 414 bytes
-rw-r--r--tools/editor/icons/icon_multi_line.pngbin186 -> 196 bytes
-rw-r--r--tools/editor/icons/icon_multi_mesh.pngbin457 -> 403 bytes
-rw-r--r--tools/editor/icons/icon_multi_mesh_instance.pngbin461 -> 432 bytes
-rw-r--r--tools/editor/icons/icon_multi_node_edit.pngbin576 -> 414 bytes
-rw-r--r--tools/editor/icons/icon_navigation.pngbin598 -> 400 bytes
-rw-r--r--tools/editor/icons/icon_navigation_2d.pngbin541 -> 419 bytes
-rw-r--r--tools/editor/icons/icon_navigation_mesh_instance.pngbin455 -> 536 bytes
-rw-r--r--tools/editor/icons/icon_navigation_polygon_instance.pngbin391 -> 465 bytes
-rw-r--r--tools/editor/icons/icon_new.pngbin298 -> 213 bytes
-rw-r--r--tools/editor/icons/icon_node.pngbin257 -> 459 bytes
-rw-r--r--tools/editor/icons/icon_node_2d.pngbin255 -> 483 bytes
-rw-r--r--tools/editor/icons/icon_node_warning.pngbin701 -> 380 bytes
-rw-r--r--tools/editor/icons/icon_non_favorite.pngbin469 -> 531 bytes
-rw-r--r--tools/editor/icons/icon_object.pngbin781 -> 496 bytes
-rw-r--r--tools/editor/icons/icon_occluder_polygon_2d.pngbin581 -> 330 bytes
-rw-r--r--tools/editor/icons/icon_omni_light.pngbin452 -> 403 bytes
-rw-r--r--tools/editor/icons/icon_option_button.pngbin367 -> 274 bytes
-rw-r--r--tools/editor/icons/icon_p_hash_translation.pngbin234 -> 250 bytes
-rw-r--r--tools/editor/icons/icon_packed_scene.pngbin485 -> 345 bytes
-rw-r--r--tools/editor/icons/icon_panel.pngbin178 -> 231 bytes
-rw-r--r--tools/editor/icons/icon_panel_container.pngbin0 -> 254 bytes
-rw-r--r--tools/editor/icons/icon_panels_1.pngbin154 -> 160 bytes
-rw-r--r--tools/editor/icons/icon_panels_2.pngbin157 -> 164 bytes
-rw-r--r--tools/editor/icons/icon_panels_2_alt.pngbin156 -> 172 bytes
-rw-r--r--tools/editor/icons/icon_panels_3.pngbin166 -> 179 bytes
-rw-r--r--tools/editor/icons/icon_panels_3_alt.pngbin167 -> 186 bytes
-rw-r--r--tools/editor/icons/icon_panels_4.pngbin159 -> 176 bytes
-rw-r--r--tools/editor/icons/icon_parallax_background.pngbin0 -> 274 bytes
-rw-r--r--tools/editor/icons/icon_parallax_layer.pngbin0 -> 338 bytes
-rw-r--r--tools/editor/icons/icon_particle_attractor_2d.pngbin574 -> 685 bytes
-rw-r--r--tools/editor/icons/icon_particles.pngbin464 -> 426 bytes
-rw-r--r--tools/editor/icons/icon_particles_2d.pngbin351 -> 447 bytes
-rw-r--r--tools/editor/icons/icon_patch_9_frame.pngbin431 -> 184 bytes
-rw-r--r--tools/editor/icons/icon_path.pngbin388 -> 409 bytes
-rw-r--r--tools/editor/icons/icon_path_2d.pngbin309 -> 415 bytes
-rw-r--r--tools/editor/icons/icon_path_follow.pngbin417 -> 443 bytes
-rw-r--r--tools/editor/icons/icon_path_follow_2d.pngbin332 -> 448 bytes
-rw-r--r--tools/editor/icons/icon_pause.pngbin228 -> 203 bytes
-rw-r--r--tools/editor/icons/icon_pin.pngbin428 -> 283 bytes
-rw-r--r--tools/editor/icons/icon_pin_joint.pngbin334 -> 474 bytes
-rw-r--r--tools/editor/icons/icon_pin_joint_2d.pngbin427 -> 484 bytes
-rw-r--r--tools/editor/icons/icon_pin_pressed.pngbin346 -> 283 bytes
-rw-r--r--tools/editor/icons/icon_plane.pngbin368 -> 291 bytes
-rw-r--r--tools/editor/icons/icon_plane_shape.pngbin613 -> 285 bytes
-rw-r--r--tools/editor/icons/icon_play.pngbin260 -> 293 bytes
-rw-r--r--tools/editor/icons/icon_play_backwards.pngbin256 -> 301 bytes
-rw-r--r--tools/editor/icons/icon_play_custom.pngbin500 -> 338 bytes
-rw-r--r--tools/editor/icons/icon_play_scene.pngbin600 -> 406 bytes
-rw-r--r--tools/editor/icons/icon_play_start.pngbin282 -> 325 bytes
-rw-r--r--tools/editor/icons/icon_play_start_backwards.pngbin289 -> 335 bytes
-rw-r--r--tools/editor/icons/icon_polygon_2d.pngbin405 -> 337 bytes
-rw-r--r--tools/editor/icons/icon_popup.pngbin405 -> 266 bytes
-rw-r--r--tools/editor/icons/icon_popup_dialog.pngbin427 -> 277 bytes
-rw-r--r--tools/editor/icons/icon_popup_menu.pngbin237 -> 272 bytes
-rw-r--r--tools/editor/icons/icon_popup_panel.pngbin205 -> 254 bytes
-rw-r--r--tools/editor/icons/icon_portal.pngbin409 -> 508 bytes
-rw-r--r--tools/editor/icons/icon_position_2d.pngbin265 -> 188 bytes
-rw-r--r--tools/editor/icons/icon_position_3d.pngbin276 -> 187 bytes
-rw-r--r--tools/editor/icons/icon_progress_1.pngbin842 -> 524 bytes
-rw-r--r--tools/editor/icons/icon_progress_2.pngbin839 -> 511 bytes
-rw-r--r--tools/editor/icons/icon_progress_3.pngbin844 -> 518 bytes
-rw-r--r--tools/editor/icons/icon_progress_4.pngbin832 -> 531 bytes
-rw-r--r--tools/editor/icons/icon_progress_5.pngbin846 -> 510 bytes
-rw-r--r--tools/editor/icons/icon_progress_6.pngbin843 -> 521 bytes
-rw-r--r--tools/editor/icons/icon_progress_7.pngbin838 -> 517 bytes
-rw-r--r--tools/editor/icons/icon_progress_8.pngbin832 -> 519 bytes
-rw-r--r--tools/editor/icons/icon_progress_bar.pngbin422 -> 264 bytes
-rw-r--r--tools/editor/icons/icon_proximity_group.pngbin171 -> 279 bytes
-rw-r--r--tools/editor/icons/icon_quad.pngbin346 -> 307 bytes
-rw-r--r--tools/editor/icons/icon_quat.pngbin239 -> 397 bytes
-rw-r--r--tools/editor/icons/icon_range.pngbin0 -> 207 bytes
-rw-r--r--tools/editor/icons/icon_ray_cast.pngbin214 -> 272 bytes
-rw-r--r--tools/editor/icons/icon_ray_cast_2d.pngbin216 -> 270 bytes
-rw-r--r--tools/editor/icons/icon_ray_shape.pngbin423 -> 419 bytes
-rw-r--r--tools/editor/icons/icon_rayito.pngbin256 -> 356 bytes
-rw-r--r--tools/editor/icons/icon_real.pngbin162 -> 321 bytes
-rw-r--r--tools/editor/icons/icon_reference_frame.pngbin182 -> 184 bytes
-rw-r--r--tools/editor/icons/icon_region_edit.pngbin171 -> 197 bytes
-rw-r--r--tools/editor/icons/icon_reload.pngbin519 -> 476 bytes
-rw-r--r--tools/editor/icons/icon_reload_small.pngbin447 -> 465 bytes
-rw-r--r--tools/editor/icons/icon_remote.pngbin707 -> 450 bytes
-rw-r--r--tools/editor/icons/icon_remote_transform_2d.pngbin640 -> 608 bytes
-rw-r--r--tools/editor/icons/icon_remove.pngbin519 -> 240 bytes
-rw-r--r--tools/editor/icons/icon_rename.pngbin269 -> 216 bytes
-rw-r--r--tools/editor/icons/icon_reparent.pngbin474 -> 376 bytes
-rw-r--r--tools/editor/icons/icon_resource_preloader.pngbin716 -> 447 bytes
-rw-r--r--tools/editor/icons/icon_rich_text_label.pngbin284 -> 292 bytes
-rw-r--r--tools/editor/icons/icon_rigid_body.pngbin719 -> 587 bytes
-rw-r--r--tools/editor/icons/icon_rigid_body_2d.pngbin484 -> 615 bytes
-rw-r--r--tools/editor/icons/icon_room.pngbin337 -> 389 bytes
-rw-r--r--tools/editor/icons/icon_rotate_0.pngbin207 -> 492 bytes
-rw-r--r--tools/editor/icons/icon_rotate_180.pngbin303 -> 432 bytes
-rw-r--r--tools/editor/icons/icon_rotate_270.pngbin343 -> 413 bytes
-rw-r--r--tools/editor/icons/icon_rotate_90.pngbin256 -> 468 bytes
-rw-r--r--tools/editor/icons/icon_sample.pngbin436 -> 208 bytes
-rw-r--r--tools/editor/icons/icon_sample_player.pngbin415 -> 290 bytes
-rw-r--r--tools/editor/icons/icon_sample_player_2d.pngbin447 -> 308 bytes
-rw-r--r--tools/editor/icons/icon_save.pngbin473 -> 308 bytes
-rw-r--r--tools/editor/icons/icon_script.pngbin272 -> 318 bytes
-rw-r--r--tools/editor/icons/icon_scroll_bar.pngbin422 -> 261 bytes
-rw-r--r--tools/editor/icons/icon_scroll_container.pngbin310 -> 360 bytes
-rw-r--r--tools/editor/icons/icon_shader.pngbin820 -> 465 bytes
-rw-r--r--tools/editor/icons/icon_shader_material.pngbin866 -> 465 bytes
-rw-r--r--tools/editor/icons/icon_signal.pngbin458 -> 302 bytes
-rw-r--r--tools/editor/icons/icon_skeleton.pngbin549 -> 402 bytes
-rw-r--r--tools/editor/icons/icon_slider_joint.pngbin283 -> 206 bytes
-rw-r--r--tools/editor/icons/icon_slot.pngbin526 -> 302 bytes
-rw-r--r--tools/editor/icons/icon_snap.pngbin477 -> 378 bytes
-rw-r--r--tools/editor/icons/icon_sound_room_params.pngbin534 -> 304 bytes
-rw-r--r--tools/editor/icons/icon_spatial.pngbin319 -> 475 bytes
-rw-r--r--tools/editor/icons/icon_spatial_sample_player.pngbin642 -> 295 bytes
-rw-r--r--tools/editor/icons/icon_spatial_stream_player.pngbin461 -> 239 bytes
-rw-r--r--tools/editor/icons/icon_sphere_shape.pngbin801 -> 418 bytes
-rw-r--r--tools/editor/icons/icon_spin_box.pngbin427 -> 345 bytes
-rw-r--r--tools/editor/icons/icon_spot_light.pngbin493 -> 415 bytes
-rw-r--r--tools/editor/icons/icon_sprite.pngbin630 -> 475 bytes
-rw-r--r--tools/editor/icons/icon_sprite_3d.pngbin604 -> 464 bytes
-rw-r--r--tools/editor/icons/icon_static_body.pngbin538 -> 285 bytes
-rw-r--r--tools/editor/icons/icon_static_body_2d.pngbin390 -> 293 bytes
-rw-r--r--tools/editor/icons/icon_stream_player.pngbin327 -> 239 bytes
-rw-r--r--tools/editor/icons/icon_string.pngbin136 -> 216 bytes
-rw-r--r--tools/editor/icons/icon_tab_container.pngbin434 -> 271 bytes
-rw-r--r--tools/editor/icons/icon_tabs.pngbin0 -> 203 bytes
-rw-r--r--tools/editor/icons/icon_test_cube.pngbin675 -> 448 bytes
-rw-r--r--tools/editor/icons/icon_text_edit.pngbin346 -> 263 bytes
-rw-r--r--tools/editor/icons/icon_texture.pngbin292 -> 256 bytes
-rw-r--r--tools/editor/icons/icon_texture_button.pngbin434 -> 215 bytes
-rw-r--r--tools/editor/icons/icon_texture_frame.pngbin577 -> 214 bytes
-rw-r--r--tools/editor/icons/icon_texture_progress.pngbin422 -> 269 bytes
-rw-r--r--tools/editor/icons/icon_tile_map.pngbin162 -> 169 bytes
-rw-r--r--tools/editor/icons/icon_timer.pngbin551 -> 503 bytes
-rw-r--r--tools/editor/icons/icon_tool_move.pngbin275 -> 273 bytes
-rw-r--r--tools/editor/icons/icon_tool_pan.pngbin1654 -> 337 bytes
-rw-r--r--tools/editor/icons/icon_tool_rotate.pngbin567 -> 476 bytes
-rw-r--r--tools/editor/icons/icon_tool_scale.pngbin366 -> 405 bytes
-rw-r--r--tools/editor/icons/icon_tool_select.pngbin311 -> 432 bytes
-rw-r--r--tools/editor/icons/icon_tools.pngbin589 -> 448 bytes
-rw-r--r--tools/editor/icons/icon_touch_screen_button.pngbin434 -> 369 bytes
-rw-r--r--tools/editor/icons/icon_track_add_key.pngbin347 -> 169 bytes
-rw-r--r--tools/editor/icons/icon_track_add_key_hl.pngbin331 -> 169 bytes
-rw-r--r--tools/editor/icons/icon_track_continuous.pngbin231 -> 321 bytes
-rw-r--r--tools/editor/icons/icon_track_discrete.pngbin118 -> 181 bytes
-rw-r--r--tools/editor/icons/icon_translation.pngbin241 -> 250 bytes
-rw-r--r--tools/editor/icons/icon_transpose.pngbin244 -> 221 bytes
-rw-r--r--tools/editor/icons/icon_tree.pngbin325 -> 299 bytes
-rw-r--r--tools/editor/icons/icon_tween.pngbin0 -> 304 bytes
-rw-r--r--tools/editor/icons/icon_unbone.pngbin303 -> 439 bytes
-rw-r--r--tools/editor/icons/icon_ungroup.pngbin478 -> 232 bytes
-rw-r--r--tools/editor/icons/icon_unlock.pngbin337 -> 318 bytes
-rw-r--r--tools/editor/icons/icon_up.pngbin327 -> 185 bytes
-rw-r--r--tools/editor/icons/icon_uv.pngbin343 -> 338 bytes
-rw-r--r--tools/editor/icons/icon_v_box_container.pngbin357 -> 263 bytes
-rw-r--r--tools/editor/icons/icon_v_button_array.pngbin315 -> 203 bytes
-rw-r--r--tools/editor/icons/icon_v_scroll_bar.pngbin336 -> 274 bytes
-rw-r--r--tools/editor/icons/icon_v_separator.pngbin147 -> 186 bytes
-rw-r--r--tools/editor/icons/icon_v_slider.pngbin389 -> 287 bytes
-rw-r--r--tools/editor/icons/icon_v_split_container.pngbin240 -> 333 bytes
-rw-r--r--tools/editor/icons/icon_vector.pngbin183 -> 264 bytes
-rw-r--r--tools/editor/icons/icon_vector2.pngbin172 -> 178 bytes
-rw-r--r--tools/editor/icons/icon_vehicle_body.pngbin443 -> 292 bytes
-rw-r--r--tools/editor/icons/icon_vehicle_wheel.pngbin528 -> 593 bytes
-rw-r--r--tools/editor/icons/icon_video_player.pngbin442 -> 358 bytes
-rw-r--r--tools/editor/icons/icon_viewport.pngbin287 -> 254 bytes
-rw-r--r--tools/editor/icons/icon_viewport_sprite.pngbin0 -> 287 bytes
-rw-r--r--tools/editor/icons/icon_visibility_enabler.pngbin630 -> 605 bytes
-rw-r--r--tools/editor/icons/icon_visibility_enabler_2d.pngbin575 -> 606 bytes
-rw-r--r--tools/editor/icons/icon_visibility_notifier.pngbin601 -> 483 bytes
-rw-r--r--tools/editor/icons/icon_visibility_notifier_2d.pngbin542 -> 487 bytes
-rw-r--r--tools/editor/icons/icon_visible.pngbin502 -> 553 bytes
-rw-r--r--tools/editor/icons/icon_vu_empty.pngbin736 -> 343 bytes
-rw-r--r--tools/editor/icons/icon_vu_full.pngbin897 -> 288 bytes
-rw-r--r--tools/editor/icons/icon_warning.pngbin232 -> 153 bytes
-rw-r--r--tools/editor/icons/icon_window_dialog.pngbin295 -> 256 bytes
-rw-r--r--tools/editor/icons/icon_world_environment.pngbin841 -> 604 bytes
-rw-r--r--tools/editor/icons/icon_y_sort.pngbin392 -> 286 bytes
-rw-r--r--tools/editor/icons/icon_zoom.pngbin537 -> 460 bytes
-rw-r--r--tools/editor/icons/source/icon_accept_dialog.svg77
-rw-r--r--tools/editor/icons/source/icon_add_track.svg87
-rw-r--r--tools/editor/icons/source/icon_anchor.svg96
-rw-r--r--tools/editor/icons/source/icon_animated_sprite.svg87
-rw-r--r--tools/editor/icons/source/icon_animated_sprite_3d.svg87
-rw-r--r--tools/editor/icons/source/icon_animation.svg118
-rw-r--r--tools/editor/icons/source/icon_animation_player.svg78
-rw-r--r--tools/editor/icons/source/icon_animation_tree_player.svg77
-rw-r--r--tools/editor/icons/source/icon_area.svg164
-rw-r--r--tools/editor/icons/source/icon_area_2d.svg164
-rw-r--r--tools/editor/icons/source/icon_arrow_left.svg97
-rw-r--r--tools/editor/icons/source/icon_arrow_right.svg77
-rw-r--r--tools/editor/icons/source/icon_arrow_up.svg77
-rw-r--r--tools/editor/icons/source/icon_atlas_texture.svg82
-rw-r--r--tools/editor/icons/source/icon_audio_stream_gibberish.svg83
-rw-r--r--tools/editor/icons/source/icon_auto_play.svg109
-rw-r--r--tools/editor/icons/source/icon_back.svg79
-rw-r--r--tools/editor/icons/source/icon_back_buffer_copy.svg124
-rw-r--r--tools/editor/icons/source/icon_bake.svg92
-rw-r--r--tools/editor/icons/source/icon_baked_light.svg92
-rw-r--r--tools/editor/icons/source/icon_baked_light_instance.svg92
-rw-r--r--tools/editor/icons/source/icon_bitmap_font.svg130
-rw-r--r--tools/editor/icons/source/icon_blend.svg81
-rw-r--r--tools/editor/icons/source/icon_bone.svg78
-rw-r--r--tools/editor/icons/source/icon_bone_attachment.svg78
-rw-r--r--tools/editor/icons/source/icon_bone_track.svg78
-rw-r--r--tools/editor/icons/source/icon_bool.svg77
-rw-r--r--tools/editor/icons/source/icon_box_shape.svg99
-rw-r--r--tools/editor/icons/source/icon_button.svg94
-rw-r--r--tools/editor/icons/source/icon_button_group.svg178
-rw-r--r--tools/editor/icons/source/icon_camera.svg119
-rw-r--r--tools/editor/icons/source/icon_camera_2d.svg119
-rw-r--r--tools/editor/icons/source/icon_canvas_item.svg83
-rw-r--r--tools/editor/icons/source/icon_canvas_item_material.svg150
-rw-r--r--tools/editor/icons/source/icon_canvas_item_shader.svg143
-rw-r--r--tools/editor/icons/source/icon_canvas_item_shader_graph.svg143
-rw-r--r--tools/editor/icons/source/icon_canvas_layer.svg108
-rw-r--r--tools/editor/icons/source/icon_canvas_modulate.svg107
-rw-r--r--tools/editor/icons/source/icon_capsule_shape.svg101
-rw-r--r--tools/editor/icons/source/icon_center_container.svg85
-rw-r--r--tools/editor/icons/source/icon_check_box.svg84
-rw-r--r--tools/editor/icons/source/icon_check_button.svg84
-rw-r--r--tools/editor/icons/source/icon_class_list.svg121
-rw-r--r--tools/editor/icons/source/icon_close.svg93
-rw-r--r--tools/editor/icons/source/icon_collapse.svg77
-rw-r--r--tools/editor/icons/source/icon_collision_2d.svg78
-rw-r--r--tools/editor/icons/source/icon_collision_polygon.svg78
-rw-r--r--tools/editor/icons/source/icon_collision_shape.svg89
-rw-r--r--tools/editor/icons/source/icon_collision_shape_2d.svg77
-rw-r--r--tools/editor/icons/source/icon_color.svg268
-rw-r--r--tools/editor/icons/source/icon_color_pick.svg77
-rw-r--r--tools/editor/icons/source/icon_color_picker.svg77
-rw-r--r--tools/editor/icons/source/icon_color_picker_button.svg92
-rw-r--r--tools/editor/icons/source/icon_color_ramp.svg102
-rw-r--r--tools/editor/icons/source/icon_concave_polygon_shape.svg122
-rw-r--r--tools/editor/icons/source/icon_confirmation_dialog.svg77
-rw-r--r--tools/editor/icons/source/icon_connect.svg119
-rw-r--r--tools/editor/icons/source/icon_connection_and_groups.svg164
-rw-r--r--tools/editor/icons/source/icon_container.svg77
-rw-r--r--tools/editor/icons/source/icon_control.svg78
-rw-r--r--tools/editor/icons/source/icon_control_align_bottom_center.svg94
-rw-r--r--tools/editor/icons/source/icon_control_align_bottom_left.svg94
-rw-r--r--tools/editor/icons/source/icon_control_align_bottom_right.svg94
-rw-r--r--tools/editor/icons/source/icon_control_align_bottom_wide.svg94
-rw-r--r--tools/editor/icons/source/icon_control_align_center.svg94
-rw-r--r--tools/editor/icons/source/icon_control_align_center_left.svg80
-rw-r--r--tools/editor/icons/source/icon_control_align_center_right.svg80
-rw-r--r--tools/editor/icons/source/icon_control_align_left_center.svg94
-rw-r--r--tools/editor/icons/source/icon_control_align_left_wide.svg94
-rw-r--r--tools/editor/icons/source/icon_control_align_right_center.svg94
-rw-r--r--tools/editor/icons/source/icon_control_align_right_wide.svg94
-rw-r--r--tools/editor/icons/source/icon_control_align_top_center.svg94
-rw-r--r--tools/editor/icons/source/icon_control_align_top_left.svg94
-rw-r--r--tools/editor/icons/source/icon_control_align_top_right.svg94
-rw-r--r--tools/editor/icons/source/icon_control_align_top_wide.svg94
-rw-r--r--tools/editor/icons/source/icon_control_align_wide.svg94
-rw-r--r--tools/editor/icons/source/icon_control_hcenter_wide.svg94
-rw-r--r--tools/editor/icons/source/icon_control_vcenter_wide.svg95
-rw-r--r--tools/editor/icons/source/icon_convex_polygon_shape.svg98
-rw-r--r--tools/editor/icons/source/icon_create_new_scene_from.svg84
-rw-r--r--tools/editor/icons/source/icon_curve_close.svg123
-rw-r--r--tools/editor/icons/source/icon_curve_constant.svg81
-rw-r--r--tools/editor/icons/source/icon_curve_create.svg117
-rw-r--r--tools/editor/icons/source/icon_curve_curve.svg107
-rw-r--r--tools/editor/icons/source/icon_curve_delete.svg107
-rw-r--r--tools/editor/icons/source/icon_curve_edit.svg108
-rw-r--r--tools/editor/icons/source/icon_curve_in.svg79
-rw-r--r--tools/editor/icons/source/icon_curve_in_out.svg79
-rw-r--r--tools/editor/icons/source/icon_curve_linear.svg79
-rw-r--r--tools/editor/icons/source/icon_curve_out.svg79
-rw-r--r--tools/editor/icons/source/icon_curve_out_in.svg79
-rw-r--r--tools/editor/icons/source/icon_damped_spring_joint_2d.svg86
-rw-r--r--tools/editor/icons/source/icon_debug_continue.svg109
-rw-r--r--tools/editor/icons/source/icon_debug_next.svg132
-rw-r--r--tools/editor/icons/source/icon_debug_step.svg140
-rw-r--r--tools/editor/icons/source/icon_dependency_changed.svg82
-rw-r--r--tools/editor/icons/source/icon_dependency_changed_hl.svg92
-rw-r--r--tools/editor/icons/source/icon_dependency_local_changed.svg82
-rw-r--r--tools/editor/icons/source/icon_dependency_local_changed_hl.svg77
-rw-r--r--tools/editor/icons/source/icon_dependency_ok.svg82
-rw-r--r--tools/editor/icons/source/icon_dependency_ok_hl.svg77
-rw-r--r--tools/editor/icons/source/icon_directional_light.svg157
-rw-r--r--tools/editor/icons/source/icon_duplicate.svg92
-rw-r--r--tools/editor/icons/source/icon_dynamic_font.svg82
-rw-r--r--tools/editor/icons/source/icon_dynamic_font_data.svg82
-rw-r--r--tools/editor/icons/source/icon_edit.svg78
-rw-r--r--tools/editor/icons/source/icon_edit_key.svg85
-rw-r--r--tools/editor/icons/source/icon_edit_pivot.svg89
-rw-r--r--tools/editor/icons/source/icon_edit_resource.svg81
-rw-r--r--tools/editor/icons/source/icon_editor_3d_handle.svg84
-rw-r--r--tools/editor/icons/source/icon_editor_handle.svg86
-rw-r--r--tools/editor/icons/source/icon_editor_pivot.svg82
-rw-r--r--tools/editor/icons/source/icon_editor_plugin.svg109
-rw-r--r--tools/editor/icons/source/icon_error.svg80
-rw-r--r--tools/editor/icons/source/icon_error_sign.svg92
-rw-r--r--tools/editor/icons/source/icon_event_player.svg96
-rw-r--r--tools/editor/icons/source/icon_favorites.svg82
-rw-r--r--tools/editor/icons/source/icon_file_big.svg87
-rw-r--r--tools/editor/icons/source/icon_file_dialog.svg77
-rw-r--r--tools/editor/icons/source/icon_file_list.svg114
-rw-r--r--tools/editor/icons/source/icon_file_server.svg91
-rw-r--r--tools/editor/icons/source/icon_file_server_active.svg91
-rw-r--r--tools/editor/icons/source/icon_file_thumbnail.svg100
-rw-r--r--tools/editor/icons/source/icon_fixed_material.svg92
-rw-r--r--tools/editor/icons/source/icon_folder.svg114
-rw-r--r--tools/editor/icons/source/icon_folder_big.svg147
-rw-r--r--tools/editor/icons/source/icon_font.svg130
-rw-r--r--tools/editor/icons/source/icon_forward.svg79
-rw-r--r--tools/editor/icons/source/icon_g_d_script.svg77
-rw-r--r--tools/editor/icons/source/icon_gizmo_directional_light.svg173
-rw-r--r--tools/editor/icons/source/icon_gizmo_light.svg90
-rw-r--r--tools/editor/icons/source/icon_gizmo_spatial_sample_player.svg96
-rw-r--r--tools/editor/icons/source/icon_gizmo_spatial_stream_player.svg81
-rw-r--r--tools/editor/icons/source/icon_godot.svg150
-rw-r--r--tools/editor/icons/source/icon_graph_comment.svg100
-rw-r--r--tools/editor/icons/source/icon_graph_cube_uniform.svg77
-rw-r--r--tools/editor/icons/source/icon_graph_curve_map.svg86
-rw-r--r--tools/editor/icons/source/icon_graph_default_texture.svg80
-rw-r--r--tools/editor/icons/source/icon_graph_edit.svg94
-rw-r--r--tools/editor/icons/source/icon_graph_input.svg81
-rw-r--r--tools/editor/icons/source/icon_graph_node.svg89
-rw-r--r--tools/editor/icons/source/icon_graph_rgb.svg118
-rw-r--r--tools/editor/icons/source/icon_graph_rgb_op.svg119
-rw-r--r--tools/editor/icons/source/icon_graph_rgb_uniform.svg119
-rw-r--r--tools/editor/icons/source/icon_graph_scalar.svg78
-rw-r--r--tools/editor/icons/source/icon_graph_scalar_interp.svg78
-rw-r--r--tools/editor/icons/source/icon_graph_scalar_op.svg103
-rw-r--r--tools/editor/icons/source/icon_graph_scalar_uniform.svg78
-rw-r--r--tools/editor/icons/source/icon_graph_scalars_to_vec.svg94
-rw-r--r--tools/editor/icons/source/icon_graph_texscreen.svg86
-rw-r--r--tools/editor/icons/source/icon_graph_texture_uniform.svg80
-rw-r--r--tools/editor/icons/source/icon_graph_time.svg96
-rw-r--r--tools/editor/icons/source/icon_graph_vec_dp.svg94
-rw-r--r--tools/editor/icons/source/icon_graph_vec_interp.svg78
-rw-r--r--tools/editor/icons/source/icon_graph_vec_length.svg96
-rw-r--r--tools/editor/icons/source/icon_graph_vec_op.svg80
-rw-r--r--tools/editor/icons/source/icon_graph_vec_scalar_op.svg85
-rw-r--r--tools/editor/icons/source/icon_graph_vec_to_scalars.svg94
-rw-r--r--tools/editor/icons/source/icon_graph_vecs_to_xform.svg86
-rw-r--r--tools/editor/icons/source/icon_graph_vector.svg82
-rw-r--r--tools/editor/icons/source/icon_graph_vector_uniform.svg90
-rw-r--r--tools/editor/icons/source/icon_graph_xform.svg123
-rw-r--r--tools/editor/icons/source/icon_graph_xform_mult.svg93
-rw-r--r--tools/editor/icons/source/icon_graph_xform_scalar_func.svg112
-rw-r--r--tools/editor/icons/source/icon_graph_xform_to_vecs.svg86
-rw-r--r--tools/editor/icons/source/icon_graph_xform_uniform.svg80
-rw-r--r--tools/editor/icons/source/icon_graph_xform_vec_func.svg112
-rw-r--r--tools/editor/icons/source/icon_graph_xform_vec_imult.svg94
-rw-r--r--tools/editor/icons/source/icon_graph_xform_vec_mult.svg94
-rw-r--r--tools/editor/icons/source/icon_grid.svg134
-rw-r--r--tools/editor/icons/source/icon_grid_container.svg107
-rw-r--r--tools/editor/icons/source/icon_grid_map.svg135
-rw-r--r--tools/editor/icons/source/icon_groove_joint_2d.svg77
-rw-r--r--tools/editor/icons/source/icon_group.svg78
-rw-r--r--tools/editor/icons/source/icon_groups.svg93
-rw-r--r--tools/editor/icons/source/icon_h_box_container.svg93
-rw-r--r--tools/editor/icons/source/icon_h_button_array.svg97
-rw-r--r--tools/editor/icons/source/icon_h_scroll_bar.svg97
-rw-r--r--tools/editor/icons/source/icon_h_separator.svg94
-rw-r--r--tools/editor/icons/source/icon_h_slider.svg99
-rw-r--r--tools/editor/icons/source/icon_h_split_container.svg96
-rw-r--r--tools/editor/icons/source/icon_h_t_t_p_request.svg149
-rw-r--r--tools/editor/icons/source/icon_help.svg110
-rw-r--r--tools/editor/icons/source/icon_hidden.svg109
-rw-r--r--tools/editor/icons/source/icon_history.svg109
-rw-r--r--tools/editor/icons/source/icon_hsize.svg79
-rw-r--r--tools/editor/icons/source/icon_image.svg86
-rw-r--r--tools/editor/icons/source/icon_image_texture.svg137
-rw-r--r--tools/editor/icons/source/icon_immediate_geometry.svg83
-rw-r--r--tools/editor/icons/source/icon_import_check.svg82
-rw-r--r--tools/editor/icons/source/icon_import_fail.svg81
-rw-r--r--tools/editor/icons/source/icon_instance.svg84
-rw-r--r--tools/editor/icons/source/icon_instance_options.svg84
-rw-r--r--tools/editor/icons/source/icon_integer.svg94
-rw-r--r--tools/editor/icons/source/icon_interp_cubic.svg83
-rw-r--r--tools/editor/icons/source/icon_interp_linear.svg83
-rw-r--r--tools/editor/icons/source/icon_interp_raw.svg83
-rw-r--r--tools/editor/icons/source/icon_invalid_key.svg78
-rw-r--r--tools/editor/icons/source/icon_inverse_kinematics.svg123
-rw-r--r--tools/editor/icons/source/icon_item_list.svg142
-rw-r--r--tools/editor/icons/source/icon_joy_axis.svg94
-rw-r--r--tools/editor/icons/source/icon_joy_button.svg88
-rw-r--r--tools/editor/icons/source/icon_joystick.svg81
-rw-r--r--tools/editor/icons/source/icon_key.svg91
-rw-r--r--tools/editor/icons/source/icon_key_hover.svg77
-rw-r--r--tools/editor/icons/source/icon_key_invalid.svg78
-rw-r--r--tools/editor/icons/source/icon_key_next.svg91
-rw-r--r--tools/editor/icons/source/icon_key_selected.svg77
-rw-r--r--tools/editor/icons/source/icon_key_value.svg77
-rw-r--r--tools/editor/icons/source/icon_key_xform.svg77
-rw-r--r--tools/editor/icons/source/icon_keyboard.svg93
-rw-r--r--tools/editor/icons/source/icon_kinematic_body.svg77
-rw-r--r--tools/editor/icons/source/icon_kinematic_body_2d.svg77
-rw-r--r--tools/editor/icons/source/icon_label.svg81
-rw-r--r--tools/editor/icons/source/icon_light_2d.svg78
-rw-r--r--tools/editor/icons/source/icon_light_occluder_2d.svg122
-rw-r--r--tools/editor/icons/source/icon_line_edit.svg90
-rw-r--r--tools/editor/icons/source/icon_link_button.svg86
-rw-r--r--tools/editor/icons/source/icon_list_select.svg88
-rw-r--r--tools/editor/icons/source/icon_lock.svg102
-rw-r--r--tools/editor/icons/source/icon_loop.svg81
-rw-r--r--tools/editor/icons/source/icon_main_play.svg81
-rw-r--r--tools/editor/icons/source/icon_main_stop.svg81
-rw-r--r--tools/editor/icons/source/icon_margin_container.svg85
-rw-r--r--tools/editor/icons/source/icon_material_preview_cube.svg99
-rw-r--r--tools/editor/icons/source/icon_material_preview_cube_off.svg104
-rw-r--r--tools/editor/icons/source/icon_material_preview_light_1.svg82
-rw-r--r--tools/editor/icons/source/icon_material_preview_light_1_off.svg82
-rw-r--r--tools/editor/icons/source/icon_material_preview_light_2.svg82
-rw-r--r--tools/editor/icons/source/icon_material_preview_light_2_off.svg87
-rw-r--r--tools/editor/icons/source/icon_material_preview_sphere.svg82
-rw-r--r--tools/editor/icons/source/icon_material_preview_sphere_off.svg82
-rw-r--r--tools/editor/icons/source/icon_matrix.svg180
-rw-r--r--tools/editor/icons/source/icon_menu_button.svg83
-rw-r--r--tools/editor/icons/source/icon_mesh.svg78
-rw-r--r--tools/editor/icons/source/icon_mesh_instance.svg132
-rw-r--r--tools/editor/icons/source/icon_mirror_x.svg79
-rw-r--r--tools/editor/icons/source/icon_mirror_y.svg78
-rw-r--r--tools/editor/icons/source/icon_mouse.svg77
-rw-r--r--tools/editor/icons/source/icon_move_down.svg80
-rw-r--r--tools/editor/icons/source/icon_move_point.svg94
-rw-r--r--tools/editor/icons/source/icon_move_up.svg80
-rw-r--r--tools/editor/icons/source/icon_multi_edit.svg99
-rw-r--r--tools/editor/icons/source/icon_multi_line.svg115
-rw-r--r--tools/editor/icons/source/icon_multi_mesh.svg78
-rw-r--r--tools/editor/icons/source/icon_multi_mesh_instance.svg83
-rw-r--r--tools/editor/icons/source/icon_navigation.svg78
-rw-r--r--tools/editor/icons/source/icon_navigation_2d.svg78
-rw-r--r--tools/editor/icons/source/icon_navigation_mesh_instance.svg97
-rw-r--r--tools/editor/icons/source/icon_navigation_polygon_instance.svg82
-rw-r--r--tools/editor/icons/source/icon_new.svg86
-rw-r--r--tools/editor/icons/source/icon_node.svg78
-rw-r--r--tools/editor/icons/source/icon_node_2d.svg78
-rw-r--r--tools/editor/icons/source/icon_node_warning.svg86
-rw-r--r--tools/editor/icons/source/icon_non_favorite.svg82
-rw-r--r--tools/editor/icons/source/icon_object.svg100
-rw-r--r--tools/editor/icons/source/icon_occluder_polygon_2d.svg87
-rw-r--r--tools/editor/icons/source/icon_omni_light.svg78
-rw-r--r--tools/editor/icons/source/icon_option_button.svg90
-rw-r--r--tools/editor/icons/source/icon_packed_scene.svg96
-rw-r--r--tools/editor/icons/source/icon_panel.svg79
-rw-r--r--tools/editor/icons/source/icon_panel_container.svg79
-rw-r--r--tools/editor/icons/source/icon_panels_1.svg80
-rw-r--r--tools/editor/icons/source/icon_panels_2.svg87
-rw-r--r--tools/editor/icons/source/icon_panels_2_alt.svg87
-rw-r--r--tools/editor/icons/source/icon_panels_3.svg94
-rw-r--r--tools/editor/icons/source/icon_panels_3_alt.svg94
-rw-r--r--tools/editor/icons/source/icon_panels_4.svg101
-rw-r--r--tools/editor/icons/source/icon_parallax_background.svg167
-rw-r--r--tools/editor/icons/source/icon_parallax_layer.svg99
-rw-r--r--tools/editor/icons/source/icon_particle_attractor_2d.svg103
-rw-r--r--tools/editor/icons/source/icon_particles.svg120
-rw-r--r--tools/editor/icons/source/icon_particles_2d.svg120
-rw-r--r--tools/editor/icons/source/icon_patch_9_frame.svg130
-rw-r--r--tools/editor/icons/source/icon_path.svg91
-rw-r--r--tools/editor/icons/source/icon_path_2d.svg90
-rw-r--r--tools/editor/icons/source/icon_path_follow.svg89
-rw-r--r--tools/editor/icons/source/icon_path_follow_2d.svg89
-rw-r--r--tools/editor/icons/source/icon_pause.svg104
-rw-r--r--tools/editor/icons/source/icon_pin.svg99
-rw-r--r--tools/editor/icons/source/icon_pin_joint.svg100
-rw-r--r--tools/editor/icons/source/icon_pin_joint_2d.svg100
-rw-r--r--tools/editor/icons/source/icon_pin_pressed.svg99
-rw-r--r--tools/editor/icons/source/icon_plane.svg82
-rw-r--r--tools/editor/icons/source/icon_plane_shape.svg82
-rw-r--r--tools/editor/icons/source/icon_play.svg81
-rw-r--r--tools/editor/icons/source/icon_play_backwards.svg81
-rw-r--r--tools/editor/icons/source/icon_play_custom.svg87
-rw-r--r--tools/editor/icons/source/icon_play_scene.svg99
-rw-r--r--tools/editor/icons/source/icon_play_start.svg101
-rw-r--r--tools/editor/icons/source/icon_play_start_backwards.svg99
-rw-r--r--tools/editor/icons/source/icon_popup.svg77
-rw-r--r--tools/editor/icons/source/icon_popup_dialog.svg77
-rw-r--r--tools/editor/icons/source/icon_popup_menu.svg83
-rw-r--r--tools/editor/icons/source/icon_popup_panel.svg85
-rw-r--r--tools/editor/icons/source/icon_portal.svg78
-rw-r--r--tools/editor/icons/source/icon_position_2d.svg101
-rw-r--r--tools/editor/icons/source/icon_position_3d.svg78
-rw-r--r--tools/editor/icons/source/icon_progress_1.svg104
-rw-r--r--tools/editor/icons/source/icon_progress_2.svg104
-rw-r--r--tools/editor/icons/source/icon_progress_3.svg104
-rw-r--r--tools/editor/icons/source/icon_progress_4.svg104
-rw-r--r--tools/editor/icons/source/icon_progress_5.svg104
-rw-r--r--tools/editor/icons/source/icon_progress_6.svg104
-rw-r--r--tools/editor/icons/source/icon_progress_7.svg104
-rw-r--r--tools/editor/icons/source/icon_progress_8.svg104
-rw-r--r--tools/editor/icons/source/icon_progress_bar.svg104
-rw-r--r--tools/editor/icons/source/icon_proximity_group.svg121
-rw-r--r--tools/editor/icons/source/icon_quad.svg78
-rw-r--r--tools/editor/icons/source/icon_quat.svg82
-rw-r--r--tools/editor/icons/source/icon_range.svg107
-rw-r--r--tools/editor/icons/source/icon_ray_cast.svg85
-rw-r--r--tools/editor/icons/source/icon_ray_cast_2d.svg85
-rw-r--r--tools/editor/icons/source/icon_ray_shape.svg107
-rw-r--r--tools/editor/icons/source/icon_rayito.svg90
-rw-r--r--tools/editor/icons/source/icon_real.svg120
-rw-r--r--tools/editor/icons/source/icon_reference_frame.svg100
-rw-r--r--tools/editor/icons/source/icon_region_edit.svg135
-rw-r--r--tools/editor/icons/source/icon_reload_small.svg95
-rw-r--r--tools/editor/icons/source/icon_remote.svg93
-rw-r--r--tools/editor/icons/source/icon_remote_transform_2d.svg124
-rw-r--r--tools/editor/icons/source/icon_remove.svg91
-rw-r--r--tools/editor/icons/source/icon_rename.svg77
-rw-r--r--tools/editor/icons/source/icon_reparent.svg112
-rw-r--r--tools/editor/icons/source/icon_resource_preloader.svg89
-rw-r--r--tools/editor/icons/source/icon_rich_text_label.svg120
-rw-r--r--tools/editor/icons/source/icon_rigid_body.svg87
-rw-r--r--tools/editor/icons/source/icon_rigid_body_2d.svg124
-rw-r--r--tools/editor/icons/source/icon_room.svg95
-rw-r--r--tools/editor/icons/source/icon_rotate_0.svg84
-rw-r--r--tools/editor/icons/source/icon_rotate_180.svg106
-rw-r--r--tools/editor/icons/source/icon_rotate_270.svg113
-rw-r--r--tools/editor/icons/source/icon_rotate_90.svg99
-rw-r--r--tools/editor/icons/source/icon_sample.svg128
-rw-r--r--tools/editor/icons/source/icon_sample_player.svg78
-rw-r--r--tools/editor/icons/source/icon_sample_player_2d.svg78
-rw-r--r--tools/editor/icons/source/icon_save.svg94
-rw-r--r--tools/editor/icons/source/icon_script.svg90
-rw-r--r--tools/editor/icons/source/icon_scroll_bar.svg97
-rw-r--r--tools/editor/icons/source/icon_scroll_container.svg103
-rw-r--r--tools/editor/icons/source/icon_shader.svg275
-rw-r--r--tools/editor/icons/source/icon_signal.svg118
-rw-r--r--tools/editor/icons/source/icon_skeleton.svg105
-rw-r--r--tools/editor/icons/source/icon_slider_joint.svg77
-rw-r--r--tools/editor/icons/source/icon_slot.svg102
-rw-r--r--tools/editor/icons/source/icon_snap.svg105
-rw-r--r--tools/editor/icons/source/icon_sound_room_params.svg100
-rw-r--r--tools/editor/icons/source/icon_spatial.svg78
-rw-r--r--tools/editor/icons/source/icon_spatial_sample_player.svg78
-rw-r--r--tools/editor/icons/source/icon_spatial_stream_player.svg83
-rw-r--r--tools/editor/icons/source/icon_sphere_shape.svg89
-rw-r--r--tools/editor/icons/source/icon_spin_box.svg100
-rw-r--r--tools/editor/icons/source/icon_spot_light.svg118
-rw-r--r--tools/editor/icons/source/icon_sprite.svg77
-rw-r--r--tools/editor/icons/source/icon_sprite_3d.svg77
-rw-r--r--tools/editor/icons/source/icon_static_body.svg138
-rw-r--r--tools/editor/icons/source/icon_static_body_2d.svg122
-rw-r--r--tools/editor/icons/source/icon_stream_player.svg83
-rw-r--r--tools/editor/icons/source/icon_string.svg77
-rw-r--r--tools/editor/icons/source/icon_tab_container.svg96
-rw-r--r--tools/editor/icons/source/icon_tabs.svg155
-rw-r--r--tools/editor/icons/source/icon_test_cube.svg94
-rw-r--r--tools/editor/icons/source/icon_text_edit.svg102
-rw-r--r--tools/editor/icons/source/icon_texture.svg137
-rw-r--r--tools/editor/icons/source/icon_texture_button.svg94
-rw-r--r--tools/editor/icons/source/icon_texture_frame.svg105
-rw-r--r--tools/editor/icons/source/icon_texture_progress.svg104
-rw-r--r--tools/editor/icons/source/icon_tile_map.svg250
-rw-r--r--tools/editor/icons/source/icon_timer.svg108
-rw-r--r--tools/editor/icons/source/icon_tool_move.svg77
-rw-r--r--tools/editor/icons/source/icon_tool_pan.svg136
-rw-r--r--tools/editor/icons/source/icon_tool_rotate.svg95
-rw-r--r--tools/editor/icons/source/icon_tool_scale.svg77
-rw-r--r--tools/editor/icons/source/icon_tool_select.svg88
-rw-r--r--tools/editor/icons/source/icon_tools.svg77
-rw-r--r--tools/editor/icons/source/icon_touch_screen_button.svg174
-rw-r--r--tools/editor/icons/source/icon_track_add_key.svg77
-rw-r--r--tools/editor/icons/source/icon_track_add_key_hl.svg77
-rw-r--r--tools/editor/icons/source/icon_track_continuous.svg83
-rw-r--r--tools/editor/icons/source/icon_track_discrete.svg95
-rw-r--r--tools/editor/icons/source/icon_translation.svg78
-rw-r--r--tools/editor/icons/source/icon_transpose.svg127
-rw-r--r--tools/editor/icons/source/icon_tree.svg129
-rw-r--r--tools/editor/icons/source/icon_tween.svg98
-rw-r--r--tools/editor/icons/source/icon_unbone.svg78
-rw-r--r--tools/editor/icons/source/icon_ungroup.svg78
-rw-r--r--tools/editor/icons/source/icon_unlock.svg97
-rw-r--r--tools/editor/icons/source/icon_uv.svg80
-rw-r--r--tools/editor/icons/source/icon_v_box_container.svg77
-rw-r--r--tools/editor/icons/source/icon_v_button_array.svg100
-rw-r--r--tools/editor/icons/source/icon_v_scroll_bar.svg98
-rw-r--r--tools/editor/icons/source/icon_v_separator.svg77
-rw-r--r--tools/editor/icons/source/icon_v_slider.svg87
-rw-r--r--tools/editor/icons/source/icon_v_split_container.svg97
-rw-r--r--tools/editor/icons/source/icon_vector.svg87
-rw-r--r--tools/editor/icons/source/icon_vector2.svg81
-rw-r--r--tools/editor/icons/source/icon_vehicle_body.svg90
-rw-r--r--tools/editor/icons/source/icon_vehicle_wheel.svg83
-rw-r--r--tools/editor/icons/source/icon_video_player.svg100
-rw-r--r--tools/editor/icons/source/icon_viewport.svg96
-rw-r--r--tools/editor/icons/source/icon_viewport_sprite.svg117
-rw-r--r--tools/editor/icons/source/icon_visibility_enabler.svg99
-rw-r--r--tools/editor/icons/source/icon_visibility_enabler_2d.svg99
-rw-r--r--tools/editor/icons/source/icon_visibility_notifier.svg96
-rw-r--r--tools/editor/icons/source/icon_visibility_notifier_2d.svg96
-rw-r--r--tools/editor/icons/source/icon_visible.svg87
-rw-r--r--tools/editor/icons/source/icon_vu_empty.svg115
-rw-r--r--tools/editor/icons/source/icon_vu_full.svg110
-rw-r--r--tools/editor/icons/source/icon_warning.svg80
-rw-r--r--tools/editor/icons/source/icon_window_dialog.svg77
-rw-r--r--tools/editor/icons/source/icon_world_environment.svg108
-rw-r--r--tools/editor/icons/source/icon_y_sort.svg99
-rw-r--r--tools/editor/icons/source/icon_zoom.svg87
-rw-r--r--tools/editor/icons/svgs_2_pngs.py76
-rw-r--r--tools/editor/import_settings.cpp4
-rw-r--r--tools/editor/io_plugins/editor_bitmask_import_plugin.cpp357
-rw-r--r--tools/editor/io_plugins/editor_bitmask_import_plugin.h41
-rw-r--r--tools/editor/io_plugins/editor_font_import_plugin.cpp47
-rw-r--r--tools/editor/io_plugins/editor_font_import_plugin.h1
-rw-r--r--tools/editor/io_plugins/editor_mesh_import_plugin.cpp47
-rw-r--r--tools/editor/io_plugins/editor_mesh_import_plugin.h1
-rw-r--r--tools/editor/io_plugins/editor_sample_import_plugin.cpp63
-rw-r--r--tools/editor/io_plugins/editor_sample_import_plugin.h3
-rw-r--r--tools/editor/io_plugins/editor_scene_import_plugin.cpp637
-rw-r--r--tools/editor/io_plugins/editor_scene_import_plugin.h18
-rw-r--r--tools/editor/io_plugins/editor_scene_importer_fbxconv.cpp30
-rw-r--r--tools/editor/io_plugins/editor_texture_import_plugin.cpp436
-rw-r--r--tools/editor/io_plugins/editor_texture_import_plugin.h14
-rw-r--r--tools/editor/io_plugins/editor_translation_import_plugin.cpp38
-rw-r--r--tools/editor/io_plugins/editor_translation_import_plugin.h1
-rw-r--r--tools/editor/multi_node_edit.cpp2
-rw-r--r--tools/editor/node_dock.cpp104
-rw-r--r--tools/editor/node_dock.h38
-rw-r--r--tools/editor/plugins/animation_player_editor_plugin.cpp26
-rw-r--r--tools/editor/plugins/animation_player_editor_plugin.h2
-rw-r--r--tools/editor/plugins/animation_tree_editor_plugin.cpp8
-rw-r--r--tools/editor/plugins/animation_tree_editor_plugin.h2
-rw-r--r--tools/editor/plugins/baked_light_baker.cpp4
-rw-r--r--tools/editor/plugins/canvas_item_editor_plugin.cpp30
-rw-r--r--tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp6
-rw-r--r--tools/editor/plugins/collision_polygon_editor_plugin.cpp4
-rw-r--r--tools/editor/plugins/color_ramp_editor_plugin.cpp15
-rw-r--r--tools/editor/plugins/color_ramp_editor_plugin.h2
-rw-r--r--tools/editor/plugins/control_editor_plugin.cpp12
-rw-r--r--tools/editor/plugins/control_editor_plugin.h2
-rw-r--r--tools/editor/plugins/cube_grid_theme_editor_plugin.cpp2
-rw-r--r--tools/editor/plugins/editor_preview_plugins.cpp9
-rw-r--r--tools/editor/plugins/item_list_editor_plugin.cpp4
-rw-r--r--tools/editor/plugins/light_occluder_2d_editor_plugin.cpp8
-rw-r--r--tools/editor/plugins/material_editor_plugin.cpp381
-rw-r--r--tools/editor/plugins/material_editor_plugin.h71
-rw-r--r--tools/editor/plugins/mesh_editor_plugin.cpp349
-rw-r--r--tools/editor/plugins/mesh_editor_plugin.h60
-rw-r--r--tools/editor/plugins/mesh_instance_editor_plugin.cpp300
-rw-r--r--tools/editor/plugins/mesh_instance_editor_plugin.h69
-rw-r--r--tools/editor/plugins/multimesh_editor_plugin.cpp20
-rw-r--r--tools/editor/plugins/navigation_polygon_editor_plugin.cpp8
-rw-r--r--tools/editor/plugins/particles_2d_editor_plugin.cpp2
-rw-r--r--tools/editor/plugins/particles_editor_plugin.cpp2
-rw-r--r--tools/editor/plugins/path_2d_editor_plugin.cpp10
-rw-r--r--tools/editor/plugins/path_editor_plugin.cpp6
-rw-r--r--tools/editor/plugins/polygon_2d_editor_plugin.cpp6
-rw-r--r--tools/editor/plugins/resource_preloader_editor_plugin.cpp12
-rw-r--r--tools/editor/plugins/rich_text_editor_plugin.cpp4
-rw-r--r--tools/editor/plugins/rich_text_editor_plugin.h2
-rw-r--r--tools/editor/plugins/sample_editor_plugin.cpp9
-rw-r--r--tools/editor/plugins/sample_library_editor_plugin.cpp8
-rw-r--r--tools/editor/plugins/script_editor_plugin.cpp211
-rw-r--r--tools/editor/plugins/script_editor_plugin.h20
-rw-r--r--tools/editor/plugins/shader_editor_plugin.cpp23
-rw-r--r--tools/editor/plugins/shader_editor_plugin.h2
-rw-r--r--tools/editor/plugins/shader_graph_editor_plugin.cpp243
-rw-r--r--tools/editor/plugins/shader_graph_editor_plugin.h8
-rw-r--r--tools/editor/plugins/spatial_editor_plugin.cpp40
-rw-r--r--tools/editor/plugins/sprite_frames_editor_plugin.cpp16
-rw-r--r--tools/editor/plugins/sprite_region_editor_plugin.cpp608
-rw-r--r--tools/editor/plugins/sprite_region_editor_plugin.h133
-rw-r--r--tools/editor/plugins/stream_editor_plugin.h2
-rw-r--r--tools/editor/plugins/texture_editor_plugin.cpp141
-rw-r--r--tools/editor/plugins/texture_editor_plugin.h49
-rw-r--r--tools/editor/plugins/texture_region_editor_plugin.cpp728
-rw-r--r--tools/editor/plugins/texture_region_editor_plugin.h146
-rw-r--r--tools/editor/plugins/theme_editor_plugin.cpp16
-rw-r--r--tools/editor/plugins/tile_map_editor_plugin.cpp30
-rw-r--r--tools/editor/plugins/tile_map_editor_plugin.h4
-rw-r--r--tools/editor/plugins/tile_set_editor_plugin.cpp2
-rw-r--r--tools/editor/progress_dialog.cpp6
-rw-r--r--tools/editor/project_export.cpp52
-rw-r--r--tools/editor/project_manager.cpp39
-rw-r--r--tools/editor/project_settings.cpp170
-rw-r--r--tools/editor/project_settings.h2
-rw-r--r--tools/editor/property_editor.cpp105
-rw-r--r--tools/editor/property_editor.h2
-rw-r--r--tools/editor/pvrtc_compress.cpp6
-rw-r--r--tools/editor/register_exporters.h2
-rw-r--r--tools/editor/reparent_dialog.cpp4
-rw-r--r--tools/editor/run_settings_dialog.cpp2
-rw-r--r--tools/editor/scene_tree_dock.cpp85
-rw-r--r--tools/editor/scene_tree_dock.h6
-rw-r--r--tools/editor/scene_tree_editor.cpp41
-rw-r--r--tools/editor/scene_tree_editor.h4
-rw-r--r--tools/editor/scenes_dock.cpp454
-rw-r--r--tools/editor/scenes_dock.h14
-rw-r--r--tools/editor/script_create_dialog.cpp26
-rw-r--r--tools/editor/script_editor_debugger.cpp953
-rw-r--r--tools/editor/script_editor_debugger.h40
-rw-r--r--tools/editor/settings_config_dialog.cpp208
-rw-r--r--tools/editor/settings_config_dialog.h13
-rw-r--r--tools/editor/spatial_editor_gizmos.cpp75
-rw-r--r--tools/editor/spatial_editor_gizmos.h16
-rw-r--r--tools/editor_fonts/DroidSans.ttfbin0 -> 190044 bytes
-rw-r--r--tools/editor_fonts/DroidSansArabic.ttfbin0 -> 35908 bytes
-rw-r--r--tools/editor_fonts/DroidSansFallback.ttfbin0 -> 3640264 bytes
-rw-r--r--tools/editor_fonts/DroidSansHebrew.ttfbin0 -> 23076 bytes
-rw-r--r--tools/editor_fonts/DroidSansJapanese.ttfbin0 -> 1173140 bytes
-rw-r--r--tools/editor_fonts/DroidSansThai.ttfbin0 -> 36028 bytes
-rw-r--r--tools/editor_fonts/source_code_pro.otfbin0 -> 140088 bytes
-rw-r--r--tools/freetype/SCsub69
-rw-r--r--tools/osx_template.app/Contents/Resources/icon.icnsbin260598 -> 120942 bytes
-rw-r--r--tools/translations/Makefile20
-rw-r--r--tools/translations/de.po5878
-rwxr-xr-xtools/translations/extract.py107
-rw-r--r--tools/translations/fr.po6011
-rw-r--r--tools/translations/it.po6033
-rw-r--r--tools/translations/ko.po5909
-rw-r--r--tools/translations/pt_BR.po5987
-rw-r--r--tools/translations/ru.po5966
-rw-r--r--tools/translations/tools.pot5924
-rw-r--r--tools/translations/zh_CN.po5883
-rw-r--r--tools/translations/zh_HK.po5833
2869 files changed, 110964 insertions, 23836 deletions
diff --git a/.gitattributes b/.gitattributes
index f1e99ee8ca..36620d50f5 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,3 +1,7 @@
+# Properly detect languages on Github
+*.h linguist-language=cpp
+drivers/* linguist-vendored
+
*.cpp eol=lf
*.h eol=lf
*.py eol=lf
diff --git a/.gitignore b/.gitignore
index 65af0c69ee..e1941b18df 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,7 +19,8 @@ tools/editor/register_exporters.cpp
tools/editor/doc_data_compressed.h
tools/editor/certs_compressed.h
tools/editor/editor_icons.cpp
--fpic
+tools/editor/translations.h
+tools/editor/builtin_fonts.h
.fscache
make.bat
log.txt
@@ -31,6 +32,7 @@ doc/_build/
*.bc
# Android specific
+platform/android/java/build.gradle
platform/android/java/.gradle
platform/android/java/.gradletasknamecache
platform/android/java/local.properties
@@ -147,6 +149,8 @@ ipch/
*.opensdf
*.sdf
*.cachefile
+*.VC.db
+*.VC.VC.opendb
# Visual Studio profiler
*.psess
diff --git a/README.md b/README.md
index 2586a5ea0d..504a6a32a9 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
![GODOT](/logo.png)
-http://www.godotengine.org
+https://godotengine.org
### The Engine
@@ -13,17 +13,18 @@ Godot has been developed by Juan Linietsky and Ariel Manzur for several years, a
### Documentation
-Documentation has been moved to [ReadTheDocs](http://docs.godotengine.org).
+Documentation is hosted on [ReadTheDocs](http://docs.godotengine.org).
### Binary Downloads, Community, etc.
Binary downloads, community, etc. can be found in Godot homepage:
-http://www.godotengine.org
+https://godotengine.org
### Compiling from Source
-Compilation instructions for every platform can be found in the Wiki:
+See docs for compilation instructions for every platform:
http://docs.godotengine.org/en/latest/reference/_compiling.html
[![Build Status](https://travis-ci.org/godotengine/godot.svg?branch=master)](https://travis-ci.org/godotengine/godot)
+[![Code Triagers Badge](http://www.codetriage.com/godotengine/godot/badges/users.svg)](http://www.codetriage.com/godotengine/godot)
diff --git a/SConstruct b/SConstruct
index 3ea40489be..0f9b046e2b 100644
--- a/SConstruct
+++ b/SConstruct
@@ -63,14 +63,9 @@ elif (os.name=="nt"):
if (os.getenv("VSINSTALLDIR")==None or platform_arg=="android"):
custom_tools=['mingw']
-env_base=Environment(
- tools=custom_tools,
- ENV={
- 'PATH' : os.getenv('PATH'),
- 'PKG_CONFIG_PATH' : os.getenv('PKG_CONFIG_PATH')
-});
-
-#env_base=Environment(tools=custom_tools);
+env_base=Environment(tools=custom_tools);
+env_base.AppendENVPath('PATH', os.getenv('PATH'))
+env_base.AppendENVPath('PKG_CONFIG_PATH', os.getenv('PKG_CONFIG_PATH'))
env_base.global_defaults=global_defaults
env_base.android_maven_repos=[]
env_base.android_dependencies=[]
@@ -117,7 +112,7 @@ if profile:
opts=Variables(customs, ARGUMENTS)
opts.Add('target', 'Compile Target (debug/release_debug/release).', "debug")
-opts.Add('bits', 'Compile Target Bits (default/32/64).', "default")
+opts.Add('bits', 'Compile Target Bits (default/32/64/fat).', "default")
opts.Add('platform','Platform: '+str(platform_list)+'.',"")
opts.Add('p','Platform (same as platform=).',"")
opts.Add('tools','Build Tools (Including Editor): (yes/no)','yes')
@@ -276,6 +271,8 @@ if selected_platform in platform_list:
suffix+=".32"
elif (env["bits"]=="64"):
suffix+=".64"
+ elif (env["bits"]=="fat"):
+ suffix+=".fat"
suffix+=env.extra_suffix
@@ -394,14 +391,25 @@ if selected_platform in platform_list:
AddToVSProject(env.servers_sources)
AddToVSProject(env.tool_sources)
+ # this env flag won't work, it needs to be set in env_base=Environment(MSVC_VERSION='9.0')
+ # Even then, SCons still seems to ignore it and builds with the latest MSVC...
+ # That said, it's not needed to be set so far but I'm leaving it here so that this comment
+ # has a purpose.
#env['MSVS_VERSION']='9.0'
- env['MSVSBUILDCOM'] = "scons platform=" + selected_platform + " target=" + env["target"] + " bits=" + env["bits"] + " tools=yes"
- env['MSVSREBUILDCOM'] = "scons platform=" + selected_platform + " target=" + env["target"] + " bits=" + env["bits"] + " tools=yes vsproj=true"
- env['MSVSCLEANCOM'] = "scons --clean platform=" + selected_platform + " target=" + env["target"] + " bits=" + env["bits"] + " tools=yes"
-
- debug_variants = ['Debug|Win32']+['Debug|x64']
- release_variants = ['Release|Win32']+['Release|x64']
- release_debug_variants = ['Release_Debug|Win32']+['Release_Debug|x64']
+
+
+ # Calls a CMD with /C(lose) and /V(delayed environment variable expansion) options.
+ # And runs vcvarsall bat for the propper arhitecture and scons for propper configuration
+ env['MSVSBUILDCOM'] = 'cmd /V /C set "plat=$(PlatformTarget)" ^& (if "$(PlatformTarget)"=="x64" (set "plat=x86_amd64")) ^& set "tools=yes" ^& (if "$(Configuration)"=="release" (set "tools=no")) ^& call "$(VCInstallDir)vcvarsall.bat" !plat! ^& scons platform=windows target=$(Configuration) tools=!tools! -j2'
+ env['MSVSREBUILDCOM'] = 'cmd /V /C set "plat=$(PlatformTarget)" ^& (if "$(PlatformTarget)"=="x64" (set "plat=x86_amd64")) ^& set "tools=yes" ^& (if "$(Configuration)"=="release" (set "tools=no")) & call "$(VCInstallDir)vcvarsall.bat" !plat! ^& scons platform=windows target=$(Configuration) tools=!tools! vsproj=yes -j2'
+ env['MSVSCLEANCOM'] = 'cmd /V /C set "plat=$(PlatformTarget)" ^& (if "$(PlatformTarget)"=="x64" (set "plat=x86_amd64")) ^& set "tools=yes" ^& (if "$(Configuration)"=="release" (set "tools=no")) ^& call "$(VCInstallDir)vcvarsall.bat" !plat! ^& scons --clean platform=windows target=$(Configuration) tools=!tools! -j2'
+
+ # This version information (Win32, x64, Debug, Release, Release_Debug seems to be
+ # required for Visual Studio to understand that it needs to generate an NMAKE
+ # project. Do not modify without knowing what you are doing.
+ debug_variants = ['debug|Win32']+['debug|x64']
+ release_variants = ['release|Win32']+['release|x64']
+ release_debug_variants = ['release_debug|Win32']+['release_debug|x64']
variants = debug_variants + release_variants + release_debug_variants
debug_targets = ['Debug']+['Debug']
release_targets = ['Release']+['Release']
diff --git a/bin/tests/test_gdscript.cpp b/bin/tests/test_gdscript.cpp
index 4578f5aa02..4457d70b38 100644
--- a/bin/tests/test_gdscript.cpp
+++ b/bin/tests/test_gdscript.cpp
@@ -487,12 +487,12 @@ static String _disassemble_addr(const Ref<GDScript>& p_script,const GDFunction&
static void _disassemble_class(const Ref<GDScript>& p_class,const Vector<String>& p_code) {
- const Map<StringName,GDFunction>& mf = p_class->debug_get_member_functions();
+ const Map<StringName,GDFunction*>& mf = p_class->debug_get_member_functions();
- for(const Map<StringName,GDFunction>::Element *E=mf.front();E;E=E->next()) {
+ for(const Map<StringName,GDFunction*>::Element *E=mf.front();E;E=E->next()) {
- const GDFunction &func=E->get();
+ const GDFunction &func=*E->get();
const int *code = func.get_code();
int codelen=func.get_code_size();
String defargs;
diff --git a/bin/tests/test_python.cpp b/bin/tests/test_python.cpp
index 26fb4bdafb..f4a3d7a3a2 100644
--- a/bin/tests/test_python.cpp
+++ b/bin/tests/test_python.cpp
@@ -53,4 +53,4 @@ void test() {
}
-#endif \ No newline at end of file
+#endif
diff --git a/core/array.cpp b/core/array.cpp
index fef0fcbb40..1d283a14aa 100644
--- a/core/array.cpp
+++ b/core/array.cpp
@@ -155,6 +155,37 @@ int Array::find(const Variant& p_value) const {
return _p->array.find(p_value);
}
+int Array::find_last(const Variant& p_value) const {
+
+ if(_p->array.size() == 0)
+ return -1;
+
+ for (int i=_p->array.size()-1; i>=0; i--) {
+
+ if(_p->array[i] == p_value){
+ return i;
+ };
+ };
+
+ return -1;
+}
+
+int Array::count(const Variant& p_value) const {
+
+ if(_p->array.size() == 0)
+ return 0;
+
+ int amount=0;
+ for (int i=0; i<_p->array.size(); i++) {
+
+ if(_p->array[i] == p_value){
+ amount++;
+ };
+ };
+
+ return amount;
+}
+
void Array::remove(int p_pos) {
_p->array.remove(p_pos);
diff --git a/core/array.h b/core/array.h
index ecb91b69dc..9472a6dd21 100644
--- a/core/array.h
+++ b/core/array.h
@@ -72,6 +72,8 @@ public:
void invert();
int find(const Variant& p_value) const;
+ int find_last(const Variant& p_value) const;
+ int count(const Variant& p_value) const;
void erase(const Variant& p_value);
diff --git a/core/bind/core_bind.cpp b/core/bind/core_bind.cpp
index 45d089599b..31c0c0e208 100644
--- a/core/bind/core_bind.cpp
+++ b/core/bind/core_bind.cpp
@@ -226,6 +226,11 @@ Size2 _OS::get_screen_size(int p_screen) const {
return OS::get_singleton()->get_screen_size(p_screen);
}
+int _OS::get_screen_dpi(int p_screen) const {
+
+ return OS::get_singleton()->get_screen_dpi(p_screen);
+}
+
Point2 _OS::get_window_position() const {
return OS::get_singleton()->get_window_position();
}
@@ -431,6 +436,15 @@ Error _OS::set_thread_name(const String& p_name) {
return Thread::set_name(p_name);
};
+void _OS::set_use_vsync(bool p_enable) {
+ OS::get_singleton()->set_use_vsync(p_enable);
+}
+
+bool _OS::is_vsnc_enabled() const {
+
+ return OS::get_singleton()->is_vsnc_enabled();
+}
+
/*
enum Weekday {
@@ -500,9 +514,9 @@ void _OS::set_icon(const Image& p_icon) {
}
/**
- * Get current datetime with consideration for utc and
+ * Get current datetime with consideration for utc and
* dst
- */
+ */
Dictionary _OS::get_datetime(bool utc) const {
Dictionary dated = get_date(utc);
@@ -564,17 +578,17 @@ uint64_t _OS::get_unix_time_from_datetime(Dictionary datetime) const {
// Get all time values from the dictionary, set to zero if it doesn't exist.
// Risk incorrect calculation over throwing errors
- unsigned int second = ((datetime.has(SECOND_KEY))?
+ unsigned int second = ((datetime.has(SECOND_KEY))?
static_cast<unsigned int>(datetime[SECOND_KEY]): 0);
- unsigned int minute = ((datetime.has(MINUTE_KEY))?
+ unsigned int minute = ((datetime.has(MINUTE_KEY))?
static_cast<unsigned int>(datetime[MINUTE_KEY]): 0);
- unsigned int hour = ((datetime.has(HOUR_KEY))?
+ unsigned int hour = ((datetime.has(HOUR_KEY))?
static_cast<unsigned int>(datetime[HOUR_KEY]): 0);
- unsigned int day = ((datetime.has(DAY_KEY))?
+ unsigned int day = ((datetime.has(DAY_KEY))?
static_cast<unsigned int>(datetime[DAY_KEY]): 0);
- unsigned int month = ((datetime.has(MONTH_KEY))?
+ unsigned int month = ((datetime.has(MONTH_KEY))?
static_cast<unsigned int>(datetime[MONTH_KEY]) -1: 0);
- unsigned int year = ((datetime.has(YEAR_KEY))?
+ unsigned int year = ((datetime.has(YEAR_KEY))?
static_cast<unsigned int>(datetime[YEAR_KEY]):0);
/// How many days come before each month (0-12)
@@ -604,7 +618,7 @@ uint64_t _OS::get_unix_time_from_datetime(Dictionary datetime) const {
ERR_FAIL_COND_V( day > MONTH_DAYS_TABLE[LEAPYEAR(year)][month], 0);
// Calculate all the seconds from months past in this year
- uint64_t SECONDS_FROM_MONTHS_PAST_THIS_YEAR =
+ uint64_t SECONDS_FROM_MONTHS_PAST_THIS_YEAR =
DAYS_PAST_THIS_YEAR_TABLE[LEAPYEAR(year)][month] * SECONDS_PER_DAY;
uint64_t SECONDS_FROM_YEARS_PAST = 0;
@@ -614,13 +628,13 @@ uint64_t _OS::get_unix_time_from_datetime(Dictionary datetime) const {
SECONDS_PER_DAY;
}
- uint64_t epoch =
- second +
- minute * SECONDS_PER_MINUTE +
+ uint64_t epoch =
+ second +
+ minute * SECONDS_PER_MINUTE +
hour * SECONDS_PER_HOUR +
// Subtract 1 from day, since the current day isn't over yet
// and we cannot count all 24 hours.
- (day-1) * SECONDS_PER_DAY +
+ (day-1) * SECONDS_PER_DAY +
SECONDS_FROM_MONTHS_PAST_THIS_YEAR +
SECONDS_FROM_YEARS_PAST;
return epoch;
@@ -631,7 +645,7 @@ uint64_t _OS::get_unix_time_from_datetime(Dictionary datetime) const {
* Get a dictionary of time values when given epoch time
*
* Dictionary Time values will be a union if values from #get_time
- * and #get_date dictionaries (with the exception of dst =
+ * and #get_date dictionaries (with the exception of dst =
* day light standard time, as it cannot be determined from epoch)
*
* @param unix_time_val epoch time to convert
@@ -660,14 +674,14 @@ Dictionary _OS::get_datetime_from_unix_time( uint64_t unix_time_val) const {
time.hour = dayclock / 3600;
/* day 0 was a thursday */
- date.weekday = static_cast<OS::Weekday>((dayno + 4) % 7);
+ date.weekday = static_cast<OS::Weekday>((dayno + 4) % 7);
while (dayno >= YEARSIZE(year)) {
dayno -= YEARSIZE(year);
year++;
}
- date.year = year;
+ date.year = year;
size_t imonth = 0;
@@ -984,6 +998,7 @@ void _OS::_bind_methods() {
ObjectTypeDB::bind_method(_MD("set_current_screen","screen"),&_OS::set_current_screen);
ObjectTypeDB::bind_method(_MD("get_screen_position","screen"),&_OS::get_screen_position,DEFVAL(0));
ObjectTypeDB::bind_method(_MD("get_screen_size","screen"),&_OS::get_screen_size,DEFVAL(0));
+ ObjectTypeDB::bind_method(_MD("get_screen_dpi","screen"),&_OS::get_screen_dpi,DEFVAL(0));
ObjectTypeDB::bind_method(_MD("get_window_position"),&_OS::get_window_position);
ObjectTypeDB::bind_method(_MD("set_window_position","position"),&_OS::set_window_position);
ObjectTypeDB::bind_method(_MD("get_window_size"),&_OS::get_window_size);
@@ -1104,6 +1119,8 @@ void _OS::_bind_methods() {
ObjectTypeDB::bind_method(_MD("set_thread_name","name"),&_OS::set_thread_name);
+ ObjectTypeDB::bind_method(_MD("set_use_vsync","enable"),&_OS::set_use_vsync);
+ ObjectTypeDB::bind_method(_MD("is_vsnc_enabled"),&_OS::is_vsnc_enabled);
BIND_CONSTANT( DAY_SUNDAY );
BIND_CONSTANT( DAY_MONDAY );
diff --git a/core/bind/core_bind.h b/core/bind/core_bind.h
index 0c768651ff..441927940d 100644
--- a/core/bind/core_bind.h
+++ b/core/bind/core_bind.h
@@ -117,6 +117,7 @@ public:
virtual void set_current_screen(int p_screen);
virtual Point2 get_screen_position(int p_screen=0) const;
virtual Size2 get_screen_size(int p_screen=0) const;
+ virtual int get_screen_dpi(int p_screen=0) const;
virtual Point2 get_window_position() const;
virtual void set_window_position(const Point2& p_position);
virtual Size2 get_window_size() const;
@@ -281,6 +282,9 @@ public:
Error set_thread_name(const String& p_name);
+ void set_use_vsync(bool p_enable);
+ bool is_vsnc_enabled() const;
+
static _OS *get_singleton() { return singleton; }
_OS();
diff --git a/core/command_queue_mt.h b/core/command_queue_mt.h
index b1e0066c35..409543bf25 100644
--- a/core/command_queue_mt.h
+++ b/core/command_queue_mt.h
@@ -152,6 +152,23 @@ class CommandQueueMT {
virtual void call() { (instance->*method)(p1,p2,p3,p4,p5,p6,p7); }
};
+ template<class T,class M,class P1,class P2,class P3,class P4,class P5,class P6,class P7,class P8>
+ struct Command8 : public CommandBase {
+
+ T*instance;
+ M method;
+ typename GetSimpleTypeT<P1>::type_t p1;
+ typename GetSimpleTypeT<P2>::type_t p2;
+ typename GetSimpleTypeT<P3>::type_t p3;
+ typename GetSimpleTypeT<P4>::type_t p4;
+ typename GetSimpleTypeT<P5>::type_t p5;
+ typename GetSimpleTypeT<P6>::type_t p6;
+ typename GetSimpleTypeT<P7>::type_t p7;
+ typename GetSimpleTypeT<P8>::type_t p8;
+
+ virtual void call() { (instance->*method)(p1,p2,p3,p4,p5,p6,p7,p8); }
+ };
+
/* comands that return */
template<class T,class M,class R>
@@ -270,6 +287,25 @@ class CommandQueueMT {
virtual void call() { *ret = (instance->*method)(p1,p2,p3,p4,p5,p6,p7); sync->sem->post(); sync->in_use=false; ; }
};
+ template<class T,class M,class P1,class P2,class P3,class P4,class P5,class P6,class P7,class P8,class R>
+ struct CommandRet8 : public CommandBase {
+
+ T*instance;
+ M method;
+ typename GetSimpleTypeT<P1>::type_t p1;
+ typename GetSimpleTypeT<P2>::type_t p2;
+ typename GetSimpleTypeT<P3>::type_t p3;
+ typename GetSimpleTypeT<P4>::type_t p4;
+ typename GetSimpleTypeT<P5>::type_t p5;
+ typename GetSimpleTypeT<P6>::type_t p6;
+ typename GetSimpleTypeT<P7>::type_t p7;
+ typename GetSimpleTypeT<P8>::type_t p8;
+ R* ret;
+ SyncSemaphore *sync;
+
+ virtual void call() { *ret = (instance->*method)(p1,p2,p3,p4,p5,p6,p7,p8); sync->sem->post(); sync->in_use=false; ; }
+ };
+
/** commands that don't return but sync */
/* comands that return */
@@ -390,6 +426,25 @@ class CommandQueueMT {
virtual void call() { (instance->*method)(p1,p2,p3,p4,p5,p6,p7); sync->sem->post(); sync->in_use=false; ; }
};
+ template<class T,class M,class P1,class P2,class P3,class P4,class P5,class P6,class P7,class P8>
+ struct CommandSync8 : public CommandBase {
+
+ T*instance;
+ M method;
+ typename GetSimpleTypeT<P1>::type_t p1;
+ typename GetSimpleTypeT<P2>::type_t p2;
+ typename GetSimpleTypeT<P3>::type_t p3;
+ typename GetSimpleTypeT<P4>::type_t p4;
+ typename GetSimpleTypeT<P5>::type_t p5;
+ typename GetSimpleTypeT<P6>::type_t p6;
+ typename GetSimpleTypeT<P7>::type_t p7;
+ typename GetSimpleTypeT<P8>::type_t p8;
+
+ SyncSemaphore *sync;
+
+ virtual void call() { (instance->*method)(p1,p2,p3,p4,p5,p6,p7,p8); sync->sem->post(); sync->in_use=false; ; }
+ };
+
/***** BASE *******/
enum {
@@ -639,6 +694,27 @@ public:
if (sync) sync->post();
}
+
+ template<class T, class M, class P1, class P2, class P3, class P4, class P5, class P6, class P7,class P8>
+ void push( T * p_instance, M p_method, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8 ) {
+
+ Command8<T,M,P1,P2,P3,P4,P5,P6,P7,P8> * cmd = allocate_and_lock< Command8<T,M,P1,P2,P3,P4,P5,P6,P7,P8> >();
+
+ cmd->instance=p_instance;
+ cmd->method=p_method;
+ cmd->p1=p1;
+ cmd->p2=p2;
+ cmd->p3=p3;
+ cmd->p4=p4;
+ cmd->p5=p5;
+ cmd->p6=p6;
+ cmd->p7=p7;
+ cmd->p8=p8;
+
+ unlock();
+
+ if (sync) sync->post();
+ }
/*** PUSH AND RET COMMANDS ***/
@@ -806,6 +882,31 @@ public:
ss->sem->wait();
}
+ template<class T, class M, class P1, class P2, class P3, class P4, class P5, class P6,class P7,class P8,class R>
+ void push_and_ret( T * p_instance, M p_method, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6,P7 p7,P8 p8, R* r_ret ) {
+
+ CommandRet8<T,M,P1,P2,P3,P4,P5,P6,P7,P8,R> * cmd = allocate_and_lock< CommandRet8<T,M,P1,P2,P3,P4,P5,P6,P7,P8,R> >();
+
+ cmd->instance=p_instance;
+ cmd->method=p_method;
+ cmd->p1=p1;
+ cmd->p2=p2;
+ cmd->p3=p3;
+ cmd->p4=p4;
+ cmd->p5=p5;
+ cmd->p6=p6;
+ cmd->p7=p7;
+ cmd->p8=p8;
+ cmd->ret=r_ret;
+ SyncSemaphore *ss=_alloc_sync_sem();
+ cmd->sync=ss;
+
+ unlock();
+
+ if (sync) sync->post();
+ ss->sem->wait();
+ }
+
template<class T, class M>
void push_and_sync( T * p_instance, M p_method) {
@@ -971,6 +1072,31 @@ public:
ss->sem->wait();
}
+ template<class T, class M, class P1, class P2, class P3, class P4, class P5, class P6,class P7,class P8>
+ void push_and_sync( T * p_instance, M p_method, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6,P7 p7,P8 p8) {
+
+ CommandSync8<T,M,P1,P2,P3,P4,P5,P6,P7,P8> * cmd = allocate_and_lock< CommandSync8<T,M,P1,P2,P3,P4,P5,P6,P7,P8> >();
+
+ cmd->instance=p_instance;
+ cmd->method=p_method;
+ cmd->p1=p1;
+ cmd->p2=p2;
+ cmd->p3=p3;
+ cmd->p4=p4;
+ cmd->p5=p5;
+ cmd->p6=p6;
+ cmd->p7=p7;
+ cmd->p8=p8;
+
+ SyncSemaphore *ss=_alloc_sync_sem();
+ cmd->sync=ss;
+
+ unlock();
+
+ if (sync) sync->post();
+ ss->sem->wait();
+ }
+
void wait_and_flush_one() {
ERR_FAIL_COND(!sync);
sync->wait();
diff --git a/core/dictionary.cpp b/core/dictionary.cpp
index 75c8531251..6204a87054 100644
--- a/core/dictionary.cpp
+++ b/core/dictionary.cpp
@@ -199,6 +199,18 @@ Array Dictionary::keys() const {
}
+Array Dictionary::values() const {
+
+ Array varr;
+ varr.resize(size());
+ const Variant *key=NULL;
+ int i=0;
+ while((key=next(key))){
+ varr[i++] = _p->variant_map[*key];
+ }
+ return varr;
+}
+
const Variant* Dictionary::next(const Variant* p_key) const {
return _p->variant_map.next(p_key);
@@ -250,5 +262,3 @@ Dictionary::~Dictionary() {
_unref();
}
-
-
diff --git a/core/dictionary.h b/core/dictionary.h
index c854e95ee6..ae79fab9c3 100644
--- a/core/dictionary.h
+++ b/core/dictionary.h
@@ -81,6 +81,7 @@ public:
const Variant* next(const Variant* p_key=NULL) const;
Array keys() const;
+ Array values() const;
Dictionary(const Dictionary& p_from);
Dictionary(bool p_shared=false);
diff --git a/core/dvector.h b/core/dvector.h
index fbb1fc4824..a5519ed604 100644
--- a/core/dvector.h
+++ b/core/dvector.h
@@ -285,6 +285,7 @@ public:
Error resize(int p_size);
+ void invert();
void operator=(const DVector& p_dvector) { reference(p_dvector); }
DVector() {}
@@ -424,6 +425,18 @@ Error DVector<T>::resize(int p_size) {
return OK;
}
+template<class T>
+void DVector<T>::invert() {
+ T temp;
+ Write w = write();
+ int s = size();
+ int half_s = s/2;
+ for(int i=0;i<half_s;i++) {
+ temp = w[i];
+ w[i] = w[s-i-1];
+ w[s-i-1] = temp;
+ }
+}
#endif
diff --git a/core/global_constants.cpp b/core/global_constants.cpp
index 3cf4ff8f83..63764383ff 100644
--- a/core/global_constants.cpp
+++ b/core/global_constants.cpp
@@ -478,7 +478,21 @@ static _GlobalConstant _global_constants[]={
BIND_GLOBAL_CONSTANT( PROPERTY_USAGE_STORAGE ),
BIND_GLOBAL_CONSTANT( PROPERTY_USAGE_EDITOR ),
BIND_GLOBAL_CONSTANT( PROPERTY_USAGE_NETWORK ),
+
+ BIND_GLOBAL_CONSTANT( PROPERTY_USAGE_EDITOR_HELPER ),
+ BIND_GLOBAL_CONSTANT( PROPERTY_USAGE_CHECKABLE ),
+ BIND_GLOBAL_CONSTANT( PROPERTY_USAGE_CHECKED ),
+ BIND_GLOBAL_CONSTANT( PROPERTY_USAGE_INTERNATIONALIZED ),
+ BIND_GLOBAL_CONSTANT( PROPERTY_USAGE_BUNDLE ),
+ BIND_GLOBAL_CONSTANT( PROPERTY_USAGE_CATEGORY ),
+ BIND_GLOBAL_CONSTANT( PROPERTY_USAGE_STORE_IF_NONZERO ),
+ BIND_GLOBAL_CONSTANT( PROPERTY_USAGE_STORE_IF_NONONE ),
+ BIND_GLOBAL_CONSTANT( PROPERTY_USAGE_NO_INSTANCE_STATE ),
+ BIND_GLOBAL_CONSTANT( PROPERTY_USAGE_RESTART_IF_CHANGED ),
+
BIND_GLOBAL_CONSTANT( PROPERTY_USAGE_DEFAULT ),
+ BIND_GLOBAL_CONSTANT( PROPERTY_USAGE_DEFAULT_INTL ),
+ BIND_GLOBAL_CONSTANT( PROPERTY_USAGE_NOEDITOR ),
BIND_GLOBAL_CONSTANT( METHOD_FLAG_NORMAL ),
BIND_GLOBAL_CONSTANT( METHOD_FLAG_EDITOR ),
diff --git a/core/globals.cpp b/core/globals.cpp
index 020e05fb8f..9e7b357d73 100644
--- a/core/globals.cpp
+++ b/core/globals.cpp
@@ -1528,6 +1528,7 @@ Globals::Globals() {
custom_prop_info["render/thread_model"]=PropertyInfo(Variant::INT,"render/thread_model",PROPERTY_HINT_ENUM,"Single-Unsafe,Single-Safe,Multi-Threaded");
custom_prop_info["physics_2d/thread_model"]=PropertyInfo(Variant::INT,"physics_2d/thread_model",PROPERTY_HINT_ENUM,"Single-Unsafe,Single-Safe,Multi-Threaded");
+ set("debug/profiler_max_functions",16384);
using_datapack=false;
}
diff --git a/core/hq2x.cpp b/core/hq2x.cpp
new file mode 100644
index 0000000000..6495c77b2a
--- /dev/null
+++ b/core/hq2x.cpp
@@ -0,0 +1,2636 @@
+/*
+ * Copyright 2016 Bruno Ribeiro
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "hq2x.h"
+#include "math_funcs.h"
+
+
+static const uint32_t AMASK = 0xFF000000;
+static const uint32_t YMASK = 0x00FF0000;
+static const uint32_t UMASK = 0x0000FF00;
+static const uint32_t VMASK = 0x000000FF;
+
+_FORCE_INLINE_ static uint32_t ARGBtoAYUV(
+ uint32_t value )
+{
+ uint32_t A, R, G, B, Y, U, V;
+//todo big endian check
+ A = value >> 24;
+ R = (value >> 16) & 0xFF;
+ G = (value >> 8) & 0xFF;
+ B = value & 0xFF;
+
+ Y = Math::fast_ftoi( 0.299 * R + 0.587 * G + 0.114 * B);
+ U = Math::fast_ftoi(-0.169 * R - 0.331 * G + 0.5 * B) + 128;
+ V = Math::fast_ftoi( 0.5 * R - 0.419 * G - 0.081 * B) + 128;
+ return (A << 24) + (Y << 16) + (U << 8) + V;
+}
+
+
+/*
+ * Use this function for sharper images (good for cartoon style, used by DOSBOX)
+ */
+
+_FORCE_INLINE_ static bool isDifferent(
+ uint32_t color1,
+ uint32_t color2,
+ uint32_t trY,
+ uint32_t trU,
+ uint32_t trV,
+ uint32_t trA )
+{
+ color1 = ARGBtoAYUV(color1);
+ color2 = ARGBtoAYUV(color2);
+
+ uint32_t value;
+
+ value = ((color1 & YMASK) - (color2 & YMASK));
+ value = (value ^ (value >> 31)) - (value >> 31);
+ if (value > trY) return true;
+
+ value = ((color1 & UMASK) - (color2 & UMASK));
+ value = (value ^ (value >> 31)) - (value >> 31);
+ if (value > trU) return true;
+
+ value = ((color1 & VMASK) - (color2 & VMASK));
+ value = (value ^ (value >> 31)) - (value >> 31);
+ if (value > trV) return true;
+
+ value = ((color1 & AMASK) - (color2 & AMASK));
+ value = (value ^ (value >> 31)) - (value >> 31);
+ if (value > trA) return true;
+
+ return false;
+
+}
+
+
+
+#define MASK_RB 0x00FF00FF
+#define MASK_G 0x0000FF00
+#define MASK_A 0xFF000000
+
+
+/**
+ * @brief Mixes two colors using the given weights.
+ */
+#define HQX_MIX_2(C0,C1,W0,W1) \
+ ((((C0 & MASK_RB) * W0 + (C1 & MASK_RB) * W1) / (W0 + W1)) & MASK_RB) | \
+ ((((C0 & MASK_G) * W0 + (C1 & MASK_G) * W1) / (W0 + W1)) & MASK_G) | \
+ (((((C0 & MASK_A) >> 8) * W0 + ((C1 & MASK_A) >> 8) * W1) / (W0 + W1)) << 8) & MASK_A
+
+/**
+ * @brief Mixes three colors using the given weights.
+ */
+#define HQX_MIX_3(C0,C1,C2,W0,W1,W2) \
+ ((((C0 & MASK_RB) * W0 + (C1 & MASK_RB) * W1 + (C2 & MASK_RB) * W2) / (W0 + W1 + W2)) & MASK_RB) | \
+ ((((C0 & MASK_G) * W0 + (C1 & MASK_G) * W1 + (C2 & MASK_G) * W2) / (W0 + W1 + W2)) & MASK_G) | \
+ (((((C0 & MASK_A) >> 8) * W0 + ((C1 & MASK_A) >> 8) * W1 + ((C2 & MASK_A) >> 8) * W2) / (W0 + W1 + W2)) << 8) & MASK_A
+
+
+#define MIX_00_4 *output = w[4];
+#define MIX_00_MIX_00_4_0_3_1 *output = HQX_MIX_2(w[4],w[0],3U,1U);
+#define MIX_00_4_3_3_1 *output = HQX_MIX_2(w[4],w[3],3U,1U);
+#define MIX_00_4_1_3_1 *output = HQX_MIX_2(w[4],w[1],3U,1U);
+#define MIX_00_3_1_1_1 *output = HQX_MIX_2(w[3],w[1],1U,1U);
+#define MIX_00_4_3_1_2_1_1 *output = HQX_MIX_3(w[4],w[3],w[1],2U,1U,1U);
+#define MIX_00_4_3_1_2_7_7 *output = HQX_MIX_3(w[4],w[3],w[1],2U,7U,7U);
+#define MIX_00_4_0_1_2_1_1 *output = HQX_MIX_3(w[4],w[0],w[1],2U,1U,1U);
+#define MIX_00_4_0_3_2_1_1 *output = HQX_MIX_3(w[4],w[0],w[3],2U,1U,1U);
+#define MIX_00_4_1_3_5_2_1 *output = HQX_MIX_3(w[4],w[1],w[3],5U,2U,1U);
+#define MIX_00_4_3_1_5_2_1 *output = HQX_MIX_3(w[4],w[3],w[1],5U,2U,1U);
+#define MIX_00_4_3_1_6_1_1 *output = HQX_MIX_3(w[4],w[3],w[1],6U,1U,1U);
+#define MIX_00_4_3_1_2_3_3 *output = HQX_MIX_3(w[4],w[3],w[1],2U,3U,3U);
+#define MIX_00_MIX_00_4_0_3_10 *output = HQX_MIX_3(w[4],w[3],w[1],14U,1U,1U);
+
+#define MIX_01_4 *(output + 1) = w[4];
+#define MIX_01_4_2_3_1 *(output + 1) = HQX_MIX_2(w[4],w[2],3U,1U);
+#define MIX_01_4_1_3_1 *(output + 1) = HQX_MIX_2(w[4],w[1],3U,1U);
+#define MIX_01_1_4_3_1 *(output + 1) = HQX_MIX_2(w[1],w[4],3U,1U);
+#define MIX_01_4_5_3_1 *(output + 1) = HQX_MIX_2(w[4],w[5],3U,1U);
+#define MIX_01_4_1_7_1 *(output + 1) = HQX_MIX_2(w[4],w[1],7U,1U);
+#define MIX_01_4_1_5_2_1_1 *(output + 1) = HQX_MIX_3(w[4],w[1],w[5],2U,1U,1U);
+#define MIX_01_4_2_5_2_1_1 *(output + 1) = HQX_MIX_3(w[4],w[2],w[5],2U,1U,1U);
+#define MIX_01_4_2_1_2_1_1 *(output + 1) = HQX_MIX_3(w[4],w[2],w[1],2U,1U,1U);
+#define MIX_01_4_5_1_5_2_1 *(output + 1) = HQX_MIX_3(w[4],w[5],w[1],5U,2U,1U);
+#define MIX_01_4_1_5_5_2_1 *(output + 1) = HQX_MIX_3(w[4],w[1],w[5],5U,2U,1U);
+#define MIX_01_4_1_5_6_1_1 *(output + 1) = HQX_MIX_3(w[4],w[1],w[5],6U,1U,1U);
+#define MIX_01_4_1_5_2_3_3 *(output + 1) = HQX_MIX_3(w[4],w[1],w[5],2U,3U,3U);
+#define MIX_01_4_2_3_10 *(output + 1) = HQX_MIX_3(w[4],w[1],w[5],14U,1U,1U);
+
+#define MIX_02_4 *(output + 2) = w[4];
+#define MIX_02_4_2_3_1 *(output + 2) = HQX_MIX_2(w[4],w[2],3U,1U);
+#define MIX_02_4_1_3_1 *(output + 2) = HQX_MIX_2(w[4],w[1],3U,1U);
+#define MIX_02_4_5_3_1 *(output + 2) = HQX_MIX_2(w[4],w[5],3U,1U);
+#define MIX_02_4_1_5_2_1_1 *(output + 2) = HQX_MIX_3(w[4],w[1],w[5],2U,1U,1U);
+#define MIX_02_4_1_5_2_7_7 *(output + 2) = HQX_MIX_3(w[4],w[1],w[5],2U,7U,7U);
+#define MIX_02_1_5_1_1 *(output + 2) = HQX_MIX_2(w[1],w[5],1U,1U);
+
+#define MIX_10_4 *(output + lineSize) = w[4];
+#define MIX_10_4_6_3_1 *(output + lineSize) = HQX_MIX_2(w[4],w[6],3U,1U);
+#define MIX_10_4_7_3_1 *(output + lineSize) = HQX_MIX_2(w[4],w[7],3U,1U);
+#define MIX_10_4_3_3_1 *(output + lineSize) = HQX_MIX_2(w[4],w[3],3U,1U);
+#define MIX_10_4_7_3_2_1_1 *(output + lineSize) = HQX_MIX_3(w[4],w[7],w[3],2U,1U,1U);
+#define MIX_10_4_6_3_2_1_1 *(output + lineSize) = HQX_MIX_3(w[4],w[6],w[3],2U,1U,1U);
+#define MIX_10_4_6_7_2_1_1 *(output + lineSize) = HQX_MIX_3(w[4],w[6],w[7],2U,1U,1U);
+#define MIX_10_4_3_7_5_2_1 *(output + lineSize) = HQX_MIX_3(w[4],w[3],w[7],5U,2U,1U);
+#define MIX_10_4_7_3_5_2_1 *(output + lineSize) = HQX_MIX_3(w[4],w[7],w[3],5U,2U,1U);
+#define MIX_10_4_7_3_6_1_1 *(output + lineSize) = HQX_MIX_3(w[4],w[7],w[3],6U,1U,1U);
+#define MIX_10_4_7_3_2_3_3 *(output + lineSize) = HQX_MIX_3(w[4],w[7],w[3],2U,3U,3U);
+#define MIX_10_4_6_3_10 *(output + lineSize) = HQX_MIX_3(w[4],w[7],w[3],14U,1U,1U);
+#define MIX_10_4_3_7_1 *(output + lineSize) = HQX_MIX_2(w[4],w[3],7U,1U);
+#define MIX_10_3_4_3_1 *(output + lineSize) = HQX_MIX_2(w[3],w[4],3U,1U);
+
+#define MIX_11_4 *(output + lineSize + 1) = w[4];
+#define MIX_11_4_8_3_1 *(output + lineSize + 1) = HQX_MIX_2(w[4],w[8],3U,1U);
+#define MIX_11_4_5_3_1 *(output + lineSize + 1) = HQX_MIX_2(w[4],w[5],3U,1U);
+#define MIX_11_4_7_3_1 *(output + lineSize + 1) = HQX_MIX_2(w[4],w[7],3U,1U);
+#define MIX_11_4_5_7_2_1_1 *(output + lineSize + 1) = HQX_MIX_3(w[4],w[5],w[7],2U,1U,1U);
+#define MIX_11_4_8_7_2_1_1 *(output + lineSize + 1) = HQX_MIX_3(w[4],w[8],w[7],2U,1U,1U);
+#define MIX_11_4_8_5_2_1_1 *(output + lineSize + 1) = HQX_MIX_3(w[4],w[8],w[5],2U,1U,1U);
+#define MIX_11_4_7_5_5_2_1 *(output + lineSize + 1) = HQX_MIX_3(w[4],w[7],w[5],5U,2U,1U);
+#define MIX_11_4_5_7_5_2_1 *(output + lineSize + 1) = HQX_MIX_3(w[4],w[5],w[7],5U,2U,1U);
+#define MIX_11_4_5_7_6_1_1 *(output + lineSize + 1) = HQX_MIX_3(w[4],w[5],w[7],6U,1U,1U);
+#define MIX_11_4_5_7_2_3_3 *(output + lineSize + 1) = HQX_MIX_3(w[4],w[5],w[7],2U,3U,3U);
+#define MIX_11_4_8_3_10 *(output + lineSize + 1) = HQX_MIX_3(w[4],w[5],w[7],14U,1U,1U);
+
+#define MIX_12_4 *(output + lineSize + 2) = w[4];
+#define MIX_12_4_5_3_1 *(output + lineSize + 2) = HQX_MIX_2(w[4],w[5],3U,1U);
+#define MIX_12_4_5_7_1 *(output + lineSize + 2) = HQX_MIX_2(w[4],w[5],7U,1U);
+#define MIX_12_5_4_3_1 *(output + lineSize + 2) = HQX_MIX_2(w[5],w[4],3U,1U);
+
+#define MIX_20_4 *(output + lineSize + lineSize) = w[4];
+#define MIX_20_4_6_3_1 *(output + lineSize + lineSize) = HQX_MIX_2(w[4],w[6],3U,1U);
+#define MIX_20_4_7_3_1 *(output + lineSize + lineSize) = HQX_MIX_2(w[4],w[7],3U,1U);
+#define MIX_20_4_3_3_1 *(output + lineSize + lineSize) = HQX_MIX_2(w[4],w[3],3U,1U);
+#define MIX_20_4_7_3_2_1_1 *(output + lineSize + lineSize) = HQX_MIX_3(w[4],w[7],w[3],2U,1U,1U);
+#define MIX_20_4_7_3_2_7_7 *(output + lineSize + lineSize) = HQX_MIX_3(w[4],w[7],w[3],2U,7U,7U);
+#define MIX_20_7_3_1_1 *(output + lineSize + lineSize) = HQX_MIX_2(w[7],w[3],1U,1U);
+
+#define MIX_21_4 *(output + lineSize + lineSize + 1) = w[4];
+#define MIX_21_4_7_3_1 *(output + lineSize + lineSize + 1) = HQX_MIX_2(w[4],w[7],3U,1U);
+#define MIX_21_4_7_7_1 *(output + lineSize + lineSize + 1) = HQX_MIX_2(w[4],w[7],7U,1U);
+#define MIX_21_7_4_3_1 *(output + lineSize + lineSize + 1) = HQX_MIX_2(w[7],w[4],3U,1U);
+
+#define MIX_22_4 *(output + lineSize + lineSize + 2) = w[4];
+#define MIX_22_4_8_3_1 *(output + lineSize + lineSize + 2) = HQX_MIX_2(w[4],w[8],3U,1U);
+#define MIX_22_4_7_3_1 *(output + lineSize + lineSize + 2) = HQX_MIX_2(w[4],w[7],3U,1U);
+#define MIX_22_4_5_3_1 *(output + lineSize + lineSize + 2) = HQX_MIX_2(w[4],w[5],3U,1U);
+#define MIX_22_4_5_7_2_1_1 *(output + lineSize + lineSize + 2) = HQX_MIX_3(w[4],w[5],w[7],2U,1U,1U);
+#define MIX_22_4_5_7_2_7_7 *(output + lineSize + lineSize + 2) = HQX_MIX_3(w[4],w[5],w[7],2U,7U,7U);
+#define MIX_22_5_7_1_1 *(output + lineSize + lineSize + 2) = HQX_MIX_2(w[5],w[7],1U,1U);
+
+
+
+uint32_t *hq2x_resize(
+ const uint32_t *image,
+ uint32_t width,
+ uint32_t height,
+ uint32_t *output,
+ uint32_t trY,
+ uint32_t trU,
+ uint32_t trV,
+ uint32_t trA,
+ bool wrapX,
+ bool wrapY )
+{
+ int lineSize = width * 2;
+
+ int previous, next;
+ uint32_t w[9];
+
+ trY <<= 16;
+ trU <<= 8;
+ trA <<= 24;
+
+ // iterates between the lines
+ for (uint32_t row = 0; row < height; row++)
+ {
+ /*
+ * Note: this function uses a 3x3 sliding window over the original image.
+ *
+ * +----+----+----+
+ * | | | |
+ * | w0 | w1 | w2 |
+ * +----+----+----+
+ * | | | |
+ * | w3 | w4 | w5 |
+ * +----+----+----+
+ * | | | |
+ * | w6 | w7 | w8 |
+ * +----+----+----+
+ */
+
+ // adjusts the previous and next line pointers
+ if (row > 0)
+ previous = -width;
+ else
+ {
+ if (wrapY)
+ previous = width * (height - 1);
+ else
+ previous = 0;
+ }
+ if (row < height - 1)
+ next = width;
+ else
+ {
+ if (wrapY)
+ next = -(width * (height - 1));
+ else
+ next = 0;
+ }
+
+ // iterates between the columns
+ for (uint32_t col = 0; col < width; col++)
+ {
+ w[1] = *(image + previous);
+ w[4] = *image;
+ w[7] = *(image + next);
+
+ if (col > 0)
+ {
+ w[0] = *(image + previous - 1);
+ w[3] = *(image - 1);
+ w[6] = *(image + next - 1);
+ }
+ else
+ {
+ if (wrapX)
+ {
+ w[0] = *(image + previous + width - 1);
+ w[3] = *(image + width - 1);
+ w[6] = *(image + next + width - 1);
+ }
+ else
+ {
+ w[0] = w[1];
+ w[3] = w[4];
+ w[6] = w[7];
+ }
+ }
+
+ if (col < width - 1)
+ {
+ w[2] = *(image + previous + 1);
+ w[5] = *(image + 1);
+ w[8] = *(image + next + 1);
+ }
+ else
+ {
+ if (wrapX)
+ {
+ w[2] = *(image + previous - width + 1);
+ w[5] = *(image - width + 1);
+ w[8] = *(image + next - width + 1);
+ }
+ else
+ {
+ w[2] = w[1];
+ w[5] = w[4];
+ w[8] = w[7];
+ }
+ }
+
+ int pattern = 0;
+
+ // computes the pattern to be used considering the neighbor pixels
+ for (int k = 0, flag = 1; k < 9; k++)
+ {
+ // ignores the central pixel
+ if (k == 4) continue;
+
+ if (w[k] != w[4])
+ if (isDifferent(w[4], w[k], trY, trU, trV, trA)) pattern |= flag;
+ flag <<= 1;
+ }
+
+ switch (pattern)
+ {
+ case 0:
+ case 1:
+ case 4:
+ case 32:
+ case 128:
+ case 5:
+ case 132:
+ case 160:
+ case 33:
+ case 129:
+ case 36:
+ case 133:
+ case 164:
+ case 161:
+ case 37:
+ case 165:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_1_5_2_1_1
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 2:
+ case 34:
+ case 130:
+ case 162:
+ MIX_00_4_0_3_2_1_1
+ MIX_01_4_2_5_2_1_1
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 16:
+ case 17:
+ case 48:
+ case 49:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_2_1_2_1_1
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 64:
+ case 65:
+ case 68:
+ case 69:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_1_5_2_1_1
+ MIX_10_4_6_3_2_1_1
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 8:
+ case 12:
+ case 136:
+ case 140:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_1_5_2_1_1
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 3:
+ case 35:
+ case 131:
+ case 163:
+ MIX_00_4_3_3_1
+ MIX_01_4_2_5_2_1_1
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 6:
+ case 38:
+ case 134:
+ case 166:
+ MIX_00_4_0_3_2_1_1
+ MIX_01_4_5_3_1
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 20:
+ case 21:
+ case 52:
+ case 53:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_1_3_1
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 144:
+ case 145:
+ case 176:
+ case 177:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_2_1_2_1_1
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_7_3_1
+ break;
+ case 192:
+ case 193:
+ case 196:
+ case 197:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_1_5_2_1_1
+ MIX_10_4_6_3_2_1_1
+ MIX_11_4_5_3_1
+ break;
+ case 96:
+ case 97:
+ case 100:
+ case 101:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_1_5_2_1_1
+ MIX_10_4_3_3_1
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 40:
+ case 44:
+ case 168:
+ case 172:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_1_5_2_1_1
+ MIX_10_4_7_3_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 9:
+ case 13:
+ case 137:
+ case 141:
+ MIX_00_4_1_3_1
+ MIX_01_4_1_5_2_1_1
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 18:
+ case 50:
+ MIX_00_4_0_3_2_1_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4_2_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 80:
+ case 81:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_2_1_2_1_1
+ MIX_10_4_6_3_2_1_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 72:
+ case 76:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_1_5_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4_6_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 10:
+ case 138:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ MIX_01_4_2_5_2_1_1
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 66:
+ MIX_00_4_0_3_2_1_1
+ MIX_01_4_2_5_2_1_1
+ MIX_10_4_6_3_2_1_1
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 24:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_2_1_2_1_1
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 7:
+ case 39:
+ case 135:
+ MIX_00_4_3_3_1
+ MIX_01_4_5_3_1
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 148:
+ case 149:
+ case 180:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_1_3_1
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_7_3_1
+ break;
+ case 224:
+ case 228:
+ case 225:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_1_5_2_1_1
+ MIX_10_4_3_3_1
+ MIX_11_4_5_3_1
+ break;
+ case 41:
+ case 169:
+ case 45:
+ MIX_00_4_1_3_1
+ MIX_01_4_1_5_2_1_1
+ MIX_10_4_7_3_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 22:
+ case 54:
+ MIX_00_4_0_3_2_1_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 208:
+ case 209:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_2_1_2_1_1
+ MIX_10_4_6_3_2_1_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 104:
+ case 108:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_1_5_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 11:
+ case 139:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ MIX_01_4_2_5_2_1_1
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 19:
+ case 51:
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_00_4_3_3_1
+ MIX_01_4_2_3_1
+ }
+ else
+ {
+ MIX_00_4_1_3_5_2_1
+ MIX_01_4_1_5_2_3_3
+ }
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 146:
+ case 178:
+ MIX_00_4_0_3_2_1_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4_2_3_1
+ MIX_11_4_7_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_2_3_3
+ MIX_11_4_5_7_5_2_1
+ }
+ MIX_10_4_7_3_2_1_1
+ break;
+ case 84:
+ case 85:
+ MIX_00_4_3_1_2_1_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_01_4_1_3_1
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_01_4_5_1_5_2_1
+ MIX_11_4_5_7_2_3_3
+ }
+ MIX_10_4_6_3_2_1_1
+ break;
+ case 112:
+ case 113:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_2_1_2_1_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_10_4_3_3_1
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_5_2_1
+ MIX_11_4_5_7_2_3_3
+ }
+ break;
+ case 200:
+ case 204:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_1_5_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4_6_3_1
+ MIX_11_4_5_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_2_3_3
+ MIX_11_4_7_5_5_2_1
+ }
+ break;
+ case 73:
+ case 77:
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_00_4_1_3_1
+ MIX_10_4_6_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_5_2_1
+ MIX_10_4_7_3_2_3_3
+ }
+ MIX_01_4_1_5_2_1_1
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 42:
+ case 170:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ MIX_10_4_7_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_2_3_3
+ MIX_10_4_3_7_5_2_1
+ }
+ MIX_01_4_2_5_2_1_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 14:
+ case 142:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ MIX_01_4_5_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_2_3_3
+ MIX_01_4_1_5_5_2_1
+ }
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 67:
+ MIX_00_4_3_3_1
+ MIX_01_4_2_5_2_1_1
+ MIX_10_4_6_3_2_1_1
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 70:
+ MIX_00_4_0_3_2_1_1
+ MIX_01_4_5_3_1
+ MIX_10_4_6_3_2_1_1
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 28:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_1_3_1
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 152:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_2_1_2_1_1
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_7_3_1
+ break;
+ case 194:
+ MIX_00_4_0_3_2_1_1
+ MIX_01_4_2_5_2_1_1
+ MIX_10_4_6_3_2_1_1
+ MIX_11_4_5_3_1
+ break;
+ case 98:
+ MIX_00_4_0_3_2_1_1
+ MIX_01_4_2_5_2_1_1
+ MIX_10_4_3_3_1
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 56:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_2_1_2_1_1
+ MIX_10_4_7_3_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 25:
+ MIX_00_4_1_3_1
+ MIX_01_4_2_1_2_1_1
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 26:
+ case 31:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 82:
+ case 214:
+ MIX_00_4_0_3_2_1_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ MIX_10_4_6_3_2_1_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 88:
+ case 248:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_2_1_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 74:
+ case 107:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ MIX_01_4_2_5_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 27:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ MIX_01_4_2_3_1
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 86:
+ MIX_00_4_0_3_2_1_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ MIX_10_4_6_3_2_1_1
+ MIX_11_4_8_3_1
+ break;
+ case 216:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_2_1_2_1_1
+ MIX_10_4_6_3_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 106:
+ MIX_00_MIX_00_4_0_3_1
+ MIX_01_4_2_5_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 30:
+ MIX_00_MIX_00_4_0_3_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 210:
+ MIX_00_4_0_3_2_1_1
+ MIX_01_4_2_3_1
+ MIX_10_4_6_3_2_1_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 120:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_2_1_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ MIX_11_4_8_3_1
+ break;
+ case 75:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ MIX_01_4_2_5_2_1_1
+ MIX_10_4_6_3_1
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 29:
+ MIX_00_4_1_3_1
+ MIX_01_4_1_3_1
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 198:
+ MIX_00_4_0_3_2_1_1
+ MIX_01_4_5_3_1
+ MIX_10_4_6_3_2_1_1
+ MIX_11_4_5_3_1
+ break;
+ case 184:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_2_1_2_1_1
+ MIX_10_4_7_3_1
+ MIX_11_4_7_3_1
+ break;
+ case 99:
+ MIX_00_4_3_3_1
+ MIX_01_4_2_5_2_1_1
+ MIX_10_4_3_3_1
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 57:
+ MIX_00_4_1_3_1
+ MIX_01_4_2_1_2_1_1
+ MIX_10_4_7_3_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 71:
+ MIX_00_4_3_3_1
+ MIX_01_4_5_3_1
+ MIX_10_4_6_3_2_1_1
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 156:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_1_3_1
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_7_3_1
+ break;
+ case 226:
+ MIX_00_4_0_3_2_1_1
+ MIX_01_4_2_5_2_1_1
+ MIX_10_4_3_3_1
+ MIX_11_4_5_3_1
+ break;
+ case 60:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_1_3_1
+ MIX_10_4_7_3_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 195:
+ MIX_00_4_3_3_1
+ MIX_01_4_2_5_2_1_1
+ MIX_10_4_6_3_2_1_1
+ MIX_11_4_5_3_1
+ break;
+ case 102:
+ MIX_00_4_0_3_2_1_1
+ MIX_01_4_5_3_1
+ MIX_10_4_3_3_1
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 153:
+ MIX_00_4_1_3_1
+ MIX_01_4_2_1_2_1_1
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_7_3_1
+ break;
+ case 58:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_6_1_1
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4_2_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_6_1_1
+ }
+ MIX_10_4_7_3_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 83:
+ MIX_00_4_3_3_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4_2_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_6_1_1
+ }
+ MIX_10_4_6_3_2_1_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_11_4_5_7_6_1_1
+ }
+ break;
+ case 92:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_1_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4_6_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_6_1_1
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_11_4_5_7_6_1_1
+ }
+ break;
+ case 202:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_6_1_1
+ }
+ MIX_01_4_2_5_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4_6_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_6_1_1
+ }
+ MIX_11_4_5_3_1
+ break;
+ case 78:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_6_1_1
+ }
+ MIX_01_4_5_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4_6_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_6_1_1
+ }
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 154:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_6_1_1
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4_2_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_6_1_1
+ }
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_7_3_1
+ break;
+ case 114:
+ MIX_00_4_0_3_2_1_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4_2_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_6_1_1
+ }
+ MIX_10_4_3_3_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_11_4_5_7_6_1_1
+ }
+ break;
+ case 89:
+ MIX_00_4_1_3_1
+ MIX_01_4_2_1_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4_6_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_6_1_1
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_11_4_5_7_6_1_1
+ }
+ break;
+ case 90:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_6_1_1
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4_2_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_6_1_1
+ }
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4_6_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_6_1_1
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_11_4_5_7_6_1_1
+ }
+ break;
+ case 55:
+ case 23:
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_00_4_3_3_1
+ MIX_01_4
+ }
+ else
+ {
+ MIX_00_4_1_3_5_2_1
+ MIX_01_4_1_5_2_3_3
+ }
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 182:
+ case 150:
+ MIX_00_4_0_3_2_1_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ MIX_11_4_7_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_2_3_3
+ MIX_11_4_5_7_5_2_1
+ }
+ MIX_10_4_7_3_2_1_1
+ break;
+ case 213:
+ case 212:
+ MIX_00_4_3_1_2_1_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_01_4_1_3_1
+ MIX_11_4
+ }
+ else
+ {
+ MIX_01_4_5_1_5_2_1
+ MIX_11_4_5_7_2_3_3
+ }
+ MIX_10_4_6_3_2_1_1
+ break;
+ case 241:
+ case 240:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_2_1_2_1_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_10_4_3_3_1
+ MIX_11_4
+ }
+ else
+ {
+ MIX_10_4_7_3_5_2_1
+ MIX_11_4_5_7_2_3_3
+ }
+ break;
+ case 236:
+ case 232:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_1_5_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ MIX_11_4_5_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_2_3_3
+ MIX_11_4_7_5_5_2_1
+ }
+ break;
+ case 109:
+ case 105:
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_00_4_1_3_1
+ MIX_10_4
+ }
+ else
+ {
+ MIX_00_4_3_1_5_2_1
+ MIX_10_4_7_3_2_3_3
+ }
+ MIX_01_4_1_5_2_1_1
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 171:
+ case 43:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ MIX_10_4_7_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_2_3_3
+ MIX_10_4_3_7_5_2_1
+ }
+ MIX_01_4_2_5_2_1_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 143:
+ case 15:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ MIX_01_4_5_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_2_3_3
+ MIX_01_4_1_5_5_2_1
+ }
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 124:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_1_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ MIX_11_4_8_3_1
+ break;
+ case 203:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ MIX_01_4_2_5_2_1_1
+ MIX_10_4_6_3_1
+ MIX_11_4_5_3_1
+ break;
+ case 62:
+ MIX_00_MIX_00_4_0_3_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ MIX_10_4_7_3_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 211:
+ MIX_00_4_3_3_1
+ MIX_01_4_2_3_1
+ MIX_10_4_6_3_2_1_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 118:
+ MIX_00_4_0_3_2_1_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ MIX_10_4_3_3_1
+ MIX_11_4_8_3_1
+ break;
+ case 217:
+ MIX_00_4_1_3_1
+ MIX_01_4_2_1_2_1_1
+ MIX_10_4_6_3_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 110:
+ MIX_00_MIX_00_4_0_3_1
+ MIX_01_4_5_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 155:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ MIX_01_4_2_3_1
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_7_3_1
+ break;
+ case 188:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_1_3_1
+ MIX_10_4_7_3_1
+ MIX_11_4_7_3_1
+ break;
+ case 185:
+ MIX_00_4_1_3_1
+ MIX_01_4_2_1_2_1_1
+ MIX_10_4_7_3_1
+ MIX_11_4_7_3_1
+ break;
+ case 61:
+ MIX_00_4_1_3_1
+ MIX_01_4_1_3_1
+ MIX_10_4_7_3_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 157:
+ MIX_00_4_1_3_1
+ MIX_01_4_1_3_1
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_7_3_1
+ break;
+ case 103:
+ MIX_00_4_3_3_1
+ MIX_01_4_5_3_1
+ MIX_10_4_3_3_1
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 227:
+ MIX_00_4_3_3_1
+ MIX_01_4_2_5_2_1_1
+ MIX_10_4_3_3_1
+ MIX_11_4_5_3_1
+ break;
+ case 230:
+ MIX_00_4_0_3_2_1_1
+ MIX_01_4_5_3_1
+ MIX_10_4_3_3_1
+ MIX_11_4_5_3_1
+ break;
+ case 199:
+ MIX_00_4_3_3_1
+ MIX_01_4_5_3_1
+ MIX_10_4_6_3_2_1_1
+ MIX_11_4_5_3_1
+ break;
+ case 220:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_1_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4_6_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_6_1_1
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 158:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_6_1_1
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_7_3_1
+ break;
+ case 234:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_6_1_1
+ }
+ MIX_01_4_2_5_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ MIX_11_4_5_3_1
+ break;
+ case 242:
+ MIX_00_4_0_3_2_1_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4_2_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_6_1_1
+ }
+ MIX_10_4_3_3_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 59:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4_2_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_6_1_1
+ }
+ MIX_10_4_7_3_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 121:
+ MIX_00_4_1_3_1
+ MIX_01_4_2_1_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_11_4_5_7_6_1_1
+ }
+ break;
+ case 87:
+ MIX_00_4_3_3_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ MIX_10_4_6_3_2_1_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_11_4_5_7_6_1_1
+ }
+ break;
+ case 79:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ MIX_01_4_5_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4_6_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_6_1_1
+ }
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 122:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_6_1_1
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4_2_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_6_1_1
+ }
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_11_4_5_7_6_1_1
+ }
+ break;
+ case 94:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_6_1_1
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4_6_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_6_1_1
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_11_4_5_7_6_1_1
+ }
+ break;
+ case 218:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_6_1_1
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4_2_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_6_1_1
+ }
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4_6_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_6_1_1
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 91:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4_2_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_6_1_1
+ }
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4_6_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_6_1_1
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_11_4_5_7_6_1_1
+ }
+ break;
+ case 229:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_1_5_2_1_1
+ MIX_10_4_3_3_1
+ MIX_11_4_5_3_1
+ break;
+ case 167:
+ MIX_00_4_3_3_1
+ MIX_01_4_5_3_1
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 173:
+ MIX_00_4_1_3_1
+ MIX_01_4_1_5_2_1_1
+ MIX_10_4_7_3_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 181:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_1_3_1
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_7_3_1
+ break;
+ case 186:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_6_1_1
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4_2_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_6_1_1
+ }
+ MIX_10_4_7_3_1
+ MIX_11_4_7_3_1
+ break;
+ case 115:
+ MIX_00_4_3_3_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4_2_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_6_1_1
+ }
+ MIX_10_4_3_3_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_11_4_5_7_6_1_1
+ }
+ break;
+ case 93:
+ MIX_00_4_1_3_1
+ MIX_01_4_1_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4_6_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_6_1_1
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_11_4_5_7_6_1_1
+ }
+ break;
+ case 206:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_6_1_1
+ }
+ MIX_01_4_5_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4_6_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_6_1_1
+ }
+ MIX_11_4_5_3_1
+ break;
+ case 205:
+ case 201:
+ MIX_00_4_1_3_1
+ MIX_01_4_1_5_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4_6_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_6_1_1
+ }
+ MIX_11_4_5_3_1
+ break;
+ case 174:
+ case 46:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_MIX_00_4_0_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_6_1_1
+ }
+ MIX_01_4_5_3_1
+ MIX_10_4_7_3_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 179:
+ case 147:
+ MIX_00_4_3_3_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4_2_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_6_1_1
+ }
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_7_3_1
+ break;
+ case 117:
+ case 116:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_1_3_1
+ MIX_10_4_3_3_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4_8_3_1
+ }
+ else
+ {
+ MIX_11_4_5_7_6_1_1
+ }
+ break;
+ case 189:
+ MIX_00_4_1_3_1
+ MIX_01_4_1_3_1
+ MIX_10_4_7_3_1
+ MIX_11_4_7_3_1
+ break;
+ case 231:
+ MIX_00_4_3_3_1
+ MIX_01_4_5_3_1
+ MIX_10_4_3_3_1
+ MIX_11_4_5_3_1
+ break;
+ case 126:
+ MIX_00_MIX_00_4_0_3_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ MIX_11_4_8_3_1
+ break;
+ case 219:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ MIX_01_4_2_3_1
+ MIX_10_4_6_3_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 125:
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_00_4_1_3_1
+ MIX_10_4
+ }
+ else
+ {
+ MIX_00_4_3_1_5_2_1
+ MIX_10_4_7_3_2_3_3
+ }
+ MIX_01_4_1_3_1
+ MIX_11_4_8_3_1
+ break;
+ case 221:
+ MIX_00_4_1_3_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_01_4_1_3_1
+ MIX_11_4
+ }
+ else
+ {
+ MIX_01_4_5_1_5_2_1
+ MIX_11_4_5_7_2_3_3
+ }
+ MIX_10_4_6_3_1
+ break;
+ case 207:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ MIX_01_4_5_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_2_3_3
+ MIX_01_4_1_5_5_2_1
+ }
+ MIX_10_4_6_3_1
+ MIX_11_4_5_3_1
+ break;
+ case 238:
+ MIX_00_MIX_00_4_0_3_1
+ MIX_01_4_5_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ MIX_11_4_5_3_1
+ }
+ else
+ {
+ MIX_10_4_7_3_2_3_3
+ MIX_11_4_7_5_5_2_1
+ }
+ break;
+ case 190:
+ MIX_00_MIX_00_4_0_3_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ MIX_11_4_7_3_1
+ }
+ else
+ {
+ MIX_01_4_1_5_2_3_3
+ MIX_11_4_5_7_5_2_1
+ }
+ MIX_10_4_7_3_1
+ break;
+ case 187:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ MIX_10_4_7_3_1
+ }
+ else
+ {
+ MIX_00_4_3_1_2_3_3
+ MIX_10_4_3_7_5_2_1
+ }
+ MIX_01_4_2_3_1
+ MIX_11_4_7_3_1
+ break;
+ case 243:
+ MIX_00_4_3_3_1
+ MIX_01_4_2_3_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_10_4_3_3_1
+ MIX_11_4
+ }
+ else
+ {
+ MIX_10_4_7_3_5_2_1
+ MIX_11_4_5_7_2_3_3
+ }
+ break;
+ case 119:
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_00_4_3_3_1
+ MIX_01_4
+ }
+ else
+ {
+ MIX_00_4_1_3_5_2_1
+ MIX_01_4_1_5_2_3_3
+ }
+ MIX_10_4_3_3_1
+ MIX_11_4_8_3_1
+ break;
+ case 237:
+ case 233:
+ MIX_00_4_1_3_1
+ MIX_01_4_1_5_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_6_3_10
+ }
+ MIX_11_4_5_3_1
+ break;
+ case 175:
+ case 47:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_MIX_00_4_0_3_10
+ }
+ MIX_01_4_5_3_1
+ MIX_10_4_7_3_1
+ MIX_11_4_5_7_2_1_1
+ break;
+ case 183:
+ case 151:
+ MIX_00_4_3_3_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_2_3_10
+ }
+ MIX_10_4_7_3_2_1_1
+ MIX_11_4_7_3_1
+ break;
+ case 245:
+ case 244:
+ MIX_00_4_3_1_2_1_1
+ MIX_01_4_1_3_1
+ MIX_10_4_3_3_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_8_3_10
+ }
+ break;
+ case 250:
+ MIX_00_MIX_00_4_0_3_1
+ MIX_01_4_2_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 123:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ MIX_01_4_2_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ MIX_11_4_8_3_1
+ break;
+ case 95:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ MIX_10_4_6_3_1
+ MIX_11_4_8_3_1
+ break;
+ case 222:
+ MIX_00_MIX_00_4_0_3_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ MIX_10_4_6_3_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 252:
+ MIX_00_4_0_1_2_1_1
+ MIX_01_4_1_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_8_3_10
+ }
+ break;
+ case 249:
+ MIX_00_4_1_3_1
+ MIX_01_4_2_1_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_6_3_10
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 235:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ MIX_01_4_2_5_2_1_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_6_3_10
+ }
+ MIX_11_4_5_3_1
+ break;
+ case 111:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_MIX_00_4_0_3_10
+ }
+ MIX_01_4_5_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ MIX_11_4_8_5_2_1_1
+ break;
+ case 63:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_MIX_00_4_0_3_10
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ MIX_10_4_7_3_1
+ MIX_11_4_8_7_2_1_1
+ break;
+ case 159:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_2_3_10
+ }
+ MIX_10_4_6_7_2_1_1
+ MIX_11_4_7_3_1
+ break;
+ case 215:
+ MIX_00_4_3_3_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_2_3_10
+ }
+ MIX_10_4_6_3_2_1_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 246:
+ MIX_00_4_0_3_2_1_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ MIX_10_4_3_3_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_8_3_10
+ }
+ break;
+ case 254:
+ MIX_00_MIX_00_4_0_3_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_8_3_10
+ }
+ break;
+ case 253:
+ MIX_00_4_1_3_1
+ MIX_01_4_1_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_6_3_10
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_8_3_10
+ }
+ break;
+ case 251:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ MIX_01_4_2_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_6_3_10
+ }
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 239:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_MIX_00_4_0_3_10
+ }
+ MIX_01_4_5_3_1
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_6_3_10
+ }
+ MIX_11_4_5_3_1
+ break;
+ case 127:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_MIX_00_4_0_3_10
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_1_5_2_1_1
+ }
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ {
+ MIX_10_4
+ }
+ else
+ {
+ MIX_10_4_7_3_2_1_1
+ }
+ MIX_11_4_8_3_1
+ break;
+ case 191:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_MIX_00_4_0_3_10
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_2_3_10
+ }
+ MIX_10_4_7_3_1
+ MIX_11_4_7_3_1
+ break;
+ case 223:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ {
+ MIX_00_4
+ }
+ else
+ {
+ MIX_00_4_3_1_2_1_1
+ }
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_2_3_10
+ }
+ MIX_10_4_6_3_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_5_7_2_1_1
+ }
+ break;
+ case 247:
+ MIX_00_4_3_3_1
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ {
+ MIX_01_4
+ }
+ else
+ {
+ MIX_01_4_2_3_10
+ }
+ MIX_10_4_3_3_1
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ {
+ MIX_11_4
+ }
+ else
+ {
+ MIX_11_4_8_3_10
+ }
+ break;
+ case 255:
+ if (isDifferent(w[3], w[1], trY, trU, trV, trA))
+ MIX_00_4
+ else
+ MIX_00_MIX_00_4_0_3_10
+
+ if (isDifferent(w[1], w[5], trY, trU, trV, trA))
+ MIX_01_4
+ else
+ MIX_01_4_2_3_10
+
+ if (isDifferent(w[7], w[3], trY, trU, trV, trA))
+ MIX_10_4
+ else
+ MIX_10_4_6_3_10
+
+ if (isDifferent(w[5], w[7], trY, trU, trV, trA))
+ MIX_11_4
+ else
+ MIX_11_4_8_3_10
+ break;
+ }
+ image++;
+ output += 2;
+ }
+ output += lineSize;
+ }
+
+ return output;
+}
diff --git a/core/hq2x.h b/core/hq2x.h
new file mode 100644
index 0000000000..8f119d2a01
--- /dev/null
+++ b/core/hq2x.h
@@ -0,0 +1,19 @@
+#ifndef HQ2X_H
+#define HQ2X_H
+
+#include "typedefs.h"
+
+
+uint32_t *hq2x_resize(
+ const uint32_t *image,
+ uint32_t width,
+ uint32_t height,
+ uint32_t *output,
+ uint32_t trY = 0x30,
+ uint32_t trU = 0x07,
+ uint32_t trV = 0x06,
+ uint32_t trA = 0x50,
+ bool wrapX = false,
+ bool wrapY = false );
+
+#endif // HQ2X_H
diff --git a/core/image.cpp b/core/image.cpp
index 8635aa1b29..57496683ef 100644
--- a/core/image.cpp
+++ b/core/image.cpp
@@ -30,7 +30,7 @@
#include "hash_map.h"
#include "core/io/image_loader.h"
#include "core/os/copymem.h"
-
+#include "hq2x.h"
#include "print_string.h"
#include <stdio.h>
@@ -901,6 +901,44 @@ static void _generate_po2_mipmap(const uint8_t* p_src, uint8_t* p_dst, uint32_t
}
+void Image::expand_x2_hq2x() {
+
+ ERR_FAIL_COND(format>=FORMAT_INDEXED);
+
+ Format current = format;
+ bool mipmaps=get_mipmaps();
+ if (mipmaps) {
+ clear_mipmaps();
+ }
+
+ if (current!=FORMAT_RGBA)
+ convert(FORMAT_RGBA);
+
+ DVector<uint8_t> dest;
+ dest.resize(width*2*height*2*4);
+
+ {
+ DVector<uint8_t>::Read r = data.read();
+ DVector<uint8_t>::Write w = dest.write();
+
+ hq2x_resize((const uint32_t*)r.ptr(),width,height,(uint32_t*)w.ptr());
+
+ }
+
+ width*=2;
+ height*=2;
+ data=dest;
+
+
+ if (current!=FORMAT_RGBA)
+ convert(current);
+
+ if (mipmaps) {
+ generate_mipmaps();
+ }
+
+}
+
void Image::shrink_x2() {
ERR_FAIL_COND(format==FORMAT_INDEXED || format==FORMAT_INDEXED_ALPHA);
diff --git a/core/image.h b/core/image.h
index 35bbd1a684..0f0b345eb9 100644
--- a/core/image.h
+++ b/core/image.h
@@ -250,6 +250,7 @@ public:
void resize( int p_width, int p_height, Interpolation p_interpolation=INTERPOLATE_BILINEAR );
Image resized( int p_width, int p_height, int p_interpolation=INTERPOLATE_BILINEAR );
void shrink_x2();
+ void expand_x2_hq2x();
/**
* Crop the image to a specific size, if larger, then the image is filled by black
*/
diff --git a/core/input_map.cpp b/core/input_map.cpp
index 17e98902a1..08ee8138a3 100644
--- a/core/input_map.cpp
+++ b/core/input_map.cpp
@@ -28,6 +28,7 @@
/*************************************************************************/
#include "input_map.h"
#include "globals.h"
+#include "os/keyboard.h"
InputMap *InputMap::singleton=NULL;
@@ -36,6 +37,7 @@ void InputMap::_bind_methods() {
ObjectTypeDB::bind_method(_MD("has_action","action"),&InputMap::has_action);
ObjectTypeDB::bind_method(_MD("get_action_id","action"),&InputMap::get_action_id);
ObjectTypeDB::bind_method(_MD("get_action_from_id","id"),&InputMap::get_action_from_id);
+ ObjectTypeDB::bind_method(_MD("get_actions"),&InputMap::_get_actions);
ObjectTypeDB::bind_method(_MD("add_action","action"),&InputMap::add_action);
ObjectTypeDB::bind_method(_MD("erase_action","action"),&InputMap::erase_action);
@@ -75,6 +77,35 @@ StringName InputMap::get_action_from_id(int p_id) const {
return input_id_map[p_id];
}
+Array InputMap::_get_actions() {
+
+ Array ret;
+ List<StringName> actions = get_actions();
+ if(actions.empty())
+ return ret;
+
+ for(const List<StringName>::Element *E=actions.front();E;E=E->next()) {
+
+ ret.push_back(E->get());
+ }
+
+ return ret;
+}
+
+List<StringName> InputMap::get_actions() const {
+
+ List<StringName> actions = List<StringName>();
+ if(input_map.empty()){
+ return actions;
+ }
+
+ for (Map<StringName, Action>::Element *E=input_map.front();E;E=E->next()) {
+ actions.push_back(E->key());
+ }
+
+ return actions;
+}
+
List<InputEvent>::Element *InputMap::_find_event(List<InputEvent> &p_list,const InputEvent& p_event) const {
for (List<InputEvent>::Element *E=p_list.front();E;E=E->next()) {
@@ -291,6 +322,67 @@ void InputMap::load_from_globals() {
}
+void InputMap::load_default() {
+
+ InputEvent key;
+ key.type=InputEvent::KEY;
+
+ add_action("ui_accept");
+ key.key.scancode=KEY_RETURN;
+ action_add_event("ui_accept",key);
+ key.key.scancode=KEY_ENTER;
+ action_add_event("ui_accept",key);
+ key.key.scancode=KEY_SPACE;
+ action_add_event("ui_accept",key);
+
+ add_action("ui_select");
+ key.key.scancode=KEY_SPACE;
+ action_add_event("ui_select",key);
+
+ add_action("ui_cancel");
+ key.key.scancode=KEY_ESCAPE;
+ action_add_event("ui_cancel",key);
+
+ add_action("ui_focus_next");
+ key.key.scancode=KEY_TAB;
+ action_add_event("ui_focus_next",key);
+
+ add_action("ui_focus_prev");
+ key.key.scancode=KEY_TAB;
+ key.key.mod.shift=true;
+ action_add_event("ui_focus_prev",key);
+ key.key.mod.shift=false;
+
+ add_action("ui_left");
+ key.key.scancode=KEY_LEFT;
+ action_add_event("ui_left",key);
+
+ add_action("ui_right");
+ key.key.scancode=KEY_RIGHT;
+ action_add_event("ui_right",key);
+
+ add_action("ui_up");
+ key.key.scancode=KEY_UP;
+ action_add_event("ui_up",key);
+
+ add_action("ui_down");
+ key.key.scancode=KEY_DOWN;
+ action_add_event("ui_down",key);
+
+
+ add_action("ui_page_up");
+ key.key.scancode=KEY_PAGEUP;
+ action_add_event("ui_page_up",key);
+
+ add_action("ui_page_down");
+ key.key.scancode=KEY_PAGEDOWN;
+ action_add_event("ui_page_down",key);
+
+// set("display/orientation", "landscape");
+
+
+}
+
InputMap::InputMap() {
ERR_FAIL_COND(singleton);
diff --git a/core/input_map.h b/core/input_map.h
index 5cd1e41922..dc5a911963 100644
--- a/core/input_map.h
+++ b/core/input_map.h
@@ -47,6 +47,7 @@ class InputMap : public Object {
List<InputEvent>::Element *_find_event(List<InputEvent> &p_list,const InputEvent& p_event) const;
Array _get_action_list(const StringName& p_action);
+ Array _get_actions();
protected:
@@ -59,6 +60,7 @@ public:
bool has_action(const StringName& p_action) const;
int get_action_id(const StringName& p_action) const;
StringName get_action_from_id(int p_id) const;
+ List<StringName> get_actions() const;
void add_action(const StringName& p_action);
void erase_action(const StringName& p_action);
@@ -72,6 +74,7 @@ public:
void load_from_globals();
+ void load_default();
InputMap();
};
diff --git a/core/io/LICENSE-InfoZip.txt b/core/io/LICENSE-InfoZip.txt
new file mode 100644
index 0000000000..bcfe47e978
--- /dev/null
+++ b/core/io/LICENSE-InfoZip.txt
@@ -0,0 +1,60 @@
+This is version 2007-Mar-4 of the Info-ZIP license.
+The definitive version of this document should be available at
+ftp://ftp.info-zip.org/pub/infozip/license.html indefinitely and
+a copy at http://www.info-zip.org/pub/infozip/license.html.
+
+
+Copyright (c) 1990-2007 Info-ZIP. All rights reserved.
+
+For the purposes of this copyright and license, "Info-ZIP" is defined as
+the following set of individuals:
+
+ Mark Adler, John Bush, Karl Davis, Harald Denker, Jean-Michel Dubois,
+ Jean-loup Gailly, Hunter Goatley, Ed Gordon, Ian Gorman, Chris Herborth,
+ Dirk Haase, Greg Hartwig, Robert Heath, Jonathan Hudson, Paul Kienitz,
+ David Kirschbaum, Johnny Lee, Onno van der Linden, Igor Mandrichenko,
+ Steve P. Miller, Sergio Monesi, Keith Owens, George Petrov, Greg Roelofs,
+ Kai Uwe Rommel, Steve Salisbury, Dave Smith, Steven M. Schweda,
+ Christian Spieler, Cosmin Truta, Antoine Verheijen, Paul von Behren,
+ Rich Wales, Mike White.
+
+This software is provided "as is," without warranty of any kind, express
+or implied. In no event shall Info-ZIP or its contributors be held liable
+for any direct, indirect, incidental, special or consequential damages
+arising out of the use of or inability to use this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the above disclaimer and the following restrictions:
+
+ 1. Redistributions of source code (in whole or in part) must retain
+ the above copyright notice, definition, disclaimer, and this list
+ of conditions.
+
+ 2. Redistributions in binary form (compiled executables and libraries)
+ must reproduce the above copyright notice, definition, disclaimer,
+ and this list of conditions in documentation and/or other materials
+ provided with the distribution. The sole exception to this condition
+ is redistribution of a standard UnZipSFX binary (including SFXWiz) as
+ part of a self-extracting archive; that is permitted without inclusion
+ of this license, as long as the normal SFX banner has not been removed
+ from the binary or disabled.
+
+ 3. Altered versions--including, but not limited to, ports to new operating
+ systems, existing ports with new graphical interfaces, versions with
+ modified or added functionality, and dynamic, shared, or static library
+ versions not from Info-ZIP--must be plainly marked as such and must not
+ be misrepresented as being the original source or, if binaries,
+ compiled from the original source. Such altered versions also must not
+ be misrepresented as being Info-ZIP releases--including, but not
+ limited to, labeling of the altered versions with the names "Info-ZIP"
+ (or any variation thereof, including, but not limited to, different
+ capitalizations), "Pocket UnZip," "WiZ" or "MacZip" without the
+ explicit permission of Info-ZIP. Such altered versions are further
+ prohibited from misrepresentative use of the Zip-Bugs or Info-ZIP
+ e-mail addresses or the Info-ZIP URL(s), such as to imply Info-ZIP
+ will provide support for the altered versions.
+
+ 4. Info-ZIP retains the right to use the names "Info-ZIP," "Zip," "UnZip,"
+ "UnZipSFX," "WiZ," "Pocket UnZip," "Pocket Zip," and "MacZip" for its
+ own source and binary releases.
diff --git a/core/io/LICENSE-MiniZip.txt b/core/io/LICENSE-MiniZip.txt
new file mode 100644
index 0000000000..0e8950f86f
--- /dev/null
+++ b/core/io/LICENSE-MiniZip.txt
@@ -0,0 +1,32 @@
+Credits
+
+ Gilles Vollant - Original MiniZip author
+ Even Rouault - ZIP64 unzip Support
+ Daniel Borca - BZip Compression method support in unzip
+ Mathias Svensson - ZIP64 zip support
+ Mathias Svensson - BZip Compression method support in zip
+
+ This version has been modified for Godot Engine
+
+
+License
+----------------------------------------------------------------------------
+ Condition of use and distribution are the same than zlib :
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+----------------------------------------------------------------------------
diff --git a/core/io/file_access_memory.cpp b/core/io/file_access_memory.cpp
index 2cc52a9e2d..7db3499505 100644
--- a/core/io/file_access_memory.cpp
+++ b/core/io/file_access_memory.cpp
@@ -135,7 +135,7 @@ size_t FileAccessMemory::get_len() const {
bool FileAccessMemory::eof_reached() const {
- return pos >= length;
+ return pos > length;
}
uint8_t FileAccessMemory::get_8() const {
diff --git a/core/io/http_client.cpp b/core/io/http_client.cpp
index 680e0ef7f9..3520680118 100644
--- a/core/io/http_client.cpp
+++ b/core/io/http_client.cpp
@@ -116,7 +116,7 @@ Error HTTPClient::request_raw( Method p_method, const String& p_url, const Vecto
}
request+="\r\n";
CharString cs=request.utf8();
-
+
DVector<uint8_t> data;
//Maybe this goes faster somehow?
@@ -639,7 +639,7 @@ void HTTPClient::_bind_methods() {
ObjectTypeDB::bind_method(_MD("connect:Error","host","port","use_ssl","verify_host"),&HTTPClient::connect,DEFVAL(false),DEFVAL(true));
ObjectTypeDB::bind_method(_MD("set_connection","connection:StreamPeer"),&HTTPClient::set_connection);
ObjectTypeDB::bind_method(_MD("get_connection:StreamPeer"),&HTTPClient::get_connection);
- ObjectTypeDB::bind_method(_MD("request_raw","method","url","headers","body"),&HTTPClient::request_raw,DEFVAL(String()));
+ ObjectTypeDB::bind_method(_MD("request_raw","method","url","headers","body"),&HTTPClient::request_raw);
ObjectTypeDB::bind_method(_MD("request","method","url","headers","body"),&HTTPClient::request,DEFVAL(String()));
ObjectTypeDB::bind_method(_MD("send_body_text","body"),&HTTPClient::send_body_text);
ObjectTypeDB::bind_method(_MD("send_body_data","body"),&HTTPClient::send_body_data);
diff --git a/core/io/http_client.h b/core/io/http_client.h
index a9cfb1ed73..ceb0273a7d 100644
--- a/core/io/http_client.h
+++ b/core/io/http_client.h
@@ -40,7 +40,7 @@ class HTTPClient : public Reference {
OBJ_TYPE(HTTPClient,Reference);
public:
- enum RespondeCode {
+ enum ResponseCode {
// 1xx informational
RESPONSE_CONTINUE = 100,
diff --git a/core/io/ioapi.c b/core/io/ioapi.c
index 8818199f0b..d6063a5fe6 100644
--- a/core/io/ioapi.c
+++ b/core/io/ioapi.c
@@ -6,7 +6,7 @@
Modifications for Zip64 support
Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
- For more info read MiniZip_info.txt
+ For more info read LICENSE-MiniZip.txt
*/
diff --git a/core/io/ioapi.h b/core/io/ioapi.h
index 24bf612617..cb6cb7e766 100644
--- a/core/io/ioapi.h
+++ b/core/io/ioapi.h
@@ -5,7 +5,7 @@
Modifications for Zip64 support
Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
- For more info read MiniZip_info.txt
+ For more info read LICENSE-MiniZip.txt
Changes
diff --git a/core/io/resource_loader.cpp b/core/io/resource_loader.cpp
index abb1082256..1bb80e74eb 100644
--- a/core/io/resource_loader.cpp
+++ b/core/io/resource_loader.cpp
@@ -243,6 +243,7 @@ Ref<ResourceImportMetadata> ResourceLoader::load_import_metadata(const String &p
break;
}
+
return ret;
}
@@ -318,7 +319,11 @@ Ref<ResourceInteractiveLoader> ResourceLoader::load_interactive(const String &p_
if (OS::get_singleton()->is_stdout_verbose())
print_line("load resource: "+local_path+" (cached)");
- return RES( ResourceCache::get(local_path ) );
+ Ref<Resource> res_cached = ResourceCache::get(local_path);
+ Ref<ResourceInteractiveLoaderDefault> ril = Ref<ResourceInteractiveLoaderDefault>(memnew(ResourceInteractiveLoaderDefault));
+
+ ril->resource = res_cached;
+ return ril;
}
if (OS::get_singleton()->is_stdout_verbose())
diff --git a/core/io/translation_loader_po.cpp b/core/io/translation_loader_po.cpp
index fe101a8676..4ddb276a27 100644
--- a/core/io/translation_loader_po.cpp
+++ b/core/io/translation_loader_po.cpp
@@ -30,13 +30,8 @@
#include "os/file_access.h"
#include "translation.h"
-RES TranslationLoaderPO::load(const String &p_path, const String& p_original_path, Error *r_error) {
- if (r_error)
- *r_error=ERR_CANT_OPEN;
-
- FileAccess *f=FileAccess::open(p_path,FileAccess::READ);
- ERR_FAIL_COND_V(!f,RES());
+RES TranslationLoaderPO::load_translation(FileAccess *f, Error *r_error, const String &p_path) {
String l = f->get_line();
@@ -52,6 +47,8 @@ RES TranslationLoaderPO::load(const String &p_path, const String& p_original_pat
String msg_id;
String msg_str;
String config;
+ int msg_line=0;
+
if (r_error)
*r_error=ERR_FILE_CORRUPT;
@@ -87,7 +84,7 @@ RES TranslationLoaderPO::load(const String &p_path, const String& p_original_pat
if (status==STATUS_READING_ID) {
memdelete(f);
- ERR_EXPLAIN(p_path+":"+itos(line)+" nexpected 'msgid', was expecting 'msgstr' while parsing: ");
+ ERR_EXPLAIN(p_path+":"+itos(line)+" Unexpected 'msgid', was expecting 'msgstr' while parsing: ");
ERR_FAIL_V(RES());
}
@@ -100,6 +97,7 @@ RES TranslationLoaderPO::load(const String &p_path, const String& p_original_pat
status=STATUS_READING_ID;
msg_id="";
msg_str="";
+ msg_line=line;
}
if (l.begins_with("msgstr")) {
@@ -113,6 +111,7 @@ RES TranslationLoaderPO::load(const String &p_path, const String& p_original_pat
l=l.substr(6,l.length()).strip_edges();
status=STATUS_READING_STRING;
+ msg_line=line;
}
if (l=="" || l.begins_with("#")) {
@@ -183,6 +182,18 @@ RES TranslationLoaderPO::load(const String &p_path, const String& p_original_pat
*r_error=OK;
return translation;
+}
+
+RES TranslationLoaderPO::load(const String &p_path, const String& p_original_path, Error *r_error) {
+
+ if (r_error)
+ *r_error=ERR_CANT_OPEN;
+
+ FileAccess *f=FileAccess::open(p_path,FileAccess::READ);
+ ERR_FAIL_COND_V(!f,RES());
+
+
+ return load_translation(f,r_error);
}
diff --git a/core/io/translation_loader_po.h b/core/io/translation_loader_po.h
index a569674d80..b0c4e42682 100644
--- a/core/io/translation_loader_po.h
+++ b/core/io/translation_loader_po.h
@@ -30,10 +30,12 @@
#define TRANSLATION_LOADER_PO_H
#include "io/resource_loader.h"
-
+#include "translation.h"
+#include "os/file_access.h"
class TranslationLoaderPO : public ResourceFormatLoader {
public:
+ static RES load_translation(FileAccess *f, Error *r_error,const String& p_path=String());
virtual RES load(const String &p_path,const String& p_original_path="",Error *r_error=NULL);
virtual void get_recognized_extensions(List<String> *p_extensions) const;
virtual bool handles_type(const String& p_type) const;
diff --git a/core/io/unzip.c b/core/io/unzip.c
index b438021ad7..78672677f9 100644
--- a/core/io/unzip.c
+++ b/core/io/unzip.c
@@ -10,7 +10,7 @@
Modifications for Zip64 support on both zip and unzip
Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
- For more info read MiniZip_info.txt
+ For more info read LICENSE-MiniZip.txt
------------------------------------------------------------------------------------
diff --git a/core/io/unzip.h b/core/io/unzip.h
index cb3d239eac..f67c3b2fa8 100644
--- a/core/io/unzip.h
+++ b/core/io/unzip.h
@@ -10,7 +10,7 @@
Modifications for Zip64 support on both zip and unzip
Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
- For more info read MiniZip_info.txt
+ For more info read LICENSE-MiniZip.txt
---------------------------------------------------------------------------------
diff --git a/core/io/zip.c b/core/io/zip.c
index c4ab93ab81..44c79195d9 100644
--- a/core/io/zip.c
+++ b/core/io/zip.c
@@ -7,7 +7,7 @@
Modifications for Zip64 support
Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
- For more info read MiniZip_info.txt
+ For more info read LICENSE-MiniZip.txt
Changes
Oct-2009 - Mathias Svensson - Remove old C style function prototypes
diff --git a/core/io/zip.h b/core/io/zip.h
index 85f93568c9..37478b34c0 100644
--- a/core/io/zip.h
+++ b/core/io/zip.h
@@ -6,7 +6,7 @@
Modifications for Zip64 support
Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
- For more info read MiniZip_info.txt
+ For more info read LICENSE-MiniZip.txt
---------------------------------------------------------------------------
diff --git a/core/math/math_defs.h b/core/math/math_defs.h
index eb85039ca3..e6a56c5e45 100644
--- a/core/math/math_defs.h
+++ b/core/math/math_defs.h
@@ -34,6 +34,7 @@
#define CMP_NORMALIZE_TOLERANCE 0.000001
#define CMP_POINT_IN_PLANE_EPSILON 0.00001
+#define USEC_TO_SEC(m_usec) ((m_usec)/1000000.0)
/**
* "Real" is a type that will be translated to either floats or fixed depending
* on the compilation setting
diff --git a/core/object.cpp b/core/object.cpp
index ee4b5e288c..34d6d8487a 100644
--- a/core/object.cpp
+++ b/core/object.cpp
@@ -1249,6 +1249,7 @@ void Object::emit_signal(const StringName& p_name,VARIANT_ARG_DECLARE) {
argc++;
}
+
emit_signal(p_name,argptr,argc);
}
@@ -1382,6 +1383,31 @@ void Object::get_signal_connection_list(const StringName& p_signal,List<Connecti
}
+bool Object::has_persistent_signal_connections() const {
+
+ const StringName *S=NULL;
+
+ while((S=signal_map.next(S))) {
+
+ const Signal *s=&signal_map[*S];
+
+ for(int i=0;i<s->slot_map.size();i++) {
+
+ if (s->slot_map.getv(i).conn.flags&CONNECT_PERSIST)
+ return true;
+ }
+ }
+
+ return false;
+}
+
+void Object::get_signals_connected_to_this(List<Connection> *p_connections) const {
+
+ for (const List<Connection>::Element *E=connections.front();E;E=E->next()) {
+ p_connections->push_back(E->get());
+ }
+}
+
Error Object::connect(const StringName& p_signal, Object *p_to_object, const StringName& p_to_method,const Vector<Variant>& p_binds,uint32_t p_flags) {
@@ -1395,7 +1421,7 @@ Error Object::connect(const StringName& p_signal, Object *p_to_object, const Str
signal_is_valid=true;
if (!signal_is_valid) {
- ERR_EXPLAIN("Attempt to connect nonexistent signal '"+p_signal+"' to method '"+p_to_method+"'");
+ ERR_EXPLAIN("In Object of type '"+String(get_type())+"': Attempt to connect nonexistent signal '"+p_signal+"' to method '"+p_to_object->get_type()+"."+p_to_method+"'");
ERR_FAIL_COND_V(!signal_is_valid,ERR_INVALID_PARAMETER);
}
signal_map[p_signal]=Signal();
@@ -1755,6 +1781,7 @@ bool Object::is_queued_for_deletion() const {
void Object::set_edited(bool p_edited) {
_edited=p_edited;
+ _edited_version++;
}
bool Object::is_edited() const {
@@ -1762,6 +1789,11 @@ bool Object::is_edited() const {
return _edited;
}
+
+uint32_t Object::get_edited_version() const {
+
+ return _edited_version;
+}
#endif
Object::Object() {
@@ -1777,6 +1809,7 @@ Object::Object() {
#ifdef TOOLS_ENABLED
_edited=false;
+ _edited_version=0;
#endif
#ifdef DEBUG_ENABLED
diff --git a/core/object.h b/core/object.h
index c34440100f..9359f4d4b2 100644
--- a/core/object.h
+++ b/core/object.h
@@ -67,6 +67,7 @@ enum PropertyHint {
PROPERTY_HINT_COLOR_NO_ALPHA, ///< used for ignoring alpha component when editing a color
PROPERTY_HINT_IMAGE_COMPRESS_LOSSY,
PROPERTY_HINT_IMAGE_COMPRESS_LOSSLESS,
+ PROPERTY_HINT_OBJECT_ID,
PROPERTY_HINT_MAX,
};
@@ -84,6 +85,7 @@ enum PropertyUsageFlags {
PROPERTY_USAGE_STORE_IF_NONZERO=512, //only store if nonzero
PROPERTY_USAGE_STORE_IF_NONONE=1024, //only store if false
PROPERTY_USAGE_NO_INSTANCE_STATE=2048,
+ PROPERTY_USAGE_RESTART_IF_CHANGED=4096,
PROPERTY_USAGE_DEFAULT=PROPERTY_USAGE_STORAGE|PROPERTY_USAGE_EDITOR|PROPERTY_USAGE_NETWORK,
PROPERTY_USAGE_DEFAULT_INTL=PROPERTY_USAGE_STORAGE|PROPERTY_USAGE_EDITOR|PROPERTY_USAGE_NETWORK|PROPERTY_USAGE_INTERNATIONALIZED,
@@ -387,6 +389,7 @@ friend void postinitialize_handler(Object*);
bool _can_translate;
#ifdef TOOLS_ENABLED
bool _edited;
+ uint32_t _edited_version;
#endif
ScriptInstance *script_instance;
RefPtr script;
@@ -588,6 +591,7 @@ public:
#ifdef TOOLS_ENABLED
void set_edited(bool p_edited);
bool is_edited() const;
+ uint32_t get_edited_version() const; //this function is used to check when something changed beyond a point, it's used mainly for generating previews
#endif
void set_script_instance(ScriptInstance *p_instance);
@@ -600,6 +604,8 @@ public:
void get_signal_list(List<MethodInfo> *p_signals ) const;
void get_signal_connection_list(const StringName& p_signal,List<Connection> *p_connections) const;
void get_all_signal_connections(List<Connection> *p_connections) const;
+ bool has_persistent_signal_connections() const;
+ void get_signals_connected_to_this(List<Connection> *p_connections) const;
Error connect(const StringName& p_signal, Object *p_to_object, const StringName& p_to_method,const Vector<Variant>& p_binds=Vector<Variant>(),uint32_t p_flags=0);
void disconnect(const StringName& p_signal, Object *p_to_object, const StringName& p_to_method);
diff --git a/core/os/input.cpp b/core/os/input.cpp
index 6e1e618d9a..a766ef87fc 100644
--- a/core/os/input.cpp
+++ b/core/os/input.cpp
@@ -60,6 +60,7 @@ void Input::_bind_methods() {
ObjectTypeDB::bind_method(_MD("get_joy_name","device"),&Input::get_joy_name);
ObjectTypeDB::bind_method(_MD("get_joy_guid","device"),&Input::get_joy_guid);
ObjectTypeDB::bind_method(_MD("get_accelerometer"),&Input::get_accelerometer);
+ ObjectTypeDB::bind_method(_MD("get_magnetometer"),&Input::get_magnetometer);
//ObjectTypeDB::bind_method(_MD("get_mouse_pos"),&Input::get_mouse_pos); - this is not the function you want
ObjectTypeDB::bind_method(_MD("get_mouse_speed"),&Input::get_mouse_speed);
ObjectTypeDB::bind_method(_MD("get_mouse_button_mask"),&Input::get_mouse_button_mask);
diff --git a/core/os/input.h b/core/os/input.h
index 535776f39c..46edb30aa1 100644
--- a/core/os/input.h
+++ b/core/os/input.h
@@ -75,6 +75,7 @@ public:
virtual void warp_mouse_pos(const Vector2& p_to)=0;
virtual Vector3 get_accelerometer()=0;
+ virtual Vector3 get_magnetometer()=0;
virtual void action_press(const StringName& p_action)=0;
virtual void action_release(const StringName& p_action)=0;
diff --git a/core/os/main_loop.cpp b/core/os/main_loop.cpp
index 310bbaa3b8..e5feebfbfc 100644
--- a/core/os/main_loop.cpp
+++ b/core/os/main_loop.cpp
@@ -43,6 +43,7 @@ void MainLoop::_bind_methods() {
BIND_VMETHOD( MethodInfo("_initialize") );
BIND_VMETHOD( MethodInfo("_iteration",PropertyInfo(Variant::REAL,"delta")) );
BIND_VMETHOD( MethodInfo("_idle",PropertyInfo(Variant::REAL,"delta")) );
+ BIND_VMETHOD( MethodInfo("_drop_files",PropertyInfo(Variant::STRING_ARRAY,"files"),PropertyInfo(Variant::INT,"screen")) );
BIND_VMETHOD( MethodInfo("_finalize") );
BIND_CONSTANT(NOTIFICATION_WM_MOUSE_ENTER);
@@ -108,6 +109,15 @@ bool MainLoop::idle(float p_time) {
return false;
}
+
+void MainLoop::drop_files(const Vector<String>& p_files,int p_from_screen) {
+
+
+ if (get_script_instance())
+ get_script_instance()->call("_drop_files",p_files,p_from_screen);
+
+}
+
void MainLoop::finish() {
if (get_script_instance()) {
diff --git a/core/os/main_loop.h b/core/os/main_loop.h
index a34014983e..57185d9d3d 100644
--- a/core/os/main_loop.h
+++ b/core/os/main_loop.h
@@ -64,6 +64,8 @@ public:
virtual bool idle(float p_time);
virtual void finish();
+ virtual void drop_files(const Vector<String>& p_files,int p_from_screen=0);
+
void set_init_script(const Ref<Script>& p_init_script);
MainLoop();
diff --git a/core/os/memory.h b/core/os/memory.h
index 8257e66851..5f4c6f929c 100644
--- a/core/os/memory.h
+++ b/core/os/memory.h
@@ -211,7 +211,7 @@ void * operator new(size_t p_size,void *p_pointer,size_t check, const char *p_de
#ifdef DEBUG_MEMORY_ENABLED
-#define memalloc(m_size) Memory::alloc_static(m_size, __FILE__":"__STR(__LINE__)", memalloc.")
+#define memalloc(m_size) Memory::alloc_static(m_size, __FILE__ ":" __STR(__LINE__) ", memalloc.")
#define memrealloc(m_mem,m_size) Memory::realloc_static(m_mem,m_size)
#define memfree(m_size) Memory::free_static(m_size)
@@ -224,8 +224,7 @@ void * operator new(size_t p_size,void *p_pointer,size_t check, const char *p_de
#endif
#ifdef DEBUG_MEMORY_ENABLED
-
-#define dynalloc(m_size) Memory::alloc_dynamic(m_size, __FILE__":"__STR(__LINE__)", type: DYNAMIC")
+#define dynalloc(m_size) Memory::alloc_dynamic(m_size, __FILE__ ":" __STR(__LINE__) ", type: DYNAMIC")
#define dynrealloc(m_mem,m_size) m_mem.resize(m_size)
#else
@@ -248,7 +247,7 @@ _ALWAYS_INLINE_ T *_post_initialize(T *p_obj) {
#ifdef DEBUG_MEMORY_ENABLED
-#define memnew(m_class) _post_initialize(new(__FILE__":"__STR(__LINE__)", memnew type: "__STR(m_class)) m_class)
+#define memnew(m_class) _post_initialize(new(__FILE__ ":" __STR(__LINE__) ", memnew type: " __STR(m_class)) m_class)
#else
@@ -291,7 +290,7 @@ void memdelete_allocator(T *p_class) {
#define memdelete_notnull(m_v) { if (m_v) memdelete(m_v); }
#ifdef DEBUG_MEMORY_ENABLED
-#define memnew_arr( m_class, m_count ) memnew_arr_template<m_class>(m_count,__FILE__":"__STR(__LINE__)", memnew_arr type: "_STR(m_class))
+#define memnew_arr( m_class, m_count ) memnew_arr_template<m_class>(m_count,__FILE__ ":" __STR(__LINE__) ", memnew_arr type: " _STR(m_class))
#else
diff --git a/core/os/os.cpp b/core/os/os.cpp
index 1aee6d9aa2..e501bc2eb5 100644
--- a/core/os/os.cpp
+++ b/core/os/os.cpp
@@ -306,6 +306,15 @@ String OS::get_system_dir(SystemDir p_dir) const {
return ".";
}
+String OS::get_safe_application_name() const {
+ String an = Globals::get_singleton()->get("application/name");
+ Vector<String> invalid_char = String("\\ / : * ? \" < > |").split(" ");
+ for (int i=0;i<invalid_char.size();i++) {
+ an = an.replace(invalid_char[i],"-");
+ }
+ return an;
+}
+
String OS::get_data_dir() const {
return ".";
@@ -530,6 +539,14 @@ String OS::get_joy_guid(int p_device) const {
void OS::set_context(int p_context) {
}
+void OS::set_use_vsync(bool p_enable) {
+
+}
+
+bool OS::is_vsnc_enabled() const{
+
+ return true;
+}
OS::OS() {
last_error=NULL;
@@ -548,6 +565,7 @@ OS::OS() {
_render_thread_mode=RENDER_THREAD_SAFE;
_time_scale=1.0;
_pixel_snap=false;
+ _allow_hidpi=true;
Math::seed(1234567);
}
diff --git a/core/os/os.h b/core/os/os.h
index 160c0495bb..c291d09250 100644
--- a/core/os/os.h
+++ b/core/os/os.h
@@ -60,6 +60,7 @@ class OS {
int _target_fps;
float _time_scale;
bool _pixel_snap;
+ bool _allow_hidpi;
char *last_error;
@@ -160,6 +161,7 @@ public:
virtual void set_current_screen(int p_screen) { }
virtual Point2 get_screen_position(int p_screen=0) const { return Point2(); }
virtual Size2 get_screen_size(int p_screen=0) const { return get_window_size(); }
+ virtual int get_screen_dpi(int p_screen=0) const { return 72; }
virtual Point2 get_window_position() const { return Vector2(); }
virtual void set_window_position(const Point2& p_position) {}
virtual Size2 get_window_size() const=0;
@@ -324,6 +326,7 @@ public:
virtual String get_locale() const;
+ String get_safe_application_name() const;
virtual String get_data_dir() const;
virtual String get_resource_dir() const;
@@ -417,6 +420,10 @@ public:
virtual void set_context(int p_context);
+ virtual void set_use_vsync(bool p_enable);
+ virtual bool is_vsnc_enabled() const;
+
+ bool is_hidpi_allowed() const { return _allow_hidpi; }
OS();
virtual ~OS();
diff --git a/core/print_string.cpp b/core/print_string.cpp
index e364388b7b..6e57822e94 100644
--- a/core/print_string.cpp
+++ b/core/print_string.cpp
@@ -66,7 +66,7 @@ void remove_print_handler(PrintHandlerList *p_handler) {
l=l->next;
}
- OS::get_singleton()->print("print handler list is %p\n",print_handler_list);
+ //OS::get_singleton()->print("print handler list is %p\n",print_handler_list);
ERR_FAIL_COND(l==NULL);
_global_unlock();
diff --git a/core/profile_clock.cpp b/core/profile_clock.cpp
new file mode 100644
index 0000000000..0806275463
--- /dev/null
+++ b/core/profile_clock.cpp
@@ -0,0 +1,3 @@
+#include "profile_clock.h"
+
+
diff --git a/core/profile_clock.h b/core/profile_clock.h
new file mode 100644
index 0000000000..e254580249
--- /dev/null
+++ b/core/profile_clock.h
@@ -0,0 +1,7 @@
+#ifndef PROFILE_CLOCK_H
+#define PROFILE_CLOCK_H
+
+
+
+
+#endif // PROFILE_CLOCK_H
diff --git a/core/resource.cpp b/core/resource.cpp
index 672e64b1bb..97dee3e1d7 100644
--- a/core/resource.cpp
+++ b/core/resource.cpp
@@ -133,6 +133,7 @@ void ResourceImportMetadata::_bind_methods() {
ObjectTypeDB::bind_method(_MD("add_source","path","md5"),&ResourceImportMetadata::add_source, "");
ObjectTypeDB::bind_method(_MD("get_source_path","idx"),&ResourceImportMetadata::get_source_path);
ObjectTypeDB::bind_method(_MD("get_source_md5","idx"),&ResourceImportMetadata::get_source_md5);
+ ObjectTypeDB::bind_method(_MD("set_source_md5","idx", "md5"),&ResourceImportMetadata::set_source_md5);
ObjectTypeDB::bind_method(_MD("remove_source","idx"),&ResourceImportMetadata::remove_source);
ObjectTypeDB::bind_method(_MD("get_source_count"),&ResourceImportMetadata::get_source_count);
ObjectTypeDB::bind_method(_MD("set_option","key","value"),&ResourceImportMetadata::set_option);
@@ -330,6 +331,31 @@ Ref<ResourceImportMetadata> Resource::get_import_metadata() const {
}
+#ifdef TOOLS_ENABLED
+
+uint32_t Resource::hash_edited_version() const {
+
+ uint32_t hash = hash_djb2_one_32(get_edited_version());
+
+ List<PropertyInfo> plist;
+ get_property_list(&plist);
+
+ for (List<PropertyInfo>::Element *E=plist.front();E;E=E->next()) {
+
+ if (E->get().type==Variant::OBJECT && E->get().hint==PROPERTY_HINT_RESOURCE_TYPE) {
+ RES res = get(E->get().name);
+ if (res.is_valid()) {
+ hash = hash_djb2_one_32(res->hash_edited_version(),hash);
+ }
+ }
+ }
+
+ return hash;
+
+}
+
+#endif
+
Resource::Resource() {
@@ -341,6 +367,8 @@ Resource::Resource() {
}
+
+
Resource::~Resource() {
if (path_cache!="")
diff --git a/core/resource.h b/core/resource.h
index 8bcdd6b4b7..958414f62b 100644
--- a/core/resource.h
+++ b/core/resource.h
@@ -142,8 +142,12 @@ public:
Ref<ResourceImportMetadata> get_import_metadata() const;
+
+
#ifdef TOOLS_ENABLED
+ uint32_t hash_edited_version() const;
+
virtual void set_last_modified_time(uint64_t p_time) { last_modified_time=p_time; }
uint64_t get_last_modified_time() const { return last_modified_time; }
diff --git a/core/script_debugger_local.cpp b/core/script_debugger_local.cpp
index 3e442f7f59..dfff54378a 100644
--- a/core/script_debugger_local.cpp
+++ b/core/script_debugger_local.cpp
@@ -179,6 +179,125 @@ void ScriptDebuggerLocal::debug(ScriptLanguage *p_script,bool p_can_continue) {
}
}
+struct _ScriptDebuggerLocalProfileInfoSort {
+
+ bool operator()(const ScriptLanguage::ProfilingInfo &A,const ScriptLanguage::ProfilingInfo &B) const {
+ return A.total_time > B.total_time;
+ }
+};
+
+void ScriptDebuggerLocal::profiling_set_frame_times(float p_frame_time,float p_idle_time,float p_fixed_time,float p_fixed_frame_time) {
+
+
+ frame_time=p_frame_time;
+ idle_time=p_idle_time;
+ fixed_time=p_fixed_time;
+ fixed_frame_time=p_fixed_frame_time;
+
+
+}
+
+void ScriptDebuggerLocal::idle_poll() {
+
+ if (!profiling)
+ return;
+
+ uint64_t diff = OS::get_singleton()->get_ticks_usec() - idle_accum;
+
+ if (diff<1000000) //show every one second
+ return;
+
+ idle_accum = OS::get_singleton()->get_ticks_usec();
+
+ int ofs=0;
+ for(int i=0;i<ScriptServer::get_language_count();i++) {
+ ofs+=ScriptServer::get_language(i)->profiling_get_frame_data(&pinfo[ofs],pinfo.size()-ofs);
+ }
+
+ SortArray<ScriptLanguage::ProfilingInfo,_ScriptDebuggerLocalProfileInfoSort> sort;
+ sort.sort(pinfo.ptr(),ofs);
+
+ //falta el frame time
+
+ uint64_t script_time_us=0;
+
+ for(int i=0;i<ofs;i++) {
+
+ script_time_us+=pinfo[i].self_time;
+ }
+
+
+ float script_time=USEC_TO_SEC(script_time_us);
+
+ float total_time=frame_time;
+
+ //print script total
+
+ print_line("FRAME: total: "+rtos(frame_time)+" script: "+rtos(script_time)+"/"+itos(script_time*100/total_time)+" %");
+
+ for(int i=0;i<ofs;i++) {
+
+ print_line(itos(i)+":"+pinfo[i].signature);
+ float tt=USEC_TO_SEC(pinfo[i].total_time);
+ float st=USEC_TO_SEC(pinfo[i].self_time);
+ print_line("\ttotal: "+rtos(tt)+"/"+itos(tt*100/total_time)+" % \tself: "+rtos(st)+"/"+itos(st*100/total_time)+" % tcalls: "+itos(pinfo[i].call_count));
+ }
+
+
+
+}
+
+void ScriptDebuggerLocal::profiling_start() {
+
+ for(int i=0;i<ScriptServer::get_language_count();i++) {
+ ScriptServer::get_language(i)->profiling_start();
+ }
+
+
+ print_line("BEGIN PROFILING");
+ profiling=true;
+ pinfo.resize(32768);
+ frame_time=0;
+ fixed_time=0;
+ idle_time=0;
+ fixed_frame_time=0;
+
+}
+
+
+void ScriptDebuggerLocal::profiling_end() {
+
+ int ofs=0;
+
+ for(int i=0;i<ScriptServer::get_language_count();i++) {
+ ofs+=ScriptServer::get_language(i)->profiling_get_accumulated_data(&pinfo[ofs],pinfo.size()-ofs);
+ }
+
+ SortArray<ScriptLanguage::ProfilingInfo,_ScriptDebuggerLocalProfileInfoSort> sort;
+ sort.sort(pinfo.ptr(),ofs);
+
+ uint64_t total_us=0;
+ for(int i=0;i<ofs;i++) {
+ total_us+=pinfo[i].self_time;
+ }
+
+ float total_time=total_us/1000000.0;
+
+ for(int i=0;i<ofs;i++) {
+
+ print_line(itos(i)+":"+pinfo[i].signature);
+ float tt=USEC_TO_SEC(pinfo[i].total_time);;
+ float st=USEC_TO_SEC(pinfo[i].self_time);
+ print_line("\ttotal_ms: "+rtos(tt)+"\tself_ms: "+rtos(st)+"total%: "+itos(tt*100/total_time)+"\tself%: "+itos(st*100/total_time)+"\tcalls: "+itos(pinfo[i].call_count));
+ }
+
+ for(int i=0;i<ScriptServer::get_language_count();i++) {
+ ScriptServer::get_language(i)->profiling_stop();
+ }
+
+ profiling=false;
+}
+
void ScriptDebuggerLocal::send_message(const String& p_message, const Array &p_args) {
print_line("MESSAGE: '"+p_message+"' - "+String(Variant(p_args)));
@@ -186,4 +305,6 @@ void ScriptDebuggerLocal::send_message(const String& p_message, const Array &p_a
ScriptDebuggerLocal::ScriptDebuggerLocal() {
+ profiling=false;
+ idle_accum=OS::get_singleton()->get_ticks_usec();
}
diff --git a/core/script_debugger_local.h b/core/script_debugger_local.h
index 4abacfc519..ffe8dce445 100644
--- a/core/script_debugger_local.h
+++ b/core/script_debugger_local.h
@@ -32,10 +32,29 @@
#include "script_language.h"
class ScriptDebuggerLocal : public ScriptDebugger {
+
+ bool profiling;
+ float frame_time,idle_time,fixed_time,fixed_frame_time;
+ uint64_t idle_accum;
+
+ Vector<ScriptLanguage::ProfilingInfo> pinfo;
+
+
public:
void debug(ScriptLanguage *p_script,bool p_can_continue);
virtual void send_message(const String& p_message, const Array& p_args);
+
+ virtual bool is_profiling() const { return profiling; }
+ virtual void add_profiling_frame_data(const StringName& p_name,const Array& p_data) {}
+
+ virtual void idle_poll();
+
+ virtual void profiling_start();
+ virtual void profiling_end();
+ virtual void profiling_set_frame_times(float p_frame_time,float p_idle_time,float p_fixed_time,float p_fixed_frame_time);
+
+
ScriptDebuggerLocal();
};
diff --git a/core/script_debugger_remote.cpp b/core/script_debugger_remote.cpp
index b56ff4c0e1..99d1e22c07 100644
--- a/core/script_debugger_remote.cpp
+++ b/core/script_debugger_remote.cpp
@@ -125,6 +125,10 @@ static ObjectID safe_get_instance_id(const Variant& p_v) {
void ScriptDebuggerRemote::debug(ScriptLanguage *p_script,bool p_can_continue) {
+ //this function is called when there is a debugger break (bug on script)
+ //or when execution is paused from editor
+
+
if (!tcp_client->is_connected()) {
ERR_EXPLAIN("Script Debugger failed to connect, but being used anyway.");
ERR_FAIL();
@@ -135,6 +139,8 @@ void ScriptDebuggerRemote::debug(ScriptLanguage *p_script,bool p_can_continue) {
packet_peer_stream->put_var(p_can_continue);
packet_peer_stream->put_var(p_script->debug_get_error());
+ skip_profile_frame=true; // to avoid super long frame time for the frame
+
Input::MouseMode mouse_mode=Input::get_singleton()->get_mouse_mode();
if (mouse_mode!=Input::MOUSE_MODE_VISIBLE)
Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_VISIBLE);
@@ -277,6 +283,16 @@ void ScriptDebuggerRemote::debug(ScriptLanguage *p_script,bool p_can_continue) {
} else if (command=="request_video_mem") {
_send_video_memory();
+ } else if (command=="inspect_object") {
+
+ ObjectID id = cmd[1];
+ _send_object_id(id);
+ } else if (command=="set_object_property") {
+
+ _set_object_property(cmd[1],cmd[2],cmd[3]);
+
+ } else if (command=="reload_scripts") {
+ reload_all_scripts=true;
} else if (command=="breakpoint") {
bool set = cmd[3];
@@ -372,7 +388,7 @@ void ScriptDebuggerRemote::line_poll() {
//the purpose of this is just processing events every now and then when the script might get too busy
//otherwise bugs like infinite loops cant be catched
- if (poll_every%512==0)
+ if (poll_every%2048==0)
_poll_events();
poll_every++;
@@ -533,8 +549,94 @@ bool ScriptDebuggerRemote::_parse_live_edit(const Array& cmd) {
return true;
}
+
+void ScriptDebuggerRemote::_send_object_id(ObjectID p_id) {
+
+ Object* obj = ObjectDB::get_instance(p_id);
+ if (!obj)
+ return;
+
+ List<PropertyInfo> pinfo;
+ obj->get_property_list(&pinfo,true);
+
+ int props_to_send=0;
+ for (List<PropertyInfo>::Element *E=pinfo.front();E;E=E->next()) {
+
+ if (E->get().usage&(PROPERTY_USAGE_EDITOR|PROPERTY_USAGE_CATEGORY)) {
+ props_to_send++;
+ }
+ }
+
+ packet_peer_stream->put_var("message:inspect_object");
+ packet_peer_stream->put_var(props_to_send*5+4);
+ packet_peer_stream->put_var(p_id);
+ packet_peer_stream->put_var(obj->get_type());
+ if (obj->is_type("Resource") || obj->is_type("Node"))
+ packet_peer_stream->put_var(obj->call("get_path"));
+ else
+ packet_peer_stream->put_var("");
+
+ packet_peer_stream->put_var(props_to_send);
+
+ for (List<PropertyInfo>::Element *E=pinfo.front();E;E=E->next()) {
+
+ if (E->get().usage&(PROPERTY_USAGE_EDITOR|PROPERTY_USAGE_CATEGORY)) {
+
+ if (E->get().usage&PROPERTY_USAGE_CATEGORY) {
+ packet_peer_stream->put_var("*"+E->get().name);
+ } else {
+ packet_peer_stream->put_var(E->get().name);
+ }
+
+ Variant var = obj->get(E->get().name);
+
+ if (E->get().type==Variant::OBJECT || var.get_type()==Variant::OBJECT) {
+
+ ObjectID id2;
+ Object *obj=var;
+ if (obj) {
+ id2=obj->get_instance_ID();
+ } else {
+ id2=0;
+ }
+
+ packet_peer_stream->put_var(Variant::INT); //hint string
+ packet_peer_stream->put_var(PROPERTY_HINT_OBJECT_ID); //hint
+ packet_peer_stream->put_var(E->get().hint_string); //hint string
+ packet_peer_stream->put_var(id2); //value
+ } else {
+ packet_peer_stream->put_var(E->get().type);
+ packet_peer_stream->put_var(E->get().hint);
+ packet_peer_stream->put_var(E->get().hint_string);
+ //only send information that can be sent..
+ if (var.get_type()==Variant::IMAGE) {
+ var=Image();
+ }
+ if (var.get_type()>=Variant::DICTIONARY) {
+ var=Array(); //send none for now, may be to big
+ }
+ packet_peer_stream->put_var(var);
+ }
+
+ }
+ }
+
+}
+
+void ScriptDebuggerRemote::_set_object_property(ObjectID p_id, const String& p_property, const Variant& p_value) {
+
+ Object* obj = ObjectDB::get_instance(p_id);
+ if (!obj)
+ return;
+
+ obj->set(p_property,p_value);
+}
+
void ScriptDebuggerRemote::_poll_events() {
+ //this si called from ::idle_poll, happens only when running the game,
+ //does not get called while on debug break
+
while(packet_peer_stream->get_available_packet_count()>0) {
_get_output();
@@ -566,6 +668,40 @@ void ScriptDebuggerRemote::_poll_events() {
} else if (command=="request_video_mem") {
_send_video_memory();
+ } else if (command=="inspect_object") {
+
+ ObjectID id = cmd[1];
+ _send_object_id(id);
+ } else if (command=="set_object_property") {
+
+ _set_object_property(cmd[1],cmd[2],cmd[3]);
+
+ } else if (command=="start_profiling") {
+
+ for(int i=0;i<ScriptServer::get_language_count();i++) {
+ ScriptServer::get_language(i)->profiling_start();
+ }
+
+ max_frame_functions=cmd[1];
+ profiler_function_signature_map.clear();
+ profiling=true;
+ frame_time=0;
+ idle_time=0;
+ fixed_time=0;
+ fixed_frame_time=0;
+
+ print_line("PROFILING ALRIGHT!");
+
+ } else if (command=="stop_profiling") {
+
+ for(int i=0;i<ScriptServer::get_language_count();i++) {
+ ScriptServer::get_language(i)->profiling_stop();
+ }
+ profiling=false;
+ _send_profiling_data(false);
+ print_line("PROFILING END!");
+ } else if (command=="reload_scripts") {
+ reload_all_scripts=true;
} else if (command=="breakpoint") {
bool set = cmd[3];
@@ -582,8 +718,113 @@ void ScriptDebuggerRemote::_poll_events() {
}
+void ScriptDebuggerRemote::_send_profiling_data(bool p_for_frame) {
+
+
+
+
+ int ofs=0;
+
+ for(int i=0;i<ScriptServer::get_language_count();i++) {
+ if (p_for_frame)
+ ofs+=ScriptServer::get_language(i)->profiling_get_frame_data(&profile_info[ofs],profile_info.size()-ofs);
+ else
+ ofs+=ScriptServer::get_language(i)->profiling_get_accumulated_data(&profile_info[ofs],profile_info.size()-ofs);
+ }
+
+ for(int i=0;i<ofs;i++) {
+ profile_info_ptrs[i]=&profile_info[i];
+ }
+
+ SortArray<ScriptLanguage::ProfilingInfo*,ProfileInfoSort> sa;
+ sa.sort(profile_info_ptrs.ptr(),ofs);
+
+ int to_send=MIN(ofs,max_frame_functions);
+
+ //check signatures first
+ uint64_t total_script_time=0;
+
+ for(int i=0;i<to_send;i++) {
+
+ if (!profiler_function_signature_map.has(profile_info_ptrs[i]->signature)) {
+
+ int idx = profiler_function_signature_map.size();
+ packet_peer_stream->put_var("profile_sig");
+ packet_peer_stream->put_var(2);
+ packet_peer_stream->put_var(profile_info_ptrs[i]->signature);
+ packet_peer_stream->put_var(idx);
+
+ profiler_function_signature_map[profile_info_ptrs[i]->signature]=idx;
+
+
+ }
+
+ total_script_time+=profile_info_ptrs[i]->self_time;
+ }
+
+ //send frames then
+
+ if (p_for_frame) {
+ packet_peer_stream->put_var("profile_frame");
+ packet_peer_stream->put_var(8+profile_frame_data.size()*2+to_send*4);
+ } else {
+ packet_peer_stream->put_var("profile_total");
+ packet_peer_stream->put_var(8+to_send*4);
+ }
+
+
+ packet_peer_stream->put_var(OS::get_singleton()->get_frames_drawn()); //total frame time
+ packet_peer_stream->put_var(frame_time); //total frame time
+ packet_peer_stream->put_var(idle_time); //idle frame time
+ packet_peer_stream->put_var(fixed_time); //fixed frame time
+ packet_peer_stream->put_var(fixed_frame_time); //fixed frame time
+
+ packet_peer_stream->put_var(USEC_TO_SEC(total_script_time)); //total script execution time
+
+ if (p_for_frame) {
+
+ packet_peer_stream->put_var(profile_frame_data.size()); //how many profile framedatas to send
+ packet_peer_stream->put_var(to_send); //how many script functions to send
+ for (int i=0;i<profile_frame_data.size();i++) {
+
+
+ packet_peer_stream->put_var(profile_frame_data[i].name);
+ packet_peer_stream->put_var(profile_frame_data[i].data);
+ }
+ } else {
+ packet_peer_stream->put_var(0); //how many script functions to send
+ packet_peer_stream->put_var(to_send); //how many script functions to send
+ }
+
+
+
+ for(int i=0;i<to_send;i++) {
+
+ int sig_id=-1;
+
+ if (profiler_function_signature_map.has(profile_info_ptrs[i]->signature)) {
+ sig_id=profiler_function_signature_map[profile_info_ptrs[i]->signature];
+ }
+
+
+
+ packet_peer_stream->put_var(sig_id);
+ packet_peer_stream->put_var(profile_info_ptrs[i]->call_count);
+ packet_peer_stream->put_var(profile_info_ptrs[i]->total_time/1000000.0);
+ packet_peer_stream->put_var(profile_info_ptrs[i]->self_time/1000000.0);
+ }
+
+ if (p_for_frame) {
+ profile_frame_data.clear();
+ }
+
+}
+
void ScriptDebuggerRemote::idle_poll() {
+ // this function is called every frame, except when there is a debugger break (::debug() in this class)
+ // execution stops and remains in the ::debug function
+
_get_output();
@@ -615,6 +856,24 @@ void ScriptDebuggerRemote::idle_poll() {
}
}
+ if (profiling) {
+
+ if (skip_profile_frame) {
+ skip_profile_frame=false;
+ } else {
+ //send profiling info normally
+ _send_profiling_data(true);
+ }
+ }
+
+ if (reload_all_scripts) {
+
+ for(int i=0;i<ScriptServer::get_language_count();i++) {
+ ScriptServer::get_language(i)->reload_all_scripts();
+ }
+ reload_all_scripts=false;
+ }
+
_poll_events();
}
@@ -687,6 +946,50 @@ void ScriptDebuggerRemote::set_live_edit_funcs(LiveEditFuncs *p_funcs) {
live_edit_funcs=p_funcs;
}
+bool ScriptDebuggerRemote::is_profiling() const {
+
+ return profiling;
+}
+void ScriptDebuggerRemote::add_profiling_frame_data(const StringName& p_name,const Array& p_data){
+
+ int idx=-1;
+ for(int i=0;i<profile_frame_data.size();i++) {
+ if (profile_frame_data[i].name==p_name) {
+ idx=i;
+ break;
+ }
+ }
+
+ FrameData fd;
+ fd.name=p_name;
+ fd.data=p_data;
+
+ if (idx==-1) {
+ profile_frame_data.push_back(fd);
+ } else {
+ profile_frame_data[idx]=fd;
+ }
+}
+
+void ScriptDebuggerRemote::profiling_start() {
+ //ignores this, uses it via connnection
+}
+
+void ScriptDebuggerRemote::profiling_end() {
+ //ignores this, uses it via connnection
+}
+
+void ScriptDebuggerRemote::profiling_set_frame_times(float p_frame_time, float p_idle_time, float p_fixed_time, float p_fixed_frame_time) {
+
+ frame_time=p_frame_time;
+ idle_time=p_idle_time;
+ fixed_time=p_fixed_time;
+ fixed_frame_time=p_fixed_frame_time;
+
+
+}
+
+
ScriptDebuggerRemote::ResourceUsageFunc ScriptDebuggerRemote::resource_usage_func=NULL;
ScriptDebuggerRemote::ScriptDebuggerRemote() {
@@ -710,11 +1013,18 @@ ScriptDebuggerRemote::ScriptDebuggerRemote() {
char_count=0;
msec_count=0;
last_msec=0;
+ skip_profile_frame=false;
eh.errfunc=_err_handler;
eh.userdata=this;
add_error_handler(&eh);
+ profile_info.resize(CLAMP(int(Globals::get_singleton()->get("debug/profiler_max_functions")),128,65535));
+ profile_info_ptrs.resize(profile_info.size());
+ profiling=false;
+ max_frame_functions=16;
+ reload_all_scripts=false;
+
}
ScriptDebuggerRemote::~ScriptDebuggerRemote() {
@@ -723,4 +1033,5 @@ ScriptDebuggerRemote::~ScriptDebuggerRemote() {
remove_error_handler(&eh);
memdelete(mutex);
+
}
diff --git a/core/script_debugger_remote.h b/core/script_debugger_remote.h
index f18e212236..c6a00e189f 100644
--- a/core/script_debugger_remote.h
+++ b/core/script_debugger_remote.h
@@ -44,6 +44,24 @@ class ScriptDebuggerRemote : public ScriptDebugger {
};
+ struct ProfileInfoSort {
+
+ bool operator()(ScriptLanguage::ProfilingInfo*A,ScriptLanguage::ProfilingInfo*B) const {
+ return A->total_time < B->total_time;
+ }
+ };
+
+ Vector<ScriptLanguage::ProfilingInfo> profile_info;
+ Vector<ScriptLanguage::ProfilingInfo*> profile_info_ptrs;
+
+ Map<StringName,int> profiler_function_signature_map;
+ float frame_time,idle_time,fixed_time,fixed_frame_time;
+
+ bool profiling;
+ int max_frame_functions;
+ bool skip_profile_frame;
+ bool reload_all_scripts;
+
Ref<StreamPeerTCP> tcp_client;
Ref<PacketPeerStream> packet_peer_stream;
@@ -88,17 +106,32 @@ class ScriptDebuggerRemote : public ScriptDebugger {
uint32_t poll_every;
+
bool _parse_live_edit(const Array &p_command);
RequestSceneTreeMessageFunc request_scene_tree;
void *request_scene_tree_ud;
+ void _set_object_property(ObjectID p_id, const String& p_property, const Variant& p_value);
+
+ void _send_object_id(ObjectID p_id);
void _send_video_memory();
LiveEditFuncs *live_edit_funcs;
ErrorHandlerList eh;
static void _err_handler(void*,const char*,const char*,int p_line,const char *, const char *,ErrorHandlerType p_type);
+ void _send_profiling_data(bool p_for_frame);
+
+
+ struct FrameData {
+
+ StringName name;
+ Array data;
+ };
+
+ Vector<FrameData> profile_frame_data;
+
public:
@@ -129,6 +162,14 @@ public:
virtual void set_request_scene_tree_message_func(RequestSceneTreeMessageFunc p_func, void *p_udata);
virtual void set_live_edit_funcs(LiveEditFuncs *p_funcs);
+ virtual bool is_profiling() const;
+ virtual void add_profiling_frame_data(const StringName& p_name,const Array& p_data);
+
+ virtual void profiling_start();
+ virtual void profiling_end();
+ virtual void profiling_set_frame_times(float p_frame_time,float p_idle_time,float p_fixed_time,float p_fixed_frame_time);
+
+
ScriptDebuggerRemote();
~ScriptDebuggerRemote();
};
diff --git a/core/script_language.cpp b/core/script_language.cpp
index 1503418269..b3116a0297 100644
--- a/core/script_language.cpp
+++ b/core/script_language.cpp
@@ -51,7 +51,7 @@ void Script::_bind_methods() {
ObjectTypeDB::bind_method(_MD("has_source_code"),&Script::has_source_code);
ObjectTypeDB::bind_method(_MD("get_source_code"),&Script::get_source_code);
ObjectTypeDB::bind_method(_MD("set_source_code","source"),&Script::set_source_code);
- ObjectTypeDB::bind_method(_MD("reload"),&Script::reload);
+ ObjectTypeDB::bind_method(_MD("reload","keep_state"),&Script::reload,DEFVAL(false));
}
diff --git a/core/script_language.h b/core/script_language.h
index 1be1aabdab..d8b4c61b6c 100644
--- a/core/script_language.h
+++ b/core/script_language.h
@@ -87,7 +87,7 @@ public:
virtual bool has_source_code() const=0;
virtual String get_source_code() const=0;
virtual void set_source_code(const String& p_code)=0;
- virtual Error reload()=0;
+ virtual Error reload(bool p_keep_state=false)=0;
virtual bool is_tool() const=0;
@@ -127,6 +127,8 @@ public:
virtual Ref<Script> get_script() const=0;
+ virtual bool is_placeholder() const { return false; }
+
virtual ScriptLanguage *get_language()=0;
virtual ~ScriptInstance();
};
@@ -189,12 +191,28 @@ public:
virtual Vector<StackInfo> debug_get_current_stack_info() { return Vector<StackInfo>(); }
+ virtual void reload_all_scripts()=0;
/* LOADER FUNCTIONS */
virtual void get_recognized_extensions(List<String> *p_extensions) const=0;
virtual void get_public_functions(List<MethodInfo> *p_functions) const=0;
virtual void get_public_constants(List<Pair<String,Variant> > *p_constants) const=0;
+ struct ProfilingInfo {
+ StringName signature;
+ uint64_t call_count;
+ uint64_t total_time;
+ uint64_t self_time;
+
+ };
+
+ virtual void profiling_start()=0;
+ virtual void profiling_stop()=0;
+
+ virtual int profiling_get_accumulated_data(ProfilingInfo *p_info_arr,int p_info_max)=0;
+ virtual int profiling_get_frame_data(ProfilingInfo *p_info_arr,int p_info_max)=0;
+
+
virtual void frame();
virtual ~ScriptLanguage() {};
@@ -233,6 +251,8 @@ public:
void update(const List<PropertyInfo> &p_properties,const Map<StringName,Variant>& p_values); //likely changed in editor
+ virtual bool is_placeholder() const { return true; }
+
PlaceHolderScriptInstance(ScriptLanguage *p_language, Ref<Script> p_script,Object *p_owner);
~PlaceHolderScriptInstance();
@@ -309,6 +329,13 @@ public:
virtual void set_request_scene_tree_message_func(RequestSceneTreeMessageFunc p_func, void *p_udata) {}
virtual void set_live_edit_funcs(LiveEditFuncs *p_funcs) {}
+ virtual bool is_profiling() const=0;
+ virtual void add_profiling_frame_data(const StringName& p_name,const Array& p_data)=0;
+ virtual void profiling_start()=0;
+ virtual void profiling_end()=0;
+ virtual void profiling_set_frame_times(float p_frame_time,float p_idle_time,float p_fixed_time,float p_fixed_frame_time)=0;
+
+
ScriptDebugger();
virtual ~ScriptDebugger() {singleton=NULL;}
diff --git a/core/translation.cpp b/core/translation.cpp
index 85e207e08d..ee0ef2ea09 100644
--- a/core/translation.cpp
+++ b/core/translation.cpp
@@ -672,9 +672,11 @@ void TranslationServer::set_tool_translation(const Ref<Translation>& p_translati
StringName TranslationServer::tool_translate(const StringName& p_message) const {
if (tool_translation.is_valid()) {
- StringName r = tool_translation->tr(p_message);
- if (r)
+ StringName r = tool_translation->get_message(p_message);
+
+ if (r) {
return r;
+ }
}
return p_message;
diff --git a/core/ustring.cpp b/core/ustring.cpp
index c2520a7a86..a039ba11cd 100644
--- a/core/ustring.cpp
+++ b/core/ustring.cpp
@@ -3635,7 +3635,7 @@ String String::percent_decode() const {
CharString cs = utf8();
for(int i=0;i<cs.length();i++) {
-
+
uint8_t c = cs[i];
if (c=='%' && i<length()-2) {
diff --git a/core/variant_call.cpp b/core/variant_call.cpp
index 4be763a511..eb3ab65f40 100644
--- a/core/variant_call.cpp
+++ b/core/variant_call.cpp
@@ -262,7 +262,7 @@ static void _call_##m_type##_##m_method(Variant& r_ret,Variant& p_self,const Var
VCALL_LOCALMEM0R(String,basename);
VCALL_LOCALMEM1R(String,plus_file);
VCALL_LOCALMEM1R(String,ord_at);
- //VCALL_LOCALMEM2R(String,erase);
+ VCALL_LOCALMEM2(String,erase);
VCALL_LOCALMEM0R(String,hash);
VCALL_LOCALMEM0R(String,md5_text);
VCALL_LOCALMEM0R(String,md5_buffer);
@@ -339,6 +339,7 @@ static void _call_##m_type##_##m_method(Variant& r_ret,Variant& p_self,const Var
VCALL_LOCALMEM1R(Vector2,reflect);
VCALL_LOCALMEM0R(Vector2,angle);
// VCALL_LOCALMEM1R(Vector2,cross);
+ VCALL_LOCALMEM0R(Vector2,abs);
VCALL_LOCALMEM0R(Rect2,get_area);
VCALL_LOCALMEM1R(Rect2,intersects);
@@ -445,6 +446,7 @@ static void _call_##m_type##_##m_method(Variant& r_ret,Variant& p_self,const Var
VCALL_LOCALMEM1(Dictionary,erase);
VCALL_LOCALMEM0R(Dictionary,hash);
VCALL_LOCALMEM0R(Dictionary,keys);
+ VCALL_LOCALMEM0R(Dictionary,values);
VCALL_LOCALMEM1R(Dictionary,parse_json);
VCALL_LOCALMEM0R(Dictionary,to_json);
@@ -463,6 +465,8 @@ static void _call_##m_type##_##m_method(Variant& r_ret,Variant& p_self,const Var
VCALL_LOCALMEM2(Array,insert);
VCALL_LOCALMEM1(Array,remove);
VCALL_LOCALMEM1R(Array,find);
+ VCALL_LOCALMEM1R(Array,find_last);
+ VCALL_LOCALMEM1R(Array,count);
VCALL_LOCALMEM1(Array,erase);
VCALL_LOCALMEM0(Array,sort);
VCALL_LOCALMEM2(Array,sort_custom);
@@ -1282,7 +1286,7 @@ _VariantCall::addfunc(Variant::m_vtype,Variant::m_ret,_SCS(#m_method),VCALL(m_cl
ADDFUNC0(STRING,STRING,String,basename,varray());
ADDFUNC1(STRING,STRING,String,plus_file,STRING,"file",varray());
ADDFUNC1(STRING,STRING,String,ord_at,INT,"at",varray());
-// ADDFUNC2(STRING,String,erase,INT,INT,varray());
+ ADDFUNC2(STRING,NIL,String,erase,INT,"pos",INT,"chars", varray());
ADDFUNC0(STRING,INT,String,hash,varray());
ADDFUNC0(STRING,STRING,String,md5_text,varray());
ADDFUNC0(STRING,RAW_ARRAY,String,md5_buffer,varray());
@@ -1333,6 +1337,7 @@ _VariantCall::addfunc(Variant::m_vtype,Variant::m_ret,_SCS(#m_method),VCALL(m_cl
ADDFUNC1(VECTOR2,VECTOR2,Vector2,slide,VECTOR2,"vec",varray());
ADDFUNC1(VECTOR2,VECTOR2,Vector2,reflect,VECTOR2,"vec",varray());
//ADDFUNC1(VECTOR2,REAL,Vector2,cross,VECTOR2,"with",varray());
+ ADDFUNC0(VECTOR2,VECTOR2,Vector2,abs,varray());
ADDFUNC0(RECT2,REAL,Rect2,get_area,varray());
ADDFUNC1(RECT2,BOOL,Rect2,intersects,RECT2,"b",varray());
@@ -1432,6 +1437,7 @@ _VariantCall::addfunc(Variant::m_vtype,Variant::m_ret,_SCS(#m_method),VCALL(m_cl
ADDFUNC1(DICTIONARY,NIL,Dictionary,erase,NIL,"value",varray());
ADDFUNC0(DICTIONARY,INT,Dictionary,hash,varray());
ADDFUNC0(DICTIONARY,ARRAY,Dictionary,keys,varray());
+ ADDFUNC0(DICTIONARY,ARRAY,Dictionary,values,varray());
ADDFUNC1(DICTIONARY,INT,Dictionary,parse_json,STRING,"json",varray());
ADDFUNC0(DICTIONARY,STRING,Dictionary,to_json,varray());
@@ -1448,6 +1454,8 @@ _VariantCall::addfunc(Variant::m_vtype,Variant::m_ret,_SCS(#m_method),VCALL(m_cl
ADDFUNC1(ARRAY,NIL,Array,remove,INT,"pos",varray());
ADDFUNC1(ARRAY,NIL,Array,erase,NIL,"value",varray());
ADDFUNC1(ARRAY,INT,Array,find,NIL,"value",varray());
+ ADDFUNC1(ARRAY,INT,Array,find_last,NIL,"value",varray());
+ ADDFUNC1(ARRAY,INT,Array,count,NIL,"value",varray());
ADDFUNC0(ARRAY,NIL,Array,pop_back,varray());
ADDFUNC0(ARRAY,NIL,Array,pop_front,varray());
ADDFUNC0(ARRAY,NIL,Array,sort,varray());
diff --git a/core/variant_op.cpp b/core/variant_op.cpp
index a9cc37168d..6065094da7 100644
--- a/core/variant_op.cpp
+++ b/core/variant_op.cpp
@@ -1354,7 +1354,7 @@ void Variant::set(const Variant& p_index, const Variant& p_value, bool *r_valid)
return;
} else if (*str=="r8" ) {
valid=true;
- v->g=float(p_value)/255.0;
+ v->r=float(p_value)/255.0;
return;
} else if (*str=="g8" ) {
valid=true;
@@ -2213,16 +2213,16 @@ Variant Variant::get(const Variant& p_index, bool *r_valid) const {
return v->get_v();
} else if (*str=="r8") {
valid=true;
- return v->r*255.0;
+ return (int)Math::round(v->r*255.0);
} else if (*str=="g8" ) {
valid=true;
- return v->g*255.0;
+ return (int)Math::round(v->g*255.0);
} else if (*str=="b8" ) {
valid=true;
- return v->b*255.0;
+ return (int)Math::round(v->b*255.0);
} else if (*str=="a8" ) {
valid=true;
- return v->a*255.0;
+ return (int)Math::round(v->a*255.0);
}
} else if (p_index.get_type()==Variant::INT) {
diff --git a/core/variant_parser.cpp b/core/variant_parser.cpp
index 8bd1fddfad..e2786b8099 100644
--- a/core/variant_parser.cpp
+++ b/core/variant_parser.cpp
@@ -2011,7 +2011,44 @@ Error VariantWriter::write(const Variant& p_variant, StoreStringFunc p_store_str
} break;
case Variant::INPUT_EVENT: {
- p_store_string_func(p_store_string_ud,"InputEvent()"); //will be added later
+ String str="InputEvent(";
+
+ InputEvent ev=p_variant;
+ switch(ev.type) {
+ case InputEvent::KEY: {
+
+ str+="KEY,"+itos(ev.key.scancode);
+ String mod;
+ if (ev.key.mod.alt)
+ mod+="A";
+ if (ev.key.mod.shift)
+ mod+="S";
+ if (ev.key.mod.control)
+ mod+="C";
+ if (ev.key.mod.meta)
+ mod+="M";
+
+ if (mod!=String())
+ str+=","+mod;
+ } break;
+ case InputEvent::MOUSE_BUTTON: {
+
+ str+="MBUTTON,"+itos(ev.mouse_button.button_index);
+ } break;
+ case InputEvent::JOYSTICK_BUTTON: {
+ str+="JBUTTON,"+itos(ev.joy_button.button_index);
+
+ } break;
+ case InputEvent::JOYSTICK_MOTION: {
+ str+="JAXIS,"+itos(ev.joy_motion.axis)+","+itos(ev.joy_motion.axis_value);
+ } break;
+ default: {}
+ }
+
+ str+=")";
+
+ p_store_string_func(p_store_string_ud,str); //will be added later
+
} break;
case Variant::DICTIONARY: {
diff --git a/demos/2d/area_input/box_area.png b/demos/2d/area_input/box_area.png
deleted file mode 100644
index ba7c37f7de..0000000000
--- a/demos/2d/area_input/box_area.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/area_input/circle_area.png b/demos/2d/area_input/circle_area.png
deleted file mode 100644
index 3cc24c8a0c..0000000000
--- a/demos/2d/area_input/circle_area.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/area_input/engine.cfg b/demos/2d/area_input/engine.cfg
deleted file mode 100644
index ce87f39547..0000000000
--- a/demos/2d/area_input/engine.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-[application]
-
-name="Area 2D Input Events"
-main_scene="res://input.tscn"
-icon="res://icon.png"
diff --git a/demos/2d/area_input/icon.png b/demos/2d/area_input/icon.png
deleted file mode 100644
index 2f412ecf68..0000000000
--- a/demos/2d/area_input/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/area_input/input.gd b/demos/2d/area_input/input.gd
deleted file mode 100644
index e9cc9f3c1d..0000000000
--- a/demos/2d/area_input/input.gd
+++ /dev/null
@@ -1,15 +0,0 @@
-
-extends Area2D
-
-
-# Virtual from CollisionObject2D (also available as signal)
-func _input_event(viewport, event, shape_idx):
- # Convert event to local coordinates
- if (event.type == InputEvent.MOUSE_MOTION):
- event = make_input_local(event)
- get_node("label").set_text(str(event.pos))
-
-
-# Virtual from CollisionObject2D (also available as signal)
-func _mouse_exit():
- get_node("label").set_text("")
diff --git a/demos/2d/area_input/input.tscn b/demos/2d/area_input/input.tscn
deleted file mode 100644
index 81c0ed918d..0000000000
--- a/demos/2d/area_input/input.tscn
+++ /dev/null
@@ -1,109 +0,0 @@
-[gd_scene load_steps=6 format=1]
-
-[ext_resource path="res://input.gd" type="Script" id=1]
-[ext_resource path="res://box_area.png" type="Texture" id=2]
-[ext_resource path="res://circle_area.png" type="Texture" id=3]
-
-[sub_resource type="RectangleShape2D" id=1]
-
-custom_solver_bias = 0.0
-extents = Vector2( 64, 64 )
-
-[sub_resource type="CircleShape2D" id=2]
-
-custom_solver_bias = 0.0
-radius = 64.0
-
-[node name="base" type="Node2D"]
-
-[node name="box" type="Area2D" parent="."]
-
-transform/pos = Vector2( 212, 281 )
-transform/rot = 35.4081
-input/pickable = true
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-gravity_vec = Vector2( 0, 1 )
-gravity = 98.0
-linear_damp = 0.1
-angular_damp = 1.0
-script/script = ExtResource( 1 )
-
-[node name="sprite" type="Sprite" parent="box"]
-
-texture = ExtResource( 2 )
-
-[node name="label" type="Label" parent="box"]
-
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-margin/left = -43.0
-margin/top = 71.0
-margin/right = 43.0
-margin/bottom = 84.0
-align = 1
-percent_visible = 1.0
-lines_skipped = 0
-max_lines_visible = -1
-
-[node name="shape" type="CollisionShape2D" parent="box"]
-
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = -1
-
-[node name="circle" type="Area2D" parent="."]
-
-transform/pos = Vector2( 547.877, 286.808 )
-transform/rot = -40.5985
-input/pickable = true
-shapes/0/shape = SubResource( 2 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-gravity_vec = Vector2( 0, 1 )
-gravity = 98.0
-linear_damp = 0.1
-angular_damp = 1.0
-script/script = ExtResource( 1 )
-
-[node name="sprite" type="Sprite" parent="circle"]
-
-texture = ExtResource( 3 )
-
-[node name="label" type="Label" parent="circle"]
-
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-margin/left = -43.0
-margin/top = 71.0
-margin/right = 43.0
-margin/bottom = 84.0
-align = 1
-percent_visible = 1.0
-lines_skipped = 0
-max_lines_visible = -1
-
-[node name="shape" type="CollisionShape2D" parent="circle"]
-
-shape = SubResource( 2 )
-trigger = false
-_update_shape_index = -1
-
-[node name="Label" type="Label" parent="."]
-
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 40.0
-margin/bottom = 13.0
-text = "This demo shows how to use a regular Area2D to get input events, and how to convert the input events to local coordinates of the node.\nUnlike controls, Input on Area2D or PhysicsBody2D nodes only works properly (with scrolling) on canvas layer 0."
-percent_visible = 1.0
-lines_skipped = 0
-max_lines_visible = -1
-
-
diff --git a/demos/2d/dynamic_collision_shapes/ball.gd b/demos/2d/dynamic_collision_shapes/ball.gd
deleted file mode 100644
index 169079ea46..0000000000
--- a/demos/2d/dynamic_collision_shapes/ball.gd
+++ /dev/null
@@ -1,17 +0,0 @@
-
-extends RigidBody2D
-
-# Member variables
-var timeout = 5
-
-
-func _process(delta):
- timeout -= delta
- if (timeout < 1):
- set_opacity(timeout)
- if (timeout < 0):
- queue_free()
-
-
-func _ready():
- set_process(true)
diff --git a/demos/2d/dynamic_collision_shapes/ball.png b/demos/2d/dynamic_collision_shapes/ball.png
deleted file mode 100644
index b7cf71da29..0000000000
--- a/demos/2d/dynamic_collision_shapes/ball.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/dynamic_collision_shapes/ball.tscn b/demos/2d/dynamic_collision_shapes/ball.tscn
deleted file mode 100644
index 31560e251b..0000000000
--- a/demos/2d/dynamic_collision_shapes/ball.tscn
+++ /dev/null
@@ -1,47 +0,0 @@
-[gd_scene load_steps=4 format=1]
-
-[ext_resource path="res://ball.gd" type="Script" id=1]
-[ext_resource path="res://ball.png" type="Texture" id=2]
-
-[sub_resource type="CircleShape2D" id=1]
-
-custom_solver_bias = 0.0
-radius = 7.45713
-
-[node name="bal" type="RigidBody2D"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-mode = 0
-mass = 1.0
-friction = 1.0
-bounce = 0.0
-gravity_scale = 1.0
-custom_integrator = false
-continuous_cd = 0
-contacts_reported = 0
-contact_monitor = false
-sleeping = false
-can_sleep = true
-velocity/linear = Vector2( 0, 0 )
-velocity/angular = 0.0
-damp_override/linear = -1.0
-damp_override/angular = -1.0
-script/script = ExtResource( 1 )
-
-[node name="sprite" type="Sprite" parent="."]
-
-transform/pos = Vector2( 0, 1 )
-texture = ExtResource( 2 )
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
-
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = 0
-
-
diff --git a/demos/2d/dynamic_collision_shapes/box.png b/demos/2d/dynamic_collision_shapes/box.png
deleted file mode 100644
index f29b83ce38..0000000000
--- a/demos/2d/dynamic_collision_shapes/box.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/dynamic_collision_shapes/circle.png b/demos/2d/dynamic_collision_shapes/circle.png
deleted file mode 100644
index 9fdfa550b1..0000000000
--- a/demos/2d/dynamic_collision_shapes/circle.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/dynamic_collision_shapes/dynamic_colobjs.gd b/demos/2d/dynamic_collision_shapes/dynamic_colobjs.gd
deleted file mode 100644
index c43b82a722..0000000000
--- a/demos/2d/dynamic_collision_shapes/dynamic_colobjs.gd
+++ /dev/null
@@ -1,19 +0,0 @@
-
-extends Node2D
-
-# Member variables
-const EMIT_INTERVAL = 0.1
-var timeout = EMIT_INTERVAL
-
-
-func _process(delta):
- timeout -= delta
- if (timeout < 0):
- timeout = EMIT_INTERVAL
- var ball = preload("res://ball.tscn").instance()
- ball.set_pos(Vector2(randf()*get_viewport_rect().size.x, 0))
- add_child(ball)
-
-
-func _ready():
- set_process(true)
diff --git a/demos/2d/dynamic_collision_shapes/dynamic_colobjs.tscn b/demos/2d/dynamic_collision_shapes/dynamic_colobjs.tscn
deleted file mode 100644
index 61af0b8e7d..0000000000
--- a/demos/2d/dynamic_collision_shapes/dynamic_colobjs.tscn
+++ /dev/null
@@ -1,178 +0,0 @@
-[gd_scene load_steps=13 format=1]
-
-[ext_resource path="res://dynamic_colobjs.gd" type="Script" id=1]
-[ext_resource path="res://circle.png" type="Texture" id=2]
-[ext_resource path="res://box.png" type="Texture" id=3]
-[ext_resource path="res://poly.png" type="Texture" id=4]
-
-[sub_resource type="CircleShape2D" id=1]
-
-custom_solver_bias = 0.0
-radius = 28.8504
-
-[sub_resource type="RectangleShape2D" id=2]
-
-custom_solver_bias = 0.0
-extents = Vector2( 32.1805, 30.0328 )
-
-[sub_resource type="ConvexPolygonShape2D" id=3]
-
-custom_solver_bias = 0.0
-points = Vector2Array( 49.5669, -27.9744, 45.1564, 15.3961, 18.6931, -1.51105 )
-
-[sub_resource type="ConvexPolygonShape2D" id=4]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -55.093, -14.2052, -37.1739, 2.89948, -40.1345, 21.2602, -53.3067, 15.8716 )
-
-[sub_resource type="ConvexPolygonShape2D" id=5]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -40.1345, 21.2602, -37.1739, 2.89948, -14.386, -14.0076, -6.30005, 0.694214 )
-
-[sub_resource type="ConvexPolygonShape2D" id=6]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -14.386, -14.0076, 18.6931, -1.51105, 45.1564, 15.3961, -6.30005, 0.694214 )
-
-[sub_resource type="Animation" id=7]
-
-resource/name = "movethem"
-length = 4.0
-loop = true
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath("base/circle:transform/pos")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":true, "times":FloatArray( 0, 2 ), "transitions":FloatArray( 1, 1 ), "values":[ Vector2( 0, 0 ), Vector2( 52.7569, -70.845 ) ] }
-tracks/1/type = "value"
-tracks/1/path = NodePath("base/box:transform/pos")
-tracks/1/interp = 1
-tracks/1/keys = { "cont":true, "times":FloatArray( 0, 2 ), "transitions":FloatArray( 1, 1 ), "values":[ Vector2( 193.173, -2.72076 ), Vector2( 195.894, -72.0999 ) ] }
-tracks/2/type = "value"
-tracks/2/path = NodePath("base/box:transform/rot")
-tracks/2/interp = 1
-tracks/2/keys = { "cont":true, "times":FloatArray( 0, 2 ), "transitions":FloatArray( 1, 1 ), "values":[ 0.0, 92.8111 ] }
-tracks/3/type = "value"
-tracks/3/path = NodePath("base/polygon:transform/pos")
-tracks/3/interp = 1
-tracks/3/keys = { "cont":true, "times":FloatArray( 0, 2 ), "transitions":FloatArray( 1, 1 ), "values":[ Vector2( 382.265, -2.72076 ), Vector2( 495.176, -10.883 ) ] }
-
-[sub_resource type="Animation" id=8]
-
-resource/name = "toggletrigger"
-length = 6.0
-loop = true
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath("base/box:trigger")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":false, "times":FloatArray( 0, 4 ), "transitions":FloatArray( 1, 1 ), "values":[ false, true ] }
-tracks/1/type = "value"
-tracks/1/path = NodePath("base/box:visibility/opacity")
-tracks/1/interp = 1
-tracks/1/keys = { "cont":false, "times":FloatArray( 0, 4 ), "transitions":FloatArray( 1, 1 ), "values":[ 1.0, 0.2 ] }
-
-[node name="base" type="Node2D"]
-
-script/script = ExtResource( 1 )
-
-[node name="base" type="KinematicBody2D" parent="."]
-
-transform/pos = Vector2( 137, 470 )
-input/pickable = false
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 7.91353, -10.6267 )
-shapes/0/trigger = false
-shapes/1/shape = SubResource( 2 )
-shapes/1/transform = Matrix32( 0.970626, -0.240595, 0.240595, 0.970626, 193.581, -13.1276 )
-shapes/1/trigger = false
-shapes/2/shape = SubResource( 3 )
-shapes/2/transform = Matrix32( 1, 0, 0, 1, 399.202, -3.9451 )
-shapes/2/trigger = false
-shapes/3/shape = SubResource( 4 )
-shapes/3/transform = Matrix32( 1, 0, 0, 1, 399.202, -3.9451 )
-shapes/3/trigger = false
-shapes/4/shape = SubResource( 5 )
-shapes/4/transform = Matrix32( 1, 0, 0, 1, 399.202, -3.9451 )
-shapes/4/trigger = false
-shapes/5/shape = SubResource( 6 )
-shapes/5/transform = Matrix32( 1, 0, 0, 1, 399.202, -3.9451 )
-shapes/5/trigger = false
-collision/layers = 1
-collision/mask = 1
-collision/margin = 0.08
-
-[node name="circle" type="CollisionShape2D" parent="base"]
-
-transform/pos = Vector2( 7.91353, -10.6267 )
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = 0
-
-[node name="sprite" type="Sprite" parent="base/circle"]
-
-texture = ExtResource( 2 )
-
-[node name="box" type="CollisionShape2D" parent="base"]
-
-transform/pos = Vector2( 193.581, -13.1276 )
-transform/rot = 13.9217
-shape = SubResource( 2 )
-trigger = false
-_update_shape_index = 1
-
-[node name="Sprite" type="Sprite" parent="base/box"]
-
-texture = ExtResource( 3 )
-
-[node name="polygon" type="CollisionPolygon2D" parent="base"]
-
-transform/pos = Vector2( 399.202, -3.9451 )
-build_mode = 0
-polygon = Vector2Array( -55.093, -14.2052, -37.1739, 2.89948, -14.386, -14.0076, 18.6931, -1.51105, 49.5669, -27.9744, 45.1564, 15.3961, -6.30005, 0.694214, -40.1345, 21.2602, -53.3067, 15.8716 )
-shape_range = Vector2( 2, 5 )
-trigger = false
-
-[node name="Sprite" type="Sprite" parent="base/polygon"]
-
-texture = ExtResource( 4 )
-
-[node name="shapemove" type="AnimationPlayer" parent="."]
-
-playback/process_mode = 1
-playback/default_blend_time = 0.0
-root/root = NodePath("..")
-anims/movethem = SubResource( 7 )
-playback/active = true
-playback/speed = 1.0
-blend_times = [ ]
-autoplay = "movethem"
-
-[node name="triggertoggle" type="AnimationPlayer" parent="."]
-
-playback/process_mode = 1
-playback/default_blend_time = 0.0
-root/root = NodePath("..")
-anims/movethem = SubResource( 7 )
-anims/toggletrigger = SubResource( 8 )
-playback/active = true
-playback/speed = 1.0
-blend_times = [ ]
-autoplay = "toggletrigger"
-
-[node name="Label" type="Label" parent="."]
-
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-margin/left = 21.0
-margin/top = 21.0
-margin/right = 719.0
-margin/bottom = 73.0
-text = "This demo simply shows that it\'s possible now to move a CollisionShape and CollisionPolygon after it was created\nand also turn it into a trigger at run-time. CollisionShape will remain alive during the running game and you can\ninteract with them, even though they are just meant to be helpers.\nIt is always recommended in a real use-case scenario, to move a body instead of a shape, as that path is better optimized."
-percent_visible = 1.0
-lines_skipped = 0
-max_lines_visible = -1
-
-
diff --git a/demos/2d/dynamic_collision_shapes/engine.cfg b/demos/2d/dynamic_collision_shapes/engine.cfg
deleted file mode 100644
index b1feb20408..0000000000
--- a/demos/2d/dynamic_collision_shapes/engine.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-[application]
-
-name="Run-Time CollisionShape"
-main_scene="res://dynamic_colobjs.tscn"
-icon="res://icon.png"
diff --git a/demos/2d/dynamic_collision_shapes/icon.png b/demos/2d/dynamic_collision_shapes/icon.png
deleted file mode 100644
index b47506d7c8..0000000000
--- a/demos/2d/dynamic_collision_shapes/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/dynamic_collision_shapes/poly.png b/demos/2d/dynamic_collision_shapes/poly.png
deleted file mode 100644
index 49ed55cc7d..0000000000
--- a/demos/2d/dynamic_collision_shapes/poly.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/fog_of_war/engine.cfg b/demos/2d/fog_of_war/engine.cfg
deleted file mode 100644
index 98e20c1e41..0000000000
--- a/demos/2d/fog_of_war/engine.cfg
+++ /dev/null
@@ -1,12 +0,0 @@
-[application]
-
-name="Fog of War"
-main_scene="res://fog.tscn"
-icon="res://icon.png"
-
-[input]
-
-move_up=[key(Up)]
-move_bottom=[key(Down)]
-move_left=[key(Left)]
-move_right=[key(Right)]
diff --git a/demos/2d/fog_of_war/floor.png b/demos/2d/fog_of_war/floor.png
deleted file mode 100644
index 07b4f8c98f..0000000000
--- a/demos/2d/fog_of_war/floor.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/fog_of_war/fog.gd b/demos/2d/fog_of_war/fog.gd
deleted file mode 100644
index 3ac8df0e17..0000000000
--- a/demos/2d/fog_of_war/fog.gd
+++ /dev/null
@@ -1,78 +0,0 @@
-
-extends TileMap
-
-# Member variables
-
-# Boundaries for the fog rectangle
-var x_min = -20 # Left start tile
-var x_max = 20 # Right end tile
-var y_min = -20 # Top start tile
-var y_max = 20 # Bottom end tile
-
-var position # Player's position
-
-# Iteration variables
-var x
-var y
-
-# Variables to check if the player moved
-var x_old
-var y_old
-
-# Array to build up the visible area like a square.
-# First value determines the width/height of the tip.
-# Here it would be 2*2 + 1 = 5 tiles wide/high.
-# Second value determines the total squares size.
-# Here it would be 5*2 + 1 = 10 tiles wide/high.
-var l = range(2, 5)
-
-
-# Process that runs in realtime
-func _fixed_process(delta):
- position = get_node("../troll").get_pos()
-
- # Calculate the corresponding tile
- # from the players position
- x = int(position.x/get_cell_size().x)
- # Switching from positive to negative tile positions
- # causes problems because of rounding problems
- if position.x < 0:
- x -= 1 # Correct negative values
-
- y = int(position.y/get_cell_size().y)
- if (position.y < 0):
- y -= 1
-
- # Check if the player moved one tile further
- if ((x_old != x) or (y_old != y)):
- # Create the transparent part (visited area)
- var end = l.size() - 1
- var start = 0
- for steps in range(l.size()):
- for m in range(x - l[end] - 1, x + l[end] + 2):
- for n in range(y - l[start] - 1, y + l[start] + 2):
- if (get_cell(m, n) != 0):
- set_cell(m, n, 1, 0, 0)
- end -= 1
- start += 1
-
- # Create the actual and active visible part
- var end = l.size() - 1
- var start = 0
- for steps in range(l.size()):
- for m in range(x - l[end], x + l[end] + 1):
- for n in range(y - l[start], y + l[start] + 1):
- set_cell(m, n, -1)
- end -= 1
- start += 1
-
- x_old = x
- y_old = y
-
-
-func _ready():
- # Create a square filled with the 100% opaque fog
- for x in range(x_min, x_max):
- for y in range(y_min, y_max):
- set_cell(x, y, 0, 0, 0)
- set_fixed_process(true)
diff --git a/demos/2d/fog_of_war/fog.png b/demos/2d/fog_of_war/fog.png
deleted file mode 100644
index 56980c298d..0000000000
--- a/demos/2d/fog_of_war/fog.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/fog_of_war/fog.tscn b/demos/2d/fog_of_war/fog.tscn
deleted file mode 100644
index e86a23125c..0000000000
--- a/demos/2d/fog_of_war/fog.tscn
+++ /dev/null
@@ -1,51 +0,0 @@
-[gd_scene load_steps=4 format=1]
-
-[ext_resource path="res://tileset.tres" type="TileSet" id=1]
-[ext_resource path="res://troll.tscn" type="PackedScene" id=2]
-[ext_resource path="res://fog.gd" type="Script" id=3]
-
-[node name="Node2D" type="Node2D"]
-
-[node name="TileMap" type="TileMap" parent="."]
-
-transform/pos = Vector2( 206, 112 )
-mode = 0
-tile_set = ExtResource( 1 )
-cell/size = Vector2( 48, 48 )
-cell/quadrant_size = 16
-cell/custom_transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-cell/half_offset = 2
-cell/tile_origin = 0
-cell/y_sort = false
-collision/use_kinematic = false
-collision/friction = 1.0
-collision/bounce = 0.0
-collision/layers = 1
-collision/mask = 1
-occluder/light_mask = 1
-tile_data = IntArray( -589834, 2, -589833, 2, -589832, 2, -589831, 2, -589830, 2, -589829, 2, -589828, 2, -589827, 2, -589826, 2, -589825, 2, -655360, 2, -655359, 2, -655358, 2, -655357, 2, -655356, 2, -655355, 2, -655354, 2, -655353, 2, -655352, 2, -655351, 2, -524298, 2, -524297, 2, -524296, 2, -524295, 2, -524294, 2, -524293, 2, -524292, 2, -524291, 2, -524290, 2, -524289, 2, -589824, 2, -589823, 2, -589822, 2, -589821, 2, -589820, 2, -589819, 2, -589818, 2, -589817, 2, -589816, 2, -589815, 2, -458762, 2, -458761, 2, -458760, 2, -458759, 2, -458758, 2, -458757, 2, -458756, 2, -458755, 2, -458754, 2, -458753, 2, -524288, 2, -524287, 2, -524286, 2, -524285, 2, -524284, 2, -524283, 2, -524282, 2, -524281, 2, -524280, 2, -524279, 2, -393226, 2, -393225, 2, -393224, 2, -393223, 2, -393222, 2, -393221, 2, -393220, 2, -393219, 2, -393218, 2, -393217, 2, -458752, 2, -458751, 2, -458750, 2, -458749, 2, -458748, 2, -458747, 2, -458746, 2, -458745, 2, -458744, 2, -458743, 2, -327690, 2, -327689, 2, -327688, 2, -327687, 2, -327686, 2, -327685, 2, -327684, 2, -327683, 2, -327682, 2, -327681, 2, -393216, 2, -393215, 2, -393214, 2, -393213, 2, -393212, 2, -393211, 2, -393210, 2, -393209, 2, -393208, 2, -393207, 2, -262154, 2, -262153, 2, -262152, 2, -262151, 2, -262150, 2, -262149, 2, -262148, 2, -262147, 2, -262146, 2, -262145, 2, -327680, 2, -327679, 2, -327678, 2, -327677, 2, -327676, 2, -327675, 2, -327674, 2, -327673, 2, -327672, 2, -327671, 2, -196618, 2, -196617, 2, -196616, 2, -196615, 2, -196614, 2, -196613, 2, -196612, 2, -196611, 2, -196610, 2, -196609, 2, -262144, 2, -262143, 2, -262142, 2, -262141, 2, -262140, 2, -262139, 2, -262138, 2, -262137, 2, -262136, 2, -262135, 2, -131082, 2, -131081, 2, -131080, 2, -131079, 2, -131078, 2, -131077, 2, -131076, 2, -131075, 2, -131074, 2, -131073, 2, -196608, 2, -196607, 2, -196606, 2, -196605, 2, -196604, 2, -196603, 2, -196602, 2, -196601, 2, -196600, 2, -196599, 2, -65546, 2, -65545, 2, -65544, 2, -65543, 2, -65542, 2, -65541, 2, -65540, 2, -65539, 2, -65538, 2, -65537, 2, -131072, 2, -131071, 2, -131070, 2, -131069, 2, -131068, 2, -131067, 2, -131066, 2, -131065, 2, -131064, 2, -131063, 2, -10, 2, -9, 2, -8, 2, -7, 2, -6, 2, -5, 2, -4, 2, -3, 2, -2, 2, -1, 2, -65536, 2, -65535, 2, -65534, 2, -65533, 2, -65532, 2, -65531, 2, -65530, 2, -65529, 2, -65528, 2, -65527, 2, 65526, 2, 65527, 2, 65528, 2, 65529, 2, 65530, 2, 65531, 2, 65532, 2, 65533, 2, 65534, 2, 65535, 2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5, 2, 6, 2, 7, 2, 8, 2, 9, 2, 131062, 2, 131063, 2, 131064, 2, 131065, 2, 131066, 2, 131067, 2, 131068, 2, 131069, 2, 131070, 2, 131071, 2, 65536, 2, 65537, 2, 65538, 2, 65539, 2, 65540, 2, 65541, 2, 65542, 2, 65543, 2, 65544, 2, 65545, 2, 196598, 2, 196599, 2, 196600, 2, 196601, 2, 196602, 2, 196603, 2, 196604, 2, 196605, 2, 196606, 2, 196607, 2, 131072, 2, 131073, 2, 131074, 2, 131075, 2, 131076, 2, 131077, 2, 131078, 2, 131079, 2, 131080, 2, 131081, 2, 262134, 2, 262135, 2, 262136, 2, 262137, 2, 262138, 2, 262139, 2, 262140, 2, 262141, 2, 262142, 2, 262143, 2, 196608, 2, 196609, 2, 196610, 2, 196611, 2, 196612, 2, 196613, 2, 196614, 2, 196615, 2, 196616, 2, 196617, 2, 327670, 2, 327671, 2, 327672, 2, 327673, 2, 327674, 2, 327675, 2, 327676, 2, 327677, 2, 327678, 2, 327679, 2, 262144, 2, 262145, 2, 262146, 2, 262147, 2, 262148, 2, 262149, 2, 262150, 2, 262151, 2, 262152, 2, 262153, 2, 393206, 2, 393207, 2, 393208, 2, 393209, 2, 393210, 2, 393211, 2, 393212, 2, 393213, 2, 393214, 2, 393215, 2, 327680, 2, 327681, 2, 327682, 2, 327683, 2, 327684, 2, 327685, 2, 327686, 2, 327687, 2, 327688, 2, 327689, 2, 458742, 2, 458743, 2, 458744, 2, 458745, 2, 458746, 2, 458747, 2, 458748, 2, 458749, 2, 458750, 2, 458751, 2, 393216, 2, 393217, 2, 393218, 2, 393219, 2, 393220, 2, 393221, 2, 393222, 2, 393223, 2, 393224, 2, 393225, 2, 524278, 2, 524279, 2, 524280, 2, 524281, 2, 524282, 2, 524283, 2, 524284, 2, 524285, 2, 524286, 2, 524287, 2, 458752, 2, 458753, 2, 458754, 2, 458755, 2, 458756, 2, 458757, 2, 458758, 2, 458759, 2, 458760, 2, 458761, 2, 589814, 2, 589815, 2, 589816, 2, 589817, 2, 589818, 2, 589819, 2, 589820, 2, 589821, 2, 589822, 2, 589823, 2, 524288, 2, 524289, 2, 524290, 2, 524291, 2, 524292, 2, 524293, 2, 524294, 2, 524295, 2, 524296, 2, 524297, 2, 655350, 2, 655351, 2, 655352, 2, 655353, 2, 655354, 2, 655355, 2, 655356, 2, 655357, 2, 655358, 2, 655359, 2, 589824, 2, 589825, 2, 589826, 2, 589827, 2, 589828, 2, 589829, 2, 589830, 2, 589831, 2, 589832, 2, 589833, 2 )
-
-[node name="troll" parent="." instance=ExtResource( 2 )]
-
-collision/margin = 0.001
-
-[node name="Fog" type="TileMap" parent="."]
-
-mode = 0
-tile_set = ExtResource( 1 )
-cell/size = Vector2( 48, 48 )
-cell/quadrant_size = 16
-cell/custom_transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-cell/half_offset = 2
-cell/tile_origin = 0
-cell/y_sort = false
-collision/use_kinematic = false
-collision/friction = 1.0
-collision/bounce = 0.0
-collision/layers = 1
-collision/mask = 1
-occluder/light_mask = 1
-tile_data = IntArray( )
-script/script = ExtResource( 3 )
-
-
diff --git a/demos/2d/fog_of_war/icon.png b/demos/2d/fog_of_war/icon.png
deleted file mode 100644
index a483390048..0000000000
--- a/demos/2d/fog_of_war/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/fog_of_war/tileset.tres b/demos/2d/fog_of_war/tileset.tres
deleted file mode 100644
index c75ba8d5f2..0000000000
--- a/demos/2d/fog_of_war/tileset.tres
+++ /dev/null
@@ -1,32 +0,0 @@
-[gd_resource type="TileSet" load_steps=3 format=1]
-
-[ext_resource path="res://fog.png" type="Texture" id=1]
-[ext_resource path="res://floor.png" type="Texture" id=2]
-
-[resource]
-
-0/name = "fog opaque"
-0/texture = ExtResource( 1 )
-0/tex_offset = Vector2( -48, -48 )
-0/region = Rect2( 0, 0, 144, 144 )
-0/occluder_offset = Vector2( 0, 0 )
-0/navigation_offset = Vector2( 0, 0 )
-0/shape_offset = Vector2( 0, 0 )
-0/shapes = [ ]
-1/name = "fog transparent"
-1/texture = ExtResource( 1 )
-1/tex_offset = Vector2( -48, -48 )
-1/region = Rect2( 144, 0, 144, 144 )
-1/occluder_offset = Vector2( 0, 0 )
-1/navigation_offset = Vector2( 0, 0 )
-1/shape_offset = Vector2( 0, 0 )
-1/shapes = [ ]
-2/name = "floor"
-2/texture = ExtResource( 2 )
-2/tex_offset = Vector2( 0, 0 )
-2/region = Rect2( 0, 0, 0, 0 )
-2/occluder_offset = Vector2( 24, 24 )
-2/navigation_offset = Vector2( 24, 24 )
-2/shape_offset = Vector2( 0, 0 )
-2/shapes = [ ]
-
diff --git a/demos/2d/fog_of_war/tileset_edit.tscn b/demos/2d/fog_of_war/tileset_edit.tscn
deleted file mode 100644
index 1573e9d05e..0000000000
--- a/demos/2d/fog_of_war/tileset_edit.tscn
+++ /dev/null
@@ -1,30 +0,0 @@
-[gd_scene load_steps=3 format=1]
-
-[ext_resource path="res://fog.png" type="Texture" id=1]
-[ext_resource path="res://floor.png" type="Texture" id=2]
-
-[node name="Node2D" type="Node2D"]
-
-[node name="fog opaque" type="Sprite" parent="."]
-
-texture = ExtResource( 1 )
-centered = false
-offset = Vector2( -48, -48 )
-region = true
-region_rect = Rect2( 0, 0, 144, 144 )
-
-[node name="fog transparent" type="Sprite" parent="."]
-
-transform/pos = Vector2( 144, 0 )
-texture = ExtResource( 1 )
-centered = false
-offset = Vector2( -48, -48 )
-region = true
-region_rect = Rect2( 144, 0, 144, 144 )
-
-[node name="floor" type="Sprite" parent="."]
-
-transform/pos = Vector2( 264, 24 )
-texture = ExtResource( 2 )
-
-
diff --git a/demos/2d/fog_of_war/troll.gd b/demos/2d/fog_of_war/troll.gd
deleted file mode 100644
index 6f40072e84..0000000000
--- a/demos/2d/fog_of_war/troll.gd
+++ /dev/null
@@ -1,38 +0,0 @@
-
-extends KinematicBody2D
-
-# This is a simple collision demo showing how
-# the kinematic controller works.
-# move() will allow to move the node, and will
-# always move it to a non-colliding spot,
-# as long as it starts from a non-colliding spot too.
-
-# Member variables
-const MOTION_SPEED = 160 # Pixels/second
-
-
-func _fixed_process(delta):
- var motion = Vector2()
-
- if (Input.is_action_pressed("move_up")):
- motion += Vector2(0, -1)
- if (Input.is_action_pressed("move_bottom")):
- motion += Vector2(0, 1)
- if (Input.is_action_pressed("move_left")):
- motion += Vector2(-1, 0)
- if (Input.is_action_pressed("move_right")):
- motion += Vector2(1, 0)
-
- motion = motion.normalized()*MOTION_SPEED*delta
- motion = move(motion)
-
- # Make character slide nicely through the world
- var slide_attempts = 4
- while(is_colliding() and slide_attempts > 0):
- motion = get_collision_normal().slide(motion)
- motion = move(motion)
- slide_attempts -= 1
-
-
-func _ready():
- set_fixed_process(true)
diff --git a/demos/2d/fog_of_war/troll.png b/demos/2d/fog_of_war/troll.png
deleted file mode 100644
index 69f195d034..0000000000
--- a/demos/2d/fog_of_war/troll.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/fog_of_war/troll.tscn b/demos/2d/fog_of_war/troll.tscn
deleted file mode 100644
index 2dc8bdbf67..0000000000
--- a/demos/2d/fog_of_war/troll.tscn
+++ /dev/null
@@ -1,52 +0,0 @@
-[gd_scene load_steps=4 format=1]
-
-[ext_resource path="res://troll.gd" type="Script" id=1]
-[ext_resource path="res://troll.png" type="Texture" id=2]
-
-[sub_resource type="CircleShape2D" id=1]
-
-custom_solver_bias = 0.0
-radius = 16.0
-
-[node name="troll" type="KinematicBody2D"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 3.24216, 19.453 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-collision/margin = 0.001
-script/script = ExtResource( 1 )
-
-[node name="Sprite" type="Sprite" parent="."]
-
-texture = ExtResource( 2 )
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
-
-transform/pos = Vector2( 3.24216, 19.453 )
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = -1
-
-[node name="Camera2D" type="Camera2D" parent="."]
-
-anchor_mode = 1
-rotating = false
-current = true
-zoom = Vector2( 1, 1 )
-limit/left = -10000000
-limit/top = -10000000
-limit/right = 10000000
-limit/bottom = 10000000
-drag_margin/h_enabled = true
-drag_margin/v_enabled = true
-smoothing/enable = false
-smoothing/speed = 5.0
-drag_margin/left = 0.2
-drag_margin/top = 0.2
-drag_margin/right = 0.2
-drag_margin/bottom = 0.2
-
-
diff --git a/demos/2d/hdr/beach_cave.gd b/demos/2d/hdr/beach_cave.gd
deleted file mode 100644
index fcc878e565..0000000000
--- a/demos/2d/hdr/beach_cave.gd
+++ /dev/null
@@ -1,21 +0,0 @@
-
-extends Node2D
-
-# Member variables
-const CAVE_LIMIT = 1000
-
-
-func _input(event):
- if (event.type == InputEvent.MOUSE_MOTION and event.button_mask&1):
- var rel_x = event.relative_x
- var cavepos = get_node("cave").get_pos()
- cavepos.x += rel_x
- if (cavepos.x < -CAVE_LIMIT):
- cavepos.x = -CAVE_LIMIT
- elif (cavepos.x > 0):
- cavepos.x = 0
- get_node("cave").set_pos(cavepos)
-
-
-func _ready():
- set_process_input(true)
diff --git a/demos/2d/hdr/beach_cave.tscn b/demos/2d/hdr/beach_cave.tscn
deleted file mode 100644
index f246ff1f42..0000000000
--- a/demos/2d/hdr/beach_cave.tscn
+++ /dev/null
@@ -1,88 +0,0 @@
-[gd_scene load_steps=5 format=1]
-
-[ext_resource path="res://beach_cave.gd" type="Script" id=1]
-[ext_resource path="res://ocean_beach.png" type="Texture" id=2]
-[ext_resource path="res://ocean_cave.png" type="Texture" id=3]
-
-[sub_resource type="Environment" id=1]
-
-ambient_light/enabled = false
-ambient_light/color = Color( 0, 0, 0, 1 )
-ambient_light/energy = 1.0
-fxaa/enabled = false
-background/mode = 5
-background/color = Color( 0, 0, 0, 1 )
-background/energy = 1.0
-background/scale = 1.0
-background/glow = 0.0
-background/canvas_max_layer = null
-glow/enabled = true
-glow/blur_passes = 3
-glow/blur_scale = 1.2
-glow/blur_strength = 1.2
-glow/blur_blend_mode = 0
-glow/bloom = 0.0
-glow/bloom_treshold = 0.5
-dof_blur/enabled = false
-dof_blur/blur_passes = 1
-dof_blur/begin = 100.0
-dof_blur/range = 10.0
-hdr/enabled = true
-hdr/tonemapper = 0.0
-hdr/exposure = 0.5
-hdr/white = 1.0
-hdr/glow_treshold = 0.7
-hdr/glow_scale = 0.5
-hdr/min_luminance = 0.3
-hdr/max_luminance = 8.0
-hdr/exposure_adj_speed = 2.0
-fog/enabled = false
-fog/begin = 100.0
-fog/begin_color = Color( 0, 0, 0, 1 )
-fog/end_color = Color( 0, 0, 0, 1 )
-fog/attenuation = 1.0
-fog/bg = true
-bcs/enabled = false
-bcs/brightness = 1.0
-bcs/contrast = 1.0
-bcs/saturation = 1.0
-srgb/enabled = true
-
-[node name="hdr" type="Node2D"]
-
-script/script = ExtResource( 1 )
-
-[node name="beach" type="Sprite" parent="."]
-
-texture = ExtResource( 2 )
-centered = false
-modulate = Color( 2, 2, 2, 1 )
-
-[node name="cave" type="Sprite" parent="."]
-
-transform/scale = Vector2( 1.2, 1 )
-texture = ExtResource( 3 )
-centered = false
-modulate = Color( 0.233166, 0.221219, 0.23582, 1 )
-
-[node name="environment" type="WorldEnvironment" parent="."]
-
-_import_transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )
-environment = SubResource( 1 )
-
-[node name="Label" type="Label" parent="."]
-
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 40.0
-margin/bottom = 13.0
-custom_colors/font_color = Color( 0.213955, 0.205626, 0.20313, 1 )
-text = "Drag Left and Right"
-percent_visible = 1.0
-lines_skipped = 0
-max_lines_visible = -1
-
-
diff --git a/demos/2d/hdr/engine.cfg b/demos/2d/hdr/engine.cfg
deleted file mode 100644
index 4bc2923574..0000000000
--- a/demos/2d/hdr/engine.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[application]
-
-name="HDR for 2D"
-main_scene="res://beach_cave.tscn"
-icon="res://icon.png"
-
-[display]
-
-width=1080
-height=720
-
-[rasterizer]
-
-blur_buffer_size=128
diff --git a/demos/2d/hdr/icon.png b/demos/2d/hdr/icon.png
deleted file mode 100644
index 461cd4638a..0000000000
--- a/demos/2d/hdr/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/hdr/ocean_beach.png b/demos/2d/hdr/ocean_beach.png
deleted file mode 100644
index a873d4f61d..0000000000
--- a/demos/2d/hdr/ocean_beach.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/hdr/ocean_beach.png.flags b/demos/2d/hdr/ocean_beach.png.flags
deleted file mode 100644
index 82127bd7d5..0000000000
--- a/demos/2d/hdr/ocean_beach.png.flags
+++ /dev/null
@@ -1 +0,0 @@
-tolinear=true
diff --git a/demos/2d/hdr/ocean_cave.png b/demos/2d/hdr/ocean_cave.png
deleted file mode 100644
index 8875499df3..0000000000
--- a/demos/2d/hdr/ocean_cave.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/hdr/ocean_cave.png.flags b/demos/2d/hdr/ocean_cave.png.flags
deleted file mode 100644
index 82127bd7d5..0000000000
--- a/demos/2d/hdr/ocean_cave.png.flags
+++ /dev/null
@@ -1 +0,0 @@
-tolinear=true
diff --git a/demos/2d/hexamap/WWT-01.png b/demos/2d/hexamap/WWT-01.png
deleted file mode 100644
index 79d75fa4c9..0000000000
--- a/demos/2d/hexamap/WWT-01.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/hexamap/WWT-02.png b/demos/2d/hexamap/WWT-02.png
deleted file mode 100644
index 7dcd1c8cca..0000000000
--- a/demos/2d/hexamap/WWT-02.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/hexamap/WWT-03.png b/demos/2d/hexamap/WWT-03.png
deleted file mode 100644
index 1e76c9a24d..0000000000
--- a/demos/2d/hexamap/WWT-03.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/hexamap/WWT-04.png b/demos/2d/hexamap/WWT-04.png
deleted file mode 100644
index 84a3b90e71..0000000000
--- a/demos/2d/hexamap/WWT-04.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/hexamap/WWT-05.png b/demos/2d/hexamap/WWT-05.png
deleted file mode 100644
index 850747dc8d..0000000000
--- a/demos/2d/hexamap/WWT-05.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/hexamap/WWT-06.png b/demos/2d/hexamap/WWT-06.png
deleted file mode 100644
index 52479e2d26..0000000000
--- a/demos/2d/hexamap/WWT-06.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/hexamap/WWT-07.png b/demos/2d/hexamap/WWT-07.png
deleted file mode 100644
index 87aa8a4102..0000000000
--- a/demos/2d/hexamap/WWT-07.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/hexamap/WWT-08.png b/demos/2d/hexamap/WWT-08.png
deleted file mode 100644
index 0234cccd56..0000000000
--- a/demos/2d/hexamap/WWT-08.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/hexamap/WWT-09.png b/demos/2d/hexamap/WWT-09.png
deleted file mode 100644
index 5467eb58c3..0000000000
--- a/demos/2d/hexamap/WWT-09.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/hexamap/WWT-10.png b/demos/2d/hexamap/WWT-10.png
deleted file mode 100644
index bb0b5ae1ff..0000000000
--- a/demos/2d/hexamap/WWT-10.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/hexamap/WWT-11.png b/demos/2d/hexamap/WWT-11.png
deleted file mode 100644
index 926ad251b4..0000000000
--- a/demos/2d/hexamap/WWT-11.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/hexamap/WWT-12.png b/demos/2d/hexamap/WWT-12.png
deleted file mode 100644
index e6c7d33894..0000000000
--- a/demos/2d/hexamap/WWT-12.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/hexamap/WWT-13.png b/demos/2d/hexamap/WWT-13.png
deleted file mode 100644
index f14e42af6e..0000000000
--- a/demos/2d/hexamap/WWT-13.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/hexamap/WWT-14.png b/demos/2d/hexamap/WWT-14.png
deleted file mode 100644
index 826ed49d18..0000000000
--- a/demos/2d/hexamap/WWT-14.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/hexamap/WWT-15.png b/demos/2d/hexamap/WWT-15.png
deleted file mode 100644
index c62de67c8e..0000000000
--- a/demos/2d/hexamap/WWT-15.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/hexamap/WWT-16.png b/demos/2d/hexamap/WWT-16.png
deleted file mode 100644
index 2e8c289d97..0000000000
--- a/demos/2d/hexamap/WWT-16.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/hexamap/WWT-17.png b/demos/2d/hexamap/WWT-17.png
deleted file mode 100644
index f8c59a4dbe..0000000000
--- a/demos/2d/hexamap/WWT-17.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/hexamap/WWT-18.png b/demos/2d/hexamap/WWT-18.png
deleted file mode 100644
index 05269c843c..0000000000
--- a/demos/2d/hexamap/WWT-18.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/hexamap/WWT-19.png b/demos/2d/hexamap/WWT-19.png
deleted file mode 100644
index 7313ff8871..0000000000
--- a/demos/2d/hexamap/WWT-19.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/hexamap/WWT-20.png b/demos/2d/hexamap/WWT-20.png
deleted file mode 100644
index 2ec6fe94e2..0000000000
--- a/demos/2d/hexamap/WWT-20.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/hexamap/WWT-21.png b/demos/2d/hexamap/WWT-21.png
deleted file mode 100644
index e7a51fa687..0000000000
--- a/demos/2d/hexamap/WWT-21.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/hexamap/WWT-22.png b/demos/2d/hexamap/WWT-22.png
deleted file mode 100644
index 0e4d7729ed..0000000000
--- a/demos/2d/hexamap/WWT-22.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/hexamap/WWT-23.png b/demos/2d/hexamap/WWT-23.png
deleted file mode 100644
index ab1cc895e4..0000000000
--- a/demos/2d/hexamap/WWT-23.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/hexamap/WWT-24.png b/demos/2d/hexamap/WWT-24.png
deleted file mode 100644
index b0a05671cf..0000000000
--- a/demos/2d/hexamap/WWT-24.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/hexamap/WWT-25.png b/demos/2d/hexamap/WWT-25.png
deleted file mode 100644
index 3d90080259..0000000000
--- a/demos/2d/hexamap/WWT-25.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/hexamap/WWT-26.png b/demos/2d/hexamap/WWT-26.png
deleted file mode 100644
index a3baca90a0..0000000000
--- a/demos/2d/hexamap/WWT-26.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/hexamap/engine.cfg b/demos/2d/hexamap/engine.cfg
deleted file mode 100644
index 28043b0860..0000000000
--- a/demos/2d/hexamap/engine.cfg
+++ /dev/null
@@ -1,12 +0,0 @@
-[application]
-
-name="Hexagonal Game"
-main_scene="res://map.tscn"
-icon="res://icon.png"
-
-[input]
-
-move_up=[key(Up)]
-move_left=[key(Left)]
-move_right=[key(Right)]
-move_bottom=[key(Down)]
diff --git a/demos/2d/hexamap/icon.png b/demos/2d/hexamap/icon.png
deleted file mode 100644
index 0fcef95111..0000000000
--- a/demos/2d/hexamap/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/hexamap/map.tscn b/demos/2d/hexamap/map.tscn
deleted file mode 100644
index 3abda31bb0..0000000000
--- a/demos/2d/hexamap/map.tscn
+++ /dev/null
@@ -1,31 +0,0 @@
-[gd_scene load_steps=3 format=1]
-
-[ext_resource path="res://tileset.tres" type="TileSet" id=1]
-[ext_resource path="res://troll.tscn" type="PackedScene" id=2]
-
-[node name="Node2D" type="Node2D"]
-
-[node name="TileMap" type="TileMap" parent="."]
-
-mode = 0
-tile_set = ExtResource( 1 )
-cell/size = Vector2( 82, 94 )
-cell/quadrant_size = 16
-cell/custom_transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-cell/half_offset = 1
-cell/tile_origin = 0
-cell/y_sort = false
-collision/use_kinematic = false
-collision/friction = 1.0
-collision/bounce = 0.0
-collision/layers = 1
-collision/mask = 1
-occluder/light_mask = 1
-tile_data = IntArray( -458747, 1073741831, -393213, 1073741831, -393212, 1073741831, -393211, 6, -393210, 1073741831, -393209, 1073741830, -393208, 1073741830, -393207, 6, -393206, 8, -327679, 1073741831, -327678, 1073741831, -327677, 1073741831, -327676, 1073741830, -327675, 1073741831, -327674, 6, -327673, 6, -327672, 6, -327671, 6, -327670, 6, -327669, 0, -327668, 0, -262143, 1073741831, -262142, 1073741831, -262141, 6, -262140, 6, -262139, 0, -262138, 6, -262137, 1, -262136, 0, -262135, 1, -262134, 1, -262133, 0, -262132, 0, -262131, 0, -196608, 9, -196607, 1073741832, -196606, 1073741830, -196605, 2, -196604, 2, -196603, 1073741845, -196602, 21, -196601, 19, -196600, 1073741826, -196599, 0, -196598, 16, -196597, 0, -196596, 0, -196595, 0, -196594, 0, -196593, 0, -131071, 0, -131070, 1, -131069, 1073741827, -131068, 1073741846, -131067, 20, -131066, 19, -131065, 2, -131064, 0, -131063, 14, -131062, 0, -131061, 0, -131060, 0, -131059, 0, -131058, 0, -131057, 0, -131056, 0, -65534, 1, -65533, 2, -65532, 1073741827, -65531, 1, -65530, 1, -65529, 0, -65528, 10, -65527, 12, -65526, 0, -65525, 0, -65524, 0, -65523, 0, -65522, 0, -65521, 0, -65520, 0, 1, 0, 2, 0, 3, 2, 4, 1073741826, 5, 1, 6, 15, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12, 0, 13, 0, 14, 0, 15, 0, 16, 0, 65537, 0, 65538, 1, 65539, 1610612749, 65540, 1, 65541, 0, 65542, 0, 65543, 0, 65544, 0, 65545, 1610612753, 65546, 0, 65547, 0, 65548, 0, 65549, 0, 65550, 1073741848, 65551, 1073741849, 65552, 0, 131073, 0, 131074, 0, 131075, 0, 131076, 0, 131077, 1610612751, 131078, 1610612752, 131079, 1610612752, 131080, 1610612751, 131081, 1610612751, 131082, 0, 131083, 0, 131084, 0, 131085, 0, 131086, 0, 196612, 0, 196613, 1610612751, 196614, 1610612752, 196615, 1610612751, 196616, 1610612751, 196617, 1073741839, 196618, 1073741839, 196619, 0, 196620, 0, 196621, 0, 262150, 0, 262152, 0, 262154, 0, 262156, 0 )
-
-[node name="troll" parent="." instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 602.819, -39.2876 )
-collision/margin = 0.001
-
-
diff --git a/demos/2d/hexamap/tileset.tres b/demos/2d/hexamap/tileset.tres
deleted file mode 100644
index 4538202335..0000000000
--- a/demos/2d/hexamap/tileset.tres
+++ /dev/null
@@ -1,240 +0,0 @@
-[gd_resource type="TileSet" load_steps=27 format=1]
-
-[ext_resource path="res://WWT-01.png" type="Texture" id=1]
-[ext_resource path="res://WWT-02.png" type="Texture" id=2]
-[ext_resource path="res://WWT-11.png" type="Texture" id=3]
-[ext_resource path="res://WWT-12.png" type="Texture" id=4]
-[ext_resource path="res://WWT-13.png" type="Texture" id=5]
-[ext_resource path="res://WWT-14.png" type="Texture" id=6]
-[ext_resource path="res://WWT-15.png" type="Texture" id=7]
-[ext_resource path="res://WWT-16.png" type="Texture" id=8]
-[ext_resource path="res://WWT-17.png" type="Texture" id=9]
-[ext_resource path="res://WWT-18.png" type="Texture" id=10]
-[ext_resource path="res://WWT-19.png" type="Texture" id=11]
-[ext_resource path="res://WWT-20.png" type="Texture" id=12]
-[ext_resource path="res://WWT-03.png" type="Texture" id=13]
-[ext_resource path="res://WWT-21.png" type="Texture" id=14]
-[ext_resource path="res://WWT-22.png" type="Texture" id=15]
-[ext_resource path="res://WWT-23.png" type="Texture" id=16]
-[ext_resource path="res://WWT-24.png" type="Texture" id=17]
-[ext_resource path="res://WWT-25.png" type="Texture" id=18]
-[ext_resource path="res://WWT-26.png" type="Texture" id=19]
-[ext_resource path="res://WWT-04.png" type="Texture" id=20]
-[ext_resource path="res://WWT-05.png" type="Texture" id=21]
-[ext_resource path="res://WWT-06.png" type="Texture" id=22]
-[ext_resource path="res://WWT-07.png" type="Texture" id=23]
-[ext_resource path="res://WWT-08.png" type="Texture" id=24]
-[ext_resource path="res://WWT-09.png" type="Texture" id=25]
-[ext_resource path="res://WWT-10.png" type="Texture" id=26]
-
-[resource]
-
-0/name = "Tile 1"
-0/texture = ExtResource( 1 )
-0/tex_offset = Vector2( -24, -17 )
-0/region = Rect2( 0, 0, 0, 0 )
-0/occluder_offset = Vector2( -0, -0 )
-0/navigation_offset = Vector2( -0, -0 )
-0/shape_offset = Vector2( 0, 0 )
-0/shapes = [ ]
-1/name = "Tile 2"
-1/texture = ExtResource( 2 )
-1/tex_offset = Vector2( -24, -17 )
-1/region = Rect2( 0, 0, 0, 0 )
-1/occluder_offset = Vector2( -0, -0 )
-1/navigation_offset = Vector2( -0, -0 )
-1/shape_offset = Vector2( 0, 0 )
-1/shapes = [ ]
-2/name = "Tile 3"
-2/texture = ExtResource( 13 )
-2/tex_offset = Vector2( -24, -17 )
-2/region = Rect2( 0, 0, 0, 0 )
-2/occluder_offset = Vector2( -0, -0 )
-2/navigation_offset = Vector2( -0, -0 )
-2/shape_offset = Vector2( 0, 0 )
-2/shapes = [ ]
-3/name = "Tile 4"
-3/texture = ExtResource( 20 )
-3/tex_offset = Vector2( -24, -17 )
-3/region = Rect2( 0, 0, 0, 0 )
-3/occluder_offset = Vector2( -0, -0 )
-3/navigation_offset = Vector2( -0, -0 )
-3/shape_offset = Vector2( 0, 0 )
-3/shapes = [ ]
-4/name = "Tile 5"
-4/texture = ExtResource( 21 )
-4/tex_offset = Vector2( -24, -17 )
-4/region = Rect2( 0, 0, 0, 0 )
-4/occluder_offset = Vector2( -0, -0 )
-4/navigation_offset = Vector2( -0, -0 )
-4/shape_offset = Vector2( 0, 0 )
-4/shapes = [ ]
-5/name = "Tile 6"
-5/texture = ExtResource( 22 )
-5/tex_offset = Vector2( -24, -17 )
-5/region = Rect2( 0, 0, 0, 0 )
-5/occluder_offset = Vector2( -0, -0 )
-5/navigation_offset = Vector2( -0, -0 )
-5/shape_offset = Vector2( 0, 0 )
-5/shapes = [ ]
-6/name = "Tile 7"
-6/texture = ExtResource( 23 )
-6/tex_offset = Vector2( -24, -17 )
-6/region = Rect2( 0, 0, 0, 0 )
-6/occluder_offset = Vector2( -0, -0 )
-6/navigation_offset = Vector2( -0, -0 )
-6/shape_offset = Vector2( 0, 0 )
-6/shapes = [ ]
-7/name = "Tile 8"
-7/texture = ExtResource( 24 )
-7/tex_offset = Vector2( -24, -17 )
-7/region = Rect2( 0, 0, 0, 0 )
-7/occluder_offset = Vector2( -0, -0 )
-7/navigation_offset = Vector2( -0, -0 )
-7/shape_offset = Vector2( 0, 0 )
-7/shapes = [ ]
-8/name = "Tile 9"
-8/texture = ExtResource( 25 )
-8/tex_offset = Vector2( -24, -17 )
-8/region = Rect2( 0, 0, 0, 0 )
-8/occluder_offset = Vector2( -0, -0 )
-8/navigation_offset = Vector2( -0, -0 )
-8/shape_offset = Vector2( 0, 0 )
-8/shapes = [ ]
-9/name = "Tile 10"
-9/texture = ExtResource( 26 )
-9/tex_offset = Vector2( -24, -17 )
-9/region = Rect2( 0, 0, 0, 0 )
-9/occluder_offset = Vector2( -0, -0 )
-9/navigation_offset = Vector2( -0, -0 )
-9/shape_offset = Vector2( 0, 0 )
-9/shapes = [ ]
-10/name = "Tile 11"
-10/texture = ExtResource( 3 )
-10/tex_offset = Vector2( -24, -17 )
-10/region = Rect2( 0, 0, 0, 0 )
-10/occluder_offset = Vector2( -0, -0 )
-10/navigation_offset = Vector2( -0, -0 )
-10/shape_offset = Vector2( 0, 0 )
-10/shapes = [ ]
-11/name = "Tile 12"
-11/texture = ExtResource( 4 )
-11/tex_offset = Vector2( -24, -17 )
-11/region = Rect2( 0, 0, 0, 0 )
-11/occluder_offset = Vector2( -0, -0 )
-11/navigation_offset = Vector2( -0, -0 )
-11/shape_offset = Vector2( 0, 0 )
-11/shapes = [ ]
-12/name = "Tile 13"
-12/texture = ExtResource( 5 )
-12/tex_offset = Vector2( -24, -17 )
-12/region = Rect2( 0, 0, 0, 0 )
-12/occluder_offset = Vector2( -0, -0 )
-12/navigation_offset = Vector2( -0, -0 )
-12/shape_offset = Vector2( 0, 0 )
-12/shapes = [ ]
-13/name = "Tile 14"
-13/texture = ExtResource( 6 )
-13/tex_offset = Vector2( -24, -17 )
-13/region = Rect2( 0, 0, 0, 0 )
-13/occluder_offset = Vector2( -0, -0 )
-13/navigation_offset = Vector2( -0, -0 )
-13/shape_offset = Vector2( 0, 0 )
-13/shapes = [ ]
-14/name = "Tile 15"
-14/texture = ExtResource( 7 )
-14/tex_offset = Vector2( -24, -17 )
-14/region = Rect2( 0, 0, 0, 0 )
-14/occluder_offset = Vector2( -0, -0 )
-14/navigation_offset = Vector2( -0, -0 )
-14/shape_offset = Vector2( 0, 0 )
-14/shapes = [ ]
-15/name = "Tile 16"
-15/texture = ExtResource( 8 )
-15/tex_offset = Vector2( -24, -17 )
-15/region = Rect2( 0, 0, 0, 0 )
-15/occluder_offset = Vector2( -0, -0 )
-15/navigation_offset = Vector2( -0, -0 )
-15/shape_offset = Vector2( 0, 0 )
-15/shapes = [ ]
-16/name = "Tile 17"
-16/texture = ExtResource( 9 )
-16/tex_offset = Vector2( -24, -17 )
-16/region = Rect2( 0, 0, 0, 0 )
-16/occluder_offset = Vector2( -0, -0 )
-16/navigation_offset = Vector2( -0, -0 )
-16/shape_offset = Vector2( 0, 0 )
-16/shapes = [ ]
-17/name = "Tile 18"
-17/texture = ExtResource( 10 )
-17/tex_offset = Vector2( -24, -17 )
-17/region = Rect2( 0, 0, 0, 0 )
-17/occluder_offset = Vector2( -0, -0 )
-17/navigation_offset = Vector2( -0, -0 )
-17/shape_offset = Vector2( 0, 0 )
-17/shapes = [ ]
-18/name = "Tile 19"
-18/texture = ExtResource( 11 )
-18/tex_offset = Vector2( -24, -17 )
-18/region = Rect2( 0, 0, 0, 0 )
-18/occluder_offset = Vector2( -0, -0 )
-18/navigation_offset = Vector2( -0, -0 )
-18/shape_offset = Vector2( 0, 0 )
-18/shapes = [ ]
-19/name = "Tile 20"
-19/texture = ExtResource( 12 )
-19/tex_offset = Vector2( -24, -17 )
-19/region = Rect2( 0, 0, 0, 0 )
-19/occluder_offset = Vector2( -0, -0 )
-19/navigation_offset = Vector2( -0, -0 )
-19/shape_offset = Vector2( 0, 0 )
-19/shapes = [ ]
-20/name = "Tile 21"
-20/texture = ExtResource( 14 )
-20/tex_offset = Vector2( -24, -17 )
-20/region = Rect2( 0, 0, 0, 0 )
-20/occluder_offset = Vector2( -0, -0 )
-20/navigation_offset = Vector2( -0, -0 )
-20/shape_offset = Vector2( 0, 0 )
-20/shapes = [ ]
-21/name = "Tile 22"
-21/texture = ExtResource( 15 )
-21/tex_offset = Vector2( -24, -17 )
-21/region = Rect2( 0, 0, 0, 0 )
-21/occluder_offset = Vector2( -0, -0 )
-21/navigation_offset = Vector2( -0, -0 )
-21/shape_offset = Vector2( 0, 0 )
-21/shapes = [ ]
-22/name = "Tile 23"
-22/texture = ExtResource( 16 )
-22/tex_offset = Vector2( -24, -17 )
-22/region = Rect2( 0, 0, 0, 0 )
-22/occluder_offset = Vector2( -0, -0 )
-22/navigation_offset = Vector2( -0, -0 )
-22/shape_offset = Vector2( 0, 0 )
-22/shapes = [ ]
-23/name = "Tile 24"
-23/texture = ExtResource( 17 )
-23/tex_offset = Vector2( -24, -17 )
-23/region = Rect2( 0, 0, 0, 0 )
-23/occluder_offset = Vector2( -0, -0 )
-23/navigation_offset = Vector2( -0, -0 )
-23/shape_offset = Vector2( 0, 0 )
-23/shapes = [ ]
-24/name = "Tile 25"
-24/texture = ExtResource( 18 )
-24/tex_offset = Vector2( -24, -17 )
-24/region = Rect2( 0, 0, 0, 0 )
-24/occluder_offset = Vector2( -0, -0 )
-24/navigation_offset = Vector2( -0, -0 )
-24/shape_offset = Vector2( 0, 0 )
-24/shapes = [ ]
-25/name = "Tile 26"
-25/texture = ExtResource( 19 )
-25/tex_offset = Vector2( -24, -17 )
-25/region = Rect2( 0, 0, 0, 0 )
-25/occluder_offset = Vector2( -0, -0 )
-25/navigation_offset = Vector2( -0, -0 )
-25/shape_offset = Vector2( 0, 0 )
-25/shapes = [ ]
-
diff --git a/demos/2d/hexamap/tileset_edit.tscn b/demos/2d/hexamap/tileset_edit.tscn
deleted file mode 100644
index d400d55fd0..0000000000
--- a/demos/2d/hexamap/tileset_edit.tscn
+++ /dev/null
@@ -1,214 +0,0 @@
-[gd_scene load_steps=27 format=1]
-
-[ext_resource path="res://WWT-01.png" type="Texture" id=1]
-[ext_resource path="res://WWT-02.png" type="Texture" id=2]
-[ext_resource path="res://WWT-03.png" type="Texture" id=3]
-[ext_resource path="res://WWT-04.png" type="Texture" id=4]
-[ext_resource path="res://WWT-05.png" type="Texture" id=5]
-[ext_resource path="res://WWT-06.png" type="Texture" id=6]
-[ext_resource path="res://WWT-07.png" type="Texture" id=7]
-[ext_resource path="res://WWT-08.png" type="Texture" id=8]
-[ext_resource path="res://WWT-09.png" type="Texture" id=9]
-[ext_resource path="res://WWT-10.png" type="Texture" id=10]
-[ext_resource path="res://WWT-11.png" type="Texture" id=11]
-[ext_resource path="res://WWT-12.png" type="Texture" id=12]
-[ext_resource path="res://WWT-13.png" type="Texture" id=13]
-[ext_resource path="res://WWT-14.png" type="Texture" id=14]
-[ext_resource path="res://WWT-15.png" type="Texture" id=15]
-[ext_resource path="res://WWT-16.png" type="Texture" id=16]
-[ext_resource path="res://WWT-17.png" type="Texture" id=17]
-[ext_resource path="res://WWT-18.png" type="Texture" id=18]
-[ext_resource path="res://WWT-19.png" type="Texture" id=19]
-[ext_resource path="res://WWT-20.png" type="Texture" id=20]
-[ext_resource path="res://WWT-21.png" type="Texture" id=21]
-[ext_resource path="res://WWT-22.png" type="Texture" id=22]
-[ext_resource path="res://WWT-23.png" type="Texture" id=23]
-[ext_resource path="res://WWT-24.png" type="Texture" id=24]
-[ext_resource path="res://WWT-25.png" type="Texture" id=25]
-[ext_resource path="res://WWT-26.png" type="Texture" id=26]
-
-[node name="Node2D" type="Node2D"]
-
-[node name="Tile 1" type="Sprite" parent="."]
-
-transform/pos = Vector2( 96.6174, 42.2665 )
-texture = ExtResource( 1 )
-centered = false
-offset = Vector2( -24, -17 )
-
-[node name="Tile 2" type="Sprite" parent="."]
-
-transform/pos = Vector2( 96.6174, 42.2665 )
-texture = ExtResource( 2 )
-centered = false
-offset = Vector2( -24, -17 )
-
-[node name="Tile 3" type="Sprite" parent="."]
-
-transform/pos = Vector2( 96.6174, 42.2665 )
-texture = ExtResource( 3 )
-centered = false
-offset = Vector2( -24, -17 )
-
-[node name="Tile 4" type="Sprite" parent="."]
-
-transform/pos = Vector2( 96.6174, 42.2665 )
-texture = ExtResource( 4 )
-centered = false
-offset = Vector2( -24, -17 )
-
-[node name="Tile 5" type="Sprite" parent="."]
-
-transform/pos = Vector2( 96.6174, 42.2665 )
-texture = ExtResource( 5 )
-centered = false
-offset = Vector2( -24, -17 )
-
-[node name="Tile 6" type="Sprite" parent="."]
-
-transform/pos = Vector2( 96.6174, 42.2665 )
-texture = ExtResource( 6 )
-centered = false
-offset = Vector2( -24, -17 )
-
-[node name="Tile 7" type="Sprite" parent="."]
-
-transform/pos = Vector2( 96.6174, 42.2665 )
-texture = ExtResource( 7 )
-centered = false
-offset = Vector2( -24, -17 )
-
-[node name="Tile 8" type="Sprite" parent="."]
-
-transform/pos = Vector2( 96.6174, 42.2665 )
-texture = ExtResource( 8 )
-centered = false
-offset = Vector2( -24, -17 )
-
-[node name="Tile 9" type="Sprite" parent="."]
-
-transform/pos = Vector2( 96.6174, 42.2665 )
-texture = ExtResource( 9 )
-centered = false
-offset = Vector2( -24, -17 )
-
-[node name="Tile 10" type="Sprite" parent="."]
-
-transform/pos = Vector2( 96.6174, 42.2665 )
-texture = ExtResource( 10 )
-centered = false
-offset = Vector2( -24, -17 )
-
-[node name="Tile 11" type="Sprite" parent="."]
-
-transform/pos = Vector2( 96.6174, 42.2665 )
-texture = ExtResource( 11 )
-centered = false
-offset = Vector2( -24, -17 )
-
-[node name="Tile 12" type="Sprite" parent="."]
-
-transform/pos = Vector2( 96.6174, 42.2665 )
-texture = ExtResource( 12 )
-centered = false
-offset = Vector2( -24, -17 )
-
-[node name="Tile 13" type="Sprite" parent="."]
-
-transform/pos = Vector2( 96.6174, 42.2665 )
-texture = ExtResource( 13 )
-centered = false
-offset = Vector2( -24, -17 )
-
-[node name="Tile 14" type="Sprite" parent="."]
-
-transform/pos = Vector2( 96.6174, 42.2665 )
-texture = ExtResource( 14 )
-centered = false
-offset = Vector2( -24, -17 )
-
-[node name="Tile 15" type="Sprite" parent="."]
-
-transform/pos = Vector2( 96.6174, 42.2665 )
-texture = ExtResource( 15 )
-centered = false
-offset = Vector2( -24, -17 )
-
-[node name="Tile 16" type="Sprite" parent="."]
-
-transform/pos = Vector2( 96.6174, 42.2665 )
-texture = ExtResource( 16 )
-centered = false
-offset = Vector2( -24, -17 )
-
-[node name="Tile 17" type="Sprite" parent="."]
-
-transform/pos = Vector2( 96.6174, 42.2665 )
-texture = ExtResource( 17 )
-centered = false
-offset = Vector2( -24, -17 )
-
-[node name="Tile 18" type="Sprite" parent="."]
-
-transform/pos = Vector2( 96.6174, 42.2665 )
-texture = ExtResource( 18 )
-centered = false
-offset = Vector2( -24, -17 )
-
-[node name="Tile 19" type="Sprite" parent="."]
-
-transform/pos = Vector2( 96.6174, 42.2665 )
-texture = ExtResource( 19 )
-centered = false
-offset = Vector2( -24, -17 )
-
-[node name="Tile 20" type="Sprite" parent="."]
-
-transform/pos = Vector2( 96.6174, 42.2665 )
-texture = ExtResource( 20 )
-centered = false
-offset = Vector2( -24, -17 )
-
-[node name="Tile 21" type="Sprite" parent="."]
-
-transform/pos = Vector2( 96.6174, 42.2665 )
-texture = ExtResource( 21 )
-centered = false
-offset = Vector2( -24, -17 )
-
-[node name="Tile 22" type="Sprite" parent="."]
-
-transform/pos = Vector2( 96.6174, 42.2665 )
-texture = ExtResource( 22 )
-centered = false
-offset = Vector2( -24, -17 )
-
-[node name="Tile 23" type="Sprite" parent="."]
-
-transform/pos = Vector2( 96.6174, 42.2665 )
-texture = ExtResource( 23 )
-centered = false
-offset = Vector2( -24, -17 )
-
-[node name="Tile 24" type="Sprite" parent="."]
-
-transform/pos = Vector2( 96.6174, 42.2665 )
-texture = ExtResource( 24 )
-centered = false
-offset = Vector2( -24, -17 )
-
-[node name="Tile 25" type="Sprite" parent="."]
-
-transform/pos = Vector2( 96.6174, 42.2665 )
-texture = ExtResource( 25 )
-centered = false
-offset = Vector2( -24, -17 )
-
-[node name="Tile 26" type="Sprite" parent="."]
-
-transform/pos = Vector2( 96.6174, 42.2665 )
-texture = ExtResource( 26 )
-centered = false
-offset = Vector2( -24, -17 )
-
-
diff --git a/demos/2d/hexamap/troll.gd b/demos/2d/hexamap/troll.gd
deleted file mode 100644
index 82938fdf10..0000000000
--- a/demos/2d/hexamap/troll.gd
+++ /dev/null
@@ -1,38 +0,0 @@
-
-extends KinematicBody2D
-
-# This is a simple collision demo showing how
-# the kinematic controller works.
-# move() will allow to move the node, and will
-# always move it to a non-colliding spot,
-# as long as it starts from a non-colliding spot too.
-
-# Member variables
-const MOTION_SPEED = 160 # Pixels/second
-
-
-func _fixed_process(delta):
- var motion = Vector2()
-
- if (Input.is_action_pressed("move_up")):
- motion += Vector2(0, -1)
- if (Input.is_action_pressed("move_bottom")):
- motion += Vector2(0, 1)
- if (Input.is_action_pressed("move_left")):
- motion += Vector2(-1, 0)
- if (Input.is_action_pressed("move_right")):
- motion += Vector2(1, 0)
-
- motion = motion.normalized()*MOTION_SPEED*delta
- motion = move(motion)
-
- # Make character slide nicely through the world
- var slide_attempts = 4
- while(is_colliding() and slide_attempts > 0):
- motion = get_collision_normal().slide(motion)
- motion = move(motion)
- slide_attempts -= 1
-
-
-func _ready():
- set_fixed_process(true)
diff --git a/demos/2d/hexamap/troll.png b/demos/2d/hexamap/troll.png
deleted file mode 100644
index 69f195d034..0000000000
--- a/demos/2d/hexamap/troll.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/hexamap/troll.tscn b/demos/2d/hexamap/troll.tscn
deleted file mode 100644
index 2dc8bdbf67..0000000000
--- a/demos/2d/hexamap/troll.tscn
+++ /dev/null
@@ -1,52 +0,0 @@
-[gd_scene load_steps=4 format=1]
-
-[ext_resource path="res://troll.gd" type="Script" id=1]
-[ext_resource path="res://troll.png" type="Texture" id=2]
-
-[sub_resource type="CircleShape2D" id=1]
-
-custom_solver_bias = 0.0
-radius = 16.0
-
-[node name="troll" type="KinematicBody2D"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 3.24216, 19.453 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-collision/margin = 0.001
-script/script = ExtResource( 1 )
-
-[node name="Sprite" type="Sprite" parent="."]
-
-texture = ExtResource( 2 )
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
-
-transform/pos = Vector2( 3.24216, 19.453 )
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = -1
-
-[node name="Camera2D" type="Camera2D" parent="."]
-
-anchor_mode = 1
-rotating = false
-current = true
-zoom = Vector2( 1, 1 )
-limit/left = -10000000
-limit/top = -10000000
-limit/right = 10000000
-limit/bottom = 10000000
-drag_margin/h_enabled = true
-drag_margin/v_enabled = true
-smoothing/enable = false
-smoothing/speed = 5.0
-drag_margin/left = 0.2
-drag_margin/top = 0.2
-drag_margin/right = 0.2
-drag_margin/bottom = 0.2
-
-
diff --git a/demos/2d/isometric/dungeon.tscn b/demos/2d/isometric/dungeon.tscn
deleted file mode 100644
index a9f4cfa1e3..0000000000
--- a/demos/2d/isometric/dungeon.tscn
+++ /dev/null
@@ -1,49 +0,0 @@
-[gd_scene load_steps=3 format=1]
-
-[ext_resource path="res://tileset.tres" type="TileSet" id=1]
-[ext_resource path="res://troll.tscn" type="PackedScene" id=2]
-
-[node name="dungeon" type="Node2D"]
-
-[node name="floor" type="TileMap" parent="."]
-
-mode = 1
-tile_set = ExtResource( 1 )
-cell/size = Vector2( 128, 64 )
-cell/quadrant_size = 16
-cell/custom_transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-cell/half_offset = 2
-cell/tile_origin = 1
-cell/y_sort = false
-collision/use_kinematic = false
-collision/friction = 1.0
-collision/bounce = 0.0
-collision/layers = 1
-collision/mask = 1
-occluder/light_mask = 1
-tile_data = IntArray( -851956, 0, -851955, 0, -851954, 0, -786420, 1, -786419, 0, -786418, 0, -720884, 0, -720883, 0, -720882, 0, -655348, 1, -655347, 0, -655346, 0, -589812, 1, -589811, 0, -589810, 0, -524276, 0, -524275, 1, -524274, 0, -458740, 0, -458739, 0, -458738, 0, -393210, 0, -393209, 0, -393208, 0, -393207, 0, -393206, 0, -393205, 0, -393204, 0, -393203, 0, -393202, 0, -327674, 0, -327673, 0, -327672, 1, -327671, 1, -327670, 1, -327669, 1, -327668, 1, -327667, 0, -327666, 0, -262138, 0, -262137, 0, -262136, 0, -262135, 0, -262134, 0, -262133, 0, -262132, 0, -262131, 0, -262130, 0, -196602, 0, -196601, 0, -196600, 0, -196599, 0, -196598, 0, -196597, 0, -196596, 0, -196595, 0, -196594, 0, -131066, 0, -131065, 0, -131064, 0, -131063, 0, -65530, 0, -65529, 0, -65528, 0, -65527, 0, 6, 0, 7, 1, 8, 0, 9, 0, 65542, 0, 65543, 0, 65544, 0, 65545, 0, 131078, 0, 131079, 0, 131080, 0, 131081, 0, 196614, 0, 196615, 0, 196616, 0 )
-
-[node name="walls" type="TileMap" parent="."]
-
-mode = 1
-tile_set = ExtResource( 1 )
-cell/size = Vector2( 128, 64 )
-cell/quadrant_size = 16
-cell/custom_transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-cell/half_offset = 2
-cell/tile_origin = 1
-cell/y_sort = true
-collision/use_kinematic = false
-collision/friction = 1.0
-collision/bounce = 0.0
-collision/layers = 1
-collision/mask = 1
-occluder/light_mask = 1
-tile_data = IntArray( -917493, 2, -917492, 2, -917491, 2, -917490, 2, -917489, 2, -851957, 2, -851956, 3, -851954, 3, -851953, 2, -786421, 2, -786420, 3, -786418, 3, -786417, 2, -720885, 2, -720881, 2, -655349, 2, -655348, 2, -655346, 3, -655345, 2, -589813, 2, -589809, 2, -524277, 2, -524273, 2, -458747, 2, -458746, 2, -458745, 2, -458744, 536870916, -458743, 536870916, -458742, 2, -458741, 2, -458740, 2, -458738, 2, -458737, 2, -393211, 2, -393209, 3, -393205, 3, -393201, 2, -327675, 4, -327665, 2, -262139, 4, -262134, 3, -262133, 3, -262129, 2, -196603, 2, -196601, 3, -196593, 2, -131067, 2, -131066, 3, -131062, 2, -131061, 2, -131060, 2, -131059, 2, -131058, 2, -131057, 2, -65531, 2, -65530, 2, -65527, 2, -65526, 2, 5, 2, 10, 2, 65541, 2, 65543, 3, 65546, 2, 131077, 2, 131082, 2, 196613, 2, 196618, 2, 262149, 2, 262150, 2, 262151, 2, 262152, 2, 262153, 2, 262154, 2 )
-
-[node name="troll" parent="walls" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 299.38, 326.037 )
-collision/margin = 0.001
-
-
diff --git a/demos/2d/isometric/engine.cfg b/demos/2d/isometric/engine.cfg
deleted file mode 100644
index 4952b524a5..0000000000
--- a/demos/2d/isometric/engine.cfg
+++ /dev/null
@@ -1,21 +0,0 @@
-[application]
-
-name="Isometric Game"
-main_scene="res://dungeon.tscn"
-icon="res://icon.png"
-
-[image_loader]
-
-filter=false
-gen_mipmaps=false
-
-[input]
-
-move_up=[key(Up)]
-move_left=[key(Left)]
-move_right=[key(Right)]
-move_bottom=[key(Down)]
-
-[rasterizer]
-
-use_pixel_snap=true
diff --git a/demos/2d/isometric/icon.png b/demos/2d/isometric/icon.png
deleted file mode 100644
index c8fb5dcb42..0000000000
--- a/demos/2d/isometric/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric/isotiles.png b/demos/2d/isometric/isotiles.png
deleted file mode 100644
index aa5a800f8f..0000000000
--- a/demos/2d/isometric/isotiles.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric/tileset.tres b/demos/2d/isometric/tileset.tres
deleted file mode 100644
index 990ee01b65..0000000000
--- a/demos/2d/isometric/tileset.tres
+++ /dev/null
@@ -1,67 +0,0 @@
-[gd_resource type="TileSet" load_steps=6 format=1]
-
-[ext_resource path="res://isotiles.png" type="Texture" id=1]
-
-[sub_resource type="ConvexPolygonShape2D" id=1]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -68, 2, -4, -30, 60, 2, -4, 34 )
-
-[sub_resource type="ConvexPolygonShape2D" id=2]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -20, -6, -4, -22, 12, -22, 4, 10, -4, 10 )
-
-[sub_resource type="ConvexPolygonShape2D" id=3]
-
-custom_solver_bias = 0.0
-points = Vector2Array( 28, -6, 4, 10, 12, -22 )
-
-[sub_resource type="ConvexPolygonShape2D" id=4]
-
-custom_solver_bias = 0.0
-points = Vector2Array( 66.095, -0.62516, -5.90501, 31.3748, -21.905, 23.3748, 50.095, -8.62516 )
-
-[resource]
-
-0/name = "base"
-0/texture = ExtResource( 1 )
-0/tex_offset = Vector2( -4, 6 )
-0/region = Rect2( 28, 92, 132, 84 )
-0/occluder_offset = Vector2( 66, 42 )
-0/navigation_offset = Vector2( 66, 42 )
-0/shape_offset = Vector2( 0, 0 )
-0/shapes = [ ]
-1/name = "base2"
-1/texture = ExtResource( 1 )
-1/tex_offset = Vector2( -4, 6 )
-1/region = Rect2( 220, 92, 132, 84 )
-1/occluder_offset = Vector2( 66, 42 )
-1/navigation_offset = Vector2( 66, 42 )
-1/shape_offset = Vector2( 0, 0 )
-1/shapes = [ ]
-2/name = "wall"
-2/texture = ExtResource( 1 )
-2/tex_offset = Vector2( -4, -32 )
-2/region = Rect2( 28, 220, 132, 136 )
-2/occluder_offset = Vector2( 66, 68 )
-2/navigation_offset = Vector2( 66, 68 )
-2/shape_offset = Vector2( 66, 68 )
-2/shapes = [ SubResource( 1 ) ]
-3/name = "column"
-3/texture = ExtResource( 1 )
-3/tex_offset = Vector2( -2, -32 )
-3/region = Rect2( 220, 220, 132, 136 )
-3/occluder_offset = Vector2( 66, 68 )
-3/navigation_offset = Vector2( 66, 68 )
-3/shape_offset = Vector2( 66, 68 )
-3/shapes = [ SubResource( 2 ), SubResource( 3 ) ]
-4/name = "door1"
-4/texture = ExtResource( 1 )
-4/tex_offset = Vector2( 16, -22 )
-4/region = Rect2( 24, 408, 132, 136 )
-4/occluder_offset = Vector2( 66, 68 )
-4/navigation_offset = Vector2( 66, 68 )
-4/shape_offset = Vector2( 66, 68 )
-4/shapes = [ SubResource( 4 ) ]
-
diff --git a/demos/2d/isometric/tileset_edit.tscn b/demos/2d/isometric/tileset_edit.tscn
deleted file mode 100644
index 2c83c4b52e..0000000000
--- a/demos/2d/isometric/tileset_edit.tscn
+++ /dev/null
@@ -1,130 +0,0 @@
-[gd_scene load_steps=6 format=1]
-
-[ext_resource path="res://isotiles.png" type="Texture" id=1]
-
-[sub_resource type="ConvexPolygonShape2D" id=1]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -68, 2, -4, -30, 60, 2, -4, 34 )
-
-[sub_resource type="ConvexPolygonShape2D" id=2]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -20, -6, -4, -22, 12, -22, 4, 10, -4, 10 )
-
-[sub_resource type="ConvexPolygonShape2D" id=3]
-
-custom_solver_bias = 0.0
-points = Vector2Array( 28, -6, 4, 10, 12, -22 )
-
-[sub_resource type="ConvexPolygonShape2D" id=4]
-
-custom_solver_bias = 0.0
-points = Vector2Array( 66.095, -0.62516, -5.90501, 31.3748, -21.905, 23.3748, 50.095, -8.62516 )
-
-[node name="Node2D" type="Node2D"]
-
-[node name="base" type="Sprite" parent="."]
-
-transform/pos = Vector2( 87.5658, 0.113792 )
-texture = ExtResource( 1 )
-offset = Vector2( -4, 6 )
-region = true
-region_rect = Rect2( 28, 92, 132, 84 )
-
-[node name="base2" type="Sprite" parent="."]
-
-transform/pos = Vector2( 196, 44 )
-texture = ExtResource( 1 )
-offset = Vector2( -4, 6 )
-region = true
-region_rect = Rect2( 220, 92, 132, 84 )
-
-[node name="wall" type="Sprite" parent="."]
-
-transform/pos = Vector2( 356, 70 )
-texture = ExtResource( 1 )
-offset = Vector2( -4, -32 )
-region = true
-region_rect = Rect2( 28, 220, 132, 136 )
-
-[node name="StaticBody2D" type="StaticBody2D" parent="wall"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="collision" type="CollisionPolygon2D" parent="wall/StaticBody2D"]
-
-build_mode = 0
-polygon = Vector2Array( -68, 2, -4, 34, 60, 2, -4, -30 )
-shape_range = Vector2( -1, -1 )
-trigger = false
-
-[node name="column" type="Sprite" parent="."]
-
-transform/pos = Vector2( 292, 198 )
-texture = ExtResource( 1 )
-offset = Vector2( -2, -32 )
-region = true
-region_rect = Rect2( 220, 220, 132, 136 )
-
-[node name="StaticBody" type="StaticBody2D" parent="column"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 2 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-shapes/1/shape = SubResource( 3 )
-shapes/1/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/1/trigger = false
-collision/layers = 1
-collision/mask = 1
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="column/StaticBody"]
-
-build_mode = 0
-polygon = Vector2Array( -20, -6, -4, 10, 4, 10, 28, -6, 12, -22, -4, -22 )
-shape_range = Vector2( -1, -1 )
-trigger = false
-
-[node name="door1" type="Sprite" parent="."]
-
-transform/pos = Vector2( 85.905, 0.62516 )
-texture = ExtResource( 1 )
-offset = Vector2( 16, -22 )
-region = true
-region_rect = Rect2( 24, 408, 132, 136 )
-
-[node name="StaticBody2D" type="StaticBody2D" parent="door1"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 4 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="door1/StaticBody2D"]
-
-build_mode = 0
-polygon = Vector2Array( -5.90501, 31.3748, 66.095, -0.62516, 50.095, -8.62516, -21.905, 23.3748 )
-shape_range = Vector2( -1, -1 )
-trigger = false
-
-
diff --git a/demos/2d/isometric/troll.gd b/demos/2d/isometric/troll.gd
deleted file mode 100644
index d8d4880df1..0000000000
--- a/demos/2d/isometric/troll.gd
+++ /dev/null
@@ -1,38 +0,0 @@
-
-extends KinematicBody2D
-
-# This is a simple collision demo showing how
-# the kinematic controller works.
-# move() will allow to move the node, and will
-# always move it to a non-colliding spot,
-# as long as it starts from a non-colliding spot too.
-
-# Member variables
-const MOTION_SPEED = 160 # Pixels/seconds
-
-
-func _fixed_process(delta):
- var motion = Vector2()
-
- if (Input.is_action_pressed("move_up")):
- motion += Vector2(0, -1)
- if (Input.is_action_pressed("move_bottom")):
- motion += Vector2(0, 1)
- if (Input.is_action_pressed("move_left")):
- motion += Vector2(-1, 0)
- if (Input.is_action_pressed("move_right")):
- motion += Vector2(1, 0)
-
- motion = motion.normalized()*MOTION_SPEED*delta
- motion = move(motion)
-
- # Make character slide nicely through the world
- var slide_attempts = 4
- while(is_colliding() and slide_attempts > 0):
- motion = get_collision_normal().slide(motion)
- motion = move(motion)
- slide_attempts -= 1
-
-
-func _ready():
- set_fixed_process(true)
diff --git a/demos/2d/isometric/troll.png b/demos/2d/isometric/troll.png
deleted file mode 100644
index 69f195d034..0000000000
--- a/demos/2d/isometric/troll.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric/troll.tscn b/demos/2d/isometric/troll.tscn
deleted file mode 100644
index 00080ba07b..0000000000
--- a/demos/2d/isometric/troll.tscn
+++ /dev/null
@@ -1,53 +0,0 @@
-[gd_scene load_steps=4 format=1]
-
-[ext_resource path="res://troll.gd" type="Script" id=1]
-[ext_resource path="res://troll.png" type="Texture" id=2]
-
-[sub_resource type="CircleShape2D" id=1]
-
-custom_solver_bias = 0.0
-radius = 16.0
-
-[node name="troll" type="KinematicBody2D"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, -0.342697, -0.980721 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-collision/margin = 0.001
-script/script = ExtResource( 1 )
-
-[node name="Sprite" type="Sprite" parent="."]
-
-transform/pos = Vector2( -3.94334, -36.924 )
-texture = ExtResource( 2 )
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
-
-transform/pos = Vector2( -0.342697, -0.980721 )
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = -1
-
-[node name="Camera2D" type="Camera2D" parent="."]
-
-anchor_mode = 1
-rotating = false
-current = true
-zoom = Vector2( 1, 1 )
-limit/left = -10000000
-limit/top = -10000000
-limit/right = 10000000
-limit/bottom = 10000000
-drag_margin/h_enabled = true
-drag_margin/v_enabled = true
-smoothing/enable = false
-smoothing/speed = 5.0
-drag_margin/left = 0.2
-drag_margin/top = 0.2
-drag_margin/right = 0.2
-drag_margin/bottom = 0.2
-
-
diff --git a/demos/2d/isometric_light/character_shader.tres b/demos/2d/isometric_light/character_shader.tres
deleted file mode 100644
index 8737e52e33..0000000000
--- a/demos/2d/isometric_light/character_shader.tres
+++ /dev/null
@@ -1,12 +0,0 @@
-[gd_resource type="CanvasItemMaterial" load_steps=2 format=1]
-
-[sub_resource type="CanvasItemShader" id=1]
-
-_code = { "fragment":"//there is no albedo (all shading is normal)\nuniform color col;\nCOLOR=col;\n//sample normal texture\nvec4 ntex = tex(TEXTURE,UV);\n//take the alpha from the normal texture\nCOLOR.a=ntex.a;\n//adjust normalmap from [0..1] to [-1..1]\nntex.rgb = ntex.rgb * vec3(-2,-2,1) - vec3(-1,-1,0);\n//half size of the tile \nvec2 tile_vec=vec2(47,22);\n//rotation to convert the normal to pseudo 3d coordinates\n//this could be optimized\nfloat r = asin(tile_vec.y / tile_vec.x);\nmat3 rot_mat = mat3( vec3(1,0,0), vec3(0,cos(r),-sin(r)), vec3(0,sin(r),cos(r)));\n\n//pass the normal\nNORMAL = rot_mat * ntex.rgb;\n\n\n\n\n", "fragment_ofs":0, "light":"//apply the normal as simple diffuse (same as default code)\nvec3 light_normal = normalize(vec3(LIGHT_VEC,-LIGHT_HEIGHT));\nLIGHT=LIGHT_COLOR*COLOR*max(dot(-light_normal,NORMAL),0.0);\n//substract light position to be always aligned to the bottom of the sprite\n//this makes lighting on it look like a billboard\nLIGHT_VEC.y-=VAR1.y;\n", "light_ofs":0, "vertex":"// pass the local sprite coordinates through a varying\n// the red cross in the sprite is the 0,0\nVAR1.xy=SRC_VERTEX;", "vertex_ofs":0 }
-
-[resource]
-
-shader/shader = SubResource( 1 )
-shader/shading_mode = 0
-shader_param/col = Color( 1, 0.836638, 0.693806, 1 )
-
diff --git a/demos/2d/isometric_light/column.tscn b/demos/2d/isometric_light/column.tscn
deleted file mode 100644
index 6693e39b85..0000000000
--- a/demos/2d/isometric_light/column.tscn
+++ /dev/null
@@ -1,52 +0,0 @@
-[gd_scene load_steps=5 format=1]
-
-[ext_resource path="res://wall_shader.tres" type="CanvasItemMaterial" id=1]
-[ext_resource path="res://faceColor.png" type="Texture" id=2]
-
-[sub_resource type="CircleShape2D" id=1]
-
-custom_solver_bias = 0.0
-radius = 20.0
-
-[sub_resource type="OccluderPolygon2D" id=2]
-
-closed = false
-cull_mode = 0
-polygon = Vector2Array( -16.1183, 62.9508, 4.32091, 74.9223, 23.3002, 65.2867 )
-
-[node name="column" type="StaticBody2D"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 1.36365, 7.83751 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="Sprite" type="Sprite" parent="."]
-
-material/material = ExtResource( 1 )
-transform/pos = Vector2( 0.487671, 0.487679 )
-texture = ExtResource( 2 )
-offset = Vector2( -4.37984, -50.8523 )
-region = true
-region_rect = Rect2( 569, 179, 48, 154 )
-
-[node name="occluder" type="LightOccluder2D" parent="."]
-
-transform/pos = Vector2( -3.90138, -50.97 )
-occluder = SubResource( 2 )
-light_mask = 1
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
-
-transform/pos = Vector2( 1.36365, 7.83751 )
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = -1
-
-
diff --git a/demos/2d/isometric_light/cubio.gd b/demos/2d/isometric_light/cubio.gd
deleted file mode 100644
index a26d5ae6fb..0000000000
--- a/demos/2d/isometric_light/cubio.gd
+++ /dev/null
@@ -1,85 +0,0 @@
-
-extends KinematicBody2D
-
-# Member variables
-const MAX_SPEED = 300.0
-const IDLE_SPEED = 10.0
-const ACCEL = 5.0
-const VSCALE = 0.5
-const SHOOT_INTERVAL = 0.3
-
-var speed = Vector2()
-var current_anim = ""
-var current_mirror = false
-
-var shoot_countdown = 0
-
-
-func _input(event):
- if (event.type == InputEvent.MOUSE_BUTTON and event.button_index == 1 and event.pressed and shoot_countdown <= 0):
- var pos = get_canvas_transform().affine_inverse()*event.pos
- var dir = (pos - get_global_pos()).normalized()
- var bullet = preload("res://shoot.tscn").instance()
- bullet.advance_dir = dir
- bullet.set_pos(get_global_pos() + dir*60)
- get_parent().add_child(bullet)
- shoot_countdown = SHOOT_INTERVAL
-
-
-func _fixed_process(delta):
- shoot_countdown -= delta
- var dir = Vector2()
- if (Input.is_action_pressed("up")):
- dir += Vector2(0, -1)
- if (Input.is_action_pressed("down")):
- dir += Vector2(0, 1)
- if (Input.is_action_pressed("left")):
- dir += Vector2(-1, 0)
- if (Input.is_action_pressed("right")):
- dir += Vector2(1, 0)
-
- if (dir != Vector2()):
- dir = dir.normalized()
- speed = speed.linear_interpolate(dir*MAX_SPEED, delta*ACCEL)
- var motion = speed*delta
- motion.y *= VSCALE
- motion = move(motion)
-
- if (is_colliding()):
- var n = get_collision_normal()
- motion = n.slide(motion)
- move(motion)
-
- var next_anim = ""
- var next_mirror = false
-
- if (dir == Vector2() and speed.length() < IDLE_SPEED):
- next_anim = "idle"
- next_mirror = false
- elif (speed.length() > IDLE_SPEED*0.1):
- var angle = atan2(abs(speed.x), speed.y)
-
- next_mirror = speed.x > 0
- if (angle < PI/8):
- next_anim = "bottom"
- next_mirror = false
- elif (angle < PI/4 + PI/8):
- next_anim = "bottom_left"
- elif (angle < PI*2/4 + PI/8):
- next_anim = "left"
- elif (angle < PI*3/4 + PI/8):
- next_anim = "top_left"
- else:
- next_anim = "top"
- next_mirror = false
-
- if (next_anim != current_anim or next_mirror != current_mirror):
- get_node("frames").set_flip_h(next_mirror)
- get_node("anim").play(next_anim)
- current_anim = next_anim
- current_mirror = next_mirror
-
-
-func _ready():
- set_fixed_process(true)
- set_process_input(true)
diff --git a/demos/2d/isometric_light/cubio.tscn b/demos/2d/isometric_light/cubio.tscn
deleted file mode 100644
index 164f4d3549..0000000000
--- a/demos/2d/isometric_light/cubio.tscn
+++ /dev/null
@@ -1,327 +0,0 @@
-[gd_scene load_steps=173 format=1]
-
-[ext_resource path="res://cubio.gd" type="Script" id=1]
-[ext_resource path="res://character_shader.tres" type="CanvasItemMaterial" id=2]
-[ext_resource path="res://cubio/idle0001.png" type="Texture" id=3]
-[ext_resource path="res://cubio/idle0002.png" type="Texture" id=4]
-[ext_resource path="res://cubio/idle0003.png" type="Texture" id=5]
-[ext_resource path="res://cubio/idle0004.png" type="Texture" id=6]
-[ext_resource path="res://cubio/idle0005.png" type="Texture" id=7]
-[ext_resource path="res://cubio/idle0006.png" type="Texture" id=8]
-[ext_resource path="res://cubio/idle0007.png" type="Texture" id=9]
-[ext_resource path="res://cubio/idle0008.png" type="Texture" id=10]
-[ext_resource path="res://cubio/idle0009.png" type="Texture" id=11]
-[ext_resource path="res://cubio/idle0010.png" type="Texture" id=12]
-[ext_resource path="res://cubio/idle0011.png" type="Texture" id=13]
-[ext_resource path="res://cubio/idle0012.png" type="Texture" id=14]
-[ext_resource path="res://cubio/idle0013.png" type="Texture" id=15]
-[ext_resource path="res://cubio/idle0014.png" type="Texture" id=16]
-[ext_resource path="res://cubio/idle0015.png" type="Texture" id=17]
-[ext_resource path="res://cubio/idle0016.png" type="Texture" id=18]
-[ext_resource path="res://cubio/idle0017.png" type="Texture" id=19]
-[ext_resource path="res://cubio/idle0018.png" type="Texture" id=20]
-[ext_resource path="res://cubio/idle0019.png" type="Texture" id=21]
-[ext_resource path="res://cubio/idle0020.png" type="Texture" id=22]
-[ext_resource path="res://cubio/idle0021.png" type="Texture" id=23]
-[ext_resource path="res://cubio/idle0022.png" type="Texture" id=24]
-[ext_resource path="res://cubio/idle0023.png" type="Texture" id=25]
-[ext_resource path="res://cubio/idle0024.png" type="Texture" id=26]
-[ext_resource path="res://cubio/idle0025.png" type="Texture" id=27]
-[ext_resource path="res://cubio/idle0026.png" type="Texture" id=28]
-[ext_resource path="res://cubio/idle0027.png" type="Texture" id=29]
-[ext_resource path="res://cubio/idle0028.png" type="Texture" id=30]
-[ext_resource path="res://cubio/idle0029.png" type="Texture" id=31]
-[ext_resource path="res://cubio/idle0030.png" type="Texture" id=32]
-[ext_resource path="res://cubio/idle0031.png" type="Texture" id=33]
-[ext_resource path="res://cubio/idle0032.png" type="Texture" id=34]
-[ext_resource path="res://cubio/idle0033.png" type="Texture" id=35]
-[ext_resource path="res://cubio/idle0034.png" type="Texture" id=36]
-[ext_resource path="res://cubio/idle0035.png" type="Texture" id=37]
-[ext_resource path="res://cubio/idle0036.png" type="Texture" id=38]
-[ext_resource path="res://cubio/idle0037.png" type="Texture" id=39]
-[ext_resource path="res://cubio/idle0038.png" type="Texture" id=40]
-[ext_resource path="res://cubio/idle0039.png" type="Texture" id=41]
-[ext_resource path="res://cubio/idle0040.png" type="Texture" id=42]
-[ext_resource path="res://cubio/idle0041.png" type="Texture" id=43]
-[ext_resource path="res://cubio/idle0042.png" type="Texture" id=44]
-[ext_resource path="res://cubio/idle0043.png" type="Texture" id=45]
-[ext_resource path="res://cubio/idle0044.png" type="Texture" id=46]
-[ext_resource path="res://cubio/idle0045.png" type="Texture" id=47]
-[ext_resource path="res://cubio/idle0046.png" type="Texture" id=48]
-[ext_resource path="res://cubio/idle0047.png" type="Texture" id=49]
-[ext_resource path="res://cubio/idle0048.png" type="Texture" id=50]
-[ext_resource path="res://cubio/idle0049.png" type="Texture" id=51]
-[ext_resource path="res://cubio/idle0050.png" type="Texture" id=52]
-[ext_resource path="res://cubio/idle0051.png" type="Texture" id=53]
-[ext_resource path="res://cubio/idle0052.png" type="Texture" id=54]
-[ext_resource path="res://cubio/idle0053.png" type="Texture" id=55]
-[ext_resource path="res://cubio/idle0054.png" type="Texture" id=56]
-[ext_resource path="res://cubio/idle0055.png" type="Texture" id=57]
-[ext_resource path="res://cubio/idle0056.png" type="Texture" id=58]
-[ext_resource path="res://cubio/idle0057.png" type="Texture" id=59]
-[ext_resource path="res://cubio/idle0058.png" type="Texture" id=60]
-[ext_resource path="res://cubio/idle0059.png" type="Texture" id=61]
-[ext_resource path="res://cubio/idle0060.png" type="Texture" id=62]
-[ext_resource path="res://cubio/norm-b-0001.png" type="Texture" id=63]
-[ext_resource path="res://cubio/norm-b-0002.png" type="Texture" id=64]
-[ext_resource path="res://cubio/norm-b-0003.png" type="Texture" id=65]
-[ext_resource path="res://cubio/norm-b-0004.png" type="Texture" id=66]
-[ext_resource path="res://cubio/norm-b-0005.png" type="Texture" id=67]
-[ext_resource path="res://cubio/norm-b-0006.png" type="Texture" id=68]
-[ext_resource path="res://cubio/norm-b-0007.png" type="Texture" id=69]
-[ext_resource path="res://cubio/norm-b-0008.png" type="Texture" id=70]
-[ext_resource path="res://cubio/norm-b-0009.png" type="Texture" id=71]
-[ext_resource path="res://cubio/norm-b-0010.png" type="Texture" id=72]
-[ext_resource path="res://cubio/norm-b-0011.png" type="Texture" id=73]
-[ext_resource path="res://cubio/norm-b-0012.png" type="Texture" id=74]
-[ext_resource path="res://cubio/norm-b-0013.png" type="Texture" id=75]
-[ext_resource path="res://cubio/norm-b-0014.png" type="Texture" id=76]
-[ext_resource path="res://cubio/norm-b-0015.png" type="Texture" id=77]
-[ext_resource path="res://cubio/norm-b-0016.png" type="Texture" id=78]
-[ext_resource path="res://cubio/norm-b-0017.png" type="Texture" id=79]
-[ext_resource path="res://cubio/norm-b-0018.png" type="Texture" id=80]
-[ext_resource path="res://cubio/norm-b-0019.png" type="Texture" id=81]
-[ext_resource path="res://cubio/norm-b-0020.png" type="Texture" id=82]
-[ext_resource path="res://cubio/norm-bl-0001.png" type="Texture" id=83]
-[ext_resource path="res://cubio/norm-bl-0002.png" type="Texture" id=84]
-[ext_resource path="res://cubio/norm-bl-0003.png" type="Texture" id=85]
-[ext_resource path="res://cubio/norm-bl-0004.png" type="Texture" id=86]
-[ext_resource path="res://cubio/norm-bl-0005.png" type="Texture" id=87]
-[ext_resource path="res://cubio/norm-bl-0006.png" type="Texture" id=88]
-[ext_resource path="res://cubio/norm-bl-0007.png" type="Texture" id=89]
-[ext_resource path="res://cubio/norm-bl-0008.png" type="Texture" id=90]
-[ext_resource path="res://cubio/norm-bl-0009.png" type="Texture" id=91]
-[ext_resource path="res://cubio/norm-bl-0010.png" type="Texture" id=92]
-[ext_resource path="res://cubio/norm-bl-0011.png" type="Texture" id=93]
-[ext_resource path="res://cubio/norm-bl-0012.png" type="Texture" id=94]
-[ext_resource path="res://cubio/norm-bl-0013.png" type="Texture" id=95]
-[ext_resource path="res://cubio/norm-bl-0014.png" type="Texture" id=96]
-[ext_resource path="res://cubio/norm-bl-0015.png" type="Texture" id=97]
-[ext_resource path="res://cubio/norm-bl-0016.png" type="Texture" id=98]
-[ext_resource path="res://cubio/norm-bl-0017.png" type="Texture" id=99]
-[ext_resource path="res://cubio/norm-bl-0018.png" type="Texture" id=100]
-[ext_resource path="res://cubio/norm-bl-0019.png" type="Texture" id=101]
-[ext_resource path="res://cubio/norm-bl-0020.png" type="Texture" id=102]
-[ext_resource path="res://cubio/norm-l-0001.png" type="Texture" id=103]
-[ext_resource path="res://cubio/norm-l-0002.png" type="Texture" id=104]
-[ext_resource path="res://cubio/norm-l-0003.png" type="Texture" id=105]
-[ext_resource path="res://cubio/norm-l-0004.png" type="Texture" id=106]
-[ext_resource path="res://cubio/norm-l-0005.png" type="Texture" id=107]
-[ext_resource path="res://cubio/norm-l-0006.png" type="Texture" id=108]
-[ext_resource path="res://cubio/norm-l-0007.png" type="Texture" id=109]
-[ext_resource path="res://cubio/norm-l-0008.png" type="Texture" id=110]
-[ext_resource path="res://cubio/norm-l-0009.png" type="Texture" id=111]
-[ext_resource path="res://cubio/norm-l-0010.png" type="Texture" id=112]
-[ext_resource path="res://cubio/norm-l-0011.png" type="Texture" id=113]
-[ext_resource path="res://cubio/norm-l-0012.png" type="Texture" id=114]
-[ext_resource path="res://cubio/norm-l-0013.png" type="Texture" id=115]
-[ext_resource path="res://cubio/norm-l-0014.png" type="Texture" id=116]
-[ext_resource path="res://cubio/norm-l-0015.png" type="Texture" id=117]
-[ext_resource path="res://cubio/norm-l-0016.png" type="Texture" id=118]
-[ext_resource path="res://cubio/norm-l-0017.png" type="Texture" id=119]
-[ext_resource path="res://cubio/norm-l-0018.png" type="Texture" id=120]
-[ext_resource path="res://cubio/norm-l-0019.png" type="Texture" id=121]
-[ext_resource path="res://cubio/norm-l-0020.png" type="Texture" id=122]
-[ext_resource path="res://cubio/norm-u-0001.png" type="Texture" id=123]
-[ext_resource path="res://cubio/norm-u-0002.png" type="Texture" id=124]
-[ext_resource path="res://cubio/norm-u-0003.png" type="Texture" id=125]
-[ext_resource path="res://cubio/norm-u-0004.png" type="Texture" id=126]
-[ext_resource path="res://cubio/norm-u-0005.png" type="Texture" id=127]
-[ext_resource path="res://cubio/norm-u-0006.png" type="Texture" id=128]
-[ext_resource path="res://cubio/norm-u-0007.png" type="Texture" id=129]
-[ext_resource path="res://cubio/norm-u-0008.png" type="Texture" id=130]
-[ext_resource path="res://cubio/norm-u-0009.png" type="Texture" id=131]
-[ext_resource path="res://cubio/norm-u-0010.png" type="Texture" id=132]
-[ext_resource path="res://cubio/norm-u-0011.png" type="Texture" id=133]
-[ext_resource path="res://cubio/norm-u-0012.png" type="Texture" id=134]
-[ext_resource path="res://cubio/norm-u-0013.png" type="Texture" id=135]
-[ext_resource path="res://cubio/norm-u-0014.png" type="Texture" id=136]
-[ext_resource path="res://cubio/norm-u-0015.png" type="Texture" id=137]
-[ext_resource path="res://cubio/norm-u-0016.png" type="Texture" id=138]
-[ext_resource path="res://cubio/norm-u-0017.png" type="Texture" id=139]
-[ext_resource path="res://cubio/norm-u-0018.png" type="Texture" id=140]
-[ext_resource path="res://cubio/norm-u-0019.png" type="Texture" id=141]
-[ext_resource path="res://cubio/norm-u-0020.png" type="Texture" id=142]
-[ext_resource path="res://cubio/norm-ul-0001.png" type="Texture" id=143]
-[ext_resource path="res://cubio/norm-ul-0002.png" type="Texture" id=144]
-[ext_resource path="res://cubio/norm-ul-0003.png" type="Texture" id=145]
-[ext_resource path="res://cubio/norm-ul-0004.png" type="Texture" id=146]
-[ext_resource path="res://cubio/norm-ul-0005.png" type="Texture" id=147]
-[ext_resource path="res://cubio/norm-ul-0006.png" type="Texture" id=148]
-[ext_resource path="res://cubio/norm-ul-0007.png" type="Texture" id=149]
-[ext_resource path="res://cubio/norm-ul-0008.png" type="Texture" id=150]
-[ext_resource path="res://cubio/norm-ul-0009.png" type="Texture" id=151]
-[ext_resource path="res://cubio/norm-ul-0010.png" type="Texture" id=152]
-[ext_resource path="res://cubio/norm-ul-0011.png" type="Texture" id=153]
-[ext_resource path="res://cubio/norm-ul-0012.png" type="Texture" id=154]
-[ext_resource path="res://cubio/norm-ul-0013.png" type="Texture" id=155]
-[ext_resource path="res://cubio/norm-ul-0014.png" type="Texture" id=156]
-[ext_resource path="res://cubio/norm-ul-0015.png" type="Texture" id=157]
-[ext_resource path="res://cubio/norm-ul-0016.png" type="Texture" id=158]
-[ext_resource path="res://cubio/norm-ul-0017.png" type="Texture" id=159]
-[ext_resource path="res://cubio/norm-ul-0018.png" type="Texture" id=160]
-[ext_resource path="res://cubio/norm-ul-0019.png" type="Texture" id=161]
-[ext_resource path="res://cubio/norm-ul-0020.png" type="Texture" id=162]
-[ext_resource path="res://light2.png" type="Texture" id=163]
-[ext_resource path="res://shadow_blob.png" type="Texture" id=164]
-
-[sub_resource type="CircleShape2D" id=1]
-
-custom_solver_bias = 0.0
-radius = 20.0
-
-[sub_resource type="SpriteFrames" id=2]
-
-frames = [ ExtResource( 3 ), ExtResource( 4 ), ExtResource( 5 ), ExtResource( 6 ), ExtResource( 7 ), ExtResource( 8 ), ExtResource( 9 ), ExtResource( 10 ), ExtResource( 11 ), ExtResource( 12 ), ExtResource( 13 ), ExtResource( 14 ), ExtResource( 15 ), ExtResource( 16 ), ExtResource( 17 ), ExtResource( 18 ), ExtResource( 19 ), ExtResource( 20 ), ExtResource( 21 ), ExtResource( 22 ), ExtResource( 23 ), ExtResource( 24 ), ExtResource( 25 ), ExtResource( 26 ), ExtResource( 27 ), ExtResource( 28 ), ExtResource( 29 ), ExtResource( 30 ), ExtResource( 31 ), ExtResource( 32 ), ExtResource( 33 ), ExtResource( 34 ), ExtResource( 35 ), ExtResource( 36 ), ExtResource( 37 ), ExtResource( 38 ), ExtResource( 39 ), ExtResource( 40 ), ExtResource( 41 ), ExtResource( 42 ), ExtResource( 43 ), ExtResource( 44 ), ExtResource( 45 ), ExtResource( 46 ), ExtResource( 47 ), ExtResource( 48 ), ExtResource( 49 ), ExtResource( 50 ), ExtResource( 51 ), ExtResource( 52 ), ExtResource( 53 ), ExtResource( 54 ), ExtResource( 55 ), ExtResource( 56 ), ExtResource( 57 ), ExtResource( 58 ), ExtResource( 59 ), ExtResource( 60 ), ExtResource( 61 ), ExtResource( 62 ), ExtResource( 63 ), ExtResource( 64 ), ExtResource( 65 ), ExtResource( 66 ), ExtResource( 67 ), ExtResource( 68 ), ExtResource( 69 ), ExtResource( 70 ), ExtResource( 71 ), ExtResource( 72 ), ExtResource( 73 ), ExtResource( 74 ), ExtResource( 75 ), ExtResource( 76 ), ExtResource( 77 ), ExtResource( 78 ), ExtResource( 79 ), ExtResource( 80 ), ExtResource( 81 ), ExtResource( 82 ), ExtResource( 83 ), ExtResource( 84 ), ExtResource( 85 ), ExtResource( 86 ), ExtResource( 87 ), ExtResource( 88 ), ExtResource( 89 ), ExtResource( 90 ), ExtResource( 91 ), ExtResource( 92 ), ExtResource( 93 ), ExtResource( 94 ), ExtResource( 95 ), ExtResource( 96 ), ExtResource( 97 ), ExtResource( 98 ), ExtResource( 99 ), ExtResource( 100 ), ExtResource( 101 ), ExtResource( 102 ), ExtResource( 103 ), ExtResource( 104 ), ExtResource( 105 ), ExtResource( 106 ), ExtResource( 107 ), ExtResource( 108 ), ExtResource( 109 ), ExtResource( 110 ), ExtResource( 111 ), ExtResource( 112 ), ExtResource( 113 ), ExtResource( 114 ), ExtResource( 115 ), ExtResource( 116 ), ExtResource( 117 ), ExtResource( 118 ), ExtResource( 119 ), ExtResource( 120 ), ExtResource( 121 ), ExtResource( 122 ), ExtResource( 123 ), ExtResource( 124 ), ExtResource( 125 ), ExtResource( 126 ), ExtResource( 127 ), ExtResource( 128 ), ExtResource( 129 ), ExtResource( 130 ), ExtResource( 131 ), ExtResource( 132 ), ExtResource( 133 ), ExtResource( 134 ), ExtResource( 135 ), ExtResource( 136 ), ExtResource( 137 ), ExtResource( 138 ), ExtResource( 139 ), ExtResource( 140 ), ExtResource( 141 ), ExtResource( 142 ), ExtResource( 143 ), ExtResource( 144 ), ExtResource( 145 ), ExtResource( 146 ), ExtResource( 147 ), ExtResource( 148 ), ExtResource( 149 ), ExtResource( 150 ), ExtResource( 151 ), ExtResource( 152 ), ExtResource( 153 ), ExtResource( 154 ), ExtResource( 155 ), ExtResource( 156 ), ExtResource( 157 ), ExtResource( 158 ), ExtResource( 159 ), ExtResource( 160 ), ExtResource( 161 ), ExtResource( 162 ) ]
-
-[sub_resource type="Animation" id=3]
-
-resource/name = "bottom"
-length = 0.95
-loop = true
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath("frames:frame")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), "values":[ 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79 ] }
-
-[sub_resource type="Animation" id=4]
-
-length = 0.95
-loop = true
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath("frames:frame")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), "values":[ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99 ] }
-
-[sub_resource type="Animation" id=5]
-
-length = 3.0
-loop = true
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath("frames:frame")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1, 1.05, 1.1, 1.15, 1.2, 1.25, 1.3, 1.35, 1.4, 1.45, 1.5, 1.55, 1.6, 1.65, 1.7, 1.75, 1.8, 1.85, 1.9, 1.95, 2, 2.05, 2.1, 2.15, 2.2, 2.25, 2.3, 2.35, 2.4, 2.45, 2.5, 2.55, 2.6, 2.65, 2.7, 2.75, 2.8, 2.85, 2.9, 2.95, 3 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), "values":[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 55, 56, 57, 58, 59 ] }
-
-[sub_resource type="Animation" id=6]
-
-length = 0.95
-loop = true
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath("frames:frame")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), "values":[ 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119 ] }
-
-[sub_resource type="Animation" id=7]
-
-length = 0.95
-loop = true
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath("frames:frame")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), "values":[ 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139 ] }
-
-[sub_resource type="Animation" id=8]
-
-length = 0.95
-loop = true
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath("frames:frame")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), "values":[ 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159 ] }
-
-[node name="cubio" type="KinematicBody2D"]
-
-visibility/light_mask = 2
-input/pickable = false
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, -0.397217, -9.30363 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-collision/margin = 0.08
-script/script = ExtResource( 1 )
-
-[node name="frames" type="AnimatedSprite" parent="."]
-
-material/material = ExtResource( 2 )
-frames = SubResource( 2 )
-frame = 140
-offset = Vector2( 0.397217, -52.4323 )
-
-[node name="shape" type="CollisionShape2D" parent="."]
-
-transform/pos = Vector2( -0.397217, -9.30363 )
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = -1
-
-[node name="camera" type="Camera2D" parent="."]
-
-anchor_mode = 1
-rotating = false
-current = true
-zoom = Vector2( 1, 1 )
-limit/left = -10000000
-limit/top = -10000000
-limit/right = 10000000
-limit/bottom = 10000000
-drag_margin/h_enabled = true
-drag_margin/v_enabled = true
-smoothing/enable = false
-smoothing/speed = 5.0
-drag_margin/left = 0.2
-drag_margin/top = 0.2
-drag_margin/right = 0.2
-drag_margin/bottom = 0.2
-
-[node name="anim" type="AnimationPlayer" parent="."]
-
-playback/process_mode = 1
-playback/default_blend_time = 0.0
-root/root = NodePath("..")
-anims/bottom = SubResource( 3 )
-anims/bottom_left = SubResource( 4 )
-anims/idle = SubResource( 5 )
-anims/left = SubResource( 6 )
-anims/top = SubResource( 7 )
-anims/top_left = SubResource( 8 )
-playback/active = true
-playback/speed = 1.0
-blend_times = [ ]
-autoplay = "idle"
-
-[node name="Light2D" type="Light2D" parent="."]
-
-transform/pos = Vector2( -0.140442, 2.64355 )
-enabled = true
-texture = ExtResource( 163 )
-offset = Vector2( 0, 0 )
-scale = 8.0
-color = Color( 1, 1, 1, 1 )
-energy = 1.0
-mode = 0
-range/height = 100.0
-range/z_min = -1024
-range/z_max = 1024
-range/layer_min = 0
-range/layer_max = 0
-range/item_mask = 3
-shadow/enabled = true
-shadow/color = Color( 0, 0, 0, 0 )
-shadow/buffer_size = 2048
-shadow/esm_multiplier = 80.0
-shadow/item_mask = 1
-
-[node name="Sprite" type="Sprite" parent="."]
-
-visibility/opacity = 0.3
-texture = ExtResource( 164 )
-offset = Vector2( 0, -5.72164 )
-
-
diff --git a/demos/2d/isometric_light/cubio/idle0001.png b/demos/2d/isometric_light/cubio/idle0001.png
deleted file mode 100644
index 837dd38f9c..0000000000
--- a/demos/2d/isometric_light/cubio/idle0001.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0002.png b/demos/2d/isometric_light/cubio/idle0002.png
deleted file mode 100644
index 6137a37a9d..0000000000
--- a/demos/2d/isometric_light/cubio/idle0002.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0003.png b/demos/2d/isometric_light/cubio/idle0003.png
deleted file mode 100644
index 7f3e3e0e31..0000000000
--- a/demos/2d/isometric_light/cubio/idle0003.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0004.png b/demos/2d/isometric_light/cubio/idle0004.png
deleted file mode 100644
index 0a697dadf9..0000000000
--- a/demos/2d/isometric_light/cubio/idle0004.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0005.png b/demos/2d/isometric_light/cubio/idle0005.png
deleted file mode 100644
index 9c47197247..0000000000
--- a/demos/2d/isometric_light/cubio/idle0005.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0006.png b/demos/2d/isometric_light/cubio/idle0006.png
deleted file mode 100644
index 717a7be5b1..0000000000
--- a/demos/2d/isometric_light/cubio/idle0006.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0007.png b/demos/2d/isometric_light/cubio/idle0007.png
deleted file mode 100644
index dde18399f3..0000000000
--- a/demos/2d/isometric_light/cubio/idle0007.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0008.png b/demos/2d/isometric_light/cubio/idle0008.png
deleted file mode 100644
index 0f716a5d84..0000000000
--- a/demos/2d/isometric_light/cubio/idle0008.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0009.png b/demos/2d/isometric_light/cubio/idle0009.png
deleted file mode 100644
index d271373f9d..0000000000
--- a/demos/2d/isometric_light/cubio/idle0009.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0010.png b/demos/2d/isometric_light/cubio/idle0010.png
deleted file mode 100644
index 61311be0eb..0000000000
--- a/demos/2d/isometric_light/cubio/idle0010.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0011.png b/demos/2d/isometric_light/cubio/idle0011.png
deleted file mode 100644
index 0b7d32d138..0000000000
--- a/demos/2d/isometric_light/cubio/idle0011.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0012.png b/demos/2d/isometric_light/cubio/idle0012.png
deleted file mode 100644
index c176034cfa..0000000000
--- a/demos/2d/isometric_light/cubio/idle0012.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0013.png b/demos/2d/isometric_light/cubio/idle0013.png
deleted file mode 100644
index c37018154b..0000000000
--- a/demos/2d/isometric_light/cubio/idle0013.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0014.png b/demos/2d/isometric_light/cubio/idle0014.png
deleted file mode 100644
index a4613e4269..0000000000
--- a/demos/2d/isometric_light/cubio/idle0014.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0015.png b/demos/2d/isometric_light/cubio/idle0015.png
deleted file mode 100644
index 8354588b72..0000000000
--- a/demos/2d/isometric_light/cubio/idle0015.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0016.png b/demos/2d/isometric_light/cubio/idle0016.png
deleted file mode 100644
index 4e5796fb89..0000000000
--- a/demos/2d/isometric_light/cubio/idle0016.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0017.png b/demos/2d/isometric_light/cubio/idle0017.png
deleted file mode 100644
index a4ac7e8c43..0000000000
--- a/demos/2d/isometric_light/cubio/idle0017.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0018.png b/demos/2d/isometric_light/cubio/idle0018.png
deleted file mode 100644
index aa7cc8fe6c..0000000000
--- a/demos/2d/isometric_light/cubio/idle0018.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0019.png b/demos/2d/isometric_light/cubio/idle0019.png
deleted file mode 100644
index 3ab603ceda..0000000000
--- a/demos/2d/isometric_light/cubio/idle0019.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0020.png b/demos/2d/isometric_light/cubio/idle0020.png
deleted file mode 100644
index 9f02648f1a..0000000000
--- a/demos/2d/isometric_light/cubio/idle0020.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0021.png b/demos/2d/isometric_light/cubio/idle0021.png
deleted file mode 100644
index ec37fc331f..0000000000
--- a/demos/2d/isometric_light/cubio/idle0021.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0022.png b/demos/2d/isometric_light/cubio/idle0022.png
deleted file mode 100644
index 34bf331af0..0000000000
--- a/demos/2d/isometric_light/cubio/idle0022.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0023.png b/demos/2d/isometric_light/cubio/idle0023.png
deleted file mode 100644
index 80a458146e..0000000000
--- a/demos/2d/isometric_light/cubio/idle0023.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0024.png b/demos/2d/isometric_light/cubio/idle0024.png
deleted file mode 100644
index cd08c6d14a..0000000000
--- a/demos/2d/isometric_light/cubio/idle0024.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0025.png b/demos/2d/isometric_light/cubio/idle0025.png
deleted file mode 100644
index de500512d4..0000000000
--- a/demos/2d/isometric_light/cubio/idle0025.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0026.png b/demos/2d/isometric_light/cubio/idle0026.png
deleted file mode 100644
index 4a8335a248..0000000000
--- a/demos/2d/isometric_light/cubio/idle0026.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0027.png b/demos/2d/isometric_light/cubio/idle0027.png
deleted file mode 100644
index c3d1609a03..0000000000
--- a/demos/2d/isometric_light/cubio/idle0027.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0028.png b/demos/2d/isometric_light/cubio/idle0028.png
deleted file mode 100644
index 96c1f32223..0000000000
--- a/demos/2d/isometric_light/cubio/idle0028.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0029.png b/demos/2d/isometric_light/cubio/idle0029.png
deleted file mode 100644
index 5b72d02300..0000000000
--- a/demos/2d/isometric_light/cubio/idle0029.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0030.png b/demos/2d/isometric_light/cubio/idle0030.png
deleted file mode 100644
index a84787bf0a..0000000000
--- a/demos/2d/isometric_light/cubio/idle0030.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0031.png b/demos/2d/isometric_light/cubio/idle0031.png
deleted file mode 100644
index dc9cd7ddc5..0000000000
--- a/demos/2d/isometric_light/cubio/idle0031.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0032.png b/demos/2d/isometric_light/cubio/idle0032.png
deleted file mode 100644
index c99f2e52bc..0000000000
--- a/demos/2d/isometric_light/cubio/idle0032.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0033.png b/demos/2d/isometric_light/cubio/idle0033.png
deleted file mode 100644
index cf5c648f9e..0000000000
--- a/demos/2d/isometric_light/cubio/idle0033.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0034.png b/demos/2d/isometric_light/cubio/idle0034.png
deleted file mode 100644
index 8e18e12d8d..0000000000
--- a/demos/2d/isometric_light/cubio/idle0034.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0035.png b/demos/2d/isometric_light/cubio/idle0035.png
deleted file mode 100644
index ee2c25ee96..0000000000
--- a/demos/2d/isometric_light/cubio/idle0035.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0036.png b/demos/2d/isometric_light/cubio/idle0036.png
deleted file mode 100644
index f452b5db33..0000000000
--- a/demos/2d/isometric_light/cubio/idle0036.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0037.png b/demos/2d/isometric_light/cubio/idle0037.png
deleted file mode 100644
index 7768c712e3..0000000000
--- a/demos/2d/isometric_light/cubio/idle0037.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0038.png b/demos/2d/isometric_light/cubio/idle0038.png
deleted file mode 100644
index 1200127116..0000000000
--- a/demos/2d/isometric_light/cubio/idle0038.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0039.png b/demos/2d/isometric_light/cubio/idle0039.png
deleted file mode 100644
index 25219f0582..0000000000
--- a/demos/2d/isometric_light/cubio/idle0039.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0040.png b/demos/2d/isometric_light/cubio/idle0040.png
deleted file mode 100644
index 8da0a81050..0000000000
--- a/demos/2d/isometric_light/cubio/idle0040.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0041.png b/demos/2d/isometric_light/cubio/idle0041.png
deleted file mode 100644
index fa102aec8a..0000000000
--- a/demos/2d/isometric_light/cubio/idle0041.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0042.png b/demos/2d/isometric_light/cubio/idle0042.png
deleted file mode 100644
index 0d19c32572..0000000000
--- a/demos/2d/isometric_light/cubio/idle0042.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0043.png b/demos/2d/isometric_light/cubio/idle0043.png
deleted file mode 100644
index bf284c62d0..0000000000
--- a/demos/2d/isometric_light/cubio/idle0043.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0044.png b/demos/2d/isometric_light/cubio/idle0044.png
deleted file mode 100644
index 3daa1be0b8..0000000000
--- a/demos/2d/isometric_light/cubio/idle0044.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0045.png b/demos/2d/isometric_light/cubio/idle0045.png
deleted file mode 100644
index 92abe74295..0000000000
--- a/demos/2d/isometric_light/cubio/idle0045.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0046.png b/demos/2d/isometric_light/cubio/idle0046.png
deleted file mode 100644
index 2a1ab0f036..0000000000
--- a/demos/2d/isometric_light/cubio/idle0046.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0047.png b/demos/2d/isometric_light/cubio/idle0047.png
deleted file mode 100644
index da38b835ef..0000000000
--- a/demos/2d/isometric_light/cubio/idle0047.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0048.png b/demos/2d/isometric_light/cubio/idle0048.png
deleted file mode 100644
index 35fac1b602..0000000000
--- a/demos/2d/isometric_light/cubio/idle0048.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0049.png b/demos/2d/isometric_light/cubio/idle0049.png
deleted file mode 100644
index 7ebd79b8d7..0000000000
--- a/demos/2d/isometric_light/cubio/idle0049.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0050.png b/demos/2d/isometric_light/cubio/idle0050.png
deleted file mode 100644
index ba0678ba87..0000000000
--- a/demos/2d/isometric_light/cubio/idle0050.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0051.png b/demos/2d/isometric_light/cubio/idle0051.png
deleted file mode 100644
index 03c54f1232..0000000000
--- a/demos/2d/isometric_light/cubio/idle0051.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0052.png b/demos/2d/isometric_light/cubio/idle0052.png
deleted file mode 100644
index 0e2c8b5d9f..0000000000
--- a/demos/2d/isometric_light/cubio/idle0052.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0053.png b/demos/2d/isometric_light/cubio/idle0053.png
deleted file mode 100644
index d95095937f..0000000000
--- a/demos/2d/isometric_light/cubio/idle0053.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0054.png b/demos/2d/isometric_light/cubio/idle0054.png
deleted file mode 100644
index 5a09fce69e..0000000000
--- a/demos/2d/isometric_light/cubio/idle0054.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0055.png b/demos/2d/isometric_light/cubio/idle0055.png
deleted file mode 100644
index 6e2aad9d70..0000000000
--- a/demos/2d/isometric_light/cubio/idle0055.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0056.png b/demos/2d/isometric_light/cubio/idle0056.png
deleted file mode 100644
index 45813e953f..0000000000
--- a/demos/2d/isometric_light/cubio/idle0056.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0057.png b/demos/2d/isometric_light/cubio/idle0057.png
deleted file mode 100644
index 579b4e1647..0000000000
--- a/demos/2d/isometric_light/cubio/idle0057.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0058.png b/demos/2d/isometric_light/cubio/idle0058.png
deleted file mode 100644
index 236f290651..0000000000
--- a/demos/2d/isometric_light/cubio/idle0058.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0059.png b/demos/2d/isometric_light/cubio/idle0059.png
deleted file mode 100644
index 837dd38f9c..0000000000
--- a/demos/2d/isometric_light/cubio/idle0059.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/idle0060.png b/demos/2d/isometric_light/cubio/idle0060.png
deleted file mode 100644
index 837dd38f9c..0000000000
--- a/demos/2d/isometric_light/cubio/idle0060.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-b-0001.png b/demos/2d/isometric_light/cubio/norm-b-0001.png
deleted file mode 100644
index cda17e21cc..0000000000
--- a/demos/2d/isometric_light/cubio/norm-b-0001.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-b-0002.png b/demos/2d/isometric_light/cubio/norm-b-0002.png
deleted file mode 100644
index fb36728cdf..0000000000
--- a/demos/2d/isometric_light/cubio/norm-b-0002.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-b-0003.png b/demos/2d/isometric_light/cubio/norm-b-0003.png
deleted file mode 100644
index c8bfecb100..0000000000
--- a/demos/2d/isometric_light/cubio/norm-b-0003.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-b-0004.png b/demos/2d/isometric_light/cubio/norm-b-0004.png
deleted file mode 100644
index e91213434f..0000000000
--- a/demos/2d/isometric_light/cubio/norm-b-0004.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-b-0005.png b/demos/2d/isometric_light/cubio/norm-b-0005.png
deleted file mode 100644
index a823fe9a92..0000000000
--- a/demos/2d/isometric_light/cubio/norm-b-0005.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-b-0006.png b/demos/2d/isometric_light/cubio/norm-b-0006.png
deleted file mode 100644
index d9de12baad..0000000000
--- a/demos/2d/isometric_light/cubio/norm-b-0006.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-b-0007.png b/demos/2d/isometric_light/cubio/norm-b-0007.png
deleted file mode 100644
index f042eed408..0000000000
--- a/demos/2d/isometric_light/cubio/norm-b-0007.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-b-0008.png b/demos/2d/isometric_light/cubio/norm-b-0008.png
deleted file mode 100644
index e18ca607dd..0000000000
--- a/demos/2d/isometric_light/cubio/norm-b-0008.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-b-0009.png b/demos/2d/isometric_light/cubio/norm-b-0009.png
deleted file mode 100644
index 7e7ddd4c63..0000000000
--- a/demos/2d/isometric_light/cubio/norm-b-0009.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-b-0010.png b/demos/2d/isometric_light/cubio/norm-b-0010.png
deleted file mode 100644
index fddb956099..0000000000
--- a/demos/2d/isometric_light/cubio/norm-b-0010.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-b-0011.png b/demos/2d/isometric_light/cubio/norm-b-0011.png
deleted file mode 100644
index 240a50a9ec..0000000000
--- a/demos/2d/isometric_light/cubio/norm-b-0011.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-b-0012.png b/demos/2d/isometric_light/cubio/norm-b-0012.png
deleted file mode 100644
index 3e38628e98..0000000000
--- a/demos/2d/isometric_light/cubio/norm-b-0012.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-b-0013.png b/demos/2d/isometric_light/cubio/norm-b-0013.png
deleted file mode 100644
index 2380e76909..0000000000
--- a/demos/2d/isometric_light/cubio/norm-b-0013.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-b-0014.png b/demos/2d/isometric_light/cubio/norm-b-0014.png
deleted file mode 100644
index db374927c6..0000000000
--- a/demos/2d/isometric_light/cubio/norm-b-0014.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-b-0015.png b/demos/2d/isometric_light/cubio/norm-b-0015.png
deleted file mode 100644
index 1cd0e762c5..0000000000
--- a/demos/2d/isometric_light/cubio/norm-b-0015.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-b-0016.png b/demos/2d/isometric_light/cubio/norm-b-0016.png
deleted file mode 100644
index 0d894db3f4..0000000000
--- a/demos/2d/isometric_light/cubio/norm-b-0016.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-b-0017.png b/demos/2d/isometric_light/cubio/norm-b-0017.png
deleted file mode 100644
index c184af8e85..0000000000
--- a/demos/2d/isometric_light/cubio/norm-b-0017.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-b-0018.png b/demos/2d/isometric_light/cubio/norm-b-0018.png
deleted file mode 100644
index 1db06014b7..0000000000
--- a/demos/2d/isometric_light/cubio/norm-b-0018.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-b-0019.png b/demos/2d/isometric_light/cubio/norm-b-0019.png
deleted file mode 100644
index e74c9c7954..0000000000
--- a/demos/2d/isometric_light/cubio/norm-b-0019.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-b-0020.png b/demos/2d/isometric_light/cubio/norm-b-0020.png
deleted file mode 100644
index 326e60c64a..0000000000
--- a/demos/2d/isometric_light/cubio/norm-b-0020.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-bl-0001.png b/demos/2d/isometric_light/cubio/norm-bl-0001.png
deleted file mode 100644
index 0b36e8caa3..0000000000
--- a/demos/2d/isometric_light/cubio/norm-bl-0001.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-bl-0002.png b/demos/2d/isometric_light/cubio/norm-bl-0002.png
deleted file mode 100644
index f00166d140..0000000000
--- a/demos/2d/isometric_light/cubio/norm-bl-0002.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-bl-0003.png b/demos/2d/isometric_light/cubio/norm-bl-0003.png
deleted file mode 100644
index d84993e097..0000000000
--- a/demos/2d/isometric_light/cubio/norm-bl-0003.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-bl-0004.png b/demos/2d/isometric_light/cubio/norm-bl-0004.png
deleted file mode 100644
index 8e4c7f278b..0000000000
--- a/demos/2d/isometric_light/cubio/norm-bl-0004.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-bl-0005.png b/demos/2d/isometric_light/cubio/norm-bl-0005.png
deleted file mode 100644
index 5009f2a514..0000000000
--- a/demos/2d/isometric_light/cubio/norm-bl-0005.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-bl-0006.png b/demos/2d/isometric_light/cubio/norm-bl-0006.png
deleted file mode 100644
index d0d654de6e..0000000000
--- a/demos/2d/isometric_light/cubio/norm-bl-0006.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-bl-0007.png b/demos/2d/isometric_light/cubio/norm-bl-0007.png
deleted file mode 100644
index 2df2437a0d..0000000000
--- a/demos/2d/isometric_light/cubio/norm-bl-0007.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-bl-0008.png b/demos/2d/isometric_light/cubio/norm-bl-0008.png
deleted file mode 100644
index 4bb8e91ecc..0000000000
--- a/demos/2d/isometric_light/cubio/norm-bl-0008.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-bl-0009.png b/demos/2d/isometric_light/cubio/norm-bl-0009.png
deleted file mode 100644
index e4ab80ab72..0000000000
--- a/demos/2d/isometric_light/cubio/norm-bl-0009.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-bl-0010.png b/demos/2d/isometric_light/cubio/norm-bl-0010.png
deleted file mode 100644
index 7ead89343f..0000000000
--- a/demos/2d/isometric_light/cubio/norm-bl-0010.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-bl-0011.png b/demos/2d/isometric_light/cubio/norm-bl-0011.png
deleted file mode 100644
index 9714999645..0000000000
--- a/demos/2d/isometric_light/cubio/norm-bl-0011.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-bl-0012.png b/demos/2d/isometric_light/cubio/norm-bl-0012.png
deleted file mode 100644
index 95e0117df8..0000000000
--- a/demos/2d/isometric_light/cubio/norm-bl-0012.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-bl-0013.png b/demos/2d/isometric_light/cubio/norm-bl-0013.png
deleted file mode 100644
index 85d4f25e7e..0000000000
--- a/demos/2d/isometric_light/cubio/norm-bl-0013.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-bl-0014.png b/demos/2d/isometric_light/cubio/norm-bl-0014.png
deleted file mode 100644
index 3c9cc526d0..0000000000
--- a/demos/2d/isometric_light/cubio/norm-bl-0014.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-bl-0015.png b/demos/2d/isometric_light/cubio/norm-bl-0015.png
deleted file mode 100644
index 3e30649ce1..0000000000
--- a/demos/2d/isometric_light/cubio/norm-bl-0015.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-bl-0016.png b/demos/2d/isometric_light/cubio/norm-bl-0016.png
deleted file mode 100644
index f39399c369..0000000000
--- a/demos/2d/isometric_light/cubio/norm-bl-0016.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-bl-0017.png b/demos/2d/isometric_light/cubio/norm-bl-0017.png
deleted file mode 100644
index 47f79741a1..0000000000
--- a/demos/2d/isometric_light/cubio/norm-bl-0017.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-bl-0018.png b/demos/2d/isometric_light/cubio/norm-bl-0018.png
deleted file mode 100644
index 8f4ccdcf33..0000000000
--- a/demos/2d/isometric_light/cubio/norm-bl-0018.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-bl-0019.png b/demos/2d/isometric_light/cubio/norm-bl-0019.png
deleted file mode 100644
index a278ec0f05..0000000000
--- a/demos/2d/isometric_light/cubio/norm-bl-0019.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-bl-0020.png b/demos/2d/isometric_light/cubio/norm-bl-0020.png
deleted file mode 100644
index db5fd0b73c..0000000000
--- a/demos/2d/isometric_light/cubio/norm-bl-0020.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-l-0001.png b/demos/2d/isometric_light/cubio/norm-l-0001.png
deleted file mode 100644
index 7a989e79dd..0000000000
--- a/demos/2d/isometric_light/cubio/norm-l-0001.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-l-0002.png b/demos/2d/isometric_light/cubio/norm-l-0002.png
deleted file mode 100644
index 2257923ee6..0000000000
--- a/demos/2d/isometric_light/cubio/norm-l-0002.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-l-0003.png b/demos/2d/isometric_light/cubio/norm-l-0003.png
deleted file mode 100644
index 2e264e49a4..0000000000
--- a/demos/2d/isometric_light/cubio/norm-l-0003.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-l-0004.png b/demos/2d/isometric_light/cubio/norm-l-0004.png
deleted file mode 100644
index e0061451d6..0000000000
--- a/demos/2d/isometric_light/cubio/norm-l-0004.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-l-0005.png b/demos/2d/isometric_light/cubio/norm-l-0005.png
deleted file mode 100644
index e16cca081c..0000000000
--- a/demos/2d/isometric_light/cubio/norm-l-0005.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-l-0006.png b/demos/2d/isometric_light/cubio/norm-l-0006.png
deleted file mode 100644
index 694c2163eb..0000000000
--- a/demos/2d/isometric_light/cubio/norm-l-0006.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-l-0007.png b/demos/2d/isometric_light/cubio/norm-l-0007.png
deleted file mode 100644
index ed2ae64cad..0000000000
--- a/demos/2d/isometric_light/cubio/norm-l-0007.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-l-0008.png b/demos/2d/isometric_light/cubio/norm-l-0008.png
deleted file mode 100644
index 4bbaeb8006..0000000000
--- a/demos/2d/isometric_light/cubio/norm-l-0008.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-l-0009.png b/demos/2d/isometric_light/cubio/norm-l-0009.png
deleted file mode 100644
index 1f53a1067b..0000000000
--- a/demos/2d/isometric_light/cubio/norm-l-0009.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-l-0010.png b/demos/2d/isometric_light/cubio/norm-l-0010.png
deleted file mode 100644
index 2007942a2a..0000000000
--- a/demos/2d/isometric_light/cubio/norm-l-0010.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-l-0011.png b/demos/2d/isometric_light/cubio/norm-l-0011.png
deleted file mode 100644
index 0c27288646..0000000000
--- a/demos/2d/isometric_light/cubio/norm-l-0011.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-l-0012.png b/demos/2d/isometric_light/cubio/norm-l-0012.png
deleted file mode 100644
index 8b885bcee8..0000000000
--- a/demos/2d/isometric_light/cubio/norm-l-0012.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-l-0013.png b/demos/2d/isometric_light/cubio/norm-l-0013.png
deleted file mode 100644
index ed08c9a470..0000000000
--- a/demos/2d/isometric_light/cubio/norm-l-0013.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-l-0014.png b/demos/2d/isometric_light/cubio/norm-l-0014.png
deleted file mode 100644
index 3b6088c9a0..0000000000
--- a/demos/2d/isometric_light/cubio/norm-l-0014.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-l-0015.png b/demos/2d/isometric_light/cubio/norm-l-0015.png
deleted file mode 100644
index 1ffa2b8cda..0000000000
--- a/demos/2d/isometric_light/cubio/norm-l-0015.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-l-0016.png b/demos/2d/isometric_light/cubio/norm-l-0016.png
deleted file mode 100644
index 00279dc052..0000000000
--- a/demos/2d/isometric_light/cubio/norm-l-0016.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-l-0017.png b/demos/2d/isometric_light/cubio/norm-l-0017.png
deleted file mode 100644
index 1805000a78..0000000000
--- a/demos/2d/isometric_light/cubio/norm-l-0017.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-l-0018.png b/demos/2d/isometric_light/cubio/norm-l-0018.png
deleted file mode 100644
index 1ff123533f..0000000000
--- a/demos/2d/isometric_light/cubio/norm-l-0018.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-l-0019.png b/demos/2d/isometric_light/cubio/norm-l-0019.png
deleted file mode 100644
index 2faf043a2b..0000000000
--- a/demos/2d/isometric_light/cubio/norm-l-0019.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-l-0020.png b/demos/2d/isometric_light/cubio/norm-l-0020.png
deleted file mode 100644
index 7948d2d79d..0000000000
--- a/demos/2d/isometric_light/cubio/norm-l-0020.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-u-0001.png b/demos/2d/isometric_light/cubio/norm-u-0001.png
deleted file mode 100644
index 6c702ba7c3..0000000000
--- a/demos/2d/isometric_light/cubio/norm-u-0001.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-u-0002.png b/demos/2d/isometric_light/cubio/norm-u-0002.png
deleted file mode 100644
index 9a151e049b..0000000000
--- a/demos/2d/isometric_light/cubio/norm-u-0002.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-u-0003.png b/demos/2d/isometric_light/cubio/norm-u-0003.png
deleted file mode 100644
index 0b7464260a..0000000000
--- a/demos/2d/isometric_light/cubio/norm-u-0003.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-u-0004.png b/demos/2d/isometric_light/cubio/norm-u-0004.png
deleted file mode 100644
index 89061fdbcf..0000000000
--- a/demos/2d/isometric_light/cubio/norm-u-0004.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-u-0005.png b/demos/2d/isometric_light/cubio/norm-u-0005.png
deleted file mode 100644
index efc8ab0157..0000000000
--- a/demos/2d/isometric_light/cubio/norm-u-0005.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-u-0006.png b/demos/2d/isometric_light/cubio/norm-u-0006.png
deleted file mode 100644
index a89ef58f46..0000000000
--- a/demos/2d/isometric_light/cubio/norm-u-0006.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-u-0007.png b/demos/2d/isometric_light/cubio/norm-u-0007.png
deleted file mode 100644
index b069591200..0000000000
--- a/demos/2d/isometric_light/cubio/norm-u-0007.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-u-0008.png b/demos/2d/isometric_light/cubio/norm-u-0008.png
deleted file mode 100644
index 8f0dbe8016..0000000000
--- a/demos/2d/isometric_light/cubio/norm-u-0008.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-u-0009.png b/demos/2d/isometric_light/cubio/norm-u-0009.png
deleted file mode 100644
index d4698f2584..0000000000
--- a/demos/2d/isometric_light/cubio/norm-u-0009.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-u-0010.png b/demos/2d/isometric_light/cubio/norm-u-0010.png
deleted file mode 100644
index cc3d442d4a..0000000000
--- a/demos/2d/isometric_light/cubio/norm-u-0010.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-u-0011.png b/demos/2d/isometric_light/cubio/norm-u-0011.png
deleted file mode 100644
index 43c505d7e4..0000000000
--- a/demos/2d/isometric_light/cubio/norm-u-0011.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-u-0012.png b/demos/2d/isometric_light/cubio/norm-u-0012.png
deleted file mode 100644
index d4f955fd0c..0000000000
--- a/demos/2d/isometric_light/cubio/norm-u-0012.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-u-0013.png b/demos/2d/isometric_light/cubio/norm-u-0013.png
deleted file mode 100644
index 08dd875a54..0000000000
--- a/demos/2d/isometric_light/cubio/norm-u-0013.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-u-0014.png b/demos/2d/isometric_light/cubio/norm-u-0014.png
deleted file mode 100644
index 4bea108a46..0000000000
--- a/demos/2d/isometric_light/cubio/norm-u-0014.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-u-0015.png b/demos/2d/isometric_light/cubio/norm-u-0015.png
deleted file mode 100644
index 943c556706..0000000000
--- a/demos/2d/isometric_light/cubio/norm-u-0015.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-u-0016.png b/demos/2d/isometric_light/cubio/norm-u-0016.png
deleted file mode 100644
index d71a69c5a6..0000000000
--- a/demos/2d/isometric_light/cubio/norm-u-0016.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-u-0017.png b/demos/2d/isometric_light/cubio/norm-u-0017.png
deleted file mode 100644
index 2d74e4472c..0000000000
--- a/demos/2d/isometric_light/cubio/norm-u-0017.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-u-0018.png b/demos/2d/isometric_light/cubio/norm-u-0018.png
deleted file mode 100644
index 17a5b10acb..0000000000
--- a/demos/2d/isometric_light/cubio/norm-u-0018.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-u-0019.png b/demos/2d/isometric_light/cubio/norm-u-0019.png
deleted file mode 100644
index e376c843e1..0000000000
--- a/demos/2d/isometric_light/cubio/norm-u-0019.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-u-0020.png b/demos/2d/isometric_light/cubio/norm-u-0020.png
deleted file mode 100644
index fa1d3521ca..0000000000
--- a/demos/2d/isometric_light/cubio/norm-u-0020.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-ul-0001.png b/demos/2d/isometric_light/cubio/norm-ul-0001.png
deleted file mode 100644
index 3e75621260..0000000000
--- a/demos/2d/isometric_light/cubio/norm-ul-0001.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-ul-0002.png b/demos/2d/isometric_light/cubio/norm-ul-0002.png
deleted file mode 100644
index d48d902936..0000000000
--- a/demos/2d/isometric_light/cubio/norm-ul-0002.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-ul-0003.png b/demos/2d/isometric_light/cubio/norm-ul-0003.png
deleted file mode 100644
index 703cef6715..0000000000
--- a/demos/2d/isometric_light/cubio/norm-ul-0003.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-ul-0004.png b/demos/2d/isometric_light/cubio/norm-ul-0004.png
deleted file mode 100644
index 7dd3e2884e..0000000000
--- a/demos/2d/isometric_light/cubio/norm-ul-0004.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-ul-0005.png b/demos/2d/isometric_light/cubio/norm-ul-0005.png
deleted file mode 100644
index 1281b9ceb8..0000000000
--- a/demos/2d/isometric_light/cubio/norm-ul-0005.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-ul-0006.png b/demos/2d/isometric_light/cubio/norm-ul-0006.png
deleted file mode 100644
index e3c58752e9..0000000000
--- a/demos/2d/isometric_light/cubio/norm-ul-0006.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-ul-0007.png b/demos/2d/isometric_light/cubio/norm-ul-0007.png
deleted file mode 100644
index ccec10c83c..0000000000
--- a/demos/2d/isometric_light/cubio/norm-ul-0007.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-ul-0008.png b/demos/2d/isometric_light/cubio/norm-ul-0008.png
deleted file mode 100644
index 1243c7dfe8..0000000000
--- a/demos/2d/isometric_light/cubio/norm-ul-0008.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-ul-0009.png b/demos/2d/isometric_light/cubio/norm-ul-0009.png
deleted file mode 100644
index 77ea3ca8e9..0000000000
--- a/demos/2d/isometric_light/cubio/norm-ul-0009.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-ul-0010.png b/demos/2d/isometric_light/cubio/norm-ul-0010.png
deleted file mode 100644
index cf1cb7d0e3..0000000000
--- a/demos/2d/isometric_light/cubio/norm-ul-0010.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-ul-0011.png b/demos/2d/isometric_light/cubio/norm-ul-0011.png
deleted file mode 100644
index 1063ee29a8..0000000000
--- a/demos/2d/isometric_light/cubio/norm-ul-0011.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-ul-0012.png b/demos/2d/isometric_light/cubio/norm-ul-0012.png
deleted file mode 100644
index a896237161..0000000000
--- a/demos/2d/isometric_light/cubio/norm-ul-0012.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-ul-0013.png b/demos/2d/isometric_light/cubio/norm-ul-0013.png
deleted file mode 100644
index cc289b18a0..0000000000
--- a/demos/2d/isometric_light/cubio/norm-ul-0013.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-ul-0014.png b/demos/2d/isometric_light/cubio/norm-ul-0014.png
deleted file mode 100644
index faf36e82b6..0000000000
--- a/demos/2d/isometric_light/cubio/norm-ul-0014.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-ul-0015.png b/demos/2d/isometric_light/cubio/norm-ul-0015.png
deleted file mode 100644
index 925be82a2e..0000000000
--- a/demos/2d/isometric_light/cubio/norm-ul-0015.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-ul-0016.png b/demos/2d/isometric_light/cubio/norm-ul-0016.png
deleted file mode 100644
index 1cb2300b9d..0000000000
--- a/demos/2d/isometric_light/cubio/norm-ul-0016.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-ul-0017.png b/demos/2d/isometric_light/cubio/norm-ul-0017.png
deleted file mode 100644
index 5a841b57af..0000000000
--- a/demos/2d/isometric_light/cubio/norm-ul-0017.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-ul-0018.png b/demos/2d/isometric_light/cubio/norm-ul-0018.png
deleted file mode 100644
index 2b30df8988..0000000000
--- a/demos/2d/isometric_light/cubio/norm-ul-0018.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-ul-0019.png b/demos/2d/isometric_light/cubio/norm-ul-0019.png
deleted file mode 100644
index 12c0a72d6d..0000000000
--- a/demos/2d/isometric_light/cubio/norm-ul-0019.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/cubio/norm-ul-0020.png b/demos/2d/isometric_light/cubio/norm-ul-0020.png
deleted file mode 100644
index 3cffda17ca..0000000000
--- a/demos/2d/isometric_light/cubio/norm-ul-0020.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/energy.png b/demos/2d/isometric_light/energy.png
deleted file mode 100644
index 237e3ea4f0..0000000000
--- a/demos/2d/isometric_light/energy.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/engine.cfg b/demos/2d/isometric_light/engine.cfg
deleted file mode 100644
index e653d4750e..0000000000
--- a/demos/2d/isometric_light/engine.cfg
+++ /dev/null
@@ -1,20 +0,0 @@
-[application]
-
-name="Isometric 2D + Lighting"
-main_scene="res://map.tscn"
-icon="res://icon.png"
-
-[input]
-
-up=[key(Up), key(W)]
-down=[key(S), key(Down)]
-left=[key(Left), key(A)]
-right=[key(Right), key(D)]
-
-[rasterizer]
-
-shadow_filter=0
-
-[render]
-
-default_clear_color=#ff000000
diff --git a/demos/2d/isometric_light/faceColor.png b/demos/2d/isometric_light/faceColor.png
deleted file mode 100644
index c6daf73cb7..0000000000
--- a/demos/2d/isometric_light/faceColor.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/faceMask.png b/demos/2d/isometric_light/faceMask.png
deleted file mode 100644
index d91e968c8e..0000000000
--- a/demos/2d/isometric_light/faceMask.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/faceNormal.png b/demos/2d/isometric_light/faceNormal.png
deleted file mode 100644
index 651f075fa1..0000000000
--- a/demos/2d/isometric_light/faceNormal.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/fire.png b/demos/2d/isometric_light/fire.png
deleted file mode 100644
index 746e4f9f4b..0000000000
--- a/demos/2d/isometric_light/fire.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/floor_shader.tres b/demos/2d/isometric_light/floor_shader.tres
deleted file mode 100644
index e8f616cf1f..0000000000
--- a/demos/2d/isometric_light/floor_shader.tres
+++ /dev/null
@@ -1,14 +0,0 @@
-[gd_resource type="CanvasItemMaterial" load_steps=3 format=1]
-
-[ext_resource path="res://faceNormal.png" type="Texture" id=1]
-
-[sub_resource type="CanvasItemShader" id=1]
-
-_code = { "fragment":"// just pass the normal\n\nuniform texture normal;\nvec2 ywnormal=tex( normal,UV).wy * vec2(2.0,2.0) - vec2(1.0,1.0);\nNORMAL=vec3(ywnormal,sqrt(1 - (ywnormal.x * ywnormal.x) - (ywnormal.y * ywnormal.y) ));\n\n", "fragment_ofs":0, "light":"//the tile half size in pixels\nvec2 tile_vec=vec2(140,70);\nfloat z_scale = 1.0;\n//compute a 3D postion fot thelight\nvec3 light_3d = vec3(-LIGHT_VEC.x,LIGHT_HEIGHT,LIGHT_VEC.y);\n\n//rotate the normal map to the same coordinates as the pseudo 3d ponit\n//this could be optimized\nfloat r = asin(tile_vec.y/tile_vec.x);\nmat3 rot_mat = mat3( vec3(1,0,0), vec3(0,cos(r),-sin(r)), vec3(0,sin(r),cos(r)));\nvec3 n = rot_mat * NORMAL;\nn.y=-n.y;\n\n//compute diffuse light\nfloat dp = max(dot(normalize(n),-normalize(light_3d)),0);\nLIGHT=vec4(vec3(dp),1.0)*COLOR*LIGHT_COLOR;\n", "light_ofs":0, "vertex":"//pass the x1 in local sprite coordinates.\n//the sprite center (small red cross) is 0,0\nVAR1.xy=SRC_VERTEX;", "vertex_ofs":0 }
-
-[resource]
-
-shader/shader = SubResource( 1 )
-shader/shading_mode = 0
-shader_param/normal = ExtResource( 1 )
-
diff --git a/demos/2d/isometric_light/icon.png b/demos/2d/isometric_light/icon.png
deleted file mode 100644
index 0801f78ea5..0000000000
--- a/demos/2d/isometric_light/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/light2.png b/demos/2d/isometric_light/light2.png
deleted file mode 100644
index cd473251aa..0000000000
--- a/demos/2d/isometric_light/light2.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/map.gd b/demos/2d/isometric_light/map.gd
deleted file mode 100644
index 6b790ddf1c..0000000000
--- a/demos/2d/isometric_light/map.gd
+++ /dev/null
@@ -1,7 +0,0 @@
-
-extends Node2D
-
-
-func _on_prince_area_body_enter(body):
- if (body.get_name() == "cubio"):
- get_node("message").show()
diff --git a/demos/2d/isometric_light/map.tscn b/demos/2d/isometric_light/map.tscn
deleted file mode 100644
index 3c65f9ecfc..0000000000
--- a/demos/2d/isometric_light/map.tscn
+++ /dev/null
@@ -1,261 +0,0 @@
-[gd_scene load_steps=10 format=1]
-
-[ext_resource path="res://map.gd" type="Script" id=1]
-[ext_resource path="res://tileset.tres" type="TileSet" id=2]
-[ext_resource path="res://cubio.tscn" type="PackedScene" id=3]
-[ext_resource path="res://torch.tscn" type="PackedScene" id=4]
-[ext_resource path="res://column.tscn" type="PackedScene" id=5]
-[ext_resource path="res://cubio/idle0001.png" type="Texture" id=6]
-[ext_resource path="res://light2.png" type="Texture" id=7]
-
-[sub_resource type="CircleShape2D" id=1]
-
-custom_solver_bias = 0.0
-radius = 100.0
-
-[sub_resource type="CanvasItemMaterial" id=2]
-
-shader/shading_mode = 1
-
-[node name="node" type="Node2D"]
-
-transform/pos = Vector2( -0.735077, -20.5826 )
-script/script = ExtResource( 1 )
-
-[node name="floor_map" type="TileMap" parent="."]
-
-mode = 1
-tile_set = ExtResource( 2 )
-cell/size = Vector2( 192, 88 )
-cell/quadrant_size = 16
-cell/custom_transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-cell/half_offset = 2
-cell/tile_origin = 1
-cell/y_sort = true
-collision/use_kinematic = false
-collision/friction = 1.0
-collision/bounce = 0.0
-collision/layers = 1
-collision/mask = 1
-occluder/light_mask = 1
-tile_data = IntArray( -1900531, 0, -1900530, 1, -1900529, 0, -1900528, 0, -1900527, 0, -1834995, 0, -1834994, 0, -1834993, 0, -1834992, 1, -1834991, 0, -1769459, 0, -1769458, 0, -1769457, 0, -1769456, 1, -1769455, 0, -1703923, 0, -1703922, 0, -1703921, 0, -1703920, 0, -1703919, 1, -1638387, 0, -1638386, 0, -1638385, 0, -1638384, 0, -1638383, 0, -1572855, 0, -1572854, 0, -1572853, 0, -1572852, 0, -1572851, 0, -1572850, 0, -1572849, 1, -1572848, 0, -1572847, 0, -1507319, 0, -1507318, 0, -1507317, 0, -1507316, 0, -1507315, 1, -1507314, 1, -1507313, 1, -1507312, 0, -1507311, 0, -1441783, 0, -1441782, 0, -1441781, 0, -1441780, 0, -1441779, 0, -1441778, 0, -1441777, 0, -1441776, 0, -1441775, 0, -1376247, 0, -1376246, 0, -1376245, 0, -1376244, 0, -1310711, 1, -1310710, 0, -1310709, 0, -1310708, 0, -1245175, 0, -1245174, 0, -1245173, 0, -1245172, 0, -1179639, 0, -1179638, 0, -1179637, 1, -1179636, 0, -1114103, 0, -1114102, 0, -1114101, 0, -1114100, 0, -1048567, 0, -1048566, 0, -1048565, 0, -1048564, 0, -983031, 0, -983030, 0, -983029, 0, -983028, 0, -917495, 0, -917494, 1, -917493, 1, -917492, 0, -851959, 0, -851958, 0, -851957, 0, -851956, 0, -786423, 0, -786422, 0, -786421, 0, -786420, 0, -720894, 0, -720893, 0, -720892, 0, -720891, 0, -720890, 0, -720889, 0, -720888, 0, -720887, 0, -720886, 0, -720885, 0, -720884, 0, -720883, 0, -720882, 0, -720881, 0, -655358, 0, -655357, 0, -655356, 0, -655355, 0, -655354, 0, -655353, 0, -655352, 0, -655351, 0, -655350, 0, -655349, 0, -655348, 0, -655347, 0, -655346, 0, -655345, 0, -589822, 0, -589821, 0, -589820, 0, -589819, 0, -589818, 0, -589817, 0, -589816, 0, -589815, 0, -589814, 0, -589813, 0, -589812, 0, -589811, 0, -589810, 0, -589809, 0, -524286, 0, -524285, 0, -524284, 1, -524283, 0, -524282, 0, -524281, 0, -524280, 0, -524279, 1, -524278, 1, -524277, 1, -524276, 1, -524275, 0, -524274, 0, -524273, 0, -458750, 0, -458749, 0, -458748, 1, -458747, 0, -458746, 0, -458745, 0, -458744, 0, -458743, 0, -458742, 0, -458741, 0, -458740, 0, -458739, 0, -458738, 1, -458737, 0, -393214, 0, -393213, 0, -393212, 0, -393211, 0, -393210, 0, -393209, 0, -393208, 0, -393207, 0, -393206, 0, -393205, 0, -393204, 0, -393203, 0, -393202, 0, -393201, 0, -262149, 0, -262148, 0, -262147, 0, -262146, 0, -262145, 0, -327680, 0, -327679, 0, -327678, 0, -327677, 0, -327676, 0, -327675, 0, -196613, 0, -196612, 0, -196611, 0, -196610, 0, -196609, 0, -262144, 0, -262143, 0, -262142, 0, -262141, 0, -262140, 0, -262139, 0, -131077, 0, -131076, 0, -131075, 0, -131074, 0, -131073, 0, -196608, 0, -196607, 0, -196606, 0, -196605, 0, -196604, 0, -196603, 0, -65541, 0, -65540, 0, -65539, 0, -65538, 0, -65537, 0, -131072, 0, -131071, 0, -131070, 0, -131069, 1, -131068, 0, -131067, 0, -5, 0, -4, 0, -3, 0, -2, 0, -1, 0, -65536, 0, -65535, 0, -65534, 0, -65533, 0, -65532, 1, -65531, 0, 65531, 0, 65532, 1, 65533, 0, 65534, 0, 65535, 1, 0, 0, 1, 0, 2, 0, 3, 0, 4, 1, 5, 0, 131067, 0, 131068, 1, 131069, 0, 131070, 0, 131071, 0, 65536, 0, 65537, 0, 65538, 0, 65539, 0, 65540, 0, 65541, 0, 196603, 0, 196604, 0, 196605, 0, 196606, 1, 196607, 0, 131072, 0, 131073, 0, 131074, 0, 131075, 0, 131076, 1, 131077, 0, 262139, 0, 262140, 0, 262141, 0, 262142, 0, 262143, 0, 196608, 0, 196609, 0, 196610, 0, 196611, 0, 196612, 0, 196613, 0, 327676, 0, 327677, 0, 327678, 0, 327679, 0, 262144, 0, 262145, 0, 262146, 0, 262147, 0, 262148, 0, 262149, 0 )
-
-[node name="wall_map" type="TileMap" parent="."]
-
-mode = 1
-tile_set = ExtResource( 2 )
-cell/size = Vector2( 94, 43 )
-cell/quadrant_size = 16
-cell/custom_transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-cell/half_offset = 2
-cell/tile_origin = 1
-cell/y_sort = true
-collision/use_kinematic = false
-collision/friction = 1.0
-collision/bounce = 0.0
-collision/layers = 1
-collision/mask = 1
-occluder/light_mask = 1
-tile_data = IntArray( -3801060, 5, -3801059, 10, -3801058, 10, -3801057, 10, -3801056, 10, -3801055, 10, -3801054, 10, -3801053, 10, -3801052, 536870916, -3735524, 9, -3735516, 7, -3669988, 9, -3669980, 7, -3604452, 9, -3604444, 7, -3538916, 9, -3538908, 7, -3473380, 9, -3473372, 7, -3407844, 9, -3407836, 7, -3342308, 9, -3342300, 7, -3276772, 9, -3276764, 7, -3211236, 9, -3211228, 7, -3145709, 5, -3145708, 10, -3145707, 10, -3145706, 10, -3145705, 10, -3145704, 10, -3145703, 10, -3145702, 10, -3145701, 10, -3145692, 7, -3080173, 9, -3080156, 7, -3014637, 9, -3014634, 2, -3014620, 7, -2949101, 2, -2949084, 7, -2883565, 9, -2883558, 8, -2883557, 8, -2883556, 8, -2883555, 8, -2883554, 8, -2883553, 8, -2883552, 8, -2883551, 8, -2883550, 8, -2883549, 8, -2883548, 6, -2818029, 9, -2818023, 7, -2752493, 9, -2752487, 7, -2686957, 9, -2686955, 2, -2686951, 7, -2621421, 9, -2621415, 7, -2555885, 9, -2555879, 2, -2490349, 2, -2490343, 7, -2424813, 9, -2424807, 7, -2359277, 9, -2359274, 2, -2359271, 7, -2293741, 9, -2293735, 7, -2228205, 4, -2228199, 7, -2162669, 9, -2162668, 10, -2162667, 536870916, -2162663, 7, -2097133, 8, -2097132, 8, -2097131, 6, -2097127, 7, -2031597, 9, -2031591, 7, -1966061, 9, -1966055, 7, -1900525, 9, -1900519, 7, -1834989, 9, -1834986, 8, -1834985, 8, -1834984, 8, -1834983, 7, -1769453, 9, -1769450, 7, -1769447, 7, -1703917, 9, -1703916, 8, -1703915, 8, -1703914, 8, -1703911, 7, -1638381, 9, -1638375, 7, -1572845, 9, -1572839, 7, -1507309, 9, -1507303, 7, -1441787, 5, -1441786, 10, -1441785, 10, -1441784, 10, -1441783, 10, -1441782, 10, -1441781, 10, -1441780, 10, -1441779, 10, -1441778, 10, -1441777, 10, -1441776, 10, -1441775, 10, -1441774, 10, -1441766, 10, -1441765, 10, -1441764, 10, -1441763, 10, -1441762, 10, -1441761, 536870916, -1376251, 9, -1376225, 7, -1310715, 9, -1310689, 7, -1245179, 9, -1245153, 7, -1179643, 9, -1179617, 7, -1114107, 9, -1114081, 7, -1048571, 9, -1048545, 7, -983035, 9, -983009, 7, -917499, 9, -917473, 7, -851963, 9, -851937, 7, -786427, 9, -786401, 7, -720891, 9, -720884, 8, -720883, 8, -720882, 8, -720881, 8, -720880, 8, -720879, 8, -720878, 8, -720877, 8, -720876, 8, -720875, 8, -720874, 8, -720873, 8, -720872, 8, -720871, 8, -720870, 8, -720869, 8, -720868, 8, -720867, 8, -720866, 8, -720865, 6, -589834, 5, -589833, 10, -589832, 10, -589831, 10, -589830, 10, -589829, 10, -589828, 10, -589827, 10, -589826, 10, -589825, 10, -655360, 10, -655359, 10, -655358, 10, -655357, 10, -655356, 10, -655349, 7, -524298, 9, -589813, 7, -458762, 9, -524277, 7, -393226, 9, -458741, 7, -327690, 9, -393205, 7, -262154, 9, -262150, 5, -262149, 10, -262148, 10, -262147, 10, -262146, 10, -262145, 10, -327680, 10, -327679, 10, -327678, 10, -327677, 10, -327676, 3, -327669, 7, -196618, 9, -196614, 9, -262140, 7, -262133, 7, -131082, 9, -131078, 9, -196604, 7, -196597, 7, -65546, 9, -65542, 9, -131068, 7, -131061, 7, -10, 9, -6, 4, -5, 8, -4, 8, -3, 8, -2, 8, -65535, 8, -65534, 8, -65533, 8, -65532, 6, -65525, 7, 65526, 9, 11, 7, 131062, 9, 65547, 7, 196598, 9, 131083, 7, 262134, 9, 196619, 7, 327670, 9, 262155, 7, 393206, 9, 327691, 7, 458742, 9, 393227, 7, 524278, 4, 524279, 8, 458763, 7, 589816, 9, 524299, 7, 655352, 4, 655353, 8, 655354, 8, 655355, 8, 655356, 8, 655357, 8, 655358, 8, 655359, 8, 589824, 8, 589825, 8, 589826, 8, 589827, 8, 589828, 8, 589829, 8, 589830, 8, 589831, 8, 589832, 8, 589833, 8, 589834, 8, 589835, 6 )
-__meta__ = { "_editor_collapsed":true }
-
-[node name="cubio" parent="wall_map" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( -184.284, 6.7328 )
-collision/margin = 0.08
-
-[node name="toch" parent="wall_map" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( -42.0531, -74.8855 )
-
-[node name="toch1" parent="wall_map" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 96.0294, -19.8329 )
-
-[node name="toch2" parent="wall_map" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 954.802, -147.456 )
-
-[node name="toch3" parent="wall_map" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 1247.08, 42.9454 )
-
-[node name="toch4" parent="wall_map" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 1257.11, -167.498 )
-
-[node name="toch5" parent="wall_map" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 1632.9, -73.9674 )
-
-[node name="toch6" parent="wall_map" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 1566.09, 113.093 )
-
-[node name="toch7" parent="wall_map" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 1935.2, 64.6577 )
-
-[node name="toch8" parent="wall_map" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 2000.34, 258.399 )
-
-[node name="toch9" parent="wall_map" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 3738.07, -328.247 )
-
-[node name="toch10" parent="wall_map" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 4034.17, -585.483 )
-
-[node name="toch11" parent="wall_map" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 4261.79, -472.595 )
-
-[node name="toch12" parent="wall_map" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 4006.41, -479.998 )
-
-[node name="column" parent="wall_map" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( -122.203, 119.689 )
-
-[node name="column1" parent="wall_map" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 95.2993, 99.8337 )
-
-[node name="column2" parent="wall_map" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 138.619, 246.039 )
-
-[node name="column3" parent="wall_map" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 324.534, 82.6862 )
-
-[node name="column4" parent="wall_map" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 1046.53, -175.429 )
-
-[node name="column5" parent="wall_map" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 1347.07, -179.039 )
-
-[node name="column6" parent="wall_map" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 1184.62, -261.166 )
-
-[node name="column7" parent="wall_map" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 1520.35, -139.329 )
-
-[node name="column8" parent="wall_map" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 1409.34, 25.8286 )
-
-[node name="column9" parent="wall_map" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 1804.63, -13.8814 )
-
-[node name="column10" parent="wall_map" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 1782.97, 170.229 )
-
-[node name="column11" parent="wall_map" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 2223.9, 158.537 )
-
-[node name="column12" parent="wall_map" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 3744.95, -480.43 )
-
-[node name="column13" parent="wall_map" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 3838.62, -526.042 )
-
-[node name="column14" parent="wall_map" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 3937.17, -573.283 )
-
-[node name="column15" parent="wall_map" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 4123.69, -474.728 )
-
-[node name="column16" parent="wall_map" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 4027.58, -427.487 )
-
-[node name="column17" parent="wall_map" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 3935.54, -377.802 )
-
-[node name="prince_area" type="Area2D" parent="wall_map"]
-
-transform/pos = Vector2( 4133.07, -561.046 )
-input/pickable = true
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, -37.4897 )
-shapes/0/trigger = false
-gravity_vec = Vector2( 0, 1 )
-gravity = 98.0
-linear_damp = 0.1
-angular_damp = 1.0
-
-[node name="prince" type="Sprite" parent="wall_map/prince_area"]
-
-material/material = SubResource( 2 )
-texture = ExtResource( 6 )
-offset = Vector2( -1.10803, -49.8615 )
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="wall_map/prince_area"]
-
-transform/pos = Vector2( 0, -37.4897 )
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = -1
-
-[node name="Light2D" type="Light2D" parent="."]
-
-transform/pos = Vector2( -191.788, 32.4743 )
-enabled = true
-texture = ExtResource( 7 )
-offset = Vector2( 0, 0 )
-scale = 8.0
-color = Color( 1, 1, 1, 1 )
-energy = 1.0
-mode = 0
-range/height = 60.0
-range/z_min = -1024
-range/z_max = 1024
-range/layer_min = 0
-range/layer_max = 0
-range/item_mask = 1
-shadow/enabled = true
-shadow/color = Color( 0, 0, 0, 0 )
-shadow/buffer_size = 2048
-shadow/esm_multiplier = 80.0
-shadow/item_mask = 1
-
-[node name="CanvasModulate" type="CanvasModulate" parent="."]
-
-color = Color( 0.361304, 0.36638, 0.384393, 1 )
-
-[node name="message" type="Label" parent="."]
-
-visibility/visible = false
-material/material = SubResource( 2 )
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-margin/left = 4067.0
-margin/top = -597.0
-margin/right = 4200.0
-margin/bottom = -571.0
-text = "Thank You Cubio!\nYou saved The Prince!"
-align = 1
-percent_visible = 1.0
-lines_skipped = 0
-max_lines_visible = -1
-
-[connection signal="body_enter" from="wall_map/prince_area" to="." method="_on_prince_area_body_enter"]
-
-
diff --git a/demos/2d/isometric_light/shadow_blob.png b/demos/2d/isometric_light/shadow_blob.png
deleted file mode 100644
index e97fd2a826..0000000000
--- a/demos/2d/isometric_light/shadow_blob.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/shoot.gd b/demos/2d/isometric_light/shoot.gd
deleted file mode 100644
index b48d4ad34b..0000000000
--- a/demos/2d/isometric_light/shoot.gd
+++ /dev/null
@@ -1,21 +0,0 @@
-
-extends KinematicBody2D
-
-# Member variables
-const ADVANCE_SPEED = 500.0
-
-var advance_dir = Vector2(1, 0)
-var hit = false
-
-
-func _fixed_process(delta):
- if (hit):
- return
- move(advance_dir*delta*ADVANCE_SPEED)
- if (is_colliding()):
- get_node("anim").play("explode")
- hit = true
-
-
-func _ready():
- set_fixed_process(true)
diff --git a/demos/2d/isometric_light/shoot.tscn b/demos/2d/isometric_light/shoot.tscn
deleted file mode 100644
index 0a49b33d0b..0000000000
--- a/demos/2d/isometric_light/shoot.tscn
+++ /dev/null
@@ -1,172 +0,0 @@
-[gd_scene load_steps=10 format=1]
-
-[ext_resource path="res://shoot.gd" type="Script" id=1]
-[ext_resource path="res://energy.png" type="Texture" id=2]
-[ext_resource path="res://shoot_halo.png" type="Texture" id=3]
-
-[sub_resource type="CircleShape2D" id=1]
-
-custom_solver_bias = 0.0
-radius = 10.0
-
-[sub_resource type="CanvasItemMaterial" id=2]
-
-shader/shading_mode = 0
-
-[sub_resource type="Animation" id=3]
-
-length = 1.0
-loop = false
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath("explosion:config/emitting")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.3 ), "transitions":FloatArray( 1, 1 ), "values":[ true, false ] }
-tracks/1/type = "value"
-tracks/1/path = NodePath("Sprite:visibility/opacity")
-tracks/1/interp = 1
-tracks/1/keys = { "cont":true, "times":FloatArray( 0, 0.2 ), "transitions":FloatArray( 1, 1 ), "values":[ 1.0, 0.0 ] }
-tracks/2/type = "value"
-tracks/2/path = NodePath("energy1:config/emitting")
-tracks/2/interp = 1
-tracks/2/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ false ] }
-tracks/3/type = "value"
-tracks/3/path = NodePath("light:color")
-tracks/3/interp = 1
-tracks/3/keys = { "cont":true, "times":FloatArray( 0, 0.5 ), "transitions":FloatArray( 1, 1 ), "values":[ Color( 1, 3, 2, 1 ), Color( 0, 0, 0, 0 ) ] }
-tracks/4/type = "method"
-tracks/4/path = NodePath(".")
-tracks/4/interp = 1
-tracks/4/keys = { "times":FloatArray( 0.9 ), "transitions":FloatArray( 1 ), "values":[ { "args":[ ], "method":"queue_free" } ] }
-
-[sub_resource type="Animation" id=4]
-
-length = 1.0
-loop = true
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath("Sprite:transform/rot")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":true, "times":FloatArray( 0, 1 ), "transitions":FloatArray( 1, 1 ), "values":[ 0.0, 360.0 ] }
-
-[sub_resource type="ColorRamp" id=5]
-
-offsets = FloatArray( 0, 1 )
-colors = ColorArray( 1, 1, 1, 1, 1, 0.617074, 0.704795, 0.0653235 )
-
-[sub_resource type="ColorRamp" id=6]
-
-offsets = FloatArray( 0, 1 )
-colors = ColorArray( 1, 1, 1, 1, 1, 0.617074, 0.704795, 0.0653235 )
-
-[node name="shoot" type="KinematicBody2D"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-collision/margin = 0.08
-script/script = ExtResource( 1 )
-
-[node name="Sprite" type="Sprite" parent="."]
-
-material/material = SubResource( 2 )
-transform/pos = Vector2( -1.46303, -58.521 )
-texture = ExtResource( 2 )
-
-[node name="anim" type="AnimationPlayer" parent="."]
-
-playback/process_mode = 1
-playback/default_blend_time = 0.0
-root/root = NodePath("..")
-anims/explode = SubResource( 3 )
-anims/spin = SubResource( 4 )
-playback/active = true
-playback/speed = 1.0
-blend_times = [ ]
-autoplay = ""
-
-[node name="light" type="Light2D" parent="."]
-
-enabled = true
-texture = ExtResource( 3 )
-offset = Vector2( 0, 0 )
-scale = 1.0
-color = Color( 1, 3, 2, 1 )
-energy = 1.0
-mode = 0
-range/height = 80.0
-range/z_min = -1024
-range/z_max = 1024
-range/layer_min = 0
-range/layer_max = 0
-range/item_mask = 1
-shadow/enabled = true
-shadow/color = Color( 0, 0, 0, 0 )
-shadow/buffer_size = 2048
-shadow/esm_multiplier = 80.0
-shadow/item_mask = 1
-
-[node name="shape" type="CollisionShape2D" parent="."]
-
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = -1
-
-[node name="energy1" type="Particles2D" parent="."]
-
-visibility/blend_mode = 1
-transform/pos = Vector2( -1.06581, -61.3015 )
-config/amount = 32
-config/lifetime = 0.6
-config/local_space = false
-config/texture = ExtResource( 2 )
-params/direction = 0.0
-params/spread = 180.0
-params/linear_velocity = 60.0
-params/spin_velocity = 0.0
-params/orbit_velocity = 0.0
-params/gravity_direction = 0.0
-params/gravity_strength = 9.8
-params/radial_accel = 0.0
-params/tangential_accel = 0.0
-params/damping = 0.0
-params/initial_angle = 0.0
-params/initial_size = 0.8
-params/final_size = 0.1
-params/hue_variation = 0.0
-params/anim_speed_scale = 1.0
-params/anim_initial_pos = 0.0
-color/color_ramp = SubResource( 5 )
-
-[node name="explosion" type="Particles2D" parent="."]
-
-visibility/blend_mode = 1
-transform/pos = Vector2( -1.06581, -61.3015 )
-config/amount = 32
-config/lifetime = 0.6
-config/emitting = false
-config/local_space = false
-config/explosiveness = 0.1
-config/texture = ExtResource( 2 )
-params/direction = 0.0
-params/spread = 180.0
-params/linear_velocity = 200.0
-params/spin_velocity = 0.0
-params/orbit_velocity = 0.0
-params/gravity_direction = 0.0
-params/gravity_strength = 200.0
-params/radial_accel = 0.0
-params/tangential_accel = 0.0
-params/damping = 0.0
-params/initial_angle = 0.0
-params/initial_size = 0.8
-params/final_size = 0.1
-params/hue_variation = 0.0
-params/anim_speed_scale = 1.0
-params/anim_initial_pos = 0.0
-color/color_ramp = SubResource( 6 )
-
-
diff --git a/demos/2d/isometric_light/shoot_halo.png b/demos/2d/isometric_light/shoot_halo.png
deleted file mode 100644
index 5ba954b32b..0000000000
--- a/demos/2d/isometric_light/shoot_halo.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/tileset.tres b/demos/2d/isometric_light/tileset.tres
deleted file mode 100644
index c6ccb9f956..0000000000
--- a/demos/2d/isometric_light/tileset.tres
+++ /dev/null
@@ -1,216 +0,0 @@
-[gd_resource type="TileSet" load_steps=22 format=1]
-
-[ext_resource path="res://floor_shader.tres" type="CanvasItemMaterial" id=1]
-[ext_resource path="res://faceColor.png" type="Texture" id=2]
-[ext_resource path="res://wall_shader.tres" type="CanvasItemMaterial" id=3]
-
-[sub_resource type="OccluderPolygon2D" id=1]
-
-closed = false
-cull_mode = 0
-polygon = Vector2Array( 0, -22, 48, 0 )
-
-[sub_resource type="ConvexPolygonShape2D" id=2]
-
-custom_solver_bias = 0.0
-points = Vector2Array( 48, 0, 0, -22, 0, -44, 48, -22 )
-
-[sub_resource type="OccluderPolygon2D" id=3]
-
-closed = false
-cull_mode = 0
-polygon = Vector2Array( -48, 0, 0, 22, 48, 0 )
-
-[sub_resource type="ConvexPolygonShape2D" id=4]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -48, 0, 0, -22, 48, 0, 0, 22 )
-
-[sub_resource type="OccluderPolygon2D" id=5]
-
-closed = false
-cull_mode = 0
-polygon = Vector2Array( 0, -22, 48, 0, 0, 22 )
-
-[sub_resource type="ConvexPolygonShape2D" id=6]
-
-custom_solver_bias = 0.0
-points = Vector2Array( 48, 0, 0, 22, 0, -22 )
-
-[sub_resource type="OccluderPolygon2D" id=7]
-
-closed = false
-cull_mode = 0
-polygon = Vector2Array( 0, -22, -48, 0, 0, 22 )
-
-[sub_resource type="ConvexPolygonShape2D" id=8]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -48, 0, 0, -22, 0, 22 )
-
-[sub_resource type="OccluderPolygon2D" id=9]
-
-closed = false
-cull_mode = 0
-polygon = Vector2Array( -48, 0, 0, -22, 48, 0 )
-
-[sub_resource type="ConvexPolygonShape2D" id=10]
-
-custom_solver_bias = 0.0
-points = Vector2Array( 0, -22, 48, 0, -48, 0 )
-
-[sub_resource type="OccluderPolygon2D" id=11]
-
-closed = false
-cull_mode = 0
-polygon = Vector2Array( -48, 0, 0, 22, 48, 0 )
-
-[sub_resource type="ConvexPolygonShape2D" id=12]
-
-custom_solver_bias = 0.0
-points = Vector2Array( 48, 0, 0, 22, -48, 0 )
-
-[sub_resource type="OccluderPolygon2D" id=13]
-
-closed = false
-cull_mode = 0
-polygon = Vector2Array( 0, 22, 48, 0 )
-
-[sub_resource type="ConvexPolygonShape2D" id=14]
-
-custom_solver_bias = 0.0
-points = Vector2Array( 0, 22, 0, 0, 48, -22, 48, 0 )
-
-[sub_resource type="OccluderPolygon2D" id=15]
-
-closed = false
-cull_mode = 0
-polygon = Vector2Array( -48, 0, 0, 22 )
-
-[sub_resource type="ConvexPolygonShape2D" id=16]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -48, -22, 0, 0, 0, 22, -48, 0 )
-
-[sub_resource type="OccluderPolygon2D" id=17]
-
-closed = false
-cull_mode = 0
-polygon = Vector2Array( -48, 0, 0, -22 )
-
-[sub_resource type="ConvexPolygonShape2D" id=18]
-
-custom_solver_bias = 0.0
-points = Vector2Array( 0, -44, 0, -22, -48, 0, -48, -22 )
-
-[resource]
-
-0/name = "floor1"
-0/texture = ExtResource( 2 )
-0/tex_offset = Vector2( 0, 28 )
-0/material = ExtResource( 1 )
-0/region = Rect2( 311, 760, 197, 151 )
-0/occluder_offset = Vector2( 98.5, 75.5 )
-0/navigation_offset = Vector2( 98.5, 75.5 )
-0/shape_offset = Vector2( 0, 0 )
-0/shapes = [ ]
-1/name = "floor2"
-1/texture = ExtResource( 2 )
-1/tex_offset = Vector2( 0, 28 )
-1/material = ExtResource( 1 )
-1/region = Rect2( 591, 772, 197, 151 )
-1/occluder_offset = Vector2( 98.5, 75.5 )
-1/navigation_offset = Vector2( 98.5, 75.5 )
-1/shape_offset = Vector2( 0, 0 )
-1/shapes = [ ]
-2/name = "block"
-2/texture = ExtResource( 2 )
-2/tex_offset = Vector2( 0, -60 )
-2/material = ExtResource( 3 )
-2/region = Rect2( 844, 527, 138, 180 )
-2/occluder_offset = Vector2( 69, 90 )
-2/occluder = SubResource( 3 )
-2/navigation_offset = Vector2( 69, 90 )
-2/shape_offset = Vector2( 69, 90 )
-2/shapes = [ SubResource( 4 ) ]
-3/name = "q_right"
-3/texture = ExtResource( 2 )
-3/tex_offset = Vector2( 0, -60 )
-3/material = ExtResource( 3 )
-3/region = Rect2( 665, 528, 139, 178 )
-3/occluder_offset = Vector2( 69.5, 89 )
-3/occluder = SubResource( 5 )
-3/navigation_offset = Vector2( 69.5, 89 )
-3/shape_offset = Vector2( 69.5, 89 )
-3/shapes = [ SubResource( 6 ) ]
-4/name = "q_left"
-4/texture = ExtResource( 2 )
-4/tex_offset = Vector2( 0, -60 )
-4/material = ExtResource( 3 )
-4/region = Rect2( 292, 528, 139, 178 )
-4/occluder_offset = Vector2( 69.5, 89 )
-4/occluder = SubResource( 7 )
-4/navigation_offset = Vector2( 69.5, 89 )
-4/shape_offset = Vector2( 69.5, 89 )
-4/shapes = [ SubResource( 8 ) ]
-5/name = "q_top"
-5/texture = ExtResource( 2 )
-5/tex_offset = Vector2( 0, -60 )
-5/material = ExtResource( 3 )
-5/region = Rect2( 479, 528, 139, 178 )
-5/occluder_offset = Vector2( 69.5, 89 )
-5/occluder = SubResource( 9 )
-5/navigation_offset = Vector2( 69.5, 89 )
-5/shape_offset = Vector2( 69.5, 89 )
-5/shapes = [ SubResource( 10 ) ]
-6/name = "q_bottom"
-6/texture = ExtResource( 2 )
-6/tex_offset = Vector2( 0, -60 )
-6/material = ExtResource( 3 )
-6/region = Rect2( 103, 528, 139, 178 )
-6/occluder_offset = Vector2( 69.5, 89 )
-6/occluder = SubResource( 11 )
-6/navigation_offset = Vector2( 69.5, 89 )
-6/shape_offset = Vector2( 69.5, 89 )
-6/shapes = [ SubResource( 12 ) ]
-7/name = "s_right_bottom"
-7/texture = ExtResource( 2 )
-7/tex_offset = Vector2( 0, -62 )
-7/material = ExtResource( 3 )
-7/region = Rect2( 480, 350, 139, 178 )
-7/occluder_offset = Vector2( 69.5, 89 )
-7/occluder = SubResource( 13 )
-7/navigation_offset = Vector2( 69.5, 89 )
-7/shape_offset = Vector2( 69.5, 89 )
-7/shapes = [ SubResource( 14 ) ]
-8/name = "s_left_bottom"
-8/texture = ExtResource( 2 )
-8/tex_offset = Vector2( 0, -62 )
-8/material = ExtResource( 3 )
-8/region = Rect2( 665, 350, 139, 178 )
-8/occluder_offset = Vector2( 69.5, 89 )
-8/occluder = SubResource( 15 )
-8/navigation_offset = Vector2( 69.5, 89 )
-8/shape_offset = Vector2( 69.5, 89 )
-8/shapes = [ SubResource( 16 ) ]
-9/name = "s_left_top"
-9/texture = ExtResource( 2 )
-9/tex_offset = Vector2( 0, -62 )
-9/material = ExtResource( 3 )
-9/region = Rect2( 292, 350, 139, 178 )
-9/occluder_offset = Vector2( 69.5, 89 )
-9/occluder = SubResource( 17 )
-9/navigation_offset = Vector2( 69.5, 89 )
-9/shape_offset = Vector2( 69.5, 89 )
-9/shapes = [ SubResource( 18 ) ]
-10/name = "s_right_top"
-10/texture = ExtResource( 2 )
-10/tex_offset = Vector2( -12, -62 )
-10/material = ExtResource( 3 )
-10/region = Rect2( 842, 350, 139, 178 )
-10/occluder_offset = Vector2( 69.5, 89 )
-10/occluder = SubResource( 1 )
-10/navigation_offset = Vector2( 69.5, 89 )
-10/shape_offset = Vector2( 69.5, 89 )
-10/shapes = [ SubResource( 2 ) ]
-
diff --git a/demos/2d/isometric_light/tileset_edit.tscn b/demos/2d/isometric_light/tileset_edit.tscn
deleted file mode 100644
index a65d55fc35..0000000000
--- a/demos/2d/isometric_light/tileset_edit.tscn
+++ /dev/null
@@ -1,446 +0,0 @@
-[gd_scene load_steps=22 format=1]
-
-[ext_resource path="res://floor_shader.tres" type="CanvasItemMaterial" id=1]
-[ext_resource path="res://faceColor.png" type="Texture" id=2]
-[ext_resource path="res://wall_shader.tres" type="CanvasItemMaterial" id=3]
-
-[sub_resource type="ConvexPolygonShape2D" id=1]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -48, 0, 0, -22, 48, 0, 0, 22 )
-
-[sub_resource type="OccluderPolygon2D" id=2]
-
-closed = false
-cull_mode = 0
-polygon = Vector2Array( -48, 0, 0, 22, 48, 0 )
-
-[sub_resource type="ConvexPolygonShape2D" id=3]
-
-custom_solver_bias = 0.0
-points = Vector2Array( 48, 0, 0, 22, 0, -22 )
-
-[sub_resource type="OccluderPolygon2D" id=4]
-
-closed = false
-cull_mode = 0
-polygon = Vector2Array( 0, -22, 48, 0, 0, 22 )
-
-[sub_resource type="ConvexPolygonShape2D" id=5]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -48, 0, 0, -22, 0, 22 )
-
-[sub_resource type="OccluderPolygon2D" id=6]
-
-closed = false
-cull_mode = 0
-polygon = Vector2Array( 0, -22, -48, 0, 0, 22 )
-
-[sub_resource type="ConvexPolygonShape2D" id=7]
-
-custom_solver_bias = 0.0
-points = Vector2Array( 0, -22, 48, 0, -48, 0 )
-
-[sub_resource type="OccluderPolygon2D" id=8]
-
-closed = false
-cull_mode = 0
-polygon = Vector2Array( -48, 0, 0, -22, 48, 0 )
-
-[sub_resource type="ConvexPolygonShape2D" id=9]
-
-custom_solver_bias = 0.0
-points = Vector2Array( 48, 0, 0, 22, -48, 0 )
-
-[sub_resource type="OccluderPolygon2D" id=10]
-
-closed = false
-cull_mode = 0
-polygon = Vector2Array( -48, 0, 0, 22, 48, 0 )
-
-[sub_resource type="ConvexPolygonShape2D" id=11]
-
-custom_solver_bias = 0.0
-points = Vector2Array( 0, 22, 0, 0, 48, -22, 48, 0 )
-
-[sub_resource type="OccluderPolygon2D" id=12]
-
-closed = false
-cull_mode = 0
-polygon = Vector2Array( 0, 22, 48, 0 )
-
-[sub_resource type="ConvexPolygonShape2D" id=13]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -48, -22, 0, 0, 0, 22, -48, 0 )
-
-[sub_resource type="OccluderPolygon2D" id=14]
-
-closed = false
-cull_mode = 0
-polygon = Vector2Array( -48, 0, 0, 22 )
-
-[sub_resource type="ConvexPolygonShape2D" id=15]
-
-custom_solver_bias = 0.0
-points = Vector2Array( 0, -44, 0, -22, -48, 0, -48, -22 )
-
-[sub_resource type="OccluderPolygon2D" id=16]
-
-closed = false
-cull_mode = 0
-polygon = Vector2Array( -48, 0, 0, -22 )
-
-[sub_resource type="ConvexPolygonShape2D" id=17]
-
-custom_solver_bias = 0.0
-points = Vector2Array( 48, 0, 0, -22, 0, -44, 48, -22 )
-
-[sub_resource type="OccluderPolygon2D" id=18]
-
-closed = false
-cull_mode = 0
-polygon = Vector2Array( 0, -22, 48, 0 )
-
-[node name="base" type="Node2D"]
-
-[node name="floor1" type="Sprite" parent="."]
-
-material/material = ExtResource( 1 )
-transform/pos = Vector2( 140.869, 111.332 )
-texture = ExtResource( 2 )
-offset = Vector2( 0, 28 )
-region = true
-region_rect = Rect2( 311, 760, 197, 151 )
-
-[node name="floor2" type="Sprite" parent="."]
-
-material/material = ExtResource( 1 )
-transform/pos = Vector2( 372.62, 109.06 )
-texture = ExtResource( 2 )
-offset = Vector2( 0, 28 )
-region = true
-region_rect = Rect2( 591, 772, 197, 151 )
-
-[node name="block" type="Sprite" parent="."]
-
-material/material = ExtResource( 3 )
-transform/pos = Vector2( 528, -132 )
-texture = ExtResource( 2 )
-offset = Vector2( 0, -60 )
-region = true
-region_rect = Rect2( 844, 527, 138, 180 )
-
-[node name="collision" type="StaticBody2D" parent="block"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="block/collision"]
-
-build_mode = 0
-polygon = Vector2Array( 0, -22, 48, 0, 0, 22, -48, 0 )
-shape_range = Vector2( -1, -1 )
-trigger = false
-
-[node name="LightOccluder2D" type="LightOccluder2D" parent="block"]
-
-occluder = SubResource( 2 )
-light_mask = 1
-
-[node name="q_right" type="Sprite" parent="."]
-
-material/material = ExtResource( 3 )
-transform/pos = Vector2( 336, -154 )
-texture = ExtResource( 2 )
-offset = Vector2( 0, -60 )
-region = true
-region_rect = Rect2( 665, 528, 139, 178 )
-
-[node name="collision1" type="StaticBody2D" parent="q_right"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 3 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="q_right/collision1"]
-
-build_mode = 0
-polygon = Vector2Array( 0, -22, 48, 0, 0, 22 )
-shape_range = Vector2( -1, -1 )
-trigger = false
-
-[node name="LightOccluder2D" type="LightOccluder2D" parent="q_right"]
-
-occluder = SubResource( 4 )
-light_mask = 1
-
-[node name="q_left" type="Sprite" parent="."]
-
-material/material = ExtResource( 3 )
-transform/pos = Vector2( 96, -110 )
-texture = ExtResource( 2 )
-offset = Vector2( 0, -60 )
-region = true
-region_rect = Rect2( 292, 528, 139, 178 )
-
-[node name="collision1" type="StaticBody2D" parent="q_left"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 5 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="q_left/collision1"]
-
-build_mode = 0
-polygon = Vector2Array( 0, 22, -48, 0, 0, -22 )
-shape_range = Vector2( -1, -1 )
-trigger = false
-
-[node name="LightOccluder2D" type="LightOccluder2D" parent="q_left"]
-
-occluder = SubResource( 6 )
-light_mask = 1
-
-[node name="q_top" type="Sprite" parent="."]
-
-material/material = ExtResource( 3 )
-transform/pos = Vector2( 288, 0 )
-texture = ExtResource( 2 )
-offset = Vector2( 0, -60 )
-region = true
-region_rect = Rect2( 479, 528, 139, 178 )
-
-[node name="collision2" type="StaticBody2D" parent="q_top"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 7 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="q_top/collision2"]
-
-build_mode = 0
-polygon = Vector2Array( -48, 0, 0, -22, 48, 0 )
-shape_range = Vector2( -1, -1 )
-trigger = false
-
-[node name="LightOccluder2D" type="LightOccluder2D" parent="q_top"]
-
-occluder = SubResource( 8 )
-light_mask = 1
-
-[node name="q_bottom" type="Sprite" parent="."]
-
-material/material = ExtResource( 3 )
-transform/pos = Vector2( 192, -242 )
-texture = ExtResource( 2 )
-offset = Vector2( 0, -60 )
-region = true
-region_rect = Rect2( 103, 528, 139, 178 )
-
-[node name="collision3" type="StaticBody2D" parent="q_bottom"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 9 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="q_bottom/collision3"]
-
-build_mode = 0
-polygon = Vector2Array( -48, 0, 48, 0, 0, 22 )
-shape_range = Vector2( -1, -1 )
-trigger = false
-
-[node name="LightOccluder2D1" type="LightOccluder2D" parent="q_bottom"]
-
-occluder = SubResource( 10 )
-light_mask = 1
-
-[node name="s_right_bottom" type="Sprite" parent="."]
-
-material/material = ExtResource( 3 )
-transform/pos = Vector2( 288, -330 )
-texture = ExtResource( 2 )
-offset = Vector2( 0, -62 )
-region = true
-region_rect = Rect2( 480, 350, 139, 178 )
-
-[node name="collision1" type="StaticBody2D" parent="s_right_bottom"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 11 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="s_right_bottom/collision1"]
-
-build_mode = 0
-polygon = Vector2Array( 0, 22, 48, 0, 48, -22, 0, 0 )
-shape_range = Vector2( -1, -1 )
-trigger = false
-
-[node name="LightOccluder2D" type="LightOccluder2D" parent="s_right_bottom"]
-
-occluder = SubResource( 12 )
-light_mask = 1
-
-[node name="s_left_bottom" type="Sprite" parent="."]
-
-material/material = ExtResource( 3 )
-transform/pos = Vector2( 432, -330 )
-texture = ExtResource( 2 )
-offset = Vector2( 0, -62 )
-region = true
-region_rect = Rect2( 665, 350, 139, 178 )
-
-[node name="collision1" type="StaticBody2D" parent="s_left_bottom"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 13 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="s_left_bottom/collision1"]
-
-build_mode = 0
-polygon = Vector2Array( 0, 22, -48, 0, -48, -22, 0, 0 )
-shape_range = Vector2( -1, -1 )
-trigger = false
-
-[node name="LightOccluder2D" type="LightOccluder2D" parent="s_left_bottom"]
-
-occluder = SubResource( 14 )
-light_mask = 1
-
-[node name="s_left_top" type="Sprite" parent="."]
-
-material/material = ExtResource( 3 )
-transform/pos = Vector2( 528, -330 )
-texture = ExtResource( 2 )
-offset = Vector2( 0, -62 )
-region = true
-region_rect = Rect2( 292, 350, 139, 178 )
-
-[node name="collision1" type="StaticBody2D" parent="s_left_top"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 15 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="s_left_top/collision1"]
-
-build_mode = 0
-polygon = Vector2Array( 0, -22, -48, 0, -48, -22, 0, -44 )
-shape_range = Vector2( -1, -1 )
-trigger = false
-
-[node name="LightOccluder2D" type="LightOccluder2D" parent="s_left_top"]
-
-occluder = SubResource( 16 )
-light_mask = 1
-
-[node name="s_right_top" type="Sprite" parent="."]
-
-material/material = ExtResource( 3 )
-transform/pos = Vector2( 576, -330 )
-texture = ExtResource( 2 )
-offset = Vector2( -12, -62 )
-region = true
-region_rect = Rect2( 842, 350, 139, 178 )
-
-[node name="collision1" type="StaticBody2D" parent="s_right_top"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 17 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="s_right_top/collision1"]
-
-build_mode = 0
-polygon = Vector2Array( 0, -22, 0, -44, 48, -22, 48, 0 )
-shape_range = Vector2( -1, -1 )
-trigger = false
-
-[node name="LightOccluder2D" type="LightOccluder2D" parent="s_right_top"]
-
-occluder = SubResource( 18 )
-light_mask = 1
-
-[node name="instructions" type="Label" parent="."]
-
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 40.0
-margin/bottom = 13.0
-text = "This scene is used to edit the tileset.\nSave to the tileset with Scene -> Convert to -> TileSet\nThen, overwrite \"tileset.tres\""
-percent_visible = 1.0
-lines_skipped = 0
-max_lines_visible = -1
-
-
diff --git a/demos/2d/isometric_light/torch.tscn b/demos/2d/isometric_light/torch.tscn
deleted file mode 100644
index 5ceeb57401..0000000000
--- a/demos/2d/isometric_light/torch.tscn
+++ /dev/null
@@ -1,138 +0,0 @@
-[gd_scene load_steps=9 format=1]
-
-[ext_resource path="res://shadow_blob.png" type="Texture" id=1]
-[ext_resource path="res://torch_shader.tres" type="CanvasItemMaterial" id=2]
-[ext_resource path="res://faceColor.png" type="Texture" id=3]
-[ext_resource path="res://torch_light.png" type="Texture" id=4]
-[ext_resource path="res://fire.png" type="Texture" id=5]
-
-[sub_resource type="Animation" id=1]
-
-resource/name = "firecol"
-length = 5.0
-loop = true
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath("light:color")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":true, "times":FloatArray( 0, 0.4, 0.6, 1, 1.6, 1.9, 2.3, 2.8, 3, 3.5, 3.9, 4.2, 4.5, 4.8 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), "values":[ Color( 1, 0.664806, 0.432623, 1 ), Color( 0.648063, 0.341868, 0.308913, 1 ), Color( 0.796534, 0.145722, 0.198635, 1 ), Color( 0.648063, 0.341868, 0.308913, 1 ), Color( 1, 0.664806, 0.432623, 1 ), Color( 0.796534, 0.145722, 0.198635, 1 ), Color( 0.648063, 0.341868, 0.308913, 1 ), Color( 0.796534, 0.145722, 0.198635, 1 ), Color( 1, 0.664806, 0.432623, 1 ), Color( 0.796534, 0.145722, 0.198635, 1 ), Color( 1, 0.664806, 0.432623, 1 ), Color( 0.796534, 0.145722, 0.198635, 1 ), Color( 0.648063, 0.341868, 0.308913, 1 ), Color( 1, 0.664806, 0.432623, 1 ) ] }
-
-[sub_resource type="ColorRamp" id=2]
-
-offsets = FloatArray( 0, 0.2, 0.6, 1 )
-colors = ColorArray( 1, 0.658047, 0, 0.175658, 0.741369, 0.262782, 0, 1, 0.210534, 0, 0, 0.608392, 0, 0, 0, 0 )
-
-[sub_resource type="CircleShape2D" id=3]
-
-custom_solver_bias = 0.0
-radius = 10.0
-
-[node name="Node2D" type="Node2D"]
-
-[node name="Sprite" type="Sprite" parent="."]
-
-transform/pos = Vector2( 0.880249, 3.08089 )
-texture = ExtResource( 1 )
-
-[node name="sprite" type="Sprite" parent="."]
-
-material/material = ExtResource( 2 )
-transform/pos = Vector2( 1.95071, 0.487679 )
-texture = ExtResource( 3 )
-offset = Vector2( 0.0395508, -22.1477 )
-region = true
-region_rect = Rect2( 817, 271, 42, 54 )
-
-[node name="light" type="Light2D" parent="sprite"]
-
-transform/pos = Vector2( -0.975342, 0.975357 )
-enabled = true
-texture = ExtResource( 4 )
-offset = Vector2( 0, 0 )
-scale = 8.0
-color = Color( 1, 0.664806, 0.432623, 1 )
-energy = 1.0
-mode = 0
-range/height = 50.0
-range/z_min = -1024
-range/z_max = 1024
-range/layer_min = 0
-range/layer_max = 0
-range/item_mask = 1
-shadow/enabled = true
-shadow/color = Color( 0, 0, 0, 0 )
-shadow/buffer_size = 2048
-shadow/esm_multiplier = 80.0
-shadow/item_mask = 1
-
-[node name="anim" type="AnimationPlayer" parent="sprite"]
-
-playback/process_mode = 1
-playback/default_blend_time = 0.0
-root/root = NodePath("..")
-anims/firecol = SubResource( 1 )
-playback/active = true
-playback/speed = 1.0
-blend_times = [ ]
-autoplay = "firecol"
-
-[node name="fire" type="Particles2D" parent="."]
-
-visibility/blend_mode = 1
-transform/pos = Vector2( 1.08072, -42.4183 )
-transform/scale = Vector2( 0.59473, 0.5694 )
-config/amount = 12
-config/lifetime = 1.0
-config/texture = ExtResource( 5 )
-params/direction = 180.0
-params/spread = 20.0
-params/linear_velocity = 100.0
-params/spin_velocity = 1.0
-params/orbit_velocity = 0.0
-params/gravity_direction = 180.0
-params/gravity_strength = 9.8
-params/radial_accel = 0.0
-params/tangential_accel = 0.0
-params/damping = 0.0
-params/initial_angle = 180.0
-params/initial_size = 0.7
-params/final_size = 1.0
-params/hue_variation = 0.0
-params/anim_speed_scale = 1.0
-params/anim_initial_pos = 0.0
-randomness/spin_velocity = 1.0
-randomness/initial_angle = 1.0
-color/color_ramp = SubResource( 2 )
-
-[node name="VisibilityEnabler2D" type="VisibilityEnabler2D" parent="."]
-
-transform/pos = Vector2( 1.08071, -50.2535 )
-transform/scale = Vector2( 4.29619, 6.51167 )
-rect = Rect2( -10, -10, 20, 20 )
-enabler/pause_animations = true
-enabler/freeze_bodies = true
-enabler/pause_particles = true
-enabler/process_parent = false
-enabler/fixed_process_parent = false
-
-[node name="col" type="StaticBody2D" parent="."]
-
-input/pickable = false
-shapes/0/shape = SubResource( 3 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0.880249, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="shape" type="CollisionShape2D" parent="col"]
-
-transform/pos = Vector2( 0.880249, 0 )
-shape = SubResource( 3 )
-trigger = false
-_update_shape_index = -1
-
-
diff --git a/demos/2d/isometric_light/torch_light.png b/demos/2d/isometric_light/torch_light.png
deleted file mode 100644
index a98113d36f..0000000000
--- a/demos/2d/isometric_light/torch_light.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/isometric_light/torch_shader.tres b/demos/2d/isometric_light/torch_shader.tres
deleted file mode 100644
index 6a45b41fa2..0000000000
--- a/demos/2d/isometric_light/torch_shader.tres
+++ /dev/null
@@ -1,14 +0,0 @@
-[gd_resource type="CanvasItemMaterial" load_steps=3 format=1]
-
-[ext_resource path="res://faceNormal.png" type="Texture" id=1]
-
-[sub_resource type="CanvasItemShader" id=1]
-
-_code = { "fragment":"uniform texture normaltex;\nvec4 ntex = tex(normaltex,UV);\nntex.rgb = ntex.rgb * vec3(-2,-2,1) - vec3(-1,-1,0);\nvec2 tile_vec=vec2(47,22);\nfloat r = asin(tile_vec.y / tile_vec.x);\nmat3 rot_mat = mat3( vec3(1,0,0), vec3(0,cos(r),-sin(r)), vec3(0,sin(r),cos(r)));\nNORMAL = rot_mat * ntex.rgb;\n\n\n\n\n", "fragment_ofs":0, "light":"LIGHT_VEC.y=40; //from light towards up, where is the torch\?\nvec3 light_normal = normalize(vec3(LIGHT_VEC,-LIGHT_HEIGHT));\nLIGHT=LIGHT_COLOR*COLOR*max(dot(-light_normal,NORMAL),0.0);\n\n", "light_ofs":0, "vertex":"", "vertex_ofs":0 }
-
-[resource]
-
-shader/shader = SubResource( 1 )
-shader/shading_mode = 0
-shader_param/normaltex = ExtResource( 1 )
-
diff --git a/demos/2d/isometric_light/wall_shader.tres b/demos/2d/isometric_light/wall_shader.tres
deleted file mode 100644
index 42d967cf76..0000000000
--- a/demos/2d/isometric_light/wall_shader.tres
+++ /dev/null
@@ -1,16 +0,0 @@
-[gd_resource type="CanvasItemMaterial" load_steps=4 format=1]
-
-[ext_resource path="res://faceMask.png" type="Texture" id=1]
-[ext_resource path="res://faceNormal.png" type="Texture" id=2]
-
-[sub_resource type="CanvasItemShader" id=1]
-
-_code = { "fragment":"uniform texture normal;\n\nvec2 ywnormal=tex( normal,UV).wy * vec2(2.0,2.0) - vec2(1.0,1.0);\nNORMAL=vec3(ywnormal,sqrt(1 - (ywnormal.x * ywnormal.x) - (ywnormal.y * ywnormal.y) ));\n", "fragment_ofs":0, "light":"// this is the half size of the tile in pixels\n\nvec2 tile_vec=vec2(47,22);\n\n// this mask is used to see which part of the tile is the background (^)\n// or the foregronud (v)\n\nuniform texture bg_mask;\n\nbool behind = tex(bg_mask,UV).a>0.5;\nfloat y_ofs;\n\nif (behind) {\n\t// ^ part\n\t\n\ty_ofs = tile_vec.y*2 - abs(VAR1.x * tile_vec.y / tile_vec.x);\n} else {\n\t// v part\n\t\n\ty_ofs = abs(VAR1.x * tile_vec.y / tile_vec.x);\n}\n\nvec2 point_2d = vec2(VAR1.x,(tile_vec.y - VAR1.y));\n\n// compute a pseudo 3D point for both the light and the texel\n// this makes the normalmap calculation work properly\n\nvec3 point_3d = vec3( point_2d.x, point_2d.y - y_ofs, y_ofs );\nvec3 light_3d = vec3(point_2d.x-LIGHT_VEC.x,LIGHT_HEIGHT,(-(VAR1.y - (LIGHT_VEC.y))+tile_vec.y));\n\n//this could be optimized\n//a rotation matrix is created to convert the normalmap vector\n//to the same coordinate space as our pseudo 3d point and light\n\nfloat r = asin(tile_vec.y / tile_vec.x);\nmat3 rot_mat = mat3( vec3(1,0,0), vec3(0,cos(r),-sin(r)), vec3(0,sin(r),cos(r)));\nvec3 n = rot_mat * NORMAL;\nn.y=-n.y;\n\n//finally compute the dot product. Simple diffuse is computed here,\n//but specular could be added and it will look prettier\n\nfloat dp = max(dot(normalize(n),-normalize(light_3d-point_3d)),0);\nLIGHT=vec4(vec3(dp),1.0)*COLOR*LIGHT_COLOR*3.0;\n\n//finally, after light was cmoputed, make the light \"flat\"\n//this makes the shadows work properly\n//the +2 is added to avoid z-fighting between caster and pseudo 3d coords.\n\nLIGHT_VEC.y+=point_3d.y+2;\n\n", "light_ofs":0, "vertex":"//assign the local vertex coordinates to a varying\n//the center coordinates (0,0) matches the sprite center \n// (shows as a cross when the sprite is selected)\n\nVAR1.xy=SRC_VERTEX;\n", "vertex_ofs":0 }
-
-[resource]
-
-shader/shader = SubResource( 1 )
-shader/shading_mode = 0
-shader_param/normal = ExtResource( 2 )
-shader_param/bg_mask = ExtResource( 1 )
-
diff --git a/demos/2d/kinematic_char/circle.png b/demos/2d/kinematic_char/circle.png
deleted file mode 100644
index ddb3ac4b9c..0000000000
--- a/demos/2d/kinematic_char/circle.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/kinematic_char/colworld.gd b/demos/2d/kinematic_char/colworld.gd
deleted file mode 100644
index 7926ef9d54..0000000000
--- a/demos/2d/kinematic_char/colworld.gd
+++ /dev/null
@@ -1,8 +0,0 @@
-
-extends Node2D
-
-
-func _on_princess_body_enter(body):
- # The name of this editor-generated callback is unfortunate
- if (body.get_name() == "player"):
- get_node("youwin").show()
diff --git a/demos/2d/kinematic_char/colworld.tscn b/demos/2d/kinematic_char/colworld.tscn
deleted file mode 100644
index 3bc4a21d6b..0000000000
--- a/demos/2d/kinematic_char/colworld.tscn
+++ /dev/null
@@ -1,422 +0,0 @@
-[gd_scene load_steps=19 format=1]
-
-[ext_resource path="res://colworld.gd" type="Script" id=1]
-[ext_resource path="res://obstacle.png" type="Texture" id=2]
-[ext_resource path="res://player.tscn" type="PackedScene" id=3]
-[ext_resource path="res://princess.png" type="Texture" id=4]
-[ext_resource path="res://circle.png" type="Texture" id=5]
-[ext_resource path="res://long_obstacle.png" type="Texture" id=6]
-
-[sub_resource type="RectangleShape2D" id=1]
-
-custom_solver_bias = 0.0
-extents = Vector2( 8, 8 )
-
-[sub_resource type="TileSet" id=2]
-
-0/name = ""
-0/texture = ExtResource( 2 )
-0/tex_offset = Vector2( 0, 0 )
-0/region = Rect2( 0, 0, 0, 0 )
-0/occluder_offset = Vector2( 0, 0 )
-0/navigation_offset = Vector2( 0, 0 )
-0/shape_offset = Vector2( 8, 8 )
-0/shapes = [ SubResource( 1 ) ]
-
-[sub_resource type="RectangleShape2D" id=3]
-
-custom_solver_bias = 0.0
-extents = Vector2( 8, 8 )
-
-[sub_resource type="Animation" id=4]
-
-length = 10.0
-loop = true
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath(".:transform/pos")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":true, "times":FloatArray( 0, 1, 5, 6 ), "transitions":FloatArray( 1, 1, 1, 1 ), "values":[ Vector2( 184, 152 ), Vector2( 184, 152 ), Vector2( 328.086, 152 ), Vector2( 328.086, 152 ) ] }
-
-[sub_resource type="Animation" id=5]
-
-resource/name = "leftright"
-length = 10.0
-loop = true
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath(".:transform/pos")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":true, "times":FloatArray( 0, 1, 5, 6 ), "transitions":FloatArray( 1, 1, 1, 1 ), "values":[ Vector2( 184, 152 ), Vector2( 184, 152 ), Vector2( 328.086, 152 ), Vector2( 328.086, 152 ) ] }
-
-[sub_resource type="Animation" id=6]
-
-length = 10.0
-loop = true
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath(".:transform/pos")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":true, "times":FloatArray( 0, 1, 5, 6 ), "transitions":FloatArray( 1, 1, 1, 1 ), "values":[ Vector2( 88.3493, 296 ), Vector2( 88.3493, 296 ), Vector2( 88.3493, 152 ), Vector2( 88.3493, 152 ) ] }
-
-[sub_resource type="RectangleShape2D" id=7]
-
-custom_solver_bias = 0.0
-extents = Vector2( 8, 8 )
-
-[sub_resource type="RectangleShape2D" id=8]
-
-custom_solver_bias = 0.0
-extents = Vector2( 10, 4 )
-
-[sub_resource type="CircleShape2D" id=9]
-
-custom_solver_bias = 0.0
-radius = 32.0
-
-[sub_resource type="RectangleShape2D" id=10]
-
-custom_solver_bias = 0.0
-extents = Vector2( 8, 8 )
-
-[sub_resource type="Animation" id=11]
-
-length = 20.0
-loop = true
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath(".:transform/rot")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":true, "times":FloatArray( 0, 5, 10, 15 ), "transitions":FloatArray( -2, -2, -2, -2 ), "values":[ 0.0, 90.0, 0.0, -90.0 ] }
-
-[sub_resource type="RectangleShape2D" id=12]
-
-custom_solver_bias = 0.0
-extents = Vector2( 32, 8 )
-
-[node name="colworld" type="Node2D"]
-
-script/script = ExtResource( 1 )
-
-[node name="TileMap" type="TileMap" parent="."]
-
-mode = 0
-tile_set = SubResource( 2 )
-cell/size = Vector2( 16, 16 )
-cell/quadrant_size = 16
-cell/custom_transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-cell/half_offset = 2
-cell/tile_origin = 0
-cell/y_sort = false
-collision/use_kinematic = false
-collision/friction = 1.0
-collision/bounce = 0.0
-collision/layers = 1
-collision/mask = 1
-occluder/light_mask = 1
-tile_data = IntArray( 0, 0, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12, 0, 13, 0, 14, 0, 15, 0, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 31, 0, 32, 0, 65536, 0, 65537, 0, 65538, 0, 65539, 0, 65540, 0, 65541, 0, 65542, 0, 65543, 0, 65544, 0, 65545, 0, 65546, 0, 65547, 0, 65548, 0, 65549, 0, 65550, 0, 65551, 0, 65552, 0, 65553, 0, 65554, 0, 65555, 0, 65556, 0, 65557, 0, 65558, 0, 65559, 0, 65560, 0, 65561, 0, 65562, 0, 65563, 0, 65564, 0, 65565, 0, 65566, 0, 65567, 0, 65568, 0, 131072, 0, 131073, 0, 131103, 0, 131104, 0, 196608, 0, 196609, 0, 196639, 0, 196640, 0, 262144, 0, 262145, 0, 262175, 0, 262176, 0, 327680, 0, 327681, 0, 327685, 0, 327686, 0, 327687, 0, 327688, 0, 327689, 0, 327690, 0, 327691, 0, 327692, 0, 327693, 0, 327697, 0, 327711, 0, 327712, 0, 393216, 0, 393217, 0, 393237, 0, 393238, 0, 393247, 0, 393248, 0, 458752, 0, 458753, 0, 458783, 0, 458784, 0, 524288, 0, 524289, 0, 524313, 0, 524314, 0, 524319, 0, 524320, 0, 589824, 0, 589825, 0, 589830, 0, 589831, 0, 589832, 0, 589833, 0, 589834, 0, 589845, 0, 589846, 0, 589847, 0, 589855, 0, 589856, 0, 655360, 0, 655361, 0, 655391, 0, 655392, 0, 720896, 0, 720897, 0, 720927, 0, 720928, 0, 786432, 0, 786433, 0, 786463, 0, 786464, 0, 851968, 0, 851969, 0, 851999, 0, 852000, 0, 917504, 0, 917505, 0, 917535, 0, 917536, 0, 983040, 0, 983041, 0, 983071, 0, 983072, 0, 1048576, 0, 1048577, 0, 1048607, 0, 1048608, 0, 1114112, 0, 1114113, 0, 1114143, 0, 1114144, 0, 1179648, 0, 1179649, 0, 1179654, 0, 1179655, 0, 1179656, 0, 1179679, 0, 1179680, 0, 1245184, 0, 1245185, 0, 1245204, 0, 1245205, 0, 1245206, 0, 1245207, 0, 1245215, 0, 1245216, 0, 1310720, 0, 1310721, 0, 1310751, 0, 1310752, 0, 1376256, 0, 1376257, 0, 1376285, 0, 1376286, 0, 1376287, 0, 1376288, 0, 1441792, 0, 1441793, 0, 1441823, 0, 1441824, 0, 1507328, 0, 1507329, 0, 1507355, 0, 1507356, 0, 1507359, 0, 1507360, 0, 1572864, 0, 1572865, 0, 1572895, 0, 1572896, 0, 1638400, 0, 1638401, 0, 1638413, 0, 1638425, 0, 1638426, 0, 1638431, 0, 1638432, 0, 1703936, 0, 1703937, 0, 1703948, 0, 1703965, 0, 1703966, 0, 1703967, 0, 1703968, 0, 1769472, 0, 1769473, 0, 1769482, 0, 1769483, 0, 1769500, 0, 1769501, 0, 1769503, 0, 1769504, 0, 1835008, 0, 1835009, 0, 1835012, 0, 1835018, 0, 1835019, 0, 1835034, 0, 1835035, 0, 1835039, 0, 1835040, 0, 1900544, 0, 1900545, 0, 1900546, 0, 1900547, 0, 1900548, 0, 1900549, 0, 1900550, 0, 1900551, 0, 1900552, 0, 1900553, 0, 1900554, 0, 1900555, 0, 1900556, 0, 1900557, 0, 1900558, 0, 1900559, 0, 1900560, 0, 1900561, 0, 1900562, 0, 1900563, 0, 1900564, 0, 1900565, 0, 1900566, 0, 1900567, 0, 1900568, 0, 1900569, 0, 1900570, 0, 1900571, 0, 1900572, 0, 1900573, 0, 1900574, 0, 1900575, 0, 1900576, 0, 1966080, 0, 1966081, 0, 1966082, 0, 1966083, 0, 1966084, 0, 1966085, 0, 1966086, 0, 1966087, 0, 1966088, 0, 1966089, 0, 1966090, 0, 1966091, 0, 1966092, 0, 1966093, 0, 1966094, 0, 1966095, 0, 1966096, 0, 1966097, 0, 1966098, 0, 1966099, 0, 1966100, 0, 1966101, 0, 1966102, 0, 1966103, 0, 1966104, 0, 1966105, 0, 1966106, 0, 1966107, 0, 1966108, 0, 1966109, 0, 1966110, 0, 1966111, 0, 1966112, 0, 2031616, 0, 2031617, 0, 2031618, 0, 2031619, 0, 2031620, 0, 2031621, 0, 2031622, 0, 2031623, 0, 2031624, 0, 2031625, 0, 2031626, 0, 2031627, 0, 2031628, 0, 2031629, 0, 2031630, 0, 2031631, 0, 2031632, 0, 2031633, 0, 2031634, 0, 2031635, 0, 2031636, 0, 2031637, 0, 2031638, 0, 2031639, 0, 2031640, 0, 2031641, 0, 2031642, 0, 2031643, 0, 2031644, 0, 2031645, 0, 2031646, 0, 2031647, 0, 2031648, 0 )
-
-[node name="player" parent="." instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 72, 430 )
-collision/margin = 0.05
-
-[node name="moving_platform1" type="KinematicBody2D" parent="."]
-
-transform/pos = Vector2( 274.142, 152 )
-input/pickable = false
-shapes/0/shape = SubResource( 3 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-collision/margin = 0.01
-
-[node name="collision" type="CollisionShape2D" parent="moving_platform1"]
-
-shape = SubResource( 3 )
-trigger = false
-_update_shape_index = -1
-
-[node name="sprite" type="Sprite" parent="moving_platform1"]
-
-texture = ExtResource( 2 )
-
-[node name="anim" type="AnimationPlayer" parent="moving_platform1"]
-
-playback/process_mode = 0
-playback/default_blend_time = 0.0
-root/root = NodePath("..")
-anims/leftright = SubResource( 4 )
-playback/active = true
-playback/speed = 1.0
-blend_times = [ ]
-autoplay = "leftright"
-
-[node name="moving_platform2" type="KinematicBody2D" parent="."]
-
-transform/pos = Vector2( 88.3493, 284.689 )
-input/pickable = false
-shapes/0/shape = SubResource( 3 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-collision/margin = 0.01
-
-[node name="collision" type="CollisionShape2D" parent="moving_platform2"]
-
-shape = SubResource( 3 )
-trigger = false
-_update_shape_index = -1
-
-[node name="sprite" type="Sprite" parent="moving_platform2"]
-
-texture = ExtResource( 2 )
-
-[node name="anim" type="AnimationPlayer" parent="moving_platform2"]
-
-playback/process_mode = 0
-playback/default_blend_time = 0.0
-root/root = NodePath("..")
-anims/leftright = SubResource( 5 )
-anims/updown = SubResource( 6 )
-playback/active = true
-playback/speed = 1.0
-blend_times = [ ]
-autoplay = "updown"
-
-[node name="princess" type="Area2D" parent="."]
-
-transform/pos = Vector2( 97, 72 )
-input/pickable = true
-shapes/0/shape = SubResource( 7 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-gravity_vec = Vector2( 0, 1 )
-gravity = 98.0
-linear_damp = 0.1
-angular_damp = 1.0
-
-[node name="collision" type="CollisionShape2D" parent="princess"]
-
-shape = SubResource( 7 )
-trigger = false
-_update_shape_index = -1
-
-[node name="Sprite" type="Sprite" parent="princess"]
-
-texture = ExtResource( 4 )
-
-[node name="youwin" type="Label" parent="."]
-
-visibility/visible = false
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-margin/left = 196.0
-margin/top = 41.0
-margin/right = 344.0
-margin/bottom = 67.0
-text = "Thank You Cubio\nYou Saved The Princess!"
-align = 1
-percent_visible = 1.0
-lines_skipped = 0
-max_lines_visible = -1
-
-[node name="oneway1" type="KinematicBody2D" parent="."]
-
-transform/pos = Vector2( 439, 301 )
-input/pickable = false
-shapes/0/shape = SubResource( 8 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-one_way_collision/direction = Vector2( 0, 1 )
-one_way_collision/max_depth = 6.0
-collision/margin = 0.01
-
-[node name="sprite" type="Sprite" parent="oneway1"]
-
-transform/scale = Vector2( 1, 0.3 )
-texture = ExtResource( 2 )
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="oneway1"]
-
-shape = SubResource( 8 )
-trigger = false
-_update_shape_index = -1
-
-[node name="oneway2" type="KinematicBody2D" parent="."]
-
-transform/pos = Vector2( 456, 301 )
-input/pickable = false
-shapes/0/shape = SubResource( 8 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-one_way_collision/direction = Vector2( 0, 1 )
-one_way_collision/max_depth = 6.0
-collision/margin = 0.01
-
-[node name="sprite" type="Sprite" parent="oneway2"]
-
-transform/scale = Vector2( 1, 0.3 )
-texture = ExtResource( 2 )
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="oneway2"]
-
-shape = SubResource( 8 )
-trigger = false
-_update_shape_index = -1
-
-[node name="oneway3" type="KinematicBody2D" parent="."]
-
-transform/pos = Vector2( 472, 301 )
-input/pickable = false
-shapes/0/shape = SubResource( 8 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-one_way_collision/direction = Vector2( 0, 1 )
-one_way_collision/max_depth = 6.0
-collision/margin = 0.01
-
-[node name="sprite" type="Sprite" parent="oneway3"]
-
-transform/scale = Vector2( 1, 0.3 )
-texture = ExtResource( 2 )
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="oneway3"]
-
-shape = SubResource( 8 )
-trigger = false
-_update_shape_index = -1
-
-[node name="oneway4" type="KinematicBody2D" parent="."]
-
-transform/pos = Vector2( 487, 301 )
-input/pickable = false
-shapes/0/shape = SubResource( 8 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-one_way_collision/direction = Vector2( 0, 1 )
-one_way_collision/max_depth = 6.0
-collision/margin = 0.01
-
-[node name="sprite" type="Sprite" parent="oneway4"]
-
-transform/scale = Vector2( 1, 0.3 )
-texture = ExtResource( 2 )
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="oneway4"]
-
-shape = SubResource( 8 )
-trigger = false
-_update_shape_index = -1
-
-[node name="circle" type="KinematicBody2D" parent="."]
-
-transform/pos = Vector2( 241.169, 304.126 )
-input/pickable = false
-shapes/0/shape = SubResource( 9 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-shapes/1/shape = SubResource( 10 )
-shapes/1/transform = Matrix32( 1, 0, 0, 1, -0.440125, -37.0904 )
-shapes/1/trigger = false
-collision/layers = 1
-collision/mask = 1
-collision/margin = 0.08
-
-[node name="sprite" type="Sprite" parent="circle"]
-
-texture = ExtResource( 5 )
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="circle"]
-
-shape = SubResource( 9 )
-trigger = false
-_update_shape_index = -1
-
-[node name="anim" type="AnimationPlayer" parent="circle"]
-
-playback/process_mode = 1
-playback/default_blend_time = 0.0
-root/root = NodePath("..")
-anims/turn = SubResource( 11 )
-playback/active = true
-playback/speed = 1.0
-blend_times = [ ]
-autoplay = "turn"
-
-[node name="box" type="CollisionShape2D" parent="circle"]
-
-transform/pos = Vector2( -0.440125, -37.0904 )
-shape = SubResource( 10 )
-trigger = false
-_update_shape_index = -1
-
-[node name="boxsprite" type="Sprite" parent="circle"]
-
-transform/pos = Vector2( 0, -37.4108 )
-texture = ExtResource( 2 )
-
-[node name="platform" type="StaticBody2D" parent="."]
-
-transform/pos = Vector2( 251.44, 396.557 )
-transform/rot = 24.5257
-input/pickable = false
-shapes/0/shape = SubResource( 12 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="sprite" type="Sprite" parent="platform"]
-
-texture = ExtResource( 6 )
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="platform"]
-
-shape = SubResource( 12 )
-trigger = false
-_update_shape_index = -1
-
-[node name="platform1" type="StaticBody2D" parent="."]
-
-transform/pos = Vector2( 369.116, 394.016 )
-transform/rot = -26.6959
-input/pickable = false
-shapes/0/shape = SubResource( 12 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="sprite" type="Sprite" parent="platform1"]
-
-texture = ExtResource( 6 )
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="platform1"]
-
-shape = SubResource( 12 )
-trigger = false
-_update_shape_index = -1
-
-[connection signal="body_enter" from="princess" to="." method="_on_princess_body_enter"]
-
-
diff --git a/demos/2d/kinematic_char/engine.cfg b/demos/2d/kinematic_char/engine.cfg
deleted file mode 100644
index 0ab2a552ca..0000000000
--- a/demos/2d/kinematic_char/engine.cfg
+++ /dev/null
@@ -1,20 +0,0 @@
-[application]
-
-name="Kinematic Character"
-main_scene="res://colworld.tscn"
-icon="res://icon.png"
-
-[display]
-
-width=800
-height=600
-stretch_mode="2d"
-stretch_aspect="keep"
-
-[input]
-
-move_up=[key(Up)]
-move_left=[key(Left)]
-move_right=[key(Right)]
-move_bottom=[key(Down)]
-jump=[key(Space)]
diff --git a/demos/2d/kinematic_char/icon.png b/demos/2d/kinematic_char/icon.png
deleted file mode 100644
index bdca104c1f..0000000000
--- a/demos/2d/kinematic_char/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/kinematic_char/long_obstacle.png b/demos/2d/kinematic_char/long_obstacle.png
deleted file mode 100644
index 88cb22daee..0000000000
--- a/demos/2d/kinematic_char/long_obstacle.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/kinematic_char/obstacle.png b/demos/2d/kinematic_char/obstacle.png
deleted file mode 100644
index 3ade3c3a52..0000000000
--- a/demos/2d/kinematic_char/obstacle.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/kinematic_char/player.gd b/demos/2d/kinematic_char/player.gd
deleted file mode 100644
index 2890cc2ce3..0000000000
--- a/demos/2d/kinematic_char/player.gd
+++ /dev/null
@@ -1,123 +0,0 @@
-
-extends KinematicBody2D
-
-# This is a simple collision demo showing how
-# the kinematic controller works.
-# move() will allow to move the node, and will
-# always move it to a non-colliding spot,
-# as long as it starts from a non-colliding spot too.
-
-# Member variables
-const GRAVITY = 500.0 # Pixels/second
-
-# Angle in degrees towards either side that the player can consider "floor"
-const FLOOR_ANGLE_TOLERANCE = 40
-const WALK_FORCE = 600
-const WALK_MIN_SPEED = 10
-const WALK_MAX_SPEED = 200
-const STOP_FORCE = 1300
-const JUMP_SPEED = 200
-const JUMP_MAX_AIRBORNE_TIME = 0.2
-
-const SLIDE_STOP_VELOCITY = 1.0 # One pixel per second
-const SLIDE_STOP_MIN_TRAVEL = 1.0 # One pixel
-
-var velocity = Vector2()
-var on_air_time = 100
-var jumping = false
-
-var prev_jump_pressed = false
-
-
-func _fixed_process(delta):
- # Create forces
- var force = Vector2(0, GRAVITY)
-
- var walk_left = Input.is_action_pressed("move_left")
- var walk_right = Input.is_action_pressed("move_right")
- var jump = Input.is_action_pressed("jump")
-
- var stop = true
-
- if (walk_left):
- if (velocity.x <= WALK_MIN_SPEED and velocity.x > -WALK_MAX_SPEED):
- force.x -= WALK_FORCE
- stop = false
- elif (walk_right):
- if (velocity.x >= -WALK_MIN_SPEED and velocity.x < WALK_MAX_SPEED):
- force.x += WALK_FORCE
- stop = false
-
- if (stop):
- var vsign = sign(velocity.x)
- var vlen = abs(velocity.x)
-
- vlen -= STOP_FORCE*delta
- if (vlen < 0):
- vlen = 0
-
- velocity.x = vlen*vsign
-
- # Integrate forces to velocity
- velocity += force*delta
-
- # Integrate velocity into motion and move
- var motion = velocity*delta
-
- # Move and consume motion
- motion = move(motion)
-
- var floor_velocity = Vector2()
-
- if (is_colliding()):
- # You can check which tile was collision against with this
- # print(get_collider_metadata())
-
- # Ran against something, is it the floor? Get normal
- var n = get_collision_normal()
-
- if (rad2deg(acos(n.dot(Vector2(0, -1)))) < FLOOR_ANGLE_TOLERANCE):
- # If angle to the "up" vectors is < angle tolerance
- # char is on floor
- on_air_time = 0
- floor_velocity = get_collider_velocity()
-
- if (on_air_time == 0 and force.x == 0 and get_travel().length() < SLIDE_STOP_MIN_TRAVEL and abs(velocity.x) < SLIDE_STOP_VELOCITY and get_collider_velocity() == Vector2()):
- # Since this formula will always slide the character around,
- # a special case must be considered to to stop it from moving
- # if standing on an inclined floor. Conditions are:
- # 1) Standing on floor (on_air_time == 0)
- # 2) Did not move more than one pixel (get_travel().length() < SLIDE_STOP_MIN_TRAVEL)
- # 3) Not moving horizontally (abs(velocity.x) < SLIDE_STOP_VELOCITY)
- # 4) Collider is not moving
-
- revert_motion()
- velocity.y = 0.0
- else:
- # For every other case of motion, our motion was interrupted.
- # Try to complete the motion by "sliding" by the normal
- motion = n.slide(motion)
- velocity = n.slide(velocity)
- # Then move again
- move(motion)
-
- if (floor_velocity != Vector2()):
- # If floor moves, move with floor
- move(floor_velocity*delta)
-
- if (jumping and velocity.y > 0):
- # If falling, no longer jumping
- jumping = false
-
- if (on_air_time < JUMP_MAX_AIRBORNE_TIME and jump and not prev_jump_pressed and not jumping):
- # Jump must also be allowed to happen if the character left the floor a little bit ago.
- # Makes controls more snappy.
- velocity.y = -JUMP_SPEED
- jumping = true
-
- on_air_time += delta
- prev_jump_pressed = jump
-
-
-func _ready():
- set_fixed_process(true)
diff --git a/demos/2d/kinematic_char/player.png b/demos/2d/kinematic_char/player.png
deleted file mode 100644
index 0e7d843899..0000000000
--- a/demos/2d/kinematic_char/player.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/kinematic_char/player.tscn b/demos/2d/kinematic_char/player.tscn
deleted file mode 100644
index e3e5fa1d4a..0000000000
--- a/demos/2d/kinematic_char/player.tscn
+++ /dev/null
@@ -1,33 +0,0 @@
-[gd_scene load_steps=4 format=1]
-
-[ext_resource path="res://player.gd" type="Script" id=1]
-[ext_resource path="res://player.png" type="Texture" id=2]
-
-[sub_resource type="RectangleShape2D" id=1]
-
-custom_solver_bias = 0.0
-extents = Vector2( 7, 7 )
-
-[node name="player" type="KinematicBody2D"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, -0.315559, 0.157784 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-collision/margin = 0.01
-script/script = ExtResource( 1 )
-
-[node name="sprite" type="Sprite" parent="."]
-
-texture = ExtResource( 2 )
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
-
-transform/pos = Vector2( -0.315559, 0.157784 )
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = -1
-
-
diff --git a/demos/2d/kinematic_char/princess.png b/demos/2d/kinematic_char/princess.png
deleted file mode 100644
index 9605c9c831..0000000000
--- a/demos/2d/kinematic_char/princess.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/kinematic_col/colworld.tscn b/demos/2d/kinematic_col/colworld.tscn
deleted file mode 100644
index 43eb58545e..0000000000
--- a/demos/2d/kinematic_col/colworld.tscn
+++ /dev/null
@@ -1,47 +0,0 @@
-[gd_scene load_steps=5 format=1]
-
-[ext_resource path="res://obstacle.png" type="Texture" id=1]
-[ext_resource path="res://player.tscn" type="PackedScene" id=2]
-
-[sub_resource type="RectangleShape2D" id=1]
-
-custom_solver_bias = 0.0
-extents = Vector2( 8, 8 )
-
-[sub_resource type="TileSet" id=2]
-
-0/name = ""
-0/texture = ExtResource( 1 )
-0/tex_offset = Vector2( 0, 0 )
-0/region = Rect2( 0, 0, 0, 0 )
-0/occluder_offset = Vector2( 0, 0 )
-0/navigation_offset = Vector2( 0, 0 )
-0/shape_offset = Vector2( 8, 8 )
-0/shapes = [ SubResource( 1 ) ]
-
-[node name="colworld" type="Node2D"]
-
-[node name="TileMap" type="TileMap" parent="."]
-
-mode = 0
-tile_set = SubResource( 2 )
-cell/size = Vector2( 16, 16 )
-cell/quadrant_size = 16
-cell/custom_transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-cell/half_offset = 2
-cell/tile_origin = 0
-cell/y_sort = false
-collision/use_kinematic = false
-collision/friction = 1.0
-collision/bounce = 0.0
-collision/layers = 1
-collision/mask = 1
-occluder/light_mask = 1
-tile_data = IntArray( 0, 0, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12, 0, 13, 0, 14, 0, 15, 0, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 31, 0, 32, 0, 65536, 0, 65537, 0, 65538, 0, 65539, 0, 65540, 0, 65541, 0, 65542, 0, 65543, 0, 65544, 0, 65545, 0, 65546, 0, 65547, 0, 65548, 0, 65549, 0, 65550, 0, 65551, 0, 65552, 0, 65553, 0, 65554, 0, 65555, 0, 65556, 0, 65557, 0, 65558, 0, 65559, 0, 65560, 0, 65561, 0, 65562, 0, 65563, 0, 65564, 0, 65565, 0, 65566, 0, 65567, 0, 65568, 0, 131072, 0, 131073, 0, 131103, 0, 131104, 0, 196608, 0, 196609, 0, 196639, 0, 196640, 0, 262144, 0, 262145, 0, 262175, 0, 262176, 0, 327680, 0, 327681, 0, 327685, 0, 327686, 0, 327687, 0, 327688, 0, 327689, 0, 327690, 0, 327691, 0, 327692, 0, 327693, 0, 327711, 0, 327712, 0, 393216, 0, 393217, 0, 393247, 0, 393248, 0, 458752, 0, 458753, 0, 458783, 0, 458784, 0, 524288, 0, 524289, 0, 524319, 0, 524320, 0, 589824, 0, 589825, 0, 589855, 0, 589856, 0, 655360, 0, 655361, 0, 655373, 0, 655374, 0, 655375, 0, 655376, 0, 655377, 0, 655378, 0, 655379, 0, 655380, 0, 655381, 0, 655391, 0, 655392, 0, 720896, 0, 720897, 0, 720909, 0, 720910, 0, 720911, 0, 720912, 0, 720913, 0, 720914, 0, 720915, 0, 720916, 0, 720917, 0, 720927, 0, 720928, 0, 786432, 0, 786433, 0, 786445, 0, 786446, 0, 786447, 0, 786448, 0, 786449, 0, 786450, 0, 786451, 0, 786452, 0, 786453, 0, 786463, 0, 786464, 0, 851968, 0, 851969, 0, 851981, 0, 851982, 0, 851988, 0, 851989, 0, 851999, 0, 852000, 0, 917504, 0, 917505, 0, 917517, 0, 917518, 0, 917524, 0, 917525, 0, 917535, 0, 917536, 0, 983040, 0, 983041, 0, 983053, 0, 983054, 0, 983060, 0, 983061, 0, 983071, 0, 983072, 0, 1048576, 0, 1048577, 0, 1048596, 0, 1048597, 0, 1048607, 0, 1048608, 0, 1114112, 0, 1114113, 0, 1114132, 0, 1114133, 0, 1114143, 0, 1114144, 0, 1179648, 0, 1179649, 0, 1179668, 0, 1179669, 0, 1179679, 0, 1179680, 0, 1245184, 0, 1245185, 0, 1245204, 0, 1245205, 0, 1245215, 0, 1245216, 0, 1310720, 0, 1310721, 0, 1310730, 0, 1310731, 0, 1310748, 0, 1310751, 0, 1310752, 0, 1376256, 0, 1376257, 0, 1376266, 0, 1376267, 0, 1376284, 0, 1376287, 0, 1376288, 0, 1441792, 0, 1441793, 0, 1441802, 0, 1441803, 0, 1441804, 0, 1441805, 0, 1441820, 0, 1441823, 0, 1441824, 0, 1507328, 0, 1507329, 0, 1507338, 0, 1507339, 0, 1507340, 0, 1507341, 0, 1507359, 0, 1507360, 0, 1572864, 0, 1572865, 0, 1572874, 0, 1572875, 0, 1572876, 0, 1572877, 0, 1572878, 0, 1572879, 0, 1572880, 0, 1572881, 0, 1572882, 0, 1572895, 0, 1572896, 0, 1638400, 0, 1638401, 0, 1638410, 0, 1638411, 0, 1638412, 0, 1638413, 0, 1638414, 0, 1638415, 0, 1638416, 0, 1638417, 0, 1638418, 0, 1638431, 0, 1638432, 0, 1703936, 0, 1703937, 0, 1703946, 0, 1703947, 0, 1703967, 0, 1703968, 0, 1769472, 0, 1769473, 0, 1769482, 0, 1769483, 0, 1769503, 0, 1769504, 0, 1835008, 0, 1835009, 0, 1835018, 0, 1835019, 0, 1835039, 0, 1835040, 0, 1900544, 0, 1900545, 0, 1900546, 0, 1900547, 0, 1900548, 0, 1900549, 0, 1900550, 0, 1900551, 0, 1900552, 0, 1900553, 0, 1900554, 0, 1900555, 0, 1900556, 0, 1900557, 0, 1900558, 0, 1900559, 0, 1900560, 0, 1900561, 0, 1900562, 0, 1900563, 0, 1900564, 0, 1900565, 0, 1900566, 0, 1900567, 0, 1900568, 0, 1900569, 0, 1900570, 0, 1900571, 0, 1900572, 0, 1900573, 0, 1900574, 0, 1900575, 0, 1900576, 0, 1966080, 0, 1966081, 0, 1966082, 0, 1966083, 0, 1966084, 0, 1966085, 0, 1966086, 0, 1966087, 0, 1966088, 0, 1966089, 0, 1966090, 0, 1966091, 0, 1966092, 0, 1966093, 0, 1966094, 0, 1966095, 0, 1966096, 0, 1966097, 0, 1966098, 0, 1966099, 0, 1966100, 0, 1966101, 0, 1966102, 0, 1966103, 0, 1966104, 0, 1966105, 0, 1966106, 0, 1966107, 0, 1966108, 0, 1966109, 0, 1966110, 0, 1966111, 0, 1966112, 0, 2031616, 0, 2031617, 0, 2031618, 0, 2031619, 0, 2031620, 0, 2031621, 0, 2031622, 0, 2031623, 0, 2031624, 0, 2031625, 0, 2031626, 0, 2031627, 0, 2031628, 0, 2031629, 0, 2031630, 0, 2031631, 0, 2031632, 0, 2031633, 0, 2031634, 0, 2031635, 0, 2031636, 0, 2031637, 0, 2031638, 0, 2031639, 0, 2031640, 0, 2031641, 0, 2031642, 0, 2031643, 0, 2031644, 0, 2031645, 0, 2031646, 0, 2031647, 0, 2031648, 0 )
-
-[node name="player" parent="." instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 115.243, 222.134 )
-collision/margin = 0.01
-
-
diff --git a/demos/2d/kinematic_col/engine.cfg b/demos/2d/kinematic_col/engine.cfg
deleted file mode 100644
index 7e2435a34e..0000000000
--- a/demos/2d/kinematic_col/engine.cfg
+++ /dev/null
@@ -1,12 +0,0 @@
-[application]
-
-name="Kinematic Collision"
-main_scene="res://colworld.tscn"
-icon="res://icon.png"
-
-[input]
-
-move_up=[key(Up)]
-move_left=[key(Left)]
-move_right=[key(Right)]
-move_bottom=[key(Down)]
diff --git a/demos/2d/kinematic_col/icon.png b/demos/2d/kinematic_col/icon.png
deleted file mode 100644
index 2774de6110..0000000000
--- a/demos/2d/kinematic_col/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/kinematic_col/obstacle.png b/demos/2d/kinematic_col/obstacle.png
deleted file mode 100644
index 693f115a98..0000000000
--- a/demos/2d/kinematic_col/obstacle.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/kinematic_col/player.gd b/demos/2d/kinematic_col/player.gd
deleted file mode 100644
index ce09e1509e..0000000000
--- a/demos/2d/kinematic_col/player.gd
+++ /dev/null
@@ -1,31 +0,0 @@
-
-extends KinematicBody2D
-
-# This is a simple collision demo showing how
-# the kinematic controller works.
-# move() will allow to move the node, and will
-# always move it to a non-colliding spot,
-# as long as it starts from a non-colliding spot too.
-
-# Member variables
-const MOTION_SPEED = 160 # Pixels/second
-
-
-func _fixed_process(delta):
- var motion = Vector2()
-
- if (Input.is_action_pressed("move_up")):
- motion += Vector2(0, -1)
- if (Input.is_action_pressed("move_bottom")):
- motion += Vector2(0, 1)
- if (Input.is_action_pressed("move_left")):
- motion += Vector2(-1, 0)
- if (Input.is_action_pressed("move_right")):
- motion += Vector2(1, 0)
-
- motion = motion.normalized()*MOTION_SPEED*delta
- move(motion)
-
-
-func _ready():
- set_fixed_process(true)
diff --git a/demos/2d/kinematic_col/player.png b/demos/2d/kinematic_col/player.png
deleted file mode 100644
index 0e7d843899..0000000000
--- a/demos/2d/kinematic_col/player.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/kinematic_col/player.tscn b/demos/2d/kinematic_col/player.tscn
deleted file mode 100644
index 92ad693690..0000000000
--- a/demos/2d/kinematic_col/player.tscn
+++ /dev/null
@@ -1,32 +0,0 @@
-[gd_scene load_steps=4 format=1]
-
-[ext_resource path="res://player.gd" type="Script" id=1]
-[ext_resource path="res://player.png" type="Texture" id=2]
-
-[sub_resource type="RectangleShape2D" id=1]
-
-custom_solver_bias = 0.0
-extents = Vector2( 8, 8 )
-
-[node name="player" type="KinematicBody2D"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-collision/margin = 0.01
-script/script = ExtResource( 1 )
-
-[node name="sprite" type="Sprite" parent="."]
-
-texture = ExtResource( 2 )
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
-
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = -1
-
-
diff --git a/demos/2d/light_mask/burano.png b/demos/2d/light_mask/burano.png
deleted file mode 100644
index 6eec09d585..0000000000
--- a/demos/2d/light_mask/burano.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/light_mask/engine.cfg b/demos/2d/light_mask/engine.cfg
deleted file mode 100644
index 3c2f1f3a79..0000000000
--- a/demos/2d/light_mask/engine.cfg
+++ /dev/null
@@ -1,9 +0,0 @@
-[application]
-
-name="Using Lights As Mask"
-main_scene="res://lightmask.tscn"
-icon="res://icon.png"
-
-[rasterizer]
-
-shadow_filter=3
diff --git a/demos/2d/light_mask/icon.png b/demos/2d/light_mask/icon.png
deleted file mode 100644
index 34a6b709f6..0000000000
--- a/demos/2d/light_mask/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/light_mask/lightmask.tscn b/demos/2d/light_mask/lightmask.tscn
deleted file mode 100644
index d489b735b0..0000000000
--- a/demos/2d/light_mask/lightmask.tscn
+++ /dev/null
@@ -1,134 +0,0 @@
-[gd_scene load_steps=5 format=1]
-
-[ext_resource path="res://burano.png" type="Texture" id=1]
-[ext_resource path="res://splat.png" type="Texture" id=2]
-
-[sub_resource type="CanvasItemMaterial" id=1]
-
-shader/shading_mode = 2
-
-[sub_resource type="Animation" id=2]
-
-length = 4.0
-loop = true
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath("light1:transform/pos")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":true, "times":FloatArray( 0, 1, 2, 3 ), "transitions":FloatArray( -2, -2, -2, -2 ), "values":[ Vector2( 601.028, 242.639 ), Vector2( 318.649, 327.353 ), Vector2( 381.263, 130.915 ), Vector2( 462.294, 389.968 ) ] }
-tracks/1/type = "value"
-tracks/1/path = NodePath("light2:transform/pos")
-tracks/1/interp = 1
-tracks/1/keys = { "cont":true, "times":FloatArray( 0, 1, 2, 3 ), "transitions":FloatArray( -2, -2, -2, -2 ), "values":[ Vector2( 196.528, 185.139 ), Vector2( 135.142, 454.013 ), Vector2( 638.105, 334.923 ), Vector2( 331.375, 101.653 ) ] }
-tracks/2/type = "value"
-tracks/2/path = NodePath("light3:transform/pos")
-tracks/2/interp = 1
-tracks/2/keys = { "cont":true, "times":FloatArray( 0, 1, 2, 3 ), "transitions":FloatArray( -2, -2, -2, -2 ), "values":[ Vector2( 442.528, 411.139 ), Vector2( 635.283, 236.8 ), Vector2( 216.215, 396.815 ), Vector2( 682.96, 294.708 ) ] }
-
-[node name="lightmask_demo" type="Control"]
-
-anchor/right = 1
-anchor/bottom = 1
-focus/ignore_mouse = false
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 0.0
-margin/bottom = 0.0
-
-[node name="burano" type="TextureFrame" parent="."]
-
-material/material = SubResource( 1 )
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 800.0
-margin/bottom = 600.0
-texture = ExtResource( 1 )
-
-[node name="light1" type="Light2D" parent="."]
-
-transform/pos = Vector2( 601.028, 242.639 )
-transform/scale = Vector2( 1.62522, 1.62999 )
-enabled = true
-texture = ExtResource( 2 )
-offset = Vector2( 0, 0 )
-scale = 1.0
-color = Color( 1, 1, 1, 1 )
-energy = 1.0
-mode = 2
-range/height = 0.0
-range/z_min = -1024
-range/z_max = 1024
-range/layer_min = 0
-range/layer_max = 0
-range/item_mask = 1
-shadow/enabled = false
-shadow/color = Color( 0, 0, 0, 0 )
-shadow/buffer_size = 2048
-shadow/esm_multiplier = 80.0
-shadow/item_mask = 1
-
-[node name="light2" type="Light2D" parent="."]
-
-transform/pos = Vector2( 196.528, 185.139 )
-transform/scale = Vector2( 1.76194, 1.71984 )
-enabled = true
-texture = ExtResource( 2 )
-offset = Vector2( 0, 0 )
-scale = 1.0
-color = Color( 1, 1, 1, 1 )
-energy = 1.0
-mode = 2
-range/height = 0.0
-range/z_min = -1024
-range/z_max = 1024
-range/layer_min = 0
-range/layer_max = 0
-range/item_mask = 1
-shadow/enabled = false
-shadow/color = Color( 0, 0, 0, 0 )
-shadow/buffer_size = 2048
-shadow/esm_multiplier = 80.0
-shadow/item_mask = 1
-
-[node name="light3" type="Light2D" parent="."]
-
-transform/pos = Vector2( 442.528, 411.139 )
-transform/scale = Vector2( 1.76194, 1.71984 )
-enabled = true
-texture = ExtResource( 2 )
-offset = Vector2( 0, 0 )
-scale = 1.0
-color = Color( 1, 1, 1, 1 )
-energy = 1.0
-mode = 2
-range/height = 0.0
-range/z_min = -1024
-range/z_max = 1024
-range/layer_min = 0
-range/layer_max = 0
-range/item_mask = 1
-shadow/enabled = false
-shadow/color = Color( 0, 0, 0, 0 )
-shadow/buffer_size = 2048
-shadow/esm_multiplier = 80.0
-shadow/item_mask = 1
-
-[node name="anim" type="AnimationPlayer" parent="."]
-
-playback/process_mode = 1
-playback/default_blend_time = 0.0
-root/root = NodePath("..")
-anims/maskmotion = SubResource( 2 )
-playback/active = true
-playback/speed = 1.0
-blend_times = [ ]
-autoplay = "maskmotion"
-
-
diff --git a/demos/2d/light_mask/splat.png b/demos/2d/light_mask/splat.png
deleted file mode 100644
index 8c35f068a0..0000000000
--- a/demos/2d/light_mask/splat.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/lights_shadows/bg.png b/demos/2d/lights_shadows/bg.png
deleted file mode 100644
index 4a3376f484..0000000000
--- a/demos/2d/lights_shadows/bg.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/lights_shadows/caster.png b/demos/2d/lights_shadows/caster.png
deleted file mode 100644
index bf53a4565b..0000000000
--- a/demos/2d/lights_shadows/caster.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/lights_shadows/engine.cfg b/demos/2d/lights_shadows/engine.cfg
deleted file mode 100644
index 51a98eddd7..0000000000
--- a/demos/2d/lights_shadows/engine.cfg
+++ /dev/null
@@ -1,16 +0,0 @@
-[application]
-
-name="2D Lighting"
-main_scene="res://light_shadows.tscn"
-icon="res://icon.png"
-
-[display]
-
-stretch_mode="2d"
-width=800
-height=600
-stretch_aspect="keep"
-
-[rasterizer]
-
-shadow_filter=2
diff --git a/demos/2d/lights_shadows/icon.png b/demos/2d/lights_shadows/icon.png
deleted file mode 100644
index 554f01bb46..0000000000
--- a/demos/2d/lights_shadows/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/lights_shadows/light.png b/demos/2d/lights_shadows/light.png
deleted file mode 100644
index 936860de52..0000000000
--- a/demos/2d/lights_shadows/light.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/lights_shadows/light_shadows.tscn b/demos/2d/lights_shadows/light_shadows.tscn
deleted file mode 100644
index f31692889e..0000000000
--- a/demos/2d/lights_shadows/light_shadows.tscn
+++ /dev/null
@@ -1,326 +0,0 @@
-[gd_scene load_steps=9 format=1]
-
-[ext_resource path="res://bg.png" type="Texture" id=1]
-[ext_resource path="res://caster.png" type="Texture" id=2]
-[ext_resource path="res://light.png" type="Texture" id=3]
-[ext_resource path="res://spot.png" type="Texture" id=4]
-
-[sub_resource type="OccluderPolygon2D" id=1]
-
-closed = true
-cull_mode = 0
-polygon = Vector2Array( -15.913, -15.9738, 15.9079, -16.0785, 15.6986, 15.847, -16.1223, 15.9517 )
-
-[sub_resource type="Animation" id=2]
-
-length = 16.0
-loop = true
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath(".:transform/pos")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":true, "times":FloatArray( 0, 4, 8, 12 ), "transitions":FloatArray( -2, -2, -2, -2 ), "values":[ Vector2( 159.289, 452.441 ), Vector2( 132.279, 80.4366 ), Vector2( 700.722, 241.27 ), Vector2( 429.392, 571.532 ) ] }
-
-[sub_resource type="Animation" id=3]
-
-length = 16.0
-loop = true
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath(".:transform/pos")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":true, "times":FloatArray( 0, 4.1, 8.1, 11.8 ), "transitions":FloatArray( -2, -2, -2, -2 ), "values":[ Vector2( 753.756, 314.336 ), Vector2( 69.7562, 234.336 ), Vector2( 256.756, 575.336 ), Vector2( 516.756, 530.336 ) ] }
-
-[sub_resource type="Animation" id=4]
-
-length = 16.0
-loop = true
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath(".:transform/pos")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":true, "times":FloatArray( 0, 4.1, 7.9, 12.1 ), "transitions":FloatArray( -2, -2, -2, -2 ), "values":[ Vector2( 692.078, 29.8849 ), Vector2( 309.606, 31.5551 ), Vector2( 40.7064, 238.658 ), Vector2( 685.397, 282.082 ) ] }
-
-[node name="base" type="Node2D"]
-
-[node name="ambient" type="CanvasModulate" parent="."]
-
-color = Color( 0.479177, 0.464761, 0.498946, 1 )
-
-[node name="bg" type="Sprite" parent="."]
-
-transform/pos = Vector2( 401.251, 301.906 )
-transform/scale = Vector2( 6.39454, 4.82665 )
-texture = ExtResource( 1 )
-
-[node name="casters" type="Node2D" parent="."]
-
-[node name="shadow_caster" type="Sprite" parent="casters"]
-
-transform/pos = Vector2( 95.2909, 85.3186 )
-texture = ExtResource( 2 )
-
-[node name="occluder" type="LightOccluder2D" parent="casters/shadow_caster"]
-
-occluder = SubResource( 1 )
-light_mask = 1
-
-[node name="shadow_caster1" type="Sprite" parent="casters"]
-
-transform/pos = Vector2( 200.291, 313.319 )
-texture = ExtResource( 2 )
-
-[node name="occluder" type="LightOccluder2D" parent="casters/shadow_caster1"]
-
-occluder = SubResource( 1 )
-light_mask = 1
-
-[node name="shadow_caster2" type="Sprite" parent="casters"]
-
-transform/pos = Vector2( 76.2909, 405.319 )
-texture = ExtResource( 2 )
-
-[node name="occluder" type="LightOccluder2D" parent="casters/shadow_caster2"]
-
-occluder = SubResource( 1 )
-light_mask = 1
-
-[node name="shadow_caster3" type="Sprite" parent="casters"]
-
-transform/pos = Vector2( 348.291, 206.319 )
-texture = ExtResource( 2 )
-
-[node name="occluder" type="LightOccluder2D" parent="casters/shadow_caster3"]
-
-occluder = SubResource( 1 )
-light_mask = 1
-
-[node name="shadow_caster4" type="Sprite" parent="casters"]
-
-transform/pos = Vector2( 239.291, 48.3186 )
-texture = ExtResource( 2 )
-
-[node name="occluder" type="LightOccluder2D" parent="casters/shadow_caster4"]
-
-occluder = SubResource( 1 )
-light_mask = 1
-
-[node name="shadow_caster5" type="Sprite" parent="casters"]
-
-transform/pos = Vector2( 140.291, 561.319 )
-texture = ExtResource( 2 )
-
-[node name="occluder" type="LightOccluder2D" parent="casters/shadow_caster5"]
-
-occluder = SubResource( 1 )
-light_mask = 1
-
-[node name="shadow_caster6" type="Sprite" parent="casters"]
-
-transform/pos = Vector2( 392.291, 499.319 )
-texture = ExtResource( 2 )
-
-[node name="occluder" type="LightOccluder2D" parent="casters/shadow_caster6"]
-
-occluder = SubResource( 1 )
-light_mask = 1
-
-[node name="shadow_caster7" type="Sprite" parent="casters"]
-
-transform/pos = Vector2( 735.291, 552.319 )
-texture = ExtResource( 2 )
-
-[node name="occluder" type="LightOccluder2D" parent="casters/shadow_caster7"]
-
-occluder = SubResource( 1 )
-light_mask = 1
-
-[node name="shadow_caster8" type="Sprite" parent="casters"]
-
-transform/pos = Vector2( 661.291, 371.319 )
-texture = ExtResource( 2 )
-
-[node name="occluder" type="LightOccluder2D" parent="casters/shadow_caster8"]
-
-occluder = SubResource( 1 )
-light_mask = 1
-
-[node name="shadow_caster9" type="Sprite" parent="casters"]
-
-transform/pos = Vector2( 567.291, 574.319 )
-texture = ExtResource( 2 )
-
-[node name="occluder" type="LightOccluder2D" parent="casters/shadow_caster9"]
-
-occluder = SubResource( 1 )
-light_mask = 1
-
-[node name="shadow_caster10" type="Sprite" parent="casters"]
-
-transform/pos = Vector2( 420.291, 350.319 )
-texture = ExtResource( 2 )
-
-[node name="occluder" type="LightOccluder2D" parent="casters/shadow_caster10"]
-
-occluder = SubResource( 1 )
-light_mask = 1
-
-[node name="shadow_caster11" type="Sprite" parent="casters"]
-
-transform/pos = Vector2( 463.291, 106.319 )
-texture = ExtResource( 2 )
-
-[node name="occluder" type="LightOccluder2D" parent="casters/shadow_caster11"]
-
-occluder = SubResource( 1 )
-light_mask = 1
-
-[node name="shadow_caster12" type="Sprite" parent="casters"]
-
-transform/pos = Vector2( 621.291, 78.3186 )
-texture = ExtResource( 2 )
-
-[node name="occluder" type="LightOccluder2D" parent="casters/shadow_caster12"]
-
-occluder = SubResource( 1 )
-light_mask = 1
-
-[node name="shadow_caster13" type="Sprite" parent="casters"]
-
-transform/pos = Vector2( 761.291, 240.319 )
-texture = ExtResource( 2 )
-
-[node name="occluder" type="LightOccluder2D" parent="casters/shadow_caster13"]
-
-occluder = SubResource( 1 )
-light_mask = 1
-
-[node name="shadow_caster14" type="Sprite" parent="casters"]
-
-transform/pos = Vector2( 771.291, 29.3186 )
-texture = ExtResource( 2 )
-
-[node name="occluder" type="LightOccluder2D" parent="casters/shadow_caster14"]
-
-occluder = SubResource( 1 )
-light_mask = 1
-
-[node name="red_light" type="Light2D" parent="."]
-
-transform/pos = Vector2( 159.289, 452.441 )
-enabled = true
-texture = ExtResource( 3 )
-offset = Vector2( 0, 0 )
-scale = 1.0
-color = Color( 1, 0.446392, 0.0576646, 1 )
-energy = 1.0
-mode = 0
-range/height = 0.0
-range/z_min = -1024
-range/z_max = 1024
-range/layer_min = 0
-range/layer_max = 0
-range/item_mask = 1
-shadow/enabled = true
-shadow/color = Color( 0, 0, 0, 0 )
-shadow/buffer_size = 2048
-shadow/esm_multiplier = 80.0
-shadow/item_mask = 1
-
-[node name="blob" type="Sprite" parent="red_light"]
-
-visibility/blend_mode = 1
-texture = ExtResource( 4 )
-
-[node name="anim" type="AnimationPlayer" parent="red_light"]
-
-playback/process_mode = 1
-playback/default_blend_time = 0.0
-root/root = NodePath("..")
-anims/motion = SubResource( 2 )
-anims/motion2 = SubResource( 3 )
-playback/active = true
-playback/speed = 1.0
-blend_times = [ ]
-autoplay = "motion"
-
-[node name="green_light" type="Light2D" parent="."]
-
-transform/pos = Vector2( 753.756, 314.336 )
-enabled = true
-texture = ExtResource( 3 )
-offset = Vector2( 0, 0 )
-scale = 1.0
-color = Color( 0.49247, 0.878537, 0.409146, 1 )
-energy = 1.0
-mode = 0
-range/height = 0.0
-range/z_min = -1024
-range/z_max = 1024
-range/layer_min = 0
-range/layer_max = 0
-range/item_mask = 1
-shadow/enabled = true
-shadow/color = Color( 0, 0, 0, 0 )
-shadow/buffer_size = 2048
-shadow/esm_multiplier = 80.0
-shadow/item_mask = 1
-
-[node name="blob" type="Sprite" parent="green_light"]
-
-visibility/blend_mode = 1
-texture = ExtResource( 4 )
-
-[node name="anim" type="AnimationPlayer" parent="green_light"]
-
-playback/process_mode = 1
-playback/default_blend_time = 0.0
-root/root = NodePath("..")
-anims/m2 = SubResource( 3 )
-anims/motion = SubResource( 2 )
-playback/active = true
-playback/speed = 1.0
-blend_times = [ ]
-autoplay = "m2"
-
-[node name="blue_light" type="Light2D" parent="."]
-
-transform/pos = Vector2( 692.078, 29.8849 )
-enabled = true
-texture = ExtResource( 3 )
-offset = Vector2( 0, 0 )
-scale = 1.0
-color = Color( 0.396752, 0.446392, 0.929792, 1 )
-energy = 1.0
-mode = 0
-range/height = 0.0
-range/z_min = -1024
-range/z_max = 1024
-range/layer_min = 0
-range/layer_max = 0
-range/item_mask = 1
-shadow/enabled = true
-shadow/color = Color( 0, 0, 0, 0 )
-shadow/buffer_size = 2048
-shadow/esm_multiplier = 80.0
-shadow/item_mask = 1
-
-[node name="blob" type="Sprite" parent="blue_light"]
-
-visibility/blend_mode = 1
-texture = ExtResource( 4 )
-
-[node name="anim" type="AnimationPlayer" parent="blue_light"]
-
-playback/process_mode = 1
-playback/default_blend_time = 0.0
-root/root = NodePath("..")
-anims/motion = SubResource( 2 )
-anims/motion2 = SubResource( 3 )
-anims/motion3 = SubResource( 4 )
-playback/active = true
-playback/speed = 1.0
-blend_times = [ ]
-autoplay = "motion3"
-
-
diff --git a/demos/2d/lights_shadows/spot.png b/demos/2d/lights_shadows/spot.png
deleted file mode 100644
index 9ab2d34963..0000000000
--- a/demos/2d/lights_shadows/spot.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/lookat/arrow.png b/demos/2d/lookat/arrow.png
deleted file mode 100644
index 25db91e8d1..0000000000
--- a/demos/2d/lookat/arrow.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/lookat/engine.cfg b/demos/2d/lookat/engine.cfg
deleted file mode 100644
index c37f39386e..0000000000
--- a/demos/2d/lookat/engine.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-[application]
-
-name="Look At Pointer"
-main_scene="res://lookat.tscn"
-icon="res://icon.png"
diff --git a/demos/2d/lookat/icon.png b/demos/2d/lookat/icon.png
deleted file mode 100644
index 442cc1799f..0000000000
--- a/demos/2d/lookat/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/lookat/lookat.gd b/demos/2d/lookat/lookat.gd
deleted file mode 100644
index c45c3ad622..0000000000
--- a/demos/2d/lookat/lookat.gd
+++ /dev/null
@@ -1,33 +0,0 @@
-
-extends Sprite
-
-# Member variables
-const MODE_DIRECT = 0
-const MODE_CONSTANT = 1
-const MODE_SMOOTH = 2
-
-const ROTATION_SPEED = 1
-const SMOOTH_SPEED = 2.0
-
-export(int, "Direct", "Constant", "Smooth") var mode = MODE_DIRECT
-
-
-func _process(delta):
- var mpos = get_viewport().get_mouse_pos()
-
- if (mode == MODE_DIRECT):
- look_at(mpos)
- elif (mode == MODE_CONSTANT):
- var ang = get_angle_to(mpos)
- var s = sign(ang)
- ang = abs(ang)
-
- rotate(min(ang, ROTATION_SPEED*delta)*s)
- elif (mode == MODE_SMOOTH):
- var ang = get_angle_to(mpos)
-
- rotate(ang*delta*SMOOTH_SPEED)
-
-
-func _ready():
- set_process(true)
diff --git a/demos/2d/lookat/lookat.tscn b/demos/2d/lookat/lookat.tscn
deleted file mode 100644
index 8505dcc972..0000000000
--- a/demos/2d/lookat/lookat.tscn
+++ /dev/null
@@ -1,32 +0,0 @@
-[gd_scene load_steps=3 format=1]
-
-[ext_resource path="res://arrow.png" type="Texture" id=1]
-[ext_resource path="res://lookat.gd" type="Script" id=2]
-
-[node name="lookatscene" type="Node2D"]
-
-[node name="direct" type="Sprite" parent="."]
-
-transform/pos = Vector2( 132, 105 )
-texture = ExtResource( 1 )
-modulate = Color( 1, 0.799619, 0.734765, 1 )
-script/script = ExtResource( 2 )
-mode = 0
-
-[node name="constant" type="Sprite" parent="."]
-
-transform/pos = Vector2( 611, 216 )
-texture = ExtResource( 1 )
-modulate = Color( 0.751241, 0.662843, 1, 1 )
-script/script = ExtResource( 2 )
-mode = 1
-
-[node name="smooth" type="Sprite" parent="."]
-
-transform/pos = Vector2( 314, 457 )
-texture = ExtResource( 1 )
-modulate = Color( 0.749446, 1, 0.782884, 1 )
-script/script = ExtResource( 2 )
-mode = 2
-
-
diff --git a/demos/2d/motion/car.png b/demos/2d/motion/car.png
deleted file mode 100644
index 7ea973ceeb..0000000000
--- a/demos/2d/motion/car.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/motion/engine.cfg b/demos/2d/motion/engine.cfg
deleted file mode 100644
index 5395398e16..0000000000
--- a/demos/2d/motion/engine.cfg
+++ /dev/null
@@ -1,12 +0,0 @@
-[application]
-
-name="Motion Test"
-main_scene="res://motion.tscn"
-icon="res://icon.png"
-
-[display]
-
-width=800
-height=600
-stretch_mode="2d"
-stretch_aspect="keep"
diff --git a/demos/2d/motion/icon.png b/demos/2d/motion/icon.png
deleted file mode 100644
index 9e64961d3c..0000000000
--- a/demos/2d/motion/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/motion/motion.gd b/demos/2d/motion/motion.gd
deleted file mode 100644
index f9bbd6f90d..0000000000
--- a/demos/2d/motion/motion.gd
+++ /dev/null
@@ -1,33 +0,0 @@
-
-extends Sprite
-
-# Member variables
-const BEGIN = -113
-const END = 907
-const TIME = 5.0 # Seconds
-const SPEED = (END - BEGIN)/TIME
-
-export var use_idle = true
-
-
-func _process(delta):
- var ofs = get_pos()
- ofs.x += delta*SPEED
- if (ofs.x > END):
- ofs.x = BEGIN
- set_pos(ofs)
-
-
-func _fixed_process(delta):
- var ofs = get_pos()
- ofs.x += delta*SPEED
- if (ofs.x > END):
- ofs.x = BEGIN
- set_pos(ofs)
-
-
-func _ready():
- if (use_idle):
- set_process(true)
- else:
- set_fixed_process(true)
diff --git a/demos/2d/motion/motion.tscn b/demos/2d/motion/motion.tscn
deleted file mode 100644
index 920ee55423..0000000000
--- a/demos/2d/motion/motion.tscn
+++ /dev/null
@@ -1,135 +0,0 @@
-[gd_scene load_steps=4 format=1]
-
-[ext_resource path="res://car.png" type="Texture" id=1]
-[ext_resource path="res://motion.gd" type="Script" id=2]
-
-[sub_resource type="Animation" id=1]
-
-resource/name = "motion"
-length = 5.0
-loop = true
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath(".:transform/pos")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":true, "times":FloatArray( 0, 5 ), "transitions":FloatArray( 1, 1 ), "values":[ Vector2( -113, 154 ), Vector2( 907, 154 ) ] }
-
-[node name="Node2D" type="Node2D"]
-
-[node name="idle" type="Node2D" parent="."]
-
-[node name="car" type="Sprite" parent="idle"]
-
-transform/pos = Vector2( -113, 154 )
-texture = ExtResource( 1 )
-
-[node name="anim" type="AnimationPlayer" parent="idle/car"]
-
-playback/process_mode = 1
-playback/default_blend_time = 0.0
-root/root = NodePath("..")
-anims/motion = SubResource( 1 )
-playback/active = true
-playback/speed = 1.0
-blend_times = [ ]
-autoplay = "motion"
-
-[node name="Label" type="Label" parent="idle"]
-
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-margin/left = 27.0
-margin/top = 80.0
-margin/right = 104.0
-margin/bottom = 93.0
-text = "Idle Process Animation"
-percent_visible = 1.0
-lines_skipped = 0
-max_lines_visible = -1
-
-[node name="fixed" type="Node2D" parent="."]
-
-transform/pos = Vector2( 0, 106 )
-
-[node name="car" type="Sprite" parent="fixed"]
-
-transform/pos = Vector2( -113, 154 )
-texture = ExtResource( 1 )
-
-[node name="anim" type="AnimationPlayer" parent="fixed/car"]
-
-playback/process_mode = 0
-playback/default_blend_time = 0.0
-root/root = NodePath("..")
-anims/motion = SubResource( 1 )
-playback/active = true
-playback/speed = 1.0
-blend_times = [ ]
-autoplay = "motion"
-
-[node name="Label1" type="Label" parent="fixed"]
-
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-margin/left = 27.0
-margin/top = 80.0
-margin/right = 104.0
-margin/bottom = 93.0
-text = "Fixed Process Animation"
-percent_visible = 1.0
-lines_skipped = 0
-max_lines_visible = -1
-
-[node name="code_idle" type="Node2D" parent="."]
-
-transform/pos = Vector2( 0, 215 )
-
-[node name="car" type="Sprite" parent="code_idle"]
-
-transform/pos = Vector2( -113, 154 )
-texture = ExtResource( 1 )
-script/script = ExtResource( 2 )
-use_idle = true
-
-[node name="Label1" type="Label" parent="code_idle"]
-
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-margin/left = 27.0
-margin/top = 80.0
-margin/right = 104.0
-margin/bottom = 93.0
-text = "Idle Process Code"
-percent_visible = 1.0
-lines_skipped = 0
-max_lines_visible = -1
-
-[node name="code_fixed" type="Node2D" parent="."]
-
-transform/pos = Vector2( 0, 324 )
-
-[node name="car" type="Sprite" parent="code_fixed"]
-
-transform/pos = Vector2( -113, 154 )
-texture = ExtResource( 1 )
-script/script = ExtResource( 2 )
-use_idle = false
-
-[node name="Label1" type="Label" parent="code_fixed"]
-
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-margin/left = 27.0
-margin/top = 80.0
-margin/right = 104.0
-margin/bottom = 93.0
-text = "Fixed Process Code"
-percent_visible = 1.0
-lines_skipped = 0
-max_lines_visible = -1
-
-
diff --git a/demos/2d/navpoly/agent.png b/demos/2d/navpoly/agent.png
deleted file mode 100644
index 23e396c478..0000000000
--- a/demos/2d/navpoly/agent.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/navpoly/engine.cfg b/demos/2d/navpoly/engine.cfg
deleted file mode 100644
index e9921c4b5b..0000000000
--- a/demos/2d/navpoly/engine.cfg
+++ /dev/null
@@ -1,12 +0,0 @@
-[application]
-
-name="Navigation Polygon (2D)"
-main_scene="res://navigation.tscn"
-icon="res://icon.png"
-
-[display]
-
-width=800
-height=600
-stretch_mode="2d"
-stretch_aspect="keep"
diff --git a/demos/2d/navpoly/icon.png b/demos/2d/navpoly/icon.png
deleted file mode 100644
index 7a28a367c6..0000000000
--- a/demos/2d/navpoly/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/navpoly/navigation.gd b/demos/2d/navpoly/navigation.gd
deleted file mode 100644
index 4cfa2ad733..0000000000
--- a/demos/2d/navpoly/navigation.gd
+++ /dev/null
@@ -1,53 +0,0 @@
-
-extends Navigation2D
-
-# Member variables
-const SPEED = 200.0
-
-var begin = Vector2()
-var end = Vector2()
-var path = []
-
-
-func _process(delta):
- if (path.size() > 1):
- var to_walk = delta*SPEED
- while(to_walk > 0 and path.size() >= 2):
- var pfrom = path[path.size() - 1]
- var pto = path[path.size() - 2]
- var d = pfrom.distance_to(pto)
- if (d <= to_walk):
- path.remove(path.size() - 1)
- to_walk -= d
- else:
- path[path.size() - 1] = pfrom.linear_interpolate(pto, to_walk/d)
- to_walk = 0
-
- var atpos = path[path.size() - 1]
- get_node("agent").set_pos(atpos)
-
- if (path.size() < 2):
- path = []
- set_process(false)
- else:
- set_process(false)
-
-
-func _update_path():
- var p = get_simple_path(begin, end, true)
- path = Array(p) # Vector2array too complex to use, convert to regular array
- path.invert()
-
- set_process(true)
-
-
-func _input(event):
- if (event.type == InputEvent.MOUSE_BUTTON and event.pressed and event.button_index == 1):
- begin = get_node("agent").get_pos()
- # Mouse to local navigation coordinates
- end = event.pos - get_pos()
- _update_path()
-
-
-func _ready():
- set_process_input(true)
diff --git a/demos/2d/navpoly/navigation.tscn b/demos/2d/navpoly/navigation.tscn
deleted file mode 100644
index b28c917be5..0000000000
--- a/demos/2d/navpoly/navigation.tscn
+++ /dev/null
@@ -1,34 +0,0 @@
-[gd_scene load_steps=5 format=1]
-
-[ext_resource path="res://navigation.gd" type="Script" id=1]
-[ext_resource path="res://path.png" type="Texture" id=2]
-[ext_resource path="res://agent.png" type="Texture" id=3]
-
-[sub_resource type="NavigationPolygon" id=1]
-
-vertices = Vector2Array( 587.833, 271.924, 530.464, 284.878, 508.256, 281.177, 497.153, 255.269, 669.26, 297.833, 648.903, 321.891, 650.754, 251.567, 619.293, 510.654, 676.663, 493.998, 706.272, 501.401, 669.26, 529.16, 602.638, 523.608, 587.833, 179.393, 573.028, 140.53, 645.202, 159.036, 710.106, 179.216, 630.397, 212.704, 597.086, 192.348, 648.903, 394.065, 621.144, 486.596, 618.011, 402.479, 624.926, 359.595, 605.437, 456.366, 598.937, 492.148, 471.244, 251.567, 421.277, 270.074, 428.68, 246.015, 502.704, 97.9661, 517.509, 55.4019, 537.866, 99.8167, 536.016, 175.692, 495.302, 164.588, 487.899, 85.0117, 310.24, 75.7586, 308.39, 92.4142, 345.402, 210.854, 360.207, 223.808, 297.286, 258.97, 288.033, 231.211, 319.493, 190.497, 193.651, 423.675, 245.469, 477.343, 221.41, 488.446, 147.386, 408.87, 182.548, 382.961, 145.584, 224.311, 175.145, 332.995, 202.904, 99.8167, 310.24, 62.8043, 695.169, 303.385, 682.214, 284.878, 524.608, 359.37, 526.762, 342.248, 538.077, 499.891, 571.177, 501.401, 395.879, 501.87, 536.407, 524.944, 371.311, 518.056, 573.028, 94.2648, 582.281, 47.9994, 667.409, 75.7586, 350.954, 447.733, 363.908, 351.501, 384.265, 351.501, 376.862, 418.123, 373.441, 436.494, 424.978, 334.845, 421.277, 360.754, 352.804, 320.04, 321.344, 338.546, 299.136, 283.028, 241.767, 327.443, 234.365, 244.165, 325.228, 486.302, 300.441, 497.494, 317.643, 447.733, 332.441, 457.494, 366.441, 467.494, 480.497, 434.779, 518.035, 461.477, 476.441, 468.494, 265.825, 407.019, 184.398, 349.65, 310.24, 112.771, 267.676, 153.485, 221.41, 171.991, 700.721, 268.223, 397.219, 188.646, 415.725, 177.543, 465.692, 179.393, 476.796, 207.152, 443.485, 192.348, 437.933, 170.14, 452.738, 166.439, 460.14, 123.875, 476.796, 149.783, 189.95, 231.211 )
-polygons = [ IntArray( 0, 1, 2, 3 ), IntArray( 4, 5, 6 ), IntArray( 7, 8, 9, 10, 11 ), IntArray( 12, 13, 14, 15, 16, 17 ), IntArray( 18, 19, 20, 21 ), IntArray( 22, 20, 19, 23 ), IntArray( 24, 3, 2, 25, 26 ), IntArray( 27, 28, 29, 30, 31 ), IntArray( 28, 27, 32 ), IntArray( 33, 28, 32, 34 ), IntArray( 35, 36, 37, 38, 39 ), IntArray( 40, 41, 42, 43 ), IntArray( 44, 40, 43 ), IntArray( 44, 43, 45, 46 ), IntArray( 47, 48, 33, 34 ), IntArray( 49, 9, 8, 4, 50 ), IntArray( 50, 4, 6 ), IntArray( 21, 20, 51, 52 ), IntArray( 53, 22, 23, 54 ), IntArray( 23, 7, 11, 54 ), IntArray( 55, 53, 54, 56, 57 ), IntArray( 14, 58, 59, 60, 15 ), IntArray( 61, 62, 63, 64, 65 ), IntArray( 66, 67, 63, 68 ), IntArray( 68, 63, 62, 69, 70 ), IntArray( 70, 69, 71, 72 ), IntArray( 70, 72, 38, 37 ), IntArray( 73, 55, 57, 74 ), IntArray( 73, 74, 75, 76 ), IntArray( 65, 77, 76, 61 ), IntArray( 78, 2, 1, 52, 51 ), IntArray( 78, 51, 79, 80 ), IntArray( 78, 80, 65, 64 ), IntArray( 81, 61, 76, 75 ), IntArray( 81, 75, 44, 82 ), IntArray( 47, 34, 83, 84, 85 ), IntArray( 15, 86, 50, 6, 16 ), IntArray( 12, 17, 3, 24 ), IntArray( 26, 25, 87, 88 ), IntArray( 89, 31, 30, 90, 91 ), IntArray( 89, 91, 92, 93 ), IntArray( 39, 94, 95, 93, 92 ), IntArray( 39, 92, 88 ), IntArray( 39, 88, 87, 35 ), IntArray( 39, 38, 85, 84 ), IntArray( 45, 47, 85, 96 ), IntArray( 45, 96, 46 ), IntArray( 44, 46, 82 ) ]
-outlines = [ Vector2Array( 221.41, 488.446, 147.386, 408.87, 145.584, 224.311, 202.904, 99.8167, 310.24, 62.8043, 310.24, 75.7586, 517.509, 55.4019, 537.866, 99.8167, 536.016, 175.692, 476.796, 207.152, 443.485, 192.348, 437.933, 170.14, 415.725, 177.543, 428.68, 246.015, 471.244, 251.567, 587.833, 179.393, 573.028, 140.53, 645.202, 159.036, 573.028, 94.2648, 582.281, 47.9994, 667.409, 75.7586, 710.106, 179.216, 700.721, 268.223, 682.214, 284.878, 695.169, 303.385, 706.272, 501.401, 669.26, 529.16, 602.638, 523.608, 571.177, 501.401, 536.407, 524.944, 371.311, 518.056, 300.441, 497.494, 317.643, 447.733, 182.548, 382.961, 193.651, 423.675, 245.469, 477.343 ), Vector2Array( 350.954, 447.733, 363.908, 351.501, 321.344, 338.546, 241.767, 327.443, 234.365, 244.165, 288.033, 231.211, 221.41, 171.991, 189.95, 231.211, 175.145, 332.995, 184.398, 349.65, 265.825, 407.019 ), Vector2Array( 267.676, 153.485, 310.24, 112.771, 308.39, 92.4142, 487.899, 85.0117, 502.704, 97.9661, 495.302, 164.588, 465.692, 179.393, 452.738, 166.439, 476.796, 149.783, 460.14, 123.875, 319.493, 190.497 ), Vector2Array( 397.219, 188.646, 345.402, 210.854, 360.207, 223.808, 297.286, 258.97, 299.136, 283.028, 352.804, 320.04, 424.978, 334.845, 421.277, 360.754, 384.265, 351.501, 376.862, 418.123, 480.497, 434.779, 508.256, 281.177, 421.277, 270.074 ), Vector2Array( 497.153, 255.269, 597.086, 192.348, 630.397, 212.704, 650.754, 251.567, 648.903, 321.891, 669.26, 297.833, 676.663, 493.998, 619.293, 510.654, 598.937, 492.148, 621.144, 486.596, 648.903, 394.065, 624.926, 359.595, 526.762, 342.248, 530.464, 284.878, 587.833, 271.924 ), Vector2Array( 325.228, 486.302, 332.441, 457.494, 366.441, 467.494, 373.441, 436.494, 476.441, 468.494, 518.035, 461.477, 524.608, 359.37, 618.011, 402.479, 605.437, 456.366, 538.077, 499.891, 395.879, 501.87 ) ]
-
-[node name="navigation" type="Navigation2D"]
-
-script/script = ExtResource( 1 )
-
-[node name="path" type="Sprite" parent="."]
-
-transform/pos = Vector2( 429.585, 287.32 )
-texture = ExtResource( 2 )
-
-[node name="navpoly" type="NavigationPolygonInstance" parent="."]
-
-navpoly = SubResource( 1 )
-enabled = true
-
-[node name="agent" type="Sprite" parent="."]
-
-transform/pos = Vector2( 228.464, 132.594 )
-transform/scale = Vector2( 0.5, 0.5 )
-texture = ExtResource( 3 )
-offset = Vector2( 0, -26 )
-
-
diff --git a/demos/2d/navpoly/path.png b/demos/2d/navpoly/path.png
deleted file mode 100644
index 52a6d507c3..0000000000
--- a/demos/2d/navpoly/path.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/normalmaps/diffuse.jpg b/demos/2d/normalmaps/diffuse.jpg
deleted file mode 100644
index b6f32fd825..0000000000
--- a/demos/2d/normalmaps/diffuse.jpg
+++ /dev/null
Binary files differ
diff --git a/demos/2d/normalmaps/engine.cfg b/demos/2d/normalmaps/engine.cfg
deleted file mode 100644
index ba5fcca853..0000000000
--- a/demos/2d/normalmaps/engine.cfg
+++ /dev/null
@@ -1,12 +0,0 @@
-[application]
-
-name="2D Normal Mapping"
-main_scene="res://normalmap.tscn"
-icon="res://icon.png"
-
-[display]
-
-stretch_mode="2d"
-width=800
-height=600
-stretch_aspect="ignore"
diff --git a/demos/2d/normalmaps/icon.png b/demos/2d/normalmaps/icon.png
deleted file mode 100644
index 11ff5de829..0000000000
--- a/demos/2d/normalmaps/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/normalmaps/light.png b/demos/2d/normalmaps/light.png
deleted file mode 100644
index 9568298086..0000000000
--- a/demos/2d/normalmaps/light.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/normalmaps/normal.jpg b/demos/2d/normalmaps/normal.jpg
deleted file mode 100644
index 848ee9a9cd..0000000000
--- a/demos/2d/normalmaps/normal.jpg
+++ /dev/null
Binary files differ
diff --git a/demos/2d/normalmaps/normal_material.tres b/demos/2d/normalmaps/normal_material.tres
deleted file mode 100644
index 2741fbfe94..0000000000
--- a/demos/2d/normalmaps/normal_material.tres
+++ /dev/null
@@ -1,14 +0,0 @@
-[gd_resource type="CanvasItemMaterial" load_steps=3 format=1]
-
-[ext_resource path="res://normal.jpg" type="Texture" id=1]
-
-[sub_resource type="CanvasItemShader" id=1]
-
-_code = { "fragment":"uniform texture normal;\n//normal maps expect Y-up, but 2D is Y-down, so must mirror this.\nNORMAL = tex(normal,UV).rgb * vec3(2.0,-2.0,1.0) - vec3(1.0,-1.0,0.0);", "fragment_ofs":0, "light":"", "light_ofs":0, "vertex":"", "vertex_ofs":0 }
-
-[resource]
-
-shader/shader = SubResource( 1 )
-shader/shading_mode = 0
-shader_param/normal = ExtResource( 1 )
-
diff --git a/demos/2d/normalmaps/normalmap.tscn b/demos/2d/normalmaps/normalmap.tscn
deleted file mode 100644
index c7f8feb0f4..0000000000
--- a/demos/2d/normalmaps/normalmap.tscn
+++ /dev/null
@@ -1,63 +0,0 @@
-[gd_scene load_steps=5 format=1]
-
-[ext_resource path="res://normal_material.tres" type="CanvasItemMaterial" id=1]
-[ext_resource path="res://diffuse.jpg" type="Texture" id=2]
-[ext_resource path="res://light.png" type="Texture" id=3]
-
-[sub_resource type="Animation" id=1]
-
-resource/name = "motion"
-length = 10.0
-loop = true
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath("light:transform/pos")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":true, "times":FloatArray( 0, 2.5, 5, 7.5 ), "transitions":FloatArray( -2, -2, -2, -2 ), "values":[ Vector2( 177.912, 174.508 ), Vector2( 612.159, 161.147 ), Vector2( 667.275, 526.917 ), Vector2( 177.912, 526.917 ) ] }
-
-[node name="base" type="Node2D"]
-
-[node name="sprite" type="Sprite" parent="."]
-
-material/material = ExtResource( 1 )
-transform/pos = Vector2( 400, 300 )
-texture = ExtResource( 2 )
-
-[node name="ambient" type="CanvasModulate" parent="."]
-
-color = Color( 0.0657094, 0.202485, 0.328838, 1 )
-
-[node name="light" type="Light2D" parent="."]
-
-transform/pos = Vector2( 177.912, 174.508 )
-enabled = true
-texture = ExtResource( 3 )
-offset = Vector2( 0, 0 )
-scale = 0.8
-color = Color( 1, 1, 1, 1 )
-energy = 1.0
-mode = 0
-range/height = 200.0
-range/z_min = -1024
-range/z_max = 1024
-range/layer_min = 0
-range/layer_max = 0
-range/item_mask = 1
-shadow/enabled = false
-shadow/color = Color( 0, 0, 0, 0 )
-shadow/buffer_size = 2048
-shadow/esm_multiplier = 80.0
-shadow/item_mask = 1
-
-[node name="anim" type="AnimationPlayer" parent="."]
-
-playback/process_mode = 1
-playback/default_blend_time = 0.0
-root/root = NodePath("..")
-anims/motion = SubResource( 1 )
-playback/active = true
-playback/speed = 1.0
-blend_times = [ ]
-autoplay = "motion"
-
-
diff --git a/demos/2d/particles/engine.cfg b/demos/2d/particles/engine.cfg
deleted file mode 100644
index 4b91966d8a..0000000000
--- a/demos/2d/particles/engine.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-[application]
-
-name="Particle Systems"
-main_scene="res://particles.tscn"
-icon="res://icon.png"
diff --git a/demos/2d/particles/fire_particle.png b/demos/2d/particles/fire_particle.png
deleted file mode 100644
index 3fa856690c..0000000000
--- a/demos/2d/particles/fire_particle.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/particles/icon.png b/demos/2d/particles/icon.png
deleted file mode 100644
index 714cee32f6..0000000000
--- a/demos/2d/particles/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/particles/mask.png b/demos/2d/particles/mask.png
deleted file mode 100644
index 476f280ab2..0000000000
--- a/demos/2d/particles/mask.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/particles/particles.tscn b/demos/2d/particles/particles.tscn
deleted file mode 100644
index c9aca0518f..0000000000
--- a/demos/2d/particles/particles.tscn
+++ /dev/null
@@ -1,174 +0,0 @@
-[gd_scene load_steps=8 format=1]
-
-[ext_resource path="res://fire_particle.png" type="Texture" id=1]
-[ext_resource path="res://smoke_particle.png" type="Texture" id=2]
-[ext_resource path="res://spark_particle2.png" type="Texture" id=3]
-
-[sub_resource type="ColorRamp" id=1]
-
-offsets = FloatArray( 0, 0.1, 1 )
-colors = ColorArray( 1, 1, 1, 0, 0.886275, 0.371681, 0, 1, 1, 0.99115, 1, 0 )
-
-[sub_resource type="ColorRamp" id=2]
-
-offsets = FloatArray( 0, 0.2, 1 )
-colors = ColorArray( 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0 )
-
-[sub_resource type="ColorRamp" id=3]
-
-offsets = FloatArray( 0, 0.1, 0.5, 1 )
-colors = ColorArray( 1, 1, 1, 0.870518, 1, 0.47451, 0.6, 1, 0.529412, 0.74902, 1, 1, 0, 1, 0.698039, 0 )
-
-[sub_resource type="ColorRamp" id=4]
-
-offsets = FloatArray( 0, 0.1, 0.7, 1 )
-colors = ColorArray( 1, 1, 1, 0, 0.886275, 0.401015, 0, 1, 1, 0.679866, 0.432123, 0.12654, 0, 0, 0, 0 )
-
-[node name="Node" type="Node"]
-
-[node name="Fire" type="Particles2D" parent="."]
-
-visibility/blend_mode = 1
-transform/pos = Vector2( 165.787, 527.801 )
-transform/rot = -179.791
-config/amount = 32
-config/lifetime = 1.0
-config/half_extents = Vector2( 15, 15 )
-config/local_space = false
-config/texture = ExtResource( 1 )
-params/direction = 0.0
-params/spread = 0.0
-params/linear_velocity = 20.0
-params/spin_velocity = 0.0
-params/orbit_velocity = 0.0
-params/gravity_direction = 180.0
-params/gravity_strength = 80.0
-params/radial_accel = 0.0
-params/tangential_accel = 0.0
-params/damping = 0.0
-params/initial_angle = 180.0
-params/initial_size = 0.7
-params/final_size = 0.3
-params/hue_variation = 0.0
-params/anim_speed_scale = 1.0
-params/anim_initial_pos = 0.0
-randomness/initial_angle = 2.0
-color/color_ramp = SubResource( 1 )
-
-[node name="Smoke" type="Particles2D" parent="."]
-
-transform/pos = Vector2( 377.396, 543.147 )
-transform/rot = 176.576
-config/amount = 32
-config/lifetime = 4.0
-config/local_space = false
-config/texture = ExtResource( 2 )
-params/direction = 0.0
-params/spread = 20.9073
-params/linear_velocity = 47.1515
-params/spin_velocity = 1.0
-params/orbit_velocity = 0.0
-params/gravity_direction = 0.0
-params/gravity_strength = 0.0
-params/radial_accel = 0.0
-params/tangential_accel = 0.0
-params/damping = 0.0
-params/initial_angle = 180.0
-params/initial_size = 1.0
-params/final_size = 3.0
-params/hue_variation = 0.0
-params/anim_speed_scale = 1.0
-params/anim_initial_pos = 0.0
-randomness/spin_velocity = 1.0
-randomness/initial_angle = 1.0
-color/color_ramp = SubResource( 2 )
-
-[node name="Magic" type="Particles2D" parent="."]
-
-transform/pos = Vector2( 593.848, 531.064 )
-config/amount = 32
-config/lifetime = 2.0
-config/half_extents = Vector2( 40, 40 )
-config/local_space = false
-config/texture = ExtResource( 3 )
-params/direction = 0.0
-params/spread = 180.0
-params/linear_velocity = 20.0
-params/spin_velocity = 0.3
-params/orbit_velocity = 0.01
-params/gravity_direction = 0.0
-params/gravity_strength = 9.8
-params/radial_accel = 0.0
-params/tangential_accel = 15.5152
-params/damping = 0.0
-params/initial_angle = 45.0
-params/initial_size = 3.0
-params/final_size = 1.0
-params/hue_variation = 0.0
-params/anim_speed_scale = 1.0
-params/anim_initial_pos = 0.0
-randomness/spin_velocity = 1.0
-randomness/orbit_velocity = 100.0
-randomness/initial_angle = 1.0
-color/color_ramp = SubResource( 3 )
-
-[node name="Explosion" type="Particles2D" parent="."]
-
-visibility/behind_parent = true
-visibility/blend_mode = 1
-transform/pos = Vector2( 613.467, 182.62 )
-transform/rot = -179.791
-config/amount = 32
-config/lifetime = 2.0
-config/time_scale = 2.0
-config/half_extents = Vector2( 15, 15 )
-config/local_space = false
-config/explosiveness = 0.05
-config/texture = ExtResource( 2 )
-params/direction = 0.0
-params/spread = 180.0
-params/linear_velocity = 184.547
-params/spin_velocity = 0.0
-params/orbit_velocity = 0.0
-params/gravity_direction = 180.0
-params/gravity_strength = 80.0
-params/radial_accel = 0.0
-params/tangential_accel = 0.0
-params/damping = 366.3
-params/initial_angle = 1.0
-params/initial_size = 0.7
-params/final_size = 3.0
-params/hue_variation = 0.0
-params/anim_speed_scale = 1.0
-params/anim_initial_pos = 0.0
-color/color_ramp = SubResource( 4 )
-
-[node name="Mask" type="Particles2D" parent="."]
-
-transform/pos = Vector2( 192.975, 141.598 )
-config/amount = 170
-config/lifetime = 0.1
-config/half_extents = Vector2( 128, 128 )
-config/local_space = false
-config/texture = ExtResource( 3 )
-params/direction = 0.0
-params/spread = 180.0
-params/linear_velocity = 0.0
-params/spin_velocity = 2.0
-params/orbit_velocity = 0.0
-params/gravity_direction = 0.0
-params/gravity_strength = 0.0
-params/radial_accel = 0.0
-params/tangential_accel = 0.0
-params/damping = 0.0
-params/initial_angle = 1.0
-params/initial_size = 1.0
-params/final_size = 1.0
-params/hue_variation = 0.0
-params/anim_speed_scale = 1.0
-params/anim_initial_pos = 0.0
-randomness/spin_velocity = 1.0
-color/color = Color( 1, 0.477876, 0.60177, 1 )
-emission_points = Vector2Array( -0.125, -0.03125, 0.65625, -0.148438, 0.609375, 0.0234375, -0.757812, 0.375, 0.265625, 0.078125, 0.632812, 0.382812, 0.671875, 0.414062, 0.367188, -0.226562, 0.75, -0.125, 0.4375, 0.421875, 0.335938, -0.148438, -0.125, 0.257812, -0.171875, 0.359375, -0.601562, -0.265625, 0.375, 0.382812, -0.296875, 0.09375, -0.664062, -0.21875, -0.554688, -0.226562, -0.320312, 0.367188, -0.320312, -0.257812, 0, -0.257812, 0.578125, -0.25, -0.164062, 0.109375, -0.578125, -0.015625, -0.445312, 0, 0.273438, 0.101562, 0.320312, 0.03125, -0.125, 0.0703125, -0.570312, 0.289062, 0.257812, -0.09375, -0.585938, 0.179688, -0.664062, 0.0234375, -0.25, -0.0859375, 0.6875, -0.109375, 0.234375, 0, -0.5, -0.265625, 0.710938, 0.335938, 0.609375, -0.046875, 0.664062, -0.210938, -0.242188, -0.21875, -0.484375, -0.257812, -0.453125, 0.414062, 0.609375, -0.203125, 0.289062, 0.132812, -0.03125, -0.257812, -0.492188, -0.1875, 0.5625, -0.140625, -0.5625, 0.148438, -0.257812, -0.234375, -0.140625, 0.15625, -0.5625, 0.109375, 0.132812, 0.398438, -0.640625, -0.25, -0.585938, 0.304688, -0.328125, -0.257812, 0.226562, 0.148438, -0.546875, 0.210938, 0.625, 0.179688, 0.648438, -0.0078125, 0.367188, 0.328125, 0.265625, 0.0546875, -0.59375, -0.273438, -0.203125, 0.21875, 0.570312, -0.21875, -0.695312, 0.078125, -0.375, 0.03125, -0.164062, 0.0390625, 0.265625, 0.226562, -0.625, -0.109375, 0.203125, -0.132812, -0.671875, 0.328125, 0.625, -0.179688, -0.640625, 0.0859375, 0.65625, 0, -0.242188, 0.414062, 0.242188, 0.25, -0.148438, -0.0625, 0.390625, -0.25, 0.664062, 0.351562, 0.320312, 0.203125, -0.546875, 0.335938, 0.328125, -0.148438, 0.609375, -0.0625, -0.171875, 0.046875, -0.578125, 0.0546875, -0.304688, -0.28125, 0.734375, -0.0546875, 0.679688, 0.390625, -0.460938, 0.0859375, -0.703125, 0.101562, -0.140625, 0.234375, -0.507812, 0.078125, -0.25, 0.304688, -0.046875, 0.359375, 0.1875, 0.0703125, -0.570312, 0.242188, 0.65625, 0.0859375, -0.203125, -0.265625, -0.164062, -0.179688, 0.367188, -0.1875, -0.601562, -0.101562, -0.117188, -0.210938, -0.546875, 0.109375, -0.585938, -0.28125, -0.59375, -0.03125, 0.3125, -0.179688, 0.414062, 0.429688, -0.476562, -0.195312, -0.0703125, -0.21875, -0.5625, 0.304688, -0.609375, 0.226562, 0.429688, 0.429688, 0.203125, 0.242188, 0.078125, 0.367188, 0.242188, 0.03125, 0.601562, -0.0390625, 0.328125, 0.03125, -0.53125, -0.195312, -0.53125, -0.210938, 0.3125, -0.257812, 0.445312, -0.273438, 0.273438, -0.273438, -0.695312, -0.179688, 0.234375, -0.15625, -0.546875, -0.242188, -0.234375, -0.125, 0.734375, -0.226562, 0.367188, -0.234375, -0.15625, 0.046875, -0.445312, -0.226562, 0.625, 0.03125, -0.0859375, 0.210938, -0.648438, 0.296875, 0.335938, -0.109375, 0.625, -0.078125, 0.601562, 0.351562, 0.242188, 0.140625, 0.0234375, -0.273438, -0.679688, -0.109375, 0.640625, 0.15625, 0.171875, 0.0859375, -0.273438, -0.273438, -0.242188, 0.34375, 0.179688, 0.15625, -0.179688, -0.117188, 0.671875, 0.03125, -0.640625, 0.304688, 0.109375, -0.242188, -0.210938, 0.382812, -0.0859375, 0.0078125, -0.695312, 0.078125, 0.296875, 0.320312, 0.304688, -0.226562, 0.257812, -0.0234375, -0.203125, -0.015625, -0.648438, 0.335938, -0.703125, -0.132812, -0.273438, -0.210938, -0.15625, -0.273438, -0.0390625, 0.335938, 0.617188, 0.179688, 0.34375, 0.390625, -0.210938, -0.132812, -0.226562, -0.117188, 0.617188, -0.289062, 0.125, -0.21875, 0.71875, -0.164062, -0.570312, 0.1875, -0.1875, 0.382812, 0.640625, -0.296875, -0.125, 0.109375, 0.671875, 0.289062, -0.515625, 0.382812, 0.359375, -0.179688, 0.726562, -0.226562, 0.25, 0.320312, -0.328125, 0, -0.117188, -0.234375, -0.210938, -0.148438, -0.546875, -0.117188, 0.359375, 0.429688, -0.15625, -0.226562, 0.632812, -0.257812, -0.28125, -0.273438, 0.265625, 0.015625, -0.765625, 0.351562, 0.703125, 0.421875, -0.585938, 0.0078125, 0.28125, 0.109375, 0.304688, 0.171875, 0.65625, 0.421875, 0.078125, 0.382812, 0.179688, 0.25, -0.382812, 0.0703125, 0.585938, -0.140625, -0.109375, 0.382812, -0.59375, -0.09375, 0.4375, 0.398438, -0.132812, 0.0234375, -0.625, 0.0078125, -0.210938, -0.21875, -0.25, 0.257812, 0.257812, 0.398438, 0.625, 0.195312, 0.148438, -0.234375, -0.476562, 0.398438, -0.210938, 0.046875, 0.695312, -0.101562, 0.695312, 0.140625, -0.492188, -0.1875, 0.25, -0.09375, -0.195312, -0.195312, -0.328125, 0.0703125, -0.242188, -0.0625, 0.296875, 0.34375, -0.632812, 0.0078125, -0.265625, 0.09375, 0.421875, -0.203125, 0.171875, 0.03125, -0.09375, -0.0703125, 0.289062, 0.0859375, -0.609375, 0.390625, -0.554688, 0.257812, -0.6875, 0.0078125, 0.304688, 0.414062, 0.226562, 0.390625, -0.21875, -0.28125, 0.265625, 0.320312, -0.671875, 0.234375, -0.210938, 0.03125, 0.679688, -0.0234375, 0.359375, -0.203125, 0.3125, 0.289062, 0.671875, 0.140625, -0.78125, 0.414062, -0.546875, 0.40625, 0.625, 0.367188, 0.0859375, 0.421875, 0.1875, -0.09375, 0.617188, 0.40625, -0.078125, -0.0390625, 0.695312, 0.0859375, -0.6875, -0.265625, 0.421875, -0.265625, 0.601562, -0.0234375, -0.3125, -0.265625, -0.078125, 0.046875, 0.617188, 0.164062, 0.273438, -0.03125, -0.695312, -0.015625, -0.5625, 0.164062, -0.578125, 0.265625, -0.726562, 0.421875, -0.078125, -0.25, -0.171875, 0.171875, -0.234375, -0.0390625, 0.257812, 0.429688, -0.179688, -0.117188, 0.351562, -0.03125, -0.78125, -0.234375, -0.546875, -0.171875, -0.460938, -0.234375, -0.164062, 0.09375, -0.65625, 0.398438, -0.445312, 0.0859375, -0.71875, -0.226562, 0.671875, 0.101562, -0.46875, -0.195312, -0.71875, -0.265625, 0.617188, 0.125, -0.78125, -0.21875, -0.226562, -0.15625, 0.21875, 0.0234375, 0.289062, 0.101562, 0.648438, -0.171875, 0.390625, -0.273438, -0.257812, 0.078125, -0.21875, 0, 0.65625, -0.203125, -0.679688, 0.171875, -0.1875, 0.328125, -0.46875, -0.28125, 0.273438, 0, 0.664062, 0.296875, -0.140625, 0.335938, -0.625, 0.382812, -0.34375, -0.21875, -0.171875, -0.25, -0.546875, -0.117188, -0.117188, -0.203125, -0.1875, 0.351562, -0.585938, -0.109375, -0.203125, -0.0625, -0.570312, 0.03125, -0.5625, -0.109375, 0.601562, -0.195312, 0.3125, 0.140625, -0.101562, 0.25, 0.25, 0.3125, 0.125, -0.203125, -0.09375, -0.140625, -0.242188, 0.414062, 0.664062, -0.0625, -0.21875, -0.078125, 0.6875, -0.210938, -0.140625, 0.015625, -0.632812, -0.25, -0.109375, 0.234375, -0.695312, 0.015625, -0.3125, -0.28125, 0.296875, -0.0234375, 0.296875, 0.203125, -0.125, 0.234375, 0.570312, 0.390625, -0.554688, 0.203125, -0.5625, 0.351562, -0.15625, 0.21875, -0.375, 0.0390625, -0.226562, -0.140625, 0.695312, 0.164062, 0.632812, 0.367188, -0.328125, -0.210938, -0.59375, 0.34375, 0.304688, -0.242188, -0.34375, 0.0703125, -0.679688, -0.179688, 0.664062, 0.101562, 0.34375, 0.171875, -0.695312, -0.078125, -0.242188, -0.0546875, 0.304688, -0.234375, -0.0078125, -0.21875, -0.632812, 0.203125, 0.625, 0.03125, -0.414062, 0.015625, 0.273438, -0.078125, 0.695312, 0.28125, 0.34375, 0.101562, -0.164062, 0.289062, -0.1875, 0.273438, -0.203125, 0.0703125, 0.734375, -0.171875, -0.59375, 0.34375, -0.15625, 0.210938, 0.429688, 0.375, -0.234375, 0.34375, 0.617188, 0.101562, 0.703125, 0, -0.578125, 0.148438, 0.21875, -0.171875, -0.304688, 0.375, -0.65625, -0.09375, -0.101562, 0.25, -0.4375, 0.03125, -0.242188, 0.421875, -0.546875, 0.0625, -0.632812, -0.148438, -0.125, 0.179688, 0.179688, 0.304688, -0.265625, 0.078125, -0.289062, 0.421875, -0.585938, 0.1875, -0.289062, 0.34375, 0.273438, 0.367188, -0.109375, 0.117188, 0.34375, 0.046875, -0.0625, 0.320312, 0.6875, -0.234375, -0.523438, 0.320312, -0.09375, -0.242188, -0.65625, 0.25, -0.609375, -0.117188, -0.140625, 0.140625, 0.28125, -0.09375, -0.625, -0.28125, 0.34375, 0.328125, 0.265625, 0.109375, -0.609375, 0.0078125, -0.078125, -0.234375, -0.289062, -0.203125, 0.289062, 0.289062, -0.0859375, 0.0078125, -0.101562, -0.28125, -0.625, -0.101562, -0.546875, 0.382812, -0.539062, -0.195312, -0.210938, 0.046875, -0.492188, 0.390625, -0.664062, -0.0703125, 0.71875, -0.101562, -0.140625, -0.046875, 0.695312, 0.289062, -0.710938, 0.429688, -0.703125, 0.3125, -0.203125, 0.109375, 0.421875, -0.273438, 0.304688, 0.21875, 0.328125, 0.257812, -0.632812, -0.0703125, 0.320312, -0.140625, 0.265625, -0.203125, -0.109375, -0.179688, 0.25, -0.210938, 0.65625, 0.109375, -0.648438, -0.0625, -0.0859375, 0.375, -0.429688, 0.398438, 0.320312, 0.3125, -0.0703125, 0.265625, 0.648438, 0.0078125, 0.320312, 0.335938, 0.398438, 0.421875, -0.101562, -0.0625, -0.296875, 0.40625, 0.695312, -0.0390625, 0.335938, 0.21875, -0.546875, 0.117188, -0.476562, 0.390625, -0.648438, 0.117188, -0.078125, -0.28125, 0.328125, 0.289062, -0.226562, 0.179688, 0.226562, 0.375, -0.429688, 0.382812, -0.0546875, 0.34375, 0.59375, -0.125, 0.632812, 0.265625, 0.226562, 0.3125, -0.523438, -0.140625, -0.546875, 0.046875, 0.242188, -0.148438, -0.648438, 0.0234375, -0.289062, 0, -0.546875, 0.101562, -0.125, -0.0625, -0.492188, 0.367188, 0.328125, 0.15625, -0.351562, 0.0546875, -0.609375, 0.414062, -0.296875, 0.09375, 0.671875, -0.203125, -0.257812, -0.273438, -0.335938, 0.414062, 0.65625, -0.195312, -0.601562, -0.101562, -0.203125, -0.078125, 0.210938, 0.242188, 0.296875, 0.335938, -0.578125, 0.40625, -0.664062, -0.078125, -0.0859375, 0.390625, 0.171875, 0.304688, -0.6875, 0.390625, -0.554688, 0.0078125, -0.570312, -0.179688, -0.210938, -0.09375, 0.726562, -0.03125, -0.546875, -0.0859375, -0.265625, -0.171875, -0.65625, 0.179688, -0.171875, 0.257812, -0.164062, -0.171875, 0.203125, 0.335938, -0.640625, 0.21875, 0.390625, 0.375, 0.6875, -0.234375, 0.742188, 0.34375, -0.0546875, 0.351562, -0.632812, 0.195312, 0.671875, -0.21875, 0.195312, 0.015625, 0.226562, 0.117188, -0.507812, 0.078125, -0.140625, -0.15625, 0.703125, -0.28125, 0.226562, -0.140625, 0.328125, 0.421875, 0.3125, 0.1875, 0.703125, 0.078125, 0.351562, 0.289062, 0.21875, -0.242188, -0.328125, 0, 0.171875, 0.101562, -0.304688, -0.242188, -0.210938, 0.078125, 0.625, -0.0078125, 0.25, 0.242188, -0.664062, 0.117188, 0.203125, -0.140625, 0.226562, 0.429688, 0.328125, -0.203125, -0.679688, 0.0703125, -0.195312, -0.148438, -0.523438, 0.328125, 0.382812, -0.257812, 0.578125, -0.171875, 0.65625, 0.320312, -0.632812, -0.148438, 0.703125, 0.0703125, -0.53125, 0.398438, -0.414062, 0.03125, -0.0859375, 0.0546875, -0.53125, 0.335938, 0.304688, 0.429688, -0.234375, -0.148438, -0.375, 0.046875, -0.148438, 0.289062, -0.0390625, 0.421875, 0.226562, -0.125, -0.570312, 0.398438, -0.0703125, -0.0234375, 0.257812, -0.132812 )
-
-
diff --git a/demos/2d/particles/smoke_particle.png b/demos/2d/particles/smoke_particle.png
deleted file mode 100644
index 3a03d14c71..0000000000
--- a/demos/2d/particles/smoke_particle.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/particles/spark_particle2.png b/demos/2d/particles/spark_particle2.png
deleted file mode 100644
index 2dd071a25a..0000000000
--- a/demos/2d/particles/spark_particle2.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/platformer/bullet.gd b/demos/2d/platformer/bullet.gd
deleted file mode 100644
index 3aee69714e..0000000000
--- a/demos/2d/platformer/bullet.gd
+++ /dev/null
@@ -1,16 +0,0 @@
-
-extends RigidBody2D
-
-# Member variables
-var disabled = false
-
-
-func disable():
- if (disabled):
- return
- get_node("anim").play("shutdown")
- disabled = true
-
-
-func _ready():
- get_node("Timer").start()
diff --git a/demos/2d/platformer/bullet.png b/demos/2d/platformer/bullet.png
deleted file mode 100644
index 5c722219ec..0000000000
--- a/demos/2d/platformer/bullet.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/platformer/bullet.tscn b/demos/2d/platformer/bullet.tscn
deleted file mode 100644
index 78f566c3b3..0000000000
--- a/demos/2d/platformer/bullet.tscn
+++ /dev/null
@@ -1,115 +0,0 @@
-[gd_scene load_steps=6 format=1]
-
-[ext_resource path="res://bullet.gd" type="Script" id=1]
-[ext_resource path="res://bullet.png" type="Texture" id=2]
-
-[sub_resource type="CircleShape2D" id=1]
-
-custom_solver_bias = 0.0
-radius = 10.0
-
-[sub_resource type="ColorRamp" id=2]
-
-offsets = FloatArray( 0, 1 )
-colors = ColorArray( 1, 1, 1, 1, 1, 0, 0, 0 )
-
-[sub_resource type="Animation" id=3]
-
-length = 1.5
-loop = false
-step = 0.0
-tracks/0/type = "value"
-tracks/0/path = NodePath("particles:config/emitting")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ false ] }
-tracks/1/type = "value"
-tracks/1/path = NodePath("sprite:visibility/self_opacity")
-tracks/1/interp = 1
-tracks/1/keys = { "cont":true, "times":FloatArray( 0, 1.00394 ), "transitions":FloatArray( 1, 1 ), "values":[ 1.0, 0.0 ] }
-tracks/2/type = "method"
-tracks/2/path = NodePath(".")
-tracks/2/interp = 1
-tracks/2/keys = { "times":FloatArray( 1.31 ), "transitions":FloatArray( 1 ), "values":[ { "args":[ ], "method":"queue_free" } ] }
-
-[node name="bullet" type="RigidBody2D"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-mode = 0
-mass = 1.0
-friction = 1.0
-bounce = 0.0
-gravity_scale = 1.0
-custom_integrator = false
-continuous_cd = 2
-contacts_reported = 0
-contact_monitor = false
-sleeping = false
-can_sleep = true
-velocity/linear = Vector2( 0, 0 )
-velocity/angular = 0.0
-damp_override/linear = -1.0
-damp_override/angular = -1.0
-script/script = ExtResource( 1 )
-
-[node name="particles" type="Particles2D" parent="."]
-
-visibility/opacity = 0.559322
-visibility/blend_mode = 1
-config/amount = 24
-config/lifetime = 0.1
-config/local_space = false
-config/texture = ExtResource( 2 )
-params/direction = 0.0
-params/spread = 10.0
-params/linear_velocity = 0.0
-params/spin_velocity = 0.0
-params/orbit_velocity = 0.0
-params/gravity_direction = 0.0
-params/gravity_strength = 0.0
-params/radial_accel = 0.0
-params/tangential_accel = 0.0
-params/damping = 0.0
-params/initial_angle = 0.0
-params/initial_size = 1.0
-params/final_size = 0.0
-params/hue_variation = 0.0
-params/anim_speed_scale = 1.0
-params/anim_initial_pos = 0.0
-color/color_ramp = SubResource( 2 )
-
-[node name="sprite" type="Sprite" parent="."]
-
-texture = ExtResource( 2 )
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
-
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = -1
-
-[node name="Timer" type="Timer" parent="."]
-
-process_mode = 1
-wait_time = 1.0
-one_shot = true
-autostart = false
-
-[node name="anim" type="AnimationPlayer" parent="."]
-
-playback/process_mode = 1
-playback/default_blend_time = 0.0
-root/root = NodePath("..")
-anims/shutdown = SubResource( 3 )
-playback/active = true
-playback/speed = 1.0
-blend_times = [ ]
-autoplay = ""
-
-[connection signal="timeout" from="Timer" to="." method="disable"]
-
-
diff --git a/demos/2d/platformer/coin.gd b/demos/2d/platformer/coin.gd
deleted file mode 100644
index 1118732707..0000000000
--- a/demos/2d/platformer/coin.gd
+++ /dev/null
@@ -1,19 +0,0 @@
-
-extends Area2D
-
-# Member variables
-var taken = false
-
-
-func _on_body_enter( body ):
- if (not taken and body extends preload("res://player.gd")):
- get_node("anim").play("taken")
- taken = true
-
-
-func _on_coin_area_enter(area):
- pass # replace with function body
-
-
-func _on_coin_area_enter_shape(area_id, area, area_shape, area_shape):
- pass # replace with function body
diff --git a/demos/2d/platformer/coin.png b/demos/2d/platformer/coin.png
deleted file mode 100644
index c35c5ebf28..0000000000
--- a/demos/2d/platformer/coin.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/platformer/coin.tscn b/demos/2d/platformer/coin.tscn
deleted file mode 100644
index 76730c83d4..0000000000
--- a/demos/2d/platformer/coin.tscn
+++ /dev/null
@@ -1,146 +0,0 @@
-[gd_scene load_steps=10 format=1]
-
-[ext_resource path="res://coin.gd" type="Script" id=1]
-[ext_resource path="res://coin.png" type="Texture" id=2]
-[ext_resource path="res://sound_coin.wav" type="Sample" id=3]
-[ext_resource path="res://bullet.png" type="Texture" id=4]
-
-[sub_resource type="CircleShape2D" id=1]
-
-custom_solver_bias = 0.0
-radius = 10.0
-
-[sub_resource type="Animation" id=2]
-
-resource/name = "spin"
-length = 1.5
-loop = true
-step = 0.25
-tracks/0/type = "value"
-tracks/0/path = NodePath("sprite:frame")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.25, 0.5, 0.75, 1, 1.25, 1.5 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1, 1 ), "values":[ 0, 1, 2, 3, 2, 1, 0 ] }
-
-[sub_resource type="Animation" id=3]
-
-length = 8.0
-loop = false
-step = 0.0
-tracks/0/type = "value"
-tracks/0/path = NodePath("sprite:frame")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":true, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ 0 ] }
-tracks/1/type = "value"
-tracks/1/path = NodePath("sound:play/play")
-tracks/1/interp = 1
-tracks/1/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ "coin" ] }
-tracks/2/type = "value"
-tracks/2/path = NodePath("particles:visibility/self_opacity")
-tracks/2/interp = 1
-tracks/2/keys = { "cont":true, "times":FloatArray( 0, 1.66 ), "transitions":FloatArray( 1, 1 ), "values":[ 1.0, 0.0 ] }
-tracks/3/type = "value"
-tracks/3/path = NodePath("sprite:visibility/self_opacity")
-tracks/3/interp = 1
-tracks/3/keys = { "cont":true, "times":FloatArray( 0, 0.4 ), "transitions":FloatArray( 1, 1 ), "values":[ 1.0, 0.0 ] }
-tracks/4/type = "value"
-tracks/4/path = NodePath("particles:config/emitting")
-tracks/4/interp = 1
-tracks/4/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ true ] }
-tracks/5/type = "method"
-tracks/5/path = NodePath(".")
-tracks/5/interp = 1
-tracks/5/keys = { "times":FloatArray( 2.7 ), "transitions":FloatArray( 1 ), "values":[ { "args":[ ], "method":"queue_free" } ] }
-
-[sub_resource type="SampleLibrary" id=4]
-
-samples/coin = { "db":0.0, "pitch":1.0, "sample":ExtResource( 3 ) }
-
-[sub_resource type="ColorRamp" id=5]
-
-offsets = FloatArray( 0, 1 )
-colors = ColorArray( 1, 1, 1, 1, 0, 0, 0, 1 )
-
-[node name="coin" type="Area2D"]
-
-input/pickable = true
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-gravity_vec = Vector2( 0, 1 )
-gravity = 98.0
-linear_damp = 0.1
-angular_damp = 1.0
-script/script = ExtResource( 1 )
-
-[node name="sprite" type="Sprite" parent="."]
-
-texture = ExtResource( 2 )
-hframes = 4
-
-[node name="anim" type="AnimationPlayer" parent="."]
-
-playback/process_mode = 1
-playback/default_blend_time = 0.0
-root/root = NodePath("..")
-anims/spin = SubResource( 2 )
-anims/taken = SubResource( 3 )
-playback/active = true
-playback/speed = 3.0
-blend_times = [ ]
-autoplay = "spin"
-
-[node name="collision" type="CollisionShape2D" parent="."]
-
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = -1
-
-[node name="sound" type="SamplePlayer2D" parent="."]
-
-params/volume_db = 0.0
-params/pitch_scale = 1.0
-params/attenuation/min_distance = 1.0
-params/attenuation/max_distance = 2048.0
-params/attenuation/distance_exp = 1.0
-config/polyphony = 1
-config/samples = SubResource( 4 )
-config/pitch_random = 0.0
-
-[node name="particles" type="Particles2D" parent="."]
-
-visibility/blend_mode = 1
-config/amount = 8
-config/lifetime = 0.4
-config/emitting = false
-config/half_extents = Vector2( 5, 5 )
-config/texture = ExtResource( 4 )
-params/direction = 0.0
-params/spread = 10.0
-params/linear_velocity = 0.0
-params/spin_velocity = 0.0
-params/orbit_velocity = 0.0
-params/gravity_direction = 0.0
-params/gravity_strength = 0.0
-params/radial_accel = 0.0
-params/tangential_accel = 0.0
-params/damping = 0.0
-params/initial_angle = 0.0
-params/initial_size = 0.2
-params/final_size = 0.2
-params/hue_variation = 0.0
-params/anim_speed_scale = 1.0
-params/anim_initial_pos = 0.0
-color/color_ramp = SubResource( 5 )
-
-[node name="enabler" type="VisibilityEnabler2D" parent="."]
-
-rect = Rect2( -10, -10, 20, 20 )
-enabler/pause_animations = true
-enabler/freeze_bodies = true
-enabler/pause_particles = true
-enabler/process_parent = false
-enabler/fixed_process_parent = false
-
-[connection signal="body_enter" from="." to="." method="_on_body_enter"]
-
-
diff --git a/demos/2d/platformer/enemy.gd b/demos/2d/platformer/enemy.gd
deleted file mode 100644
index 5a4d8af579..0000000000
--- a/demos/2d/platformer/enemy.gd
+++ /dev/null
@@ -1,83 +0,0 @@
-
-extends RigidBody2D
-
-# Member variables
-const STATE_WALKING = 0
-const STATE_DYING = 1
-
-var state = STATE_WALKING
-
-var direction = -1
-var anim = ""
-
-var rc_left = null
-var rc_right = null
-var WALK_SPEED = 50
-
-var bullet_class = preload("res://bullet.gd")
-
-
-func _die():
- queue_free()
-
-
-func _pre_explode():
- # Stay there
- clear_shapes()
- set_mode(MODE_STATIC)
- get_node("sound").play("explode")
-
-
-func _integrate_forces(s):
- var lv = s.get_linear_velocity()
- var new_anim = anim
-
- if (state == STATE_DYING):
- new_anim = "explode"
- elif (state == STATE_WALKING):
- new_anim = "walk"
-
- var wall_side = 0.0
-
- for i in range(s.get_contact_count()):
- var cc = s.get_contact_collider_object(i)
- var dp = s.get_contact_local_normal(i)
-
- if (cc):
- if (cc extends bullet_class and not cc.disabled):
- set_mode(MODE_RIGID)
- state = STATE_DYING
- #lv = s.get_contact_local_normal(i)*400
- s.set_angular_velocity(sign(dp.x)*33.0)
- set_friction(1)
- cc.disable()
- get_node("sound").play("hit")
- break
-
- if (dp.x > 0.9):
- wall_side = 1.0
- elif (dp.x < -0.9):
- wall_side = -1.0
-
- if (wall_side != 0 and wall_side != direction):
- direction = -direction
- get_node("sprite").set_scale(Vector2(-direction, 1))
- if (direction < 0 and not rc_left.is_colliding() and rc_right.is_colliding()):
- direction = -direction
- get_node("sprite").set_scale(Vector2(-direction, 1))
- elif (direction > 0 and not rc_right.is_colliding() and rc_left.is_colliding()):
- direction = -direction
- get_node("sprite").set_scale(Vector2(-direction, 1))
-
- lv.x = direction*WALK_SPEED
-
- if(anim != new_anim):
- anim = new_anim
- get_node("anim").play(anim)
-
- s.set_linear_velocity(lv)
-
-
-func _ready():
- rc_left = get_node("raycast_left")
- rc_right = get_node("raycast_right")
diff --git a/demos/2d/platformer/enemy.png b/demos/2d/platformer/enemy.png
deleted file mode 100644
index 37fe468b0f..0000000000
--- a/demos/2d/platformer/enemy.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/platformer/enemy.tscn b/demos/2d/platformer/enemy.tscn
deleted file mode 100644
index b01bd9fcf6..0000000000
--- a/demos/2d/platformer/enemy.tscn
+++ /dev/null
@@ -1,206 +0,0 @@
-[gd_scene load_steps=12 format=1]
-
-[ext_resource path="res://enemy.gd" type="Script" id=1]
-[ext_resource path="res://enemy.png" type="Texture" id=2]
-[ext_resource path="res://bullet.png" type="Texture" id=3]
-[ext_resource path="res://sound_explode.wav" type="Sample" id=4]
-[ext_resource path="res://sound_hit.wav" type="Sample" id=5]
-
-[sub_resource type="CircleShape2D" id=1]
-
-custom_solver_bias = 0.0
-radius = 14.0
-
-[sub_resource type="Animation" id=2]
-
-resource/name = "explode"
-length = 6.0
-loop = false
-step = 0.0
-tracks/0/type = "value"
-tracks/0/path = NodePath("sprite:visibility/self_opacity")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":true, "times":FloatArray( 3.58422, 4.33851 ), "transitions":FloatArray( 1, 1 ), "values":[ 1.0, 0.0 ] }
-tracks/1/type = "value"
-tracks/1/path = NodePath("sprite:frame")
-tracks/1/interp = 1
-tracks/1/keys = { "cont":true, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ 4 ] }
-tracks/2/type = "value"
-tracks/2/path = NodePath("Particles2D:config/emitting")
-tracks/2/interp = 1
-tracks/2/keys = { "cont":false, "times":FloatArray( 3.47394 ), "transitions":FloatArray( 1 ), "values":[ true ] }
-tracks/3/type = "method"
-tracks/3/path = NodePath(".")
-tracks/3/interp = 1
-tracks/3/keys = { "times":FloatArray( 3.20357, 5.07305 ), "transitions":FloatArray( 1, 1 ), "values":[ { "args":[ ], "method":"_pre_explode" }, { "args":[ ], "method":"_die" } ] }
-
-[sub_resource type="Animation" id=3]
-
-length = 6.75
-loop = true
-step = 0.25
-tracks/0/type = "value"
-tracks/0/path = NodePath("sprite:frame")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.75, 1.5, 2.25, 3, 3.75, 4.5, 5.25, 6, 6.75 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), "values":[ 5, 6, 5, 6, 5, 6, 7, 6, 7, 5 ] }
-
-[sub_resource type="Animation" id=4]
-
-resource/name = "walk"
-length = 1.25
-loop = true
-step = 0.25
-tracks/0/type = "value"
-tracks/0/path = NodePath("sprite:frame")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.25, 0.5, 0.75, 1, 1.25 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1 ), "values":[ 0, 1, 2, 3, 4, 0 ] }
-
-[sub_resource type="ColorRamp" id=5]
-
-offsets = FloatArray( 0, 1 )
-colors = ColorArray( 1, 0.884956, 0.823009, 1, 0.768627, 0.389381, 0, 0 )
-
-[sub_resource type="SampleLibrary" id=6]
-
-samples/explode = { "db":0.0, "pitch":1.0, "sample":ExtResource( 4 ) }
-samples/hit = { "db":0.0, "pitch":1.0, "sample":ExtResource( 5 ) }
-
-[node name="enemy" type="RigidBody2D"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, -1.08072, -2.16144 )
-shapes/0/trigger = false
-shapes/1/shape = SubResource( 1 )
-shapes/1/transform = Matrix32( 1, 0, 0, 1, 6.48431, 3.24216 )
-shapes/1/trigger = false
-shapes/2/shape = SubResource( 1 )
-shapes/2/transform = Matrix32( 1, 0, 0, 1, -12.495, 3.53415 )
-shapes/2/trigger = false
-collision/layers = 1
-collision/mask = 1
-mode = 2
-mass = 1.0
-friction = 0.0
-bounce = 0.0
-gravity_scale = 1.0
-custom_integrator = false
-continuous_cd = 0
-contacts_reported = 4
-contact_monitor = false
-sleeping = false
-can_sleep = true
-velocity/linear = Vector2( 0, 0 )
-velocity/angular = 0.0
-damp_override/linear = -1.0
-damp_override/angular = -1.0
-script/script = ExtResource( 1 )
-
-[node name="enabler" type="VisibilityEnabler2D" parent="."]
-
-transform/pos = Vector2( 16.2569, 11.0034 )
-transform/scale = Vector2( 23.5056, 10.8629 )
-rect = Rect2( -10, -10, 20, 20 )
-enabler/pause_animations = true
-enabler/freeze_bodies = true
-enabler/pause_particles = true
-enabler/process_parent = false
-enabler/fixed_process_parent = false
-
-[node name="anim" type="AnimationPlayer" parent="."]
-
-playback/process_mode = 1
-playback/default_blend_time = 0.0
-root/root = NodePath("..")
-anims/explode = SubResource( 2 )
-anims/idle = SubResource( 3 )
-anims/walk = SubResource( 4 )
-playback/active = true
-playback/speed = 3.0
-blend_times = [ ]
-autoplay = ""
-
-[node name="sprite" type="Sprite" parent="."]
-
-texture = ExtResource( 2 )
-hframes = 8
-frame = 4
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
-
-transform/pos = Vector2( -1.08072, -2.16144 )
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = -1
-
-[node name="CollisionShape2D 2" type="CollisionShape2D" parent="."]
-
-transform/pos = Vector2( 6.48431, 3.24216 )
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = -1
-
-[node name="CollisionShape2D 3" type="CollisionShape2D" parent="."]
-
-transform/pos = Vector2( -12.495, 3.53415 )
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = -1
-
-[node name="raycast_left" type="RayCast2D" parent="."]
-
-transform/pos = Vector2( -33.2868, -9.34363 )
-enabled = true
-cast_to = Vector2( 0, 45 )
-layer_mask = 1
-type_mask = 15
-
-[node name="raycast_right" type="RayCast2D" parent="."]
-
-transform/pos = Vector2( 29.1987, -9.34363 )
-enabled = true
-cast_to = Vector2( 0, 45 )
-layer_mask = 1
-type_mask = 15
-
-[node name="Particles2D" type="Particles2D" parent="."]
-
-visibility/self_opacity = 0.121212
-visibility/blend_mode = 1
-config/amount = 32
-config/lifetime = 0.5
-config/emit_timeout = 0.5
-config/emitting = false
-config/explosiveness = 0.1
-config/texture = ExtResource( 3 )
-params/direction = 0.0
-params/spread = 180.0
-params/linear_velocity = 90.0
-params/spin_velocity = 2.0
-params/orbit_velocity = 0.0
-params/gravity_direction = 0.0
-params/gravity_strength = 9.8
-params/radial_accel = 0.0
-params/tangential_accel = 0.0
-params/damping = 0.0
-params/initial_angle = 0.0
-params/initial_size = 2.0
-params/final_size = 3.0
-params/hue_variation = 0.0
-params/anim_speed_scale = 1.0
-params/anim_initial_pos = 0.0
-randomness/spin_velocity = 1.0
-color/color_ramp = SubResource( 5 )
-
-[node name="sound" type="SamplePlayer2D" parent="."]
-
-params/volume_db = 0.0
-params/pitch_scale = 1.0
-params/attenuation/min_distance = 1.0
-params/attenuation/max_distance = 2048.0
-params/attenuation/distance_exp = 1.0
-config/polyphony = 3
-config/samples = SubResource( 6 )
-config/pitch_random = 0.0
-
-
diff --git a/demos/2d/platformer/engine.cfg b/demos/2d/platformer/engine.cfg
deleted file mode 100644
index dddef264d4..0000000000
--- a/demos/2d/platformer/engine.cfg
+++ /dev/null
@@ -1,42 +0,0 @@
-[application]
-
-name="Platformer"
-main_scene="res://stage.tscn"
-icon="res://icon.png"
-name_es="Plataformero"
-target_fps="60"
-
-[display]
-
-width=800
-height=480
-stretch_mode="2d"
-stretch_aspect="keep_height"
-
-[image_loader]
-
-repeat=false
-
-[input]
-
-move_left=[key(Left), jbutton(0, 14)]
-move_right=[key(Right), jbutton(0, 15)]
-jump=[key(Up), jbutton(0, 0)]
-shoot=[key(Space), jbutton(0, 2)]
-spawn=[key(F1), jbutton(0, 11)]
-
-[physics_2d]
-
-default_gravity=700
-
-[rasterizer]
-
-use_pixel_snap=true
-
-[render]
-
-mipmap_policy=1
-
-[texture_import]
-
-filter=false
diff --git a/demos/2d/platformer/icon.png b/demos/2d/platformer/icon.png
deleted file mode 100644
index da2c08eb53..0000000000
--- a/demos/2d/platformer/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/platformer/moving_platform.gd b/demos/2d/platformer/moving_platform.gd
deleted file mode 100644
index 21c312d5c3..0000000000
--- a/demos/2d/platformer/moving_platform.gd
+++ /dev/null
@@ -1,20 +0,0 @@
-
-extends Node2D
-
-# Member variables
-export var motion = Vector2()
-export var cycle = 1.0
-var accum = 0.0
-
-
-func _fixed_process(delta):
- accum += delta*(1.0/cycle)*PI*2.0
- accum = fmod(accum, PI*2.0)
- var d = sin(accum)
- var xf = Matrix32()
- xf[2]= motion*d
- get_node("platform").set_transform(xf)
-
-
-func _ready():
- set_fixed_process(true)
diff --git a/demos/2d/platformer/moving_platform.png b/demos/2d/platformer/moving_platform.png
deleted file mode 100644
index f01c6ea37f..0000000000
--- a/demos/2d/platformer/moving_platform.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/platformer/moving_platform.tscn b/demos/2d/platformer/moving_platform.tscn
deleted file mode 100644
index c6269d6ee7..0000000000
--- a/demos/2d/platformer/moving_platform.tscn
+++ /dev/null
@@ -1,52 +0,0 @@
-[gd_scene load_steps=4 format=1]
-
-[ext_resource path="res://moving_platform.gd" type="Script" id=1]
-[ext_resource path="res://moving_platform.png" type="Texture" id=2]
-
-[sub_resource type="ConvexPolygonShape2D" id=1]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -88, 24, -88, -24, 88, -24, 88, 24 )
-
-[node name="moving_platform" type="Node2D"]
-
-script/script = ExtResource( 1 )
-motion = Vector2( 0, 0 )
-cycle = 1.0
-
-[node name="platform" type="RigidBody2D" parent="."]
-
-input/pickable = false
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-mode = 3
-mass = 1.0
-friction = 1.0
-bounce = 0.0
-gravity_scale = 1.0
-custom_integrator = false
-continuous_cd = 0
-contacts_reported = 0
-contact_monitor = false
-sleeping = false
-can_sleep = true
-velocity/linear = Vector2( 0, 0 )
-velocity/angular = 0.0
-damp_override/linear = -1.0
-damp_override/angular = -1.0
-
-[node name="Sprite" type="Sprite" parent="platform"]
-
-texture = ExtResource( 2 )
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="platform"]
-
-build_mode = 0
-polygon = Vector2Array( -88, -24, 88, -24, 88, 24, -88, 24 )
-shape_range = Vector2( -1, -1 )
-trigger = false
-
-
diff --git a/demos/2d/platformer/music.ogg b/demos/2d/platformer/music.ogg
deleted file mode 100644
index ed3e9f0a01..0000000000
--- a/demos/2d/platformer/music.ogg
+++ /dev/null
Binary files differ
diff --git a/demos/2d/platformer/one_way_platform.png b/demos/2d/platformer/one_way_platform.png
deleted file mode 100644
index b5eca877a6..0000000000
--- a/demos/2d/platformer/one_way_platform.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/platformer/one_way_platform.tscn b/demos/2d/platformer/one_way_platform.tscn
deleted file mode 100644
index 88c4b0d61a..0000000000
--- a/demos/2d/platformer/one_way_platform.tscn
+++ /dev/null
@@ -1,36 +0,0 @@
-[gd_scene load_steps=3 format=1]
-
-[ext_resource path="res://one_way_platform.png" type="Texture" id=1]
-
-[sub_resource type="RectangleShape2D" id=1]
-
-custom_solver_bias = 0.0
-extents = Vector2( 100, 10 )
-
-[node name="one_way_platform" type="StaticBody2D"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 1.46304, -13.1672 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-one_way_collision/direction = Vector2( 0, 1 )
-one_way_collision/max_depth = 20.0
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="sprite" type="Sprite" parent="."]
-
-texture = ExtResource( 1 )
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
-
-transform/pos = Vector2( 1.46304, -13.1672 )
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = -1
-
-
diff --git a/demos/2d/platformer/osb_fire.png b/demos/2d/platformer/osb_fire.png
deleted file mode 100644
index 6f914cfe49..0000000000
--- a/demos/2d/platformer/osb_fire.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/platformer/osb_jump.png b/demos/2d/platformer/osb_jump.png
deleted file mode 100644
index 72ba032daa..0000000000
--- a/demos/2d/platformer/osb_jump.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/platformer/osb_left.png b/demos/2d/platformer/osb_left.png
deleted file mode 100644
index b8e08c2ce7..0000000000
--- a/demos/2d/platformer/osb_left.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/platformer/osb_right.png b/demos/2d/platformer/osb_right.png
deleted file mode 100644
index 0e5cbb0d54..0000000000
--- a/demos/2d/platformer/osb_right.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/platformer/parallax_bg.tscn b/demos/2d/platformer/parallax_bg.tscn
deleted file mode 100644
index cf5815e28c..0000000000
--- a/demos/2d/platformer/parallax_bg.tscn
+++ /dev/null
@@ -1,101 +0,0 @@
-[gd_scene load_steps=7 format=1]
-
-[ext_resource path="res://scroll_bg_sky.png" type="Texture" id=1]
-[ext_resource path="res://scroll_bg_cloud_1.png" type="Texture" id=2]
-[ext_resource path="res://scroll_bg_cloud_2.png" type="Texture" id=3]
-[ext_resource path="res://scroll_bg_cloud_3.png" type="Texture" id=4]
-[ext_resource path="res://scroll_bg_fg_2.png" type="Texture" id=5]
-[ext_resource path="res://scroll_bg_fg_1.png" type="Texture" id=6]
-
-[node name="parallax_bg" type="ParallaxBackground"]
-
-layer = -1
-offset = Vector2( 0, 0 )
-rotation = 0.0
-scale = Vector2( 1, 1 )
-scroll/offset = Vector2( 0, 0 )
-scroll/base_offset = Vector2( 0, 0 )
-scroll/base_scale = Vector2( 0.7, 0 )
-scroll/limit_begin = Vector2( 0, 0 )
-scroll/limit_end = Vector2( 0, 0 )
-scroll/ignore_camera_zoom = false
-
-[node name="sky" type="ParallaxLayer" parent="."]
-
-motion/scale = Vector2( 1, 1 )
-motion/mirroring = Vector2( 800, 0 )
-
-[node name="Sprite" type="Sprite" parent="sky"]
-
-transform/scale = Vector2( 32, 0.94 )
-texture = ExtResource( 1 )
-centered = false
-
-[node name="clouds" type="ParallaxLayer" parent="."]
-
-motion/scale = Vector2( 0.1, 1 )
-motion/mirroring = Vector2( 800, 0 )
-
-[node name="Sprite" type="Sprite" parent="clouds"]
-
-transform/pos = Vector2( 28, 127 )
-texture = ExtResource( 2 )
-centered = false
-
-[node name="Sprite 2" type="Sprite" parent="clouds"]
-
-transform/pos = Vector2( 404, 24 )
-texture = ExtResource( 2 )
-centered = false
-
-[node name="Sprite 3" type="Sprite" parent="clouds"]
-
-transform/pos = Vector2( 154, 46 )
-texture = ExtResource( 3 )
-centered = false
-
-[node name="Sprite 4" type="Sprite" parent="clouds"]
-
-transform/pos = Vector2( 525, 130 )
-texture = ExtResource( 3 )
-centered = false
-
-[node name="Sprite 5" type="Sprite" parent="clouds"]
-
-transform/pos = Vector2( 255, 158 )
-texture = ExtResource( 4 )
-centered = false
-
-[node name="Sprite 6" type="Sprite" parent="clouds"]
-
-transform/pos = Vector2( 674, 70 )
-texture = ExtResource( 4 )
-centered = false
-
-[node name="mount_ 2" type="ParallaxLayer" parent="."]
-
-motion/scale = Vector2( 0.2, 1 )
-motion/mirroring = Vector2( 800, 0 )
-
-[node name="Sprite" type="Sprite" parent="mount_ 2"]
-
-transform/pos = Vector2( 0, 225 )
-texture = ExtResource( 5 )
-centered = false
-region = true
-region_rect = Rect2( 0, 0, 800, 256 )
-
-[node name="mount_1" type="ParallaxLayer" parent="."]
-
-motion/scale = Vector2( 0.4, 1 )
-motion/mirroring = Vector2( 800, 0 )
-
-[node name="Sprite" type="Sprite" parent="mount_1"]
-
-transform/pos = Vector2( 0, 225 )
-texture = ExtResource( 6 )
-centered = false
-region = true
-region_rect = Rect2( 0, 0, 800, 256 )
-
-
diff --git a/demos/2d/platformer/plank.png b/demos/2d/platformer/plank.png
deleted file mode 100644
index b4f6addee5..0000000000
--- a/demos/2d/platformer/plank.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/platformer/plankpin.png b/demos/2d/platformer/plankpin.png
deleted file mode 100644
index 46e104a3fe..0000000000
--- a/demos/2d/platformer/plankpin.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/platformer/player.gd b/demos/2d/platformer/player.gd
deleted file mode 100644
index 8cafd8b933..0000000000
--- a/demos/2d/platformer/player.gd
+++ /dev/null
@@ -1,232 +0,0 @@
-
-extends RigidBody2D
-
-# Character Demo, written by Juan Linietsky.
-#
-# Implementation of a 2D Character controller.
-# This implementation uses the physics engine for
-# controlling a character, in a very similar way
-# than a 3D character controller would be implemented.
-#
-# Using the physics engine for this has the main
-# advantages:
-# -Easy to write.
-# -Interaction with other physics-based objects is free
-# -Only have to deal with the object linear velocity, not position
-# -All collision/area framework available
-#
-# But also has the following disadvantages:
-#
-# -Objects may bounce a little bit sometimes
-# -Going up ramps sends the chracter flying up, small hack is needed.
-# -A ray collider is needed to avoid sliding down on ramps and
-# undesiderd bumps, small steps and rare numerical precision errors.
-# (another alternative may be to turn on friction when the character is not moving).
-# -Friction cant be used, so floor velocity must be considered
-# for moving platforms.
-
-# Member variables
-var anim = ""
-var siding_left = false
-var jumping = false
-var stopping_jump = false
-var shooting = false
-
-var WALK_ACCEL = 800.0
-var WALK_DEACCEL = 800.0
-var WALK_MAX_VELOCITY = 200.0
-var AIR_ACCEL = 200.0
-var AIR_DEACCEL = 200.0
-var JUMP_VELOCITY = 460
-var STOP_JUMP_FORCE = 900.0
-
-var MAX_FLOOR_AIRBORNE_TIME = 0.15
-
-var airborne_time = 1e20
-var shoot_time = 1e20
-
-var MAX_SHOOT_POSE_TIME = 0.3
-
-var bullet = preload("res://bullet.tscn")
-
-var floor_h_velocity = 0.0
-var enemy
-
-
-func _integrate_forces(s):
- var lv = s.get_linear_velocity()
- var step = s.get_step()
-
- var new_anim = anim
- var new_siding_left = siding_left
-
- # Get the controls
- var move_left = Input.is_action_pressed("move_left")
- var move_right = Input.is_action_pressed("move_right")
- var jump = Input.is_action_pressed("jump")
- var shoot = Input.is_action_pressed("shoot")
- var spawn = Input.is_action_pressed("spawn")
-
- if spawn:
- var e = enemy.instance()
- var p = get_pos()
- p.y = p.y - 100
- e.set_pos(p)
- get_parent().add_child(e)
-
- # Deapply prev floor velocity
- lv.x -= floor_h_velocity
- floor_h_velocity = 0.0
-
- # Find the floor (a contact with upwards facing collision normal)
- var found_floor = false
- var floor_index = -1
-
- for x in range(s.get_contact_count()):
- var ci = s.get_contact_local_normal(x)
- if (ci.dot(Vector2(0, -1)) > 0.6):
- found_floor = true
- floor_index = x
-
- # A good idea when impementing characters of all kinds,
- # compensates for physics imprecission, as well as human reaction delay.
- if (shoot and not shooting):
- shoot_time = 0
- var bi = bullet.instance()
- var ss
- if (siding_left):
- ss = -1.0
- else:
- ss = 1.0
- var pos = get_pos() + get_node("bullet_shoot").get_pos()*Vector2(ss, 1.0)
-
- bi.set_pos(pos)
- get_parent().add_child(bi)
-
- bi.set_linear_velocity(Vector2(800.0*ss, -80))
- get_node("sprite/smoke").set_emitting(true)
- get_node("sound").play("shoot")
- PS2D.body_add_collision_exception(bi.get_rid(), get_rid()) # Make bullet and this not collide
- else:
- shoot_time += step
-
- if (found_floor):
- airborne_time = 0.0
- else:
- airborne_time += step # Time it spent in the air
-
- var on_floor = airborne_time < MAX_FLOOR_AIRBORNE_TIME
-
- # Process jump
- if (jumping):
- if (lv.y > 0):
- # Set off the jumping flag if going down
- jumping = false
- elif (not jump):
- stopping_jump = true
-
- if (stopping_jump):
- lv.y += STOP_JUMP_FORCE*step
-
- if (on_floor):
- # Process logic when character is on floor
- if (move_left and not move_right):
- if (lv.x > -WALK_MAX_VELOCITY):
- lv.x -= WALK_ACCEL*step
- elif (move_right and not move_left):
- if (lv.x < WALK_MAX_VELOCITY):
- lv.x += WALK_ACCEL*step
- else:
- var xv = abs(lv.x)
- xv -= WALK_DEACCEL*step
- if (xv < 0):
- xv = 0
- lv.x = sign(lv.x)*xv
-
- # Check jump
- if (not jumping and jump):
- lv.y = -JUMP_VELOCITY
- jumping = true
- stopping_jump = false
- get_node("sound").play("jump")
-
- # Check siding
- if (lv.x < 0 and move_left):
- new_siding_left = true
- elif (lv.x > 0 and move_right):
- new_siding_left = false
- if (jumping):
- new_anim = "jumping"
- elif (abs(lv.x) < 0.1):
- if (shoot_time < MAX_SHOOT_POSE_TIME):
- new_anim = "idle_weapon"
- else:
- new_anim = "idle"
- else:
- if (shoot_time < MAX_SHOOT_POSE_TIME):
- new_anim = "run_weapon"
- else:
- new_anim = "run"
- else:
- # Process logic when the character is in the air
- if (move_left and not move_right):
- if (lv.x > -WALK_MAX_VELOCITY):
- lv.x -= AIR_ACCEL*step
- elif (move_right and not move_left):
- if (lv.x < WALK_MAX_VELOCITY):
- lv.x += AIR_ACCEL*step
- else:
- var xv = abs(lv.x)
- xv -= AIR_DEACCEL*step
- if (xv < 0):
- xv = 0
- lv.x = sign(lv.x)*xv
-
- if (lv.y < 0):
- if (shoot_time < MAX_SHOOT_POSE_TIME):
- new_anim = "jumping_weapon"
- else:
- new_anim = "jumping"
- else:
- if (shoot_time < MAX_SHOOT_POSE_TIME):
- new_anim = "falling_weapon"
- else:
- new_anim = "falling"
-
- # Update siding
- if (new_siding_left != siding_left):
- if (new_siding_left):
- get_node("sprite").set_scale(Vector2(-1, 1))
- else:
- get_node("sprite").set_scale(Vector2(1, 1))
-
- siding_left = new_siding_left
-
- # Change animation
- if (new_anim != anim):
- anim = new_anim
- get_node("anim").play(anim)
-
- shooting = shoot
-
- # Apply floor velocity
- if (found_floor):
- floor_h_velocity = s.get_contact_collider_velocity_at_pos(floor_index).x
- lv.x += floor_h_velocity
-
- # Finally, apply gravity and set back the linear velocity
- lv += s.get_total_gravity()*step
- s.set_linear_velocity(lv)
-
-
-func _ready():
- enemy = ResourceLoader.load("res://enemy.tscn")
-
-# if !Globals.has_singleton("Facebook"):
-# return
-# var Facebook = Globals.get_singleton("Facebook")
-# var link = Globals.get("facebook/link")
-# var icon = Globals.get("facebook/icon")
-# var msg = "I just sneezed on your wall! Beat my score and Stop the Running nose!"
-# var title = "I just sneezed on your wall!"
-# Facebook.post("feed", msg, title, link, icon)
diff --git a/demos/2d/platformer/player.tscn b/demos/2d/platformer/player.tscn
deleted file mode 100644
index 77a2e272a6..0000000000
--- a/demos/2d/platformer/player.tscn
+++ /dev/null
@@ -1,330 +0,0 @@
-[gd_scene load_steps=25 format=1]
-
-[ext_resource path="res://player.gd" type="Script" id=1]
-[ext_resource path="res://robot_demo.png" type="Texture" id=2]
-[ext_resource path="res://bullet.png" type="Texture" id=3]
-[ext_resource path="res://sound_coin.wav" type="Sample" id=4]
-[ext_resource path="res://sound_jump.wav" type="Sample" id=5]
-[ext_resource path="res://sound_shoot.wav" type="Sample" id=6]
-[ext_resource path="res://osb_left.png" type="Texture" id=7]
-[ext_resource path="res://osb_right.png" type="Texture" id=8]
-[ext_resource path="res://osb_jump.png" type="Texture" id=9]
-[ext_resource path="res://osb_fire.png" type="Texture" id=10]
-
-[sub_resource type="RayShape2D" id=1]
-
-custom_solver_bias = 0.5
-length = 20.0
-
-[sub_resource type="ConvexPolygonShape2D" id=2]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -19.902, -24.8691, 19.3625, -24.6056, -0.138023, 16.5036 )
-
-[sub_resource type="ColorRamp" id=3]
-
-offsets = FloatArray( 0, 1 )
-colors = ColorArray( 1, 1, 1, 1, 0, 0, 0, 0.0442478 )
-
-[sub_resource type="Animation" id=4]
-
-resource/name = "crouch"
-length = 0.01
-loop = true
-step = 0.25
-tracks/0/type = "value"
-tracks/0/path = NodePath("sprite:frame")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ 22 ] }
-
-[sub_resource type="Animation" id=5]
-
-resource/name = "falling"
-length = 0.01
-loop = true
-step = 0.25
-tracks/0/type = "value"
-tracks/0/path = NodePath("sprite:frame")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ 21 ] }
-
-[sub_resource type="Animation" id=6]
-
-resource/name = "falling_weapon"
-length = 0.5
-loop = true
-step = 0.25
-tracks/0/type = "value"
-tracks/0/path = NodePath("sprite:frame")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ 26 ] }
-
-[sub_resource type="Animation" id=7]
-
-length = 7.0
-loop = true
-step = 0.25
-tracks/0/type = "value"
-tracks/0/path = NodePath("sprite:frame")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":false, "times":FloatArray( 0, 1.25, 1.5, 2, 4.5, 4.75, 5, 5.25 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1, 1, 1 ), "values":[ 16, 17, 18, 16, 19, 20, 19, 16 ] }
-
-[sub_resource type="Animation" id=8]
-
-length = 0.5
-loop = true
-step = 0.25
-tracks/0/type = "value"
-tracks/0/path = NodePath("sprite:frame")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ 25 ] }
-
-[sub_resource type="Animation" id=9]
-
-length = 0.5
-loop = true
-step = 0.25
-tracks/0/type = "value"
-tracks/0/path = NodePath("sprite:frame")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.25, 0.5 ), "transitions":FloatArray( 1, 1, 1 ), "values":[ 23, 24, 23 ] }
-
-[sub_resource type="Animation" id=10]
-
-length = 0.5
-loop = true
-step = 0.25
-tracks/0/type = "value"
-tracks/0/path = NodePath("sprite:frame")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ 26 ] }
-
-[sub_resource type="Animation" id=11]
-
-length = 1.25
-loop = true
-step = 0.25
-tracks/0/type = "value"
-tracks/0/path = NodePath("sprite:frame")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.25, 0.5, 0.75, 1, 1.25 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1 ), "values":[ 0, 1, 2, 3, 4, 0 ] }
-
-[sub_resource type="Animation" id=12]
-
-length = 1.25
-loop = true
-step = 0.25
-tracks/0/type = "value"
-tracks/0/path = NodePath("sprite:frame")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.25, 0.5, 0.75, 1, 1.25 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1 ), "values":[ 5, 6, 7, 8, 9, 5 ] }
-
-[sub_resource type="Animation" id=13]
-
-length = 1.25
-loop = true
-step = 0.25
-tracks/0/type = "value"
-tracks/0/path = NodePath("sprite:frame")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.25, 0.5, 0.75, 1, 1.25 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1 ), "values":[ 10, 11, 12, 13, 14, 5 ] }
-
-[sub_resource type="SampleLibrary" id=14]
-
-samples/jump = { "db":0.0, "pitch":1.0, "sample":ExtResource( 5 ) }
-samples/shoot = { "db":0.0, "pitch":1.0, "sample":ExtResource( 6 ) }
-samples/coin = { "db":0.0, "pitch":1.0, "sample":ExtResource( 4 ) }
-
-[node name="player" type="RigidBody2D"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1.76469, 0.291992, -12.1587 )
-shapes/0/trigger = false
-shapes/1/shape = SubResource( 2 )
-shapes/1/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/1/trigger = false
-collision/layers = 1
-collision/mask = 1
-mode = 2
-mass = 3.0
-friction = 0.0
-bounce = 0.0
-gravity_scale = 1.0
-custom_integrator = true
-continuous_cd = 0
-contacts_reported = 3
-contact_monitor = false
-sleeping = false
-can_sleep = true
-velocity/linear = Vector2( 0, 0 )
-velocity/angular = 0.0
-damp_override/linear = -1.0
-damp_override/angular = -1.0
-script/script = ExtResource( 1 )
-
-[node name="sprite" type="Sprite" parent="."]
-
-texture = ExtResource( 2 )
-vframes = 2
-hframes = 16
-
-[node name="smoke" type="Particles2D" parent="sprite"]
-
-visibility/self_opacity = 0.363636
-visibility/blend_mode = 1
-transform/pos = Vector2( 20.7312, 3.21187 )
-transform/rot = 83.4504
-config/amount = 4
-config/lifetime = 0.3
-config/emit_timeout = 0.3
-config/emitting = false
-config/local_space = false
-config/explosiveness = 0.1
-config/texture = ExtResource( 3 )
-params/direction = 0.0
-params/spread = 180.0
-params/linear_velocity = 20.0
-params/spin_velocity = 1.0
-params/orbit_velocity = 0.0
-params/gravity_direction = 0.0
-params/gravity_strength = 9.8
-params/radial_accel = 0.0
-params/tangential_accel = 0.0
-params/damping = 0.0
-params/initial_angle = 0.0
-params/initial_size = 2.0
-params/final_size = 2.0
-params/hue_variation = 0.0
-params/anim_speed_scale = 1.0
-params/anim_initial_pos = 0.0
-randomness/spin_velocity = 2.0
-color/color_ramp = SubResource( 3 )
-
-[node name="anim" type="AnimationPlayer" parent="."]
-
-playback/process_mode = 1
-playback/default_blend_time = 0.0
-root/root = NodePath("..")
-anims/crouch = SubResource( 4 )
-anims/falling = SubResource( 5 )
-anims/falling_weapon = SubResource( 6 )
-anims/idle = SubResource( 7 )
-anims/idle_weapon = SubResource( 8 )
-anims/jumping = SubResource( 9 )
-anims/jumping_weapon = SubResource( 10 )
-anims/run = SubResource( 11 )
-anims/run_weapon = SubResource( 12 )
-anims/standing_weapon_ready = SubResource( 13 )
-playback/active = true
-playback/speed = 2.0
-blend_times = [ ]
-autoplay = ""
-
-[node name="camera" type="Camera2D" parent="."]
-
-anchor_mode = 1
-rotating = false
-current = true
-zoom = Vector2( 1, 1 )
-limit/left = 0
-limit/top = 0
-limit/right = 10000000
-limit/bottom = 10000000
-drag_margin/h_enabled = true
-drag_margin/v_enabled = true
-smoothing/enable = false
-smoothing/speed = 5.0
-drag_margin/left = 0.2
-drag_margin/top = 0.2
-drag_margin/right = 0.2
-drag_margin/bottom = 0.2
-
-[node name="bullet_shoot" type="Position2D" parent="."]
-
-transform/pos = Vector2( 31.2428, 4.08784 )
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
-
-transform/pos = Vector2( 0.291992, -12.1587 )
-transform/scale = Vector2( 1, 1.76469 )
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = -1
-
-[node name="sound" type="SamplePlayer" parent="."]
-
-config/polyphony = 1
-config/samples = SubResource( 14 )
-default/volume_db = 0.0
-default/pitch_scale = 1.0
-default/pan = 0.0
-default/depth = 0.0
-default/height = 0.0
-default/filter/type = 0
-default/filter/cutoff = 0.0
-default/filter/resonance = 0.0
-default/filter/gain = 0.0
-default/reverb_room = 2
-default/reverb_send = 0.0
-default/chorus_send = 0.0
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="."]
-
-build_mode = 0
-polygon = Vector2Array( -0.138023, 16.5036, -19.902, -24.8691, 19.3625, -24.6056 )
-shape_range = Vector2( -1, -1 )
-trigger = false
-
-[node name="ui" type="CanvasLayer" parent="."]
-
-layer = 0
-offset = Vector2( 0, 0 )
-rotation = 0.0
-scale = Vector2( 1, 1 )
-
-[node name="left" type="TouchScreenButton" parent="ui"]
-
-transform/pos = Vector2( 27.7593, 360.87 )
-transform/scale = Vector2( 1.49157, 1.46265 )
-normal = ExtResource( 7 )
-pressed = null
-bitmask = null
-passby_press = true
-action = "move_left"
-visibility_mode = 1
-
-[node name="right" type="TouchScreenButton" parent="ui"]
-
-transform/pos = Vector2( 121.542, 361.415 )
-transform/scale = Vector2( 1.49157, 1.46265 )
-normal = ExtResource( 8 )
-pressed = null
-bitmask = null
-passby_press = true
-action = "move_right"
-visibility_mode = 1
-
-[node name="jump" type="TouchScreenButton" parent="ui"]
-
-transform/pos = Vector2( 666.224, 359.02 )
-transform/scale = Vector2( 1.49157, 1.46265 )
-normal = ExtResource( 9 )
-pressed = null
-bitmask = null
-passby_press = false
-action = "jump"
-visibility_mode = 1
-
-[node name="fire" type="TouchScreenButton" parent="ui"]
-
-transform/pos = Vector2( 668.073, 262.788 )
-transform/scale = Vector2( 1.49157, 1.46265 )
-normal = ExtResource( 10 )
-pressed = null
-bitmask = null
-passby_press = false
-action = "shoot"
-visibility_mode = 1
-
-
diff --git a/demos/2d/platformer/robot_demo.png b/demos/2d/platformer/robot_demo.png
deleted file mode 100644
index bba8c63874..0000000000
--- a/demos/2d/platformer/robot_demo.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/platformer/scroll_bg_cloud_1.png b/demos/2d/platformer/scroll_bg_cloud_1.png
deleted file mode 100644
index 728d454b5c..0000000000
--- a/demos/2d/platformer/scroll_bg_cloud_1.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/platformer/scroll_bg_cloud_2.png b/demos/2d/platformer/scroll_bg_cloud_2.png
deleted file mode 100644
index 66e0cf2fb5..0000000000
--- a/demos/2d/platformer/scroll_bg_cloud_2.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/platformer/scroll_bg_cloud_3.png b/demos/2d/platformer/scroll_bg_cloud_3.png
deleted file mode 100644
index 3586bb4072..0000000000
--- a/demos/2d/platformer/scroll_bg_cloud_3.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/platformer/scroll_bg_fg_1.png b/demos/2d/platformer/scroll_bg_fg_1.png
deleted file mode 100644
index e64c446f65..0000000000
--- a/demos/2d/platformer/scroll_bg_fg_1.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/platformer/scroll_bg_fg_2.png b/demos/2d/platformer/scroll_bg_fg_2.png
deleted file mode 100644
index ef9601183b..0000000000
--- a/demos/2d/platformer/scroll_bg_fg_2.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/platformer/scroll_bg_sky.png b/demos/2d/platformer/scroll_bg_sky.png
deleted file mode 100644
index 04c196510f..0000000000
--- a/demos/2d/platformer/scroll_bg_sky.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/platformer/seesaw.tscn b/demos/2d/platformer/seesaw.tscn
deleted file mode 100644
index 9af07dc07b..0000000000
--- a/demos/2d/platformer/seesaw.tscn
+++ /dev/null
@@ -1,60 +0,0 @@
-[gd_scene load_steps=4 format=1]
-
-[ext_resource path="res://plank.png" type="Texture" id=1]
-[ext_resource path="res://plankpin.png" type="Texture" id=2]
-
-[sub_resource type="RectangleShape2D" id=1]
-
-custom_solver_bias = 0.0
-extents = Vector2( 128, 8 )
-
-[node name="seesaw" type="Node2D"]
-
-[node name="plank" type="RigidBody2D" parent="."]
-
-input/pickable = false
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-mode = 0
-mass = 5.10204
-friction = 1.0
-bounce = 0.0
-gravity_scale = 1.0
-custom_integrator = false
-continuous_cd = 0
-contacts_reported = 0
-contact_monitor = false
-sleeping = false
-can_sleep = true
-velocity/linear = Vector2( 0, 0 )
-velocity/angular = 0.0
-damp_override/linear = -1.0
-damp_override/angular = -1.0
-
-[node name="sprite" type="Sprite" parent="plank"]
-
-texture = ExtResource( 1 )
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="plank"]
-
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = -1
-
-[node name="pin" type="PinJoint2D" parent="."]
-
-node_a = NodePath("../plank")
-node_b = NodePath("")
-bias/bias = 0.0
-collision/exclude_nodes = true
-softness = 0.0
-
-[node name="Sprite" type="Sprite" parent="."]
-
-transform/pos = Vector2( -0.290825, 20.2425 )
-texture = ExtResource( 2 )
-
-
diff --git a/demos/2d/platformer/sound_coin.wav b/demos/2d/platformer/sound_coin.wav
deleted file mode 100644
index e78579f461..0000000000
--- a/demos/2d/platformer/sound_coin.wav
+++ /dev/null
Binary files differ
diff --git a/demos/2d/platformer/sound_explode.wav b/demos/2d/platformer/sound_explode.wav
deleted file mode 100644
index 229c85399c..0000000000
--- a/demos/2d/platformer/sound_explode.wav
+++ /dev/null
Binary files differ
diff --git a/demos/2d/platformer/sound_hit.wav b/demos/2d/platformer/sound_hit.wav
deleted file mode 100644
index 4fb3b13812..0000000000
--- a/demos/2d/platformer/sound_hit.wav
+++ /dev/null
Binary files differ
diff --git a/demos/2d/platformer/sound_jump.wav b/demos/2d/platformer/sound_jump.wav
deleted file mode 100644
index e9942e65e6..0000000000
--- a/demos/2d/platformer/sound_jump.wav
+++ /dev/null
Binary files differ
diff --git a/demos/2d/platformer/sound_shoot.wav b/demos/2d/platformer/sound_shoot.wav
deleted file mode 100644
index ad74f328cb..0000000000
--- a/demos/2d/platformer/sound_shoot.wav
+++ /dev/null
Binary files differ
diff --git a/demos/2d/platformer/stage.tscn b/demos/2d/platformer/stage.tscn
deleted file mode 100644
index 9709efefa9..0000000000
--- a/demos/2d/platformer/stage.tscn
+++ /dev/null
@@ -1,352 +0,0 @@
-[gd_scene load_steps=10 format=1]
-
-[ext_resource path="res://tileset.tres" type="TileSet" id=1]
-[ext_resource path="res://coin.tscn" type="PackedScene" id=2]
-[ext_resource path="res://moving_platform.tscn" type="PackedScene" id=3]
-[ext_resource path="res://seesaw.tscn" type="PackedScene" id=4]
-[ext_resource path="res://one_way_platform.tscn" type="PackedScene" id=5]
-[ext_resource path="res://player.tscn" type="PackedScene" id=6]
-[ext_resource path="res://music.ogg" type="AudioStream" id=7]
-[ext_resource path="res://enemy.tscn" type="PackedScene" id=8]
-[ext_resource path="res://parallax_bg.tscn" type="PackedScene" id=9]
-
-[node name="stage" type="Node"]
-
-[node name="tile_map" type="TileMap" parent="."]
-
-mode = 0
-tile_set = ExtResource( 1 )
-cell/size = Vector2( 64, 64 )
-cell/quadrant_size = 8
-cell/custom_transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-cell/half_offset = 2
-cell/tile_origin = 0
-cell/y_sort = false
-collision/use_kinematic = false
-collision/friction = 1.0
-collision/bounce = 0.0
-collision/layers = 1
-collision/mask = 1
-occluder/light_mask = 1
-tile_data = IntArray( 0, 2, 70, 536870914, 71, 10, 72, 10, 73, 10, 74, 10, 75, 10, 76, 10, 77, 10, 78, 10, 65536, 2, 65606, 536870914, 65607, 10, 65608, 10, 65609, 10, 65610, 10, 65611, 10, 65612, 10, 65613, 10, 65614, 10, 131072, 2, 131142, 536870914, 131143, 10, 131144, 10, 131145, 10, 131146, 10, 131147, 10, 131148, 10, 131149, 10, 131150, 10, 196608, 2, 196626, 9, 196678, 536870914, 196679, 10, 196680, 10, 196681, 10, 196682, 10, 196683, 10, 196684, 10, 196685, 10, 196686, 10, 262144, 2, 262162, 8, 262214, 536870914, 262215, 10, 262216, 10, 262217, 10, 262218, 10, 262219, 10, 262220, 10, 262221, 10, 262222, 10, 327680, 2, 327697, 536870921, 327698, 7, 327733, 9, 327750, 536870914, 327751, 10, 327752, 10, 327753, 10, 327754, 10, 327755, 10, 327756, 10, 327757, 10, 327758, 10, 393216, 2, 393233, 536870920, 393234, 7, 393257, 9, 393269, 7, 393286, 536870914, 393287, 10, 393288, 10, 393289, 10, 393290, 10, 393291, 10, 393292, 10, 393293, 10, 393294, 10, 458752, 2, 458769, 7, 458770, 8, 458790, 9, 458793, 8, 458805, 8, 458822, 536870914, 458823, 10, 458824, 10, 458825, 10, 458826, 10, 458827, 10, 458828, 10, 458829, 10, 458830, 10, 524288, 4, 524289, 1, 524304, 536870913, 524305, 536870918, 524306, 6, 524307, 5, 524308, 1, 524326, 8, 524329, 7, 524341, 7, 524358, 536870914, 524359, 10, 524360, 10, 524361, 10, 524362, 10, 524363, 10, 524364, 10, 524365, 10, 524366, 10, 589824, 10, 589825, 13, 589840, 536870914, 589841, 10, 589842, 10, 589843, 10, 589844, 2, 589862, 7, 589865, 7, 589876, 536870913, 589877, 6, 589878, 1, 589894, 536870914, 589895, 10, 589896, 10, 589897, 10, 589898, 10, 589899, 10, 589900, 10, 589901, 10, 589902, 10, 655360, 2, 655376, 536870914, 655377, 10, 655378, 10, 655379, 10, 655380, 2, 655398, 7, 655401, 8, 655412, 536870925, 655413, 11, 655414, 13, 655430, 536870914, 655431, 10, 655432, 10, 655433, 10, 655434, 10, 655435, 10, 655436, 10, 655437, 10, 655438, 10, 720896, 2, 720912, 536870914, 720913, 10, 720914, 10, 720915, 10, 720916, 2, 720934, 8, 720937, 7, 720958, 536870913, 720959, 5, 720960, 536870917, 720961, 5, 720962, 5, 720963, 536870917, 720964, 5, 720965, 0, 720966, 536870916, 720967, 10, 720968, 10, 720969, 10, 720970, 10, 720971, 10, 720972, 10, 720973, 10, 720974, 10, 786432, 2, 786437, 9, 786448, 536870914, 786449, 10, 786450, 10, 786451, 10, 786452, 2, 786464, 536870913, 786465, 1, 786470, 7, 786473, 7, 786474, 536870924, 786475, 1, 786494, 536870914, 786495, 10, 786496, 10, 786497, 10, 786498, 10, 786499, 10, 786500, 10, 786501, 10, 786502, 10, 786503, 10, 786504, 10, 786505, 10, 786506, 10, 786507, 10, 786508, 10, 786509, 10, 851968, 2, 851973, 7, 851984, 536870914, 851985, 10, 851986, 10, 851987, 10, 851988, 2, 851996, 536870913, 851997, 1, 852000, 536870914, 852001, 3, 852006, 7, 852009, 536870913, 852011, 2, 852030, 536870914, 852031, 10, 852032, 10, 852033, 10, 852034, 10, 852035, 10, 852036, 10, 852037, 10, 852038, 10, 852039, 10, 852040, 10, 852041, 10, 852042, 10, 852043, 10, 852044, 10, 852045, 10, 917504, 2, 917506, 9, 917509, 7, 917512, 536870921, 917520, 536870925, 917521, 11, 917522, 11, 917523, 11, 917524, 13, 917532, 536870925, 917533, 13, 917536, 536870914, 917537, 4, 917538, 1, 917540, 536870913, 917541, 0, 917542, 1, 917545, 536870914, 917546, 10, 917547, 4, 917548, 1, 917566, 536870914, 917567, 10, 917568, 10, 917569, 10, 917570, 10, 917571, 10, 917572, 10, 917573, 10, 917574, 10, 917575, 10, 917576, 10, 917577, 10, 917578, 10, 917579, 10, 917580, 10, 917581, 10, 983040, 2, 983042, 7, 983045, 7, 983048, 536870920, 983050, 536870913, 983051, 0, 983052, 1, 983064, 536870913, 983065, 1, 983072, 536870914, 983073, 10, 983074, 4, 983075, 0, 983076, 536870916, 983077, 10, 983078, 4, 983079, 536870912, 983080, 536870912, 983081, 536870916, 983082, 10, 983083, 10, 983084, 2, 983095, 9, 983102, 536870914, 983103, 10, 983104, 10, 983105, 10, 983106, 10, 983107, 10, 983108, 10, 983109, 10, 983110, 10, 983111, 10, 983112, 10, 983113, 10, 983114, 10, 983115, 10, 983116, 10, 983117, 10, 1048576, 2, 1048578, 8, 1048581, 8, 1048584, 536870919, 1048586, 536870914, 1048587, 536870922, 1048588, 2, 1048600, 536870925, 1048601, 13, 1048604, 9, 1048608, 536870925, 1048609, 536870923, 1048610, 536870923, 1048611, 536870923, 1048612, 10, 1048613, 10, 1048614, 10, 1048615, 10, 1048616, 10, 1048617, 10, 1048618, 10, 1048619, 10, 1048620, 4, 1048621, 1, 1048630, 536870921, 1048631, 8, 1048638, 536870914, 1048639, 10, 1048640, 10, 1048641, 10, 1048642, 10, 1048643, 10, 1048644, 10, 1048645, 10, 1048646, 10, 1048647, 10, 1048648, 10, 1048649, 10, 1048650, 10, 1048651, 10, 1048652, 10, 1048653, 10, 1114112, 4, 1114113, 0, 1114114, 6, 1114115, 0, 1114116, 0, 1114117, 6, 1114118, 1, 1114120, 536870920, 1114122, 536870925, 1114123, 11, 1114124, 13, 1114128, 536870913, 1114129, 5, 1114130, 536870917, 1114131, 5, 1114132, 0, 1114133, 1, 1114140, 7, 1114141, 536870921, 1114148, 536870914, 1114149, 10, 1114150, 10, 1114151, 10, 1114152, 10, 1114153, 10, 1114154, 10, 1114155, 10, 1114156, 10, 1114157, 2, 1114166, 536870920, 1114167, 8, 1114174, 536870914, 1114175, 10, 1114176, 10, 1114177, 10, 1114178, 10, 1114179, 10, 1114180, 10, 1114181, 10, 1114182, 10, 1114183, 10, 1114184, 10, 1114185, 10, 1114186, 10, 1114187, 10, 1114188, 10, 1179648, 10, 1179649, 10, 1179650, 10, 1179651, 10, 1179652, 10, 1179653, 10, 1179654, 2, 1179656, 536870919, 1179664, 536870915, 1179665, 10, 1179666, 10, 1179667, 10, 1179668, 10, 1179669, 4, 1179670, 12, 1179675, 9, 1179676, 8, 1179677, 8, 1179684, 536870914, 1179685, 10, 1179686, 10, 1179687, 10, 1179688, 10, 1179689, 10, 1179690, 10, 1179691, 10, 1179692, 10, 1179693, 4, 1179694, 1, 1179701, 9, 1179702, 536870919, 1179703, 7, 1179710, 536870914, 1179711, 10, 1179712, 10, 1179713, 10, 1179714, 10, 1179715, 10, 1179716, 10, 1179717, 10, 1179718, 10, 1179719, 10, 1179720, 10, 1179721, 10, 1179722, 10, 1245184, 10, 1245185, 10, 1245186, 10, 1245187, 10, 1245188, 10, 1245189, 10, 1245190, 2, 1245192, 536870919, 1245199, 536870913, 1245200, 536870916, 1245201, 10, 1245202, 10, 1245203, 10, 1245204, 10, 1245205, 10, 1245207, 1, 1245211, 7, 1245212, 7, 1245213, 536870920, 1245220, 536870914, 1245221, 10, 1245222, 10, 1245223, 10, 1245224, 10, 1245225, 10, 1245226, 10, 1245227, 10, 1245228, 10, 1245229, 10, 1245230, 2, 1245237, 8, 1245238, 536870919, 1245239, 8, 1245240, 536870921, 1245246, 536870914, 1245247, 10, 1245248, 10, 1245249, 10, 1245250, 10, 1245251, 10, 1245252, 10, 1245253, 10, 1245254, 10, 1245255, 10, 1245256, 10, 1245257, 10, 1245258, 10, 1310720, 10, 1310721, 10, 1310722, 10, 1310723, 10, 1310724, 10, 1310725, 10, 1310726, 2, 1310728, 536870920, 1310730, 536870913, 1310731, 1, 1310734, 536870913, 1310735, 536870916, 1310736, 10, 1310737, 10, 1310738, 10, 1310739, 10, 1310740, 10, 1310741, 10, 1310742, 10, 1310743, 4, 1310744, 1, 1310747, 8, 1310748, 7, 1310749, 536870919, 1310756, 536870914, 1310757, 10, 1310758, 10, 1310759, 10, 1310760, 10, 1310761, 10, 1310762, 10, 1310763, 10, 1310764, 10, 1310765, 10, 1310766, 4, 1310767, 5, 1310768, 12, 1310773, 7, 1310774, 536870919, 1310775, 7, 1310776, 536870919, 1310782, 536870914, 1310783, 10, 1310784, 10, 1310785, 10, 1310786, 10, 1310787, 10, 1310788, 10, 1310789, 10, 1310790, 10, 1310791, 10, 1310792, 10, 1310793, 10, 1376256, 10, 1376257, 10, 1376258, 10, 1376259, 10, 1376260, 10, 1376261, 10, 1376262, 4, 1376263, 0, 1376264, 0, 1376265, 0, 1376266, 536870916, 1376267, 4, 1376268, 0, 1376269, 0, 1376270, 536870916, 1376271, 10, 1376272, 10, 1376273, 10, 1376274, 10, 1376275, 10, 1376276, 10, 1376277, 10, 1376278, 10, 1376279, 10, 1376280, 4, 1376281, 12, 1376283, 8, 1376284, 8, 1376285, 536870920, 1376287, 536870924, 1376288, 0, 1376289, 5, 1376290, 536870917, 1376291, 0, 1376292, 536870916, 1376293, 10, 1376294, 10, 1376295, 10, 1376296, 10, 1376297, 10, 1376298, 10, 1376299, 10, 1376300, 10, 1376301, 10, 1376302, 10, 1376303, 10, 1376305, 12, 1376309, 7, 1376310, 536870920, 1376311, 7, 1376312, 536870920, 1376318, 536870914, 1376319, 10, 1376320, 10, 1376321, 10, 1376322, 10, 1376323, 10, 1376324, 10, 1376325, 10, 1376326, 10, 1376327, 10, 1376328, 10, 1441792, 10, 1441793, 10, 1441794, 10, 1441795, 10, 1441796, 10, 1441797, 10, 1441798, 10, 1441799, 10, 1441800, 10, 1441801, 10, 1441802, 10, 1441803, 10, 1441804, 10, 1441805, 10, 1441806, 10, 1441807, 10, 1441808, 10, 1441809, 10, 1441810, 10, 1441811, 10, 1441812, 10, 1441813, 10, 1441814, 10, 1441815, 10, 1441816, 10, 1441818, 0, 1441819, 6, 1441820, 6, 1441821, 536870918, 1441822, 5, 1441824, 10, 1441825, 10, 1441826, 10, 1441827, 10, 1441828, 10, 1441829, 10, 1441830, 10, 1441831, 10, 1441832, 10, 1441833, 10, 1441834, 10, 1441835, 10, 1441836, 10, 1441837, 10, 1441838, 10, 1441839, 10, 1441840, 10, 1441842, 0, 1441843, 0, 1441844, 0, 1441845, 6, 1441846, 536870918, 1441847, 6, 1441848, 536870918, 1441849, 0, 1441850, 5, 1441851, 536870917, 1441852, 5, 1441853, 0, 1441854, 536870916, 1441855, 10, 1441856, 10, 1441857, 10, 1441858, 10, 1441859, 10, 1441860, 10, 1441861, 10, 1441862, 10, 1441863, 10, 1507328, 10, 1507329, 10, 1507330, 10, 1507331, 10, 1507332, 10, 1507333, 10, 1507334, 10, 1507335, 10, 1507336, 10, 1507337, 10, 1507338, 10, 1507339, 10, 1507340, 10, 1507341, 10, 1507342, 10, 1507343, 10, 1507344, 10, 1507345, 10, 1507346, 10, 1507347, 10, 1507348, 10, 1507349, 10, 1507350, 10, 1507351, 10, 1507352, 10, 1507353, 10, 1507354, 10, 1507355, 10, 1507356, 10, 1507357, 10, 1507358, 10, 1507359, 10, 1507360, 10, 1507361, 10, 1507362, 10, 1507363, 10, 1507364, 10, 1507365, 10, 1507366, 10, 1507367, 10, 1507368, 10, 1507369, 10, 1507370, 10, 1507371, 10, 1507372, 10, 1507373, 10, 1507374, 10, 1507375, 10, 1507376, 10, 1507377, 10, 1507378, 10, 1507379, 10, 1507380, 10, 1507381, 10, 1507382, 10, 1507383, 10, 1507384, 10, 1507385, 10, 1507386, 10, 1507387, 10, 1507388, 10, 1507389, 10, 1507390, 10, 1507391, 10, 1507392, 10, 1507393, 10, 1507394, 10, 1507395, 10, 1507396, 10, 1507397, 10, 1507398, 10, 1507399, 10, 1572864, 10, 1572865, 10, 1572866, 10, 1572867, 10, 1572868, 10, 1572869, 10, 1572870, 10, 1572871, 10, 1572872, 10, 1572873, 10, 1572874, 10, 1572875, 10, 1572876, 10, 1572877, 10, 1572878, 10, 1572879, 10, 1572880, 10, 1572881, 10, 1572882, 10, 1572883, 10, 1572884, 10, 1572885, 10, 1572886, 10, 1572887, 10, 1572888, 10, 1572889, 10, 1572890, 10, 1572891, 10, 1572892, 10, 1572893, 10, 1572894, 10, 1572895, 10, 1572896, 10, 1572897, 10, 1572898, 10, 1572899, 10, 1572900, 10, 1572901, 10, 1572902, 10, 1572903, 10, 1572904, 10, 1572905, 10, 1572906, 10, 1572907, 10, 1572908, 10, 1572909, 10, 1572910, 10, 1572911, 10, 1572912, 10, 1572913, 10, 1572914, 10, 1572915, 10, 1572916, 10, 1572917, 10, 1572918, 10, 1572919, 10, 1572920, 10, 1572921, 10, 1572922, 10, 1572923, 10, 1572924, 10, 1572925, 10, 1572926, 10, 1572927, 10, 1572928, 10, 1572929, 10, 1572930, 10, 1572931, 10, 1572932, 10, 1572933, 10, 1572934, 10, 1572935, 10, 1638400, 10, 1638401, 10, 1638402, 10, 1638403, 10, 1638404, 10, 1638405, 10, 1638406, 10, 1638407, 10, 1638408, 10, 1638409, 10, 1638410, 10, 1638411, 10, 1638412, 10, 1638413, 10, 1638414, 10, 1638415, 10, 1638416, 10, 1638417, 10, 1638418, 10, 1638419, 10, 1638420, 10, 1638421, 10, 1638422, 10, 1638423, 10, 1638424, 10, 1638425, 10, 1638426, 10, 1638427, 10, 1638428, 10, 1638429, 10, 1638430, 10, 1638431, 10, 1638432, 10, 1638433, 10, 1638434, 10, 1638435, 10, 1638436, 10, 1638437, 10, 1638438, 10, 1638439, 10, 1638440, 10, 1638441, 10, 1638442, 10, 1638443, 10, 1638444, 10, 1638445, 10, 1638446, 10, 1638447, 10, 1638448, 10, 1638449, 10, 1638450, 10, 1638451, 10, 1638452, 10, 1638453, 10, 1638454, 10, 1638455, 10, 1638456, 10, 1638457, 10, 1638458, 10, 1638459, 10, 1638460, 10, 1638461, 10, 1638462, 10, 1638463, 10, 1638464, 10, 1638465, 10, 1638466, 10, 1638467, 10, 1638468, 10, 1638469, 10, 1638470, 10, 1638471, 10, 1703952, 10, 1703953, 10, 1703954, 10, 1703955, 10, 1703956, 10, 1703957, 10, 1703958, 10, 1703959, 10, 1703960, 10, 1703961, 10, 1703962, 10, 1703963, 10, 1703964, 10, 1703965, 10, 1703966, 10, 1703967, 10, 1703968, 10, 1703969, 10, 1703970, 10, 1703971, 10, 1703972, 10, 1703973, 10, 1703974, 10, 1703975, 10, 1703976, 10, 1703977, 10, 1703978, 10, 1703979, 10, 1703980, 10, 1703981, 10, 1703982, 10, 1703983, 10, 1703984, 10, 1703985, 10, 1703986, 10, 1703987, 10, 1703988, 10, 1703989, 10, 1703990, 10, 1703991, 10, 1703992, 10, 1703993, 10, 1703994, 10, 1703995, 10, 1703996, 10, 1703997, 10, 1703998, 10, 1703999, 10, 1704000, 10, 1704001, 10, 1704002, 10, 1704003, 10, 1704004, 10, 1704005, 10, 1704006, 10, 1704007, 10, 1769488, 10, 1769489, 10, 1769490, 10, 1769491, 10, 1769492, 10, 1769493, 10, 1769494, 10, 1769495, 10, 1769496, 10, 1769497, 10, 1769498, 10, 1769499, 10, 1769500, 10, 1769501, 10, 1769502, 10, 1769503, 10, 1769504, 10, 1769505, 10, 1769506, 10, 1769507, 10, 1769508, 10, 1769509, 10, 1769510, 10, 1769511, 10, 1769512, 10, 1769513, 10, 1769514, 10, 1769515, 10, 1769516, 10, 1769517, 10, 1769518, 10, 1769519, 10, 1769520, 10, 1769521, 10, 1769522, 10, 1769523, 10, 1769524, 10, 1769525, 10, 1769526, 10, 1769527, 10, 1769528, 10, 1769529, 10, 1769530, 10, 1769531, 10, 1769532, 10, 1769533, 10, 1769534, 10, 1769535, 10, 1769536, 10, 1769537, 10, 1769538, 10, 1769539, 10, 1769540, 10, 1769541, 10 )
-__meta__ = { "_edit_lock_":true }
-
-[node name="coins" type="Node" parent="."]
-
-[node name="coin" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 672, 1179 )
-linear_damp = 0.1
-
-[node name="coin 2" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 704, 1179 )
-linear_damp = 0.1
-
-[node name="coin 3" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 736, 1179 )
-linear_damp = 0.1
-
-[node name="coin 4" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 1120, 992 )
-linear_damp = 0.1
-
-[node name="coin 5" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 1152, 992 )
-linear_damp = 0.1
-
-[node name="coin 6" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 1184, 992 )
-linear_damp = 0.1
-
-[node name="coin 7" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 1216, 992 )
-linear_damp = 0.1
-
-[node name="coin 8" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 1248, 992 )
-linear_damp = 0.1
-
-[node name="coin 9" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 1568, 864 )
-linear_damp = 0.1
-
-[node name="coin 10" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 1632, 864 )
-linear_damp = 0.1
-
-[node name="coin 11" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 1824, 768 )
-linear_damp = 0.1
-
-[node name="coin 12" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 1888, 768 )
-linear_damp = 0.1
-
-[node name="coin 13" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 2080, 672 )
-linear_damp = 0.1
-
-[node name="coin 14" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 2144, 672 )
-linear_damp = 0.1
-
-[node name="coin 15" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 1792, 1248 )
-linear_damp = 0.1
-
-[node name="coin 16" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 1856, 1248 )
-linear_damp = 0.1
-
-[node name="coin 17" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 1920, 1248 )
-linear_damp = 0.1
-
-[node name="coin 18" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 1920, 1184 )
-linear_damp = 0.1
-
-[node name="coin 19" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 1856, 1184 )
-linear_damp = 0.1
-
-[node name="coin 20" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 1792, 1184 )
-linear_damp = 0.1
-
-[node name="coin 21" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 98.8868, 488.515 )
-linear_damp = 0.1
-
-[node name="coin 22" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 89.5989, 481.217 )
-linear_damp = 0.1
-
-[node name="coin 23" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 108.175, 481.217 )
-linear_damp = 0.1
-
-[node name="coin 24" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 116.136, 469.939 )
-linear_damp = 0.1
-
-[node name="coin 25" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 117.463, 457.997 )
-linear_damp = 0.1
-
-[node name="coin 26" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 106.184, 449.373 )
-linear_damp = 0.1
-
-[node name="coin 27" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 98.2234, 458.661 )
-linear_damp = 0.1
-
-[node name="coin 28" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 88.272, 448.71 )
-linear_damp = 0.1
-
-[node name="coin 29" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 79.6476, 457.334 )
-linear_damp = 0.1
-
-[node name="coin 30" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 82.9647, 468.612 )
-linear_damp = 0.1
-
-[node name="coin 31" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 3357.42, 465.288 )
-linear_damp = 0.1
-
-[node name="coin 31 2" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 3421.42, 465.288 )
-linear_damp = 0.1
-
-[node name="coin 31 3" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 3485.42, 465.288 )
-linear_damp = 0.1
-
-[node name="coin 31 4" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 3485.42, 401.288 )
-linear_damp = 0.1
-
-[node name="coin 31 5" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 3421.42, 401.288 )
-linear_damp = 0.1
-
-[node name="coin 31 6" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 3357.42, 401.288 )
-linear_damp = 0.1
-
-[node name="coin 32" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 4172.75, 605.058 )
-linear_damp = 0.1
-
-[node name="coin 31 7" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 4236.75, 605.058 )
-linear_damp = 0.1
-
-[node name="coin 31 7 2" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 4300.75, 605.058 )
-linear_damp = 0.1
-
-[node name="coin 31 7 3" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 4300.75, 541.058 )
-linear_damp = 0.1
-
-[node name="coin 31 7 4" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 4236.75, 541.058 )
-linear_damp = 0.1
-
-[node name="coin 31 7 5" parent="coins" instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 4172.75, 541.058 )
-linear_damp = 0.1
-
-[node name="props" type="Node" parent="."]
-
-[node name="moving_platform" parent="props" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 1451.86, 742.969 )
-motion = Vector2( 0, 140 )
-cycle = 5.0
-
-[node name="moving_platform 2" parent="props" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 624.824, 545.544 )
-motion = Vector2( 300, 0 )
-cycle = 10.0
-
-[node name="moving_platform 3" parent="props" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 3419.86, 739.662 )
-motion = Vector2( 450, 0 )
-cycle = 10.0
-
-[node name="seesaw" parent="props" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 2402.79, 849.52 )
-
-[node name="one_way_platform" parent="props" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 927.698, 1120.81 )
-
-[node name="player" parent="." instance=ExtResource( 6 )]
-
-transform/pos = Vector2( 251.684, 1045.6 )
-
-[node name="music" type="StreamPlayer" parent="."]
-
-stream/stream = ExtResource( 7 )
-stream/play = false
-stream/loop = true
-stream/volume_db = 2.0
-stream/autoplay = true
-stream/paused = false
-stream/loop_restart_time = 0.0
-stream/buffering_ms = 500
-
-[node name="enemies" type="Node" parent="."]
-
-[node name="enemy 5" parent="enemies" instance=ExtResource( 8 )]
-
-transform/pos = Vector2( 834.664, 1309.6 )
-
-[node name="enemy 6" parent="enemies" instance=ExtResource( 8 )]
-
-transform/pos = Vector2( 707.665, 1225.05 )
-
-[node name="enemy 7" parent="enemies" instance=ExtResource( 8 )]
-
-transform/pos = Vector2( 1125.21, 1053.06 )
-
-[node name="enemy 8" parent="enemies" instance=ExtResource( 8 )]
-
-transform/pos = Vector2( 1292.11, 1059.24 )
-
-[node name="enemy 9" parent="enemies" instance=ExtResource( 8 )]
-
-transform/pos = Vector2( 1607.38, 923.239 )
-
-[node name="enemy 10" parent="enemies" instance=ExtResource( 8 )]
-
-transform/pos = Vector2( 2586.9, 939.059 )
-
-[node name="enemy 11" parent="enemies" instance=ExtResource( 8 )]
-
-transform/pos = Vector2( 1457.6, 688.741 )
-
-[node name="enemy 12" parent="enemies" instance=ExtResource( 8 )]
-
-transform/pos = Vector2( 1193.63, 460.381 )
-
-[node name="enemy 13" parent="enemies" instance=ExtResource( 8 )]
-
-transform/pos = Vector2( 3429.73, 540.865 )
-
-[node name="enemy 14" parent="enemies" instance=ExtResource( 8 )]
-
-transform/pos = Vector2( 3546.2, 1356.19 )
-
-[node name="enemy 15" parent="enemies" instance=ExtResource( 8 )]
-
-transform/pos = Vector2( 2406.63, 815.115 )
-
-[node name="parallax_bg" parent="." instance=ExtResource( 9 )]
-
-[node name="Label" type="Label" parent="."]
-
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-margin/left = 12.0
-margin/top = -202.0
-margin/right = 358.0
-margin/bottom = -10.0
-text = "This is a simple demo on how to make a platformer game with Godot.\"This version uses physics and the 2D physics engine for motion and collision.\"\"The demo also shows the benefits of using the scene system, where coins,\"enemies and the player are edited separatedly and instanced in the stage.\"\"To edit the base tiles for the tileset, open the tileset_edit.tscn file and follow \"instructions.\""
-autowrap = true
-percent_visible = 1.0
-lines_skipped = 0
-max_lines_visible = -1
-
-
diff --git a/demos/2d/platformer/tiles_demo.png b/demos/2d/platformer/tiles_demo.png
deleted file mode 100644
index bc738e6d38..0000000000
--- a/demos/2d/platformer/tiles_demo.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/platformer/tiles_demo.png.flags b/demos/2d/platformer/tiles_demo.png.flags
deleted file mode 100644
index efb2b8ce5f..0000000000
--- a/demos/2d/platformer/tiles_demo.png.flags
+++ /dev/null
@@ -1 +0,0 @@
-filter=false
diff --git a/demos/2d/platformer/tileset.tres b/demos/2d/platformer/tileset.tres
deleted file mode 100644
index 17b7dd3b4d..0000000000
--- a/demos/2d/platformer/tileset.tres
+++ /dev/null
@@ -1,195 +0,0 @@
-[gd_resource type="TileSet" load_steps=14 format=1]
-
-[ext_resource path="res://tiles_demo.png" type="Texture" id=1]
-
-[sub_resource type="ConvexPolygonShape2D" id=1]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -32, -24, 32, -24, 32, 32, -32, 32 )
-
-[sub_resource type="ConvexPolygonShape2D" id=2]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -32, 32, -32, -24, 24, -24, 24, 32 )
-
-[sub_resource type="ConvexPolygonShape2D" id=3]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -32, -32, 32, -32, 32, 32, -32, 32 )
-
-[sub_resource type="ConvexPolygonShape2D" id=4]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -32, -56, 32, 8, 32, 64, -32, 64 )
-
-[sub_resource type="ConvexPolygonShape2D" id=5]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -32, 32, -32, -32, 24, -32, 24, 32 )
-
-[sub_resource type="ConvexPolygonShape2D" id=6]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -32, -24, 32, -24, 32, 24, -32, 24 )
-
-[sub_resource type="ConvexPolygonShape2D" id=7]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -32, -24, 24, -24, 24, 24, -32, 24 )
-
-[sub_resource type="ConvexPolygonShape2D" id=8]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -32, 32, -32, -32, 24, -32, 24, 32 )
-
-[sub_resource type="ConvexPolygonShape2D" id=9]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -64, 32, -64, -32, -8, -32, -8, 32 )
-
-[sub_resource type="ConvexPolygonShape2D" id=10]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -32, 32, -32, -32, 24, -32, 32, -24, 32, 32 )
-
-[sub_resource type="ConvexPolygonShape2D" id=11]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -32, 32, -32, -24, 32, -24, 32, 32 )
-
-[sub_resource type="ConvexPolygonShape2D" id=12]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -32, 32, -32, -24, 32, -24, 32, 32 )
-
-[resource]
-
-0/name = "floor"
-0/texture = ExtResource( 1 )
-0/tex_offset = Vector2( 0, 0 )
-0/region = Rect2( 0, 0, 64, 64 )
-0/occluder_offset = Vector2( 32, 32 )
-0/navigation_offset = Vector2( 32, 32 )
-0/shape_offset = Vector2( 32, 32 )
-0/shapes = [ SubResource( 1 ) ]
-1/name = "edge"
-1/texture = ExtResource( 1 )
-1/tex_offset = Vector2( 0, 0 )
-1/region = Rect2( 64, 0, 64, 64 )
-1/occluder_offset = Vector2( 32, 32 )
-1/navigation_offset = Vector2( 32, 32 )
-1/shape_offset = Vector2( 32, 32 )
-1/shapes = [ SubResource( 2 ) ]
-2/name = "wall"
-2/texture = ExtResource( 1 )
-2/tex_offset = Vector2( 0, 0 )
-2/region = Rect2( 64, 64, 64, 64 )
-2/occluder_offset = Vector2( 32, 32 )
-2/navigation_offset = Vector2( 32, 32 )
-2/shape_offset = Vector2( 32, 32 )
-2/shapes = [ SubResource( 8 ) ]
-3/name = "wall_deco"
-3/texture = ExtResource( 1 )
-3/tex_offset = Vector2( 0, 0 )
-3/region = Rect2( 320, 128, 128, 64 )
-3/occluder_offset = Vector2( 64, 32 )
-3/navigation_offset = Vector2( 64, 32 )
-3/shape_offset = Vector2( 64, 32 )
-3/shapes = [ SubResource( 9 ) ]
-4/name = "corner"
-4/texture = ExtResource( 1 )
-4/tex_offset = Vector2( 0, 0 )
-4/region = Rect2( 64, 128, 64, 64 )
-4/occluder_offset = Vector2( 32, 32 )
-4/navigation_offset = Vector2( 32, 32 )
-4/shape_offset = Vector2( 32, 32 )
-4/shapes = [ SubResource( 10 ) ]
-5/name = "flowers"
-5/texture = ExtResource( 1 )
-5/tex_offset = Vector2( 0, 0 )
-5/region = Rect2( 192, 192, 64, 64 )
-5/occluder_offset = Vector2( 32, 32 )
-5/navigation_offset = Vector2( 32, 32 )
-5/shape_offset = Vector2( 32, 32 )
-5/shapes = [ SubResource( 11 ) ]
-6/name = "tree_base"
-6/texture = ExtResource( 1 )
-6/tex_offset = Vector2( 0, 0 )
-6/region = Rect2( 256, 192, 64, 64 )
-6/occluder_offset = Vector2( 32, 32 )
-6/navigation_offset = Vector2( 32, 32 )
-6/shape_offset = Vector2( 32, 32 )
-6/shapes = [ SubResource( 12 ) ]
-7/name = "tree_mid"
-7/texture = ExtResource( 1 )
-7/tex_offset = Vector2( 0, 0 )
-7/region = Rect2( 256, 128, 64, 64 )
-7/occluder_offset = Vector2( 32, 32 )
-7/navigation_offset = Vector2( 32, 32 )
-7/shape_offset = Vector2( 0, 0 )
-7/shapes = [ ]
-8/name = "tree_mid 2"
-8/texture = ExtResource( 1 )
-8/tex_offset = Vector2( 0, 0 )
-8/region = Rect2( 256, 64, 64, 64 )
-8/occluder_offset = Vector2( 32, 32 )
-8/navigation_offset = Vector2( 32, 32 )
-8/shape_offset = Vector2( 0, 0 )
-8/shapes = [ ]
-9/name = "tree_top"
-9/texture = ExtResource( 1 )
-9/tex_offset = Vector2( 0, 0 )
-9/region = Rect2( 256, 0, 64, 64 )
-9/occluder_offset = Vector2( 32, 32 )
-9/navigation_offset = Vector2( 32, 32 )
-9/shape_offset = Vector2( 0, 0 )
-9/shapes = [ ]
-10/name = "solid"
-10/texture = ExtResource( 1 )
-10/tex_offset = Vector2( 0, 0 )
-10/region = Rect2( 0, 64, 64, 64 )
-10/occluder_offset = Vector2( 32, 32 )
-10/navigation_offset = Vector2( 32, 32 )
-10/shape_offset = Vector2( 0, 0 )
-10/shapes = [ ]
-11/name = "ceiling"
-11/texture = ExtResource( 1 )
-11/tex_offset = Vector2( 0, 0 )
-11/region = Rect2( 384, 64, 64, 64 )
-11/occluder_offset = Vector2( 32, 32 )
-11/navigation_offset = Vector2( 32, 32 )
-11/shape_offset = Vector2( 32, 32 )
-11/shapes = [ SubResource( 3 ) ]
-12/name = "ramp"
-12/texture = ExtResource( 1 )
-12/tex_offset = Vector2( 0, 0 )
-12/region = Rect2( 128, 128, 64, 128 )
-12/occluder_offset = Vector2( 32, 64 )
-12/navigation_offset = Vector2( 32, 64 )
-12/shape_offset = Vector2( 32, 64 )
-12/shapes = [ SubResource( 4 ) ]
-13/name = "ceiling2wall"
-13/texture = ExtResource( 1 )
-13/tex_offset = Vector2( 0, 0 )
-13/region = Rect2( 448, 64, 64, 64 )
-13/occluder_offset = Vector2( 32, 32 )
-13/navigation_offset = Vector2( 32, 32 )
-13/shape_offset = Vector2( 32, 32 )
-13/shapes = [ SubResource( 5 ) ]
-14/name = "platform_floor"
-14/texture = ExtResource( 1 )
-14/tex_offset = Vector2( 0, 0 )
-14/region = Rect2( 128, 0, 64, 64 )
-14/occluder_offset = Vector2( 32, 32 )
-14/navigation_offset = Vector2( 32, 32 )
-14/shape_offset = Vector2( 32, 32 )
-14/shapes = [ SubResource( 6 ) ]
-15/name = "platform_edge"
-15/texture = ExtResource( 1 )
-15/tex_offset = Vector2( 0, 0 )
-15/region = Rect2( 192, 0, 64, 64 )
-15/occluder_offset = Vector2( 32, 32 )
-15/navigation_offset = Vector2( 32, 32 )
-15/shape_offset = Vector2( 32, 32 )
-15/shapes = [ SubResource( 7 ) ]
-
diff --git a/demos/2d/platformer/tileset_edit.tscn b/demos/2d/platformer/tileset_edit.tscn
deleted file mode 100644
index 733fada55d..0000000000
--- a/demos/2d/platformer/tileset_edit.tscn
+++ /dev/null
@@ -1,432 +0,0 @@
-[gd_scene load_steps=14 format=1]
-
-[ext_resource path="res://tiles_demo.png" type="Texture" id=1]
-
-[sub_resource type="ConvexPolygonShape2D" id=1]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -32, -24, 32, -24, 32, 32, -32, 32 )
-
-[sub_resource type="ConvexPolygonShape2D" id=2]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -32, 32, -32, -24, 24, -24, 24, 32 )
-
-[sub_resource type="ConvexPolygonShape2D" id=3]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -32, 32, -32, -32, 24, -32, 24, 32 )
-
-[sub_resource type="ConvexPolygonShape2D" id=4]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -64, 32, -64, -32, -8, -32, -8, 32 )
-
-[sub_resource type="ConvexPolygonShape2D" id=5]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -32, 32, -32, -32, 24, -32, 32, -24, 32, 32 )
-
-[sub_resource type="ConvexPolygonShape2D" id=6]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -32, 32, -32, -24, 32, -24, 32, 32 )
-
-[sub_resource type="ConvexPolygonShape2D" id=7]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -32, 32, -32, -24, 32, -24, 32, 32 )
-
-[sub_resource type="ConvexPolygonShape2D" id=8]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -32, -32, 32, -32, 32, 32, -32, 32 )
-
-[sub_resource type="ConvexPolygonShape2D" id=9]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -32, -56, 32, 8, 32, 64, -32, 64 )
-
-[sub_resource type="ConvexPolygonShape2D" id=10]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -32, 32, -32, -32, 24, -32, 24, 32 )
-
-[sub_resource type="ConvexPolygonShape2D" id=11]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -32, -24, 32, -24, 32, 24, -32, 24 )
-
-[sub_resource type="ConvexPolygonShape2D" id=12]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -32, -24, 24, -24, 24, 24, -32, 24 )
-
-[node name="Node" type="Node"]
-
-[node name="floor" type="Sprite" parent="."]
-
-texture = ExtResource( 1 )
-region = true
-region_rect = Rect2( 0, 0, 64, 64 )
-
-[node name="collision" type="StaticBody2D" parent="floor"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="floor/collision"]
-
-build_mode = 0
-polygon = Vector2Array( 32, -24, 32, 32, -32, 32, -32, -24 )
-shape_range = Vector2( -1, -1 )
-trigger = false
-
-[node name="edge" type="Sprite" parent="."]
-
-transform/pos = Vector2( 64, 0 )
-texture = ExtResource( 1 )
-region = true
-region_rect = Rect2( 64, 0, 64, 64 )
-
-[node name="collision" type="StaticBody2D" parent="edge"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 2 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="edge/collision"]
-
-build_mode = 0
-polygon = Vector2Array( -32, -24, 24, -24, 24, 32, -32, 32 )
-shape_range = Vector2( -1, -1 )
-trigger = false
-
-[node name="wall" type="Sprite" parent="."]
-
-transform/pos = Vector2( 64, 64 )
-texture = ExtResource( 1 )
-region = true
-region_rect = Rect2( 64, 64, 64, 64 )
-
-[node name="collision" type="StaticBody2D" parent="wall"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 3 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="wall/collision"]
-
-build_mode = 0
-polygon = Vector2Array( -32, -32, 24, -32, 24, 32, -32, 32 )
-shape_range = Vector2( -1, -1 )
-trigger = false
-
-[node name="wall_deco" type="Sprite" parent="."]
-
-transform/pos = Vector2( 96, 128 )
-texture = ExtResource( 1 )
-region = true
-region_rect = Rect2( 320, 128, 128, 64 )
-
-[node name="collision" type="StaticBody2D" parent="wall_deco"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 4 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="wall_deco/collision"]
-
-build_mode = 0
-polygon = Vector2Array( -64, -32, -8, -32, -8, 32, -64, 32 )
-shape_range = Vector2( -1, -1 )
-trigger = false
-
-[node name="corner" type="Sprite" parent="."]
-
-transform/pos = Vector2( 64, 192 )
-texture = ExtResource( 1 )
-region = true
-region_rect = Rect2( 64, 128, 64, 64 )
-
-[node name="collision" type="StaticBody2D" parent="corner"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 5 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="corner/collision"]
-
-build_mode = 0
-polygon = Vector2Array( -32, -32, 24, -32, 32, -24, 32, 32, -32, 32 )
-shape_range = Vector2( -1, -1 )
-trigger = false
-
-[node name="flowers" type="Sprite" parent="."]
-
-transform/pos = Vector2( 128, 192 )
-texture = ExtResource( 1 )
-region = true
-region_rect = Rect2( 192, 192, 64, 64 )
-
-[node name="collision" type="StaticBody2D" parent="flowers"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 6 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="flowers/collision"]
-
-build_mode = 0
-polygon = Vector2Array( -32, 32, 32, 32, 32, -24, -32, -24 )
-shape_range = Vector2( -1, -1 )
-trigger = false
-
-[node name="tree_base" type="Sprite" parent="."]
-
-transform/pos = Vector2( 192, 192 )
-texture = ExtResource( 1 )
-region = true
-region_rect = Rect2( 256, 192, 64, 64 )
-
-[node name="collision" type="StaticBody2D" parent="tree_base"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 7 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="tree_base/collision"]
-
-build_mode = 0
-polygon = Vector2Array( -32, 32, 32, 32, 32, -24, -32, -24 )
-shape_range = Vector2( -1, -1 )
-trigger = false
-
-[node name="tree_mid" type="Sprite" parent="."]
-
-transform/pos = Vector2( 192, 128 )
-texture = ExtResource( 1 )
-region = true
-region_rect = Rect2( 256, 128, 64, 64 )
-
-[node name="tree_mid 2" type="Sprite" parent="."]
-
-transform/pos = Vector2( 192, 64 )
-texture = ExtResource( 1 )
-region = true
-region_rect = Rect2( 256, 64, 64, 64 )
-
-[node name="tree_top" type="Sprite" parent="."]
-
-transform/pos = Vector2( 192, 0 )
-texture = ExtResource( 1 )
-region = true
-region_rect = Rect2( 256, 0, 64, 64 )
-
-[node name="solid" type="Sprite" parent="."]
-
-transform/pos = Vector2( 0, 64 )
-texture = ExtResource( 1 )
-region = true
-region_rect = Rect2( 0, 64, 64, 64 )
-
-[node name="ceiling" type="Sprite" parent="."]
-
-transform/pos = Vector2( 0, 128 )
-texture = ExtResource( 1 )
-region = true
-region_rect = Rect2( 384, 64, 64, 64 )
-
-[node name="collision" type="StaticBody2D" parent="ceiling"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 8 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="ceiling/collision"]
-
-build_mode = 0
-polygon = Vector2Array( 32, -32, 32, 32, -32, 32, -32, -32 )
-shape_range = Vector2( -1, -1 )
-trigger = false
-
-[node name="ramp" type="Sprite" parent="."]
-
-transform/pos = Vector2( 256, 224 )
-texture = ExtResource( 1 )
-region = true
-region_rect = Rect2( 128, 128, 64, 128 )
-
-[node name="collision" type="StaticBody2D" parent="ramp"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 9 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="ramp/collision"]
-
-build_mode = 0
-polygon = Vector2Array( -32, -56, 32, 8, 32, 64, -32, 64 )
-shape_range = Vector2( -1, -1 )
-trigger = false
-
-[node name="ceiling2wall" type="Sprite" parent="."]
-
-transform/pos = Vector2( 0, 192 )
-texture = ExtResource( 1 )
-region = true
-region_rect = Rect2( 448, 64, 64, 64 )
-
-[node name="collision" type="StaticBody2D" parent="ceiling2wall"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 10 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="ceiling2wall/collision"]
-
-build_mode = 0
-polygon = Vector2Array( -32, -32, 24, -32, 24, 32, -32, 32 )
-shape_range = Vector2( -1, -1 )
-trigger = false
-
-[node name="platform_floor" type="Sprite" parent="."]
-
-transform/pos = Vector2( 0, 256 )
-texture = ExtResource( 1 )
-region = true
-region_rect = Rect2( 128, 0, 64, 64 )
-
-[node name="collision" type="StaticBody2D" parent="platform_floor"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 11 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="platform_floor/collision"]
-
-build_mode = 0
-polygon = Vector2Array( 32, -24, 32, 24, -32, 24, -32, -24 )
-shape_range = Vector2( -1, -1 )
-trigger = false
-
-[node name="platform_edge" type="Sprite" parent="."]
-
-transform/pos = Vector2( 64, 256 )
-texture = ExtResource( 1 )
-region = true
-region_rect = Rect2( 192, 0, 64, 64 )
-
-[node name="collision" type="StaticBody2D" parent="platform_edge"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 12 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="platform_edge/collision"]
-
-build_mode = 0
-polygon = Vector2Array( 24, -24, 24, 24, -32, 24, -32, -24 )
-shape_range = Vector2( -1, -1 )
-trigger = false
-
-[node name="help" type="Label" parent="."]
-
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-margin/left = 1.0
-margin/top = 331.0
-margin/right = 727.0
-margin/bottom = 422.0
-text = "This scene serves as a tool for editing the tileset.\nNodes (sprites) and their respective collisionsare edited here.\n\nTo create a tileset from this, a \"TileSet\" resoucre must be created. Use the helper in: Scene -> Convert To -> TileSet.\nThis will save a tileset. Saving over it will merge your changes.\n\nFinally, the saved tileset resource (tileset.tres in this case), can be opened to be used into a TileMap node for editing a tile map."
-percent_visible = 1.0
-lines_skipped = 0
-max_lines_visible = -1
-
-
diff --git a/demos/2d/pong/ball.png b/demos/2d/pong/ball.png
deleted file mode 100644
index c0f6da4f6f..0000000000
--- a/demos/2d/pong/ball.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/pong/engine.cfg b/demos/2d/pong/engine.cfg
deleted file mode 100644
index 418f02c06b..0000000000
--- a/demos/2d/pong/engine.cfg
+++ /dev/null
@@ -1,22 +0,0 @@
-[application]
-
-name="Pong"
-main_scene="pong.tscn"
-icon="res://icon.png"
-
-[display]
-
-width=640
-height=400
-stretch_2d=true
-
-[input]
-
-left_move_up=[key(A)]
-left_move_down=[key(Z)]
-right_move_up=[key(Up)]
-right_move_down=[key(Down)]
-
-[render]
-
-default_clear_color=#ff000000
diff --git a/demos/2d/pong/icon.png b/demos/2d/pong/icon.png
deleted file mode 100644
index eab34de53d..0000000000
--- a/demos/2d/pong/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/pong/left_pallete.png b/demos/2d/pong/left_pallete.png
deleted file mode 100644
index f0d4b549d0..0000000000
--- a/demos/2d/pong/left_pallete.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/pong/pong.gd b/demos/2d/pong/pong.gd
deleted file mode 100644
index 81afbd9961..0000000000
--- a/demos/2d/pong/pong.gd
+++ /dev/null
@@ -1,67 +0,0 @@
-
-extends Node2D
-
-# Member variables
-const INITIAL_BALL_SPEED = 80
-var ball_speed = INITIAL_BALL_SPEED
-var screen_size = Vector2(640, 400)
-
-# Default ball direction
-var direction = Vector2(-1, 0)
-var pad_size = Vector2(8, 32)
-const PAD_SPEED = 150
-
-
-func _process(delta):
- # Get ball position and pad rectangles
- var ball_pos = get_node("ball").get_pos()
- var left_rect = Rect2(get_node("left").get_pos() - pad_size*0.5, pad_size)
- var right_rect = Rect2(get_node("right").get_pos() - pad_size*0.5, pad_size)
-
- # Integrate new ball postion
- ball_pos += direction*ball_speed*delta
-
- # Flip when touching roof or floor
- if ((ball_pos.y < 0 and direction.y < 0) or (ball_pos.y > screen_size.y and direction.y > 0)):
- direction.y = -direction.y
-
- # Flip, change direction and increase speed when touching pads
- if ((left_rect.has_point(ball_pos) and direction.x < 0) or (right_rect.has_point(ball_pos) and direction.x > 0)):
- direction.x = -direction.x
- ball_speed *= 1.1
- direction.y = randf()*2.0 - 1
- direction = direction.normalized()
-
- # Check gameover
- if (ball_pos.x < 0 or ball_pos.x > screen_size.x):
- ball_pos = screen_size*0.5
- ball_speed = INITIAL_BALL_SPEED
- direction = Vector2(-1, 0)
-
- get_node("ball").set_pos(ball_pos)
-
- # Move left pad
- var left_pos = get_node("left").get_pos()
-
- if (left_pos.y > 0 and Input.is_action_pressed("left_move_up")):
- left_pos.y += -PAD_SPEED*delta
- if (left_pos.y < screen_size.y and Input.is_action_pressed("left_move_down")):
- left_pos.y += PAD_SPEED*delta
-
- get_node("left").set_pos(left_pos)
-
- # Move right pad
- var right_pos = get_node("right").get_pos()
-
- if (right_pos.y > 0 and Input.is_action_pressed("right_move_up")):
- right_pos.y += -PAD_SPEED*delta
- if (right_pos.y < screen_size.y and Input.is_action_pressed("right_move_down")):
- right_pos.y += PAD_SPEED*delta
-
- get_node("right").set_pos(right_pos)
-
-
-func _ready():
- screen_size = get_viewport_rect().size # Get actual size
- pad_size = get_node("left").get_texture().get_size()
- set_process(true)
diff --git a/demos/2d/pong/pong.tscn b/demos/2d/pong/pong.tscn
deleted file mode 100644
index 95aecc60f3..0000000000
--- a/demos/2d/pong/pong.tscn
+++ /dev/null
@@ -1,33 +0,0 @@
-[gd_scene load_steps=6 format=1]
-
-[ext_resource path="res://pong.gd" type="Script" id=1]
-[ext_resource path="res://left_pallete.png" type="Texture" id=2]
-[ext_resource path="res://right_pallete.png" type="Texture" id=3]
-[ext_resource path="res://separator.png" type="Texture" id=4]
-[ext_resource path="res://ball.png" type="Texture" id=5]
-
-[node name="game" type="Node2D"]
-
-script/script = ExtResource( 1 )
-
-[node name="left" type="Sprite" parent="."]
-
-transform/pos = Vector2( 67.6875, 183.208 )
-texture = ExtResource( 2 )
-
-[node name="right" type="Sprite" parent="."]
-
-transform/pos = Vector2( 577, 187 )
-texture = ExtResource( 3 )
-
-[node name="separator" type="Sprite" parent="."]
-
-transform/pos = Vector2( 320, 200 )
-texture = ExtResource( 4 )
-
-[node name="ball" type="Sprite" parent="."]
-
-transform/pos = Vector2( 320.283, 188 )
-texture = ExtResource( 5 )
-
-
diff --git a/demos/2d/pong/right_pallete.png b/demos/2d/pong/right_pallete.png
deleted file mode 100644
index 3cdb673a5b..0000000000
--- a/demos/2d/pong/right_pallete.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/pong/separator.png b/demos/2d/pong/separator.png
deleted file mode 100644
index 56874a59cb..0000000000
--- a/demos/2d/pong/separator.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/rubegoldberg/art/bowling_ball.png b/demos/2d/rubegoldberg/art/bowling_ball.png
deleted file mode 100644
index 9443cda882..0000000000
--- a/demos/2d/rubegoldberg/art/bowling_ball.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/rubegoldberg/art/box.png b/demos/2d/rubegoldberg/art/box.png
deleted file mode 100644
index 9edcae5909..0000000000
--- a/demos/2d/rubegoldberg/art/box.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/rubegoldberg/art/domino.png b/demos/2d/rubegoldberg/art/domino.png
deleted file mode 100644
index 111b936063..0000000000
--- a/demos/2d/rubegoldberg/art/domino.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/rubegoldberg/art/platform.png b/demos/2d/rubegoldberg/art/platform.png
deleted file mode 100644
index c18ddf2b1d..0000000000
--- a/demos/2d/rubegoldberg/art/platform.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/rubegoldberg/art/seesaw_base.png b/demos/2d/rubegoldberg/art/seesaw_base.png
deleted file mode 100644
index ba359c6ce8..0000000000
--- a/demos/2d/rubegoldberg/art/seesaw_base.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/rubegoldberg/art/seesaw_top.png b/demos/2d/rubegoldberg/art/seesaw_top.png
deleted file mode 100644
index 7c3fa83b12..0000000000
--- a/demos/2d/rubegoldberg/art/seesaw_top.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/rubegoldberg/ball.tscn b/demos/2d/rubegoldberg/ball.tscn
deleted file mode 100644
index 0b11461c3b..0000000000
--- a/demos/2d/rubegoldberg/ball.tscn
+++ /dev/null
@@ -1,44 +0,0 @@
-[gd_scene load_steps=3 format=1]
-
-[ext_resource path="res://art/bowling_ball.png" type="Texture" id=1]
-
-[sub_resource type="CircleShape2D" id=1]
-
-custom_solver_bias = 0.0
-radius = 32.0
-
-[node name="Ball" type="RigidBody2D"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-mode = 0
-mass = 3.0
-friction = 1.0
-bounce = 0.0
-gravity_scale = 1.0
-custom_integrator = false
-continuous_cd = 0
-contacts_reported = 0
-contact_monitor = false
-sleeping = false
-can_sleep = true
-velocity/linear = Vector2( 0, 0 )
-velocity/angular = 0.0
-damp_override/linear = -1.0
-damp_override/angular = -1.0
-
-[node name="Sprite" type="Sprite" parent="."]
-
-texture = ExtResource( 1 )
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
-
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = -1
-
-
diff --git a/demos/2d/rubegoldberg/box.tscn b/demos/2d/rubegoldberg/box.tscn
deleted file mode 100644
index f9f0455c1f..0000000000
--- a/demos/2d/rubegoldberg/box.tscn
+++ /dev/null
@@ -1,44 +0,0 @@
-[gd_scene load_steps=3 format=1]
-
-[ext_resource path="res://art/box.png" type="Texture" id=1]
-
-[sub_resource type="RectangleShape2D" id=1]
-
-custom_solver_bias = 0.0
-extents = Vector2( 32, 32 )
-
-[node name="box" type="RigidBody2D"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-mode = 0
-mass = 1.0
-friction = 1.0
-bounce = 0.0
-gravity_scale = 1.0
-custom_integrator = false
-continuous_cd = 0
-contacts_reported = 0
-contact_monitor = false
-sleeping = false
-can_sleep = true
-velocity/linear = Vector2( 0, 0 )
-velocity/angular = 0.0
-damp_override/linear = -1.0
-damp_override/angular = -1.0
-
-[node name="Sprite" type="Sprite" parent="."]
-
-texture = ExtResource( 1 )
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
-
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = -1
-
-
diff --git a/demos/2d/rubegoldberg/domino.tscn b/demos/2d/rubegoldberg/domino.tscn
deleted file mode 100644
index 3b2dc134dc..0000000000
--- a/demos/2d/rubegoldberg/domino.tscn
+++ /dev/null
@@ -1,44 +0,0 @@
-[gd_scene load_steps=3 format=1]
-
-[ext_resource path="res://art/domino.png" type="Texture" id=1]
-
-[sub_resource type="RectangleShape2D" id=1]
-
-custom_solver_bias = 0.0
-extents = Vector2( 16, 64 )
-
-[node name="domino" type="RigidBody2D"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-mode = 0
-mass = 1.0
-friction = 0.5
-bounce = 0.0
-gravity_scale = 1.0
-custom_integrator = false
-continuous_cd = 0
-contacts_reported = 0
-contact_monitor = false
-sleeping = false
-can_sleep = true
-velocity/linear = Vector2( 0, 0 )
-velocity/angular = 0.0
-damp_override/linear = -1.0
-damp_override/angular = -1.0
-
-[node name="Sprite" type="Sprite" parent="."]
-
-texture = ExtResource( 1 )
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
-
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = -1
-
-
diff --git a/demos/2d/rubegoldberg/engine.cfg b/demos/2d/rubegoldberg/engine.cfg
deleted file mode 100644
index 1f746c136d..0000000000
--- a/demos/2d/rubegoldberg/engine.cfg
+++ /dev/null
@@ -1,10 +0,0 @@
-[application]
-
-name="Rube Goldberg"
-main_scene="res://rubegoldberg.tscn"
-icon="res://icon.png"
-
-[physics_2d]
-
-default_gravity=500
-default_density=0.01
diff --git a/demos/2d/rubegoldberg/icon.png b/demos/2d/rubegoldberg/icon.png
deleted file mode 100644
index 38925bda0d..0000000000
--- a/demos/2d/rubegoldberg/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/rubegoldberg/pendulum.tscn b/demos/2d/rubegoldberg/pendulum.tscn
deleted file mode 100644
index b9e1bcd1f9..0000000000
--- a/demos/2d/rubegoldberg/pendulum.tscn
+++ /dev/null
@@ -1,248 +0,0 @@
-[gd_scene load_steps=5 format=1]
-
-[ext_resource path="res://art/box.png" type="Texture" id=1]
-[ext_resource path="res://art/bowling_ball.png" type="Texture" id=2]
-
-[sub_resource type="RectangleShape2D" id=1]
-
-custom_solver_bias = 0.0
-extents = Vector2( 3, 12 )
-
-[sub_resource type="CircleShape2D" id=2]
-
-custom_solver_bias = 0.0
-radius = 16.0
-
-[node name="pendulum" type="Node2D"]
-
-[node name="union_0" type="RigidBody2D" parent="."]
-
-input/pickable = false
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-mode = 0
-mass = 0.2
-friction = 1.0
-bounce = 0.0
-gravity_scale = 1.0
-custom_integrator = false
-continuous_cd = 0
-contacts_reported = 0
-contact_monitor = false
-sleeping = false
-can_sleep = true
-velocity/linear = Vector2( 0, 0 )
-velocity/angular = 0.0
-damp_override/linear = -1.0
-damp_override/angular = -1.0
-__meta__ = { "_edit_group_":true }
-
-[node name="Sprite" type="Sprite" parent="union_0"]
-
-transform/scale = Vector2( 0.1, 0.4 )
-texture = ExtResource( 1 )
-
-[node name="collision" type="CollisionShape2D" parent="union_0"]
-
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = -1
-
-[node name="union_ 2" type="RigidBody2D" parent="."]
-
-transform/pos = Vector2( 0, 26.9432 )
-input/pickable = false
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-mode = 0
-mass = 0.2
-friction = 1.0
-bounce = 0.0
-gravity_scale = 1.0
-custom_integrator = false
-continuous_cd = 0
-contacts_reported = 0
-contact_monitor = false
-sleeping = false
-can_sleep = true
-velocity/linear = Vector2( 0, 0 )
-velocity/angular = 0.0
-damp_override/linear = -1.0
-damp_override/angular = -1.0
-__meta__ = { "_edit_group_":true }
-
-[node name="Sprite" type="Sprite" parent="union_ 2"]
-
-transform/scale = Vector2( 0.1, 0.4 )
-texture = ExtResource( 1 )
-
-[node name="collision" type="CollisionShape2D" parent="union_ 2"]
-
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = -1
-
-[node name="union_ 3" type="RigidBody2D" parent="."]
-
-transform/pos = Vector2( 0, 53.8863 )
-input/pickable = false
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-mode = 0
-mass = 0.2
-friction = 1.0
-bounce = 0.0
-gravity_scale = 1.0
-custom_integrator = false
-continuous_cd = 0
-contacts_reported = 0
-contact_monitor = false
-sleeping = false
-can_sleep = true
-velocity/linear = Vector2( 0, 0 )
-velocity/angular = 0.0
-damp_override/linear = -1.0
-damp_override/angular = -1.0
-__meta__ = { "_edit_group_":true }
-
-[node name="Sprite" type="Sprite" parent="union_ 3"]
-
-transform/scale = Vector2( 0.1, 0.4 )
-texture = ExtResource( 1 )
-
-[node name="collision" type="CollisionShape2D" parent="union_ 3"]
-
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = -1
-
-[node name="union_ 4" type="RigidBody2D" parent="."]
-
-transform/pos = Vector2( 0, 81.4282 )
-input/pickable = false
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-mode = 0
-mass = 0.2
-friction = 1.0
-bounce = 0.0
-gravity_scale = 1.0
-custom_integrator = false
-continuous_cd = 0
-contacts_reported = 0
-contact_monitor = false
-sleeping = false
-can_sleep = true
-velocity/linear = Vector2( 0, 0 )
-velocity/angular = 0.0
-damp_override/linear = -1.0
-damp_override/angular = -1.0
-__meta__ = { "_edit_group_":true }
-
-[node name="Sprite" type="Sprite" parent="union_ 4"]
-
-transform/scale = Vector2( 0.1, 0.4 )
-texture = ExtResource( 1 )
-
-[node name="collision" type="CollisionShape2D" parent="union_ 4"]
-
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = -1
-
-[node name="joint1" type="PinJoint2D" parent="."]
-
-transform/pos = Vector2( 0, 13.771 )
-node_a = NodePath("../union_0")
-node_b = NodePath("../union_ 2")
-bias/bias = 0.0
-collision/exclude_nodes = true
-softness = 0.0
-
-[node name="joint 2_3" type="PinJoint2D" parent="."]
-
-transform/pos = Vector2( 0, 40.7141 )
-node_a = NodePath("../union_ 2")
-node_b = NodePath("../union_ 3")
-bias/bias = 0.0
-collision/exclude_nodes = true
-softness = 0.0
-
-[node name="joint 3_4" type="PinJoint2D" parent="."]
-
-transform/pos = Vector2( 0, 67.6573 )
-node_a = NodePath("../union_ 3")
-node_b = NodePath("../union_ 4")
-bias/bias = 0.2
-collision/exclude_nodes = true
-softness = 0.0
-
-[node name="ball" type="RigidBody2D" parent="."]
-
-transform/pos = Vector2( 0, 106.787 )
-transform/scale = Vector2( 0.98476, 1 )
-input/pickable = false
-shapes/0/shape = SubResource( 2 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-mode = 0
-mass = 0.2
-friction = 1.0
-bounce = 0.0
-gravity_scale = 1.0
-custom_integrator = false
-continuous_cd = 0
-contacts_reported = 0
-contact_monitor = false
-sleeping = false
-can_sleep = true
-velocity/linear = Vector2( 0, 0 )
-velocity/angular = 0.0
-damp_override/linear = -1.0
-damp_override/angular = -1.0
-__meta__ = { "_edit_group_":true }
-
-[node name="Sprite" type="Sprite" parent="ball"]
-
-transform/scale = Vector2( 0.5, 0.5 )
-texture = ExtResource( 2 )
-
-[node name="collision" type="CollisionShape2D" parent="ball"]
-
-shape = SubResource( 2 )
-trigger = false
-_update_shape_index = -1
-
-[node name="joint 4_ball" type="PinJoint2D" parent="."]
-
-transform/pos = Vector2( 0, 92.5287 )
-node_a = NodePath("../union_ 4")
-node_b = NodePath("../ball")
-bias/bias = 0.0
-collision/exclude_nodes = true
-softness = 0.0
-
-[node name="joint wall" type="PinJoint2D" parent="."]
-
-transform/pos = Vector2( 0, -12.1024 )
-node_a = NodePath("../union_0")
-node_b = NodePath("")
-bias/bias = 0.0
-collision/exclude_nodes = true
-softness = 0.0
-
-
diff --git a/demos/2d/rubegoldberg/platform.tscn b/demos/2d/rubegoldberg/platform.tscn
deleted file mode 100644
index 70584ca75c..0000000000
--- a/demos/2d/rubegoldberg/platform.tscn
+++ /dev/null
@@ -1,33 +0,0 @@
-[gd_scene load_steps=3 format=1]
-
-[ext_resource path="res://art/platform.png" type="Texture" id=1]
-
-[sub_resource type="RectangleShape2D" id=1]
-
-custom_solver_bias = 0.0
-extents = Vector2( 128, 16 )
-
-[node name="platform" type="StaticBody2D"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="Sprite" type="Sprite" parent="."]
-
-texture = ExtResource( 1 )
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
-
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = -1
-
-
diff --git a/demos/2d/rubegoldberg/rubegoldberg.tscn b/demos/2d/rubegoldberg/rubegoldberg.tscn
deleted file mode 100644
index 995901d4ae..0000000000
--- a/demos/2d/rubegoldberg/rubegoldberg.tscn
+++ /dev/null
@@ -1,98 +0,0 @@
-[gd_scene load_steps=7 format=1]
-
-[ext_resource path="res://platform.tscn" type="PackedScene" id=1]
-[ext_resource path="res://ball.tscn" type="PackedScene" id=2]
-[ext_resource path="res://domino.tscn" type="PackedScene" id=3]
-[ext_resource path="res://seesaw.tscn" type="PackedScene" id=4]
-[ext_resource path="res://box.tscn" type="PackedScene" id=5]
-[ext_resource path="res://pendulum.tscn" type="PackedScene" id=6]
-
-[node name="Node" type="Node"]
-
-[node name="platform" parent="." instance=ExtResource( 1 )]
-
-transform/pos = Vector2( 116.881, 145.589 )
-transform/rot = -20.8796
-
-[node name="platform 2" parent="." instance=ExtResource( 1 )]
-
-transform/pos = Vector2( 336.29, 264.52 )
-
-[node name="platform 3" parent="." instance=ExtResource( 1 )]
-
-transform/pos = Vector2( 526.99, 264.52 )
-
-[node name="Ball" parent="." instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 76.0801, 67.2141 )
-
-[node name="domino" parent="." instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 262.764, 182.008 )
-
-[node name="domino 2" parent="." instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 356.951, 182.008 )
-
-[node name="domino 4" parent="." instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 448.834, 179.291 )
-
-[node name="platform 4" parent="." instance=ExtResource( 1 )]
-
-transform/pos = Vector2( 772.686, 345.917 )
-transform/rot = 76.7716
-
-[node name="platform 5" parent="." instance=ExtResource( 1 )]
-
-transform/pos = Vector2( 640.041, 335.365 )
-transform/rot = 90.0
-transform/scale = Vector2( 0.5, 1 )
-
-[node name="Ball 2" parent="." instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 616.342, 214.247 )
-
-[node name="platform 6" parent="." instance=ExtResource( 1 )]
-
-transform/pos = Vector2( 679.231, 588.598 )
-
-[node name="platform 7" parent="." instance=ExtResource( 1 )]
-
-transform/pos = Vector2( 424.491, 588.598 )
-
-[node name="platform 8" parent="." instance=ExtResource( 1 )]
-
-transform/pos = Vector2( 185.655, 588.598 )
-
-[node name="SeeSaw" parent="." instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 602.935, 554.501 )
-
-[node name="box" parent="." instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 476.002, 509.406 )
-transform/rot = 21.7373
-
-[node name="pendulum" parent="." instance=ExtResource( 6 )]
-
-transform/pos = Vector2( 391.607, 305.444 )
-
-[node name="pendulum 2" parent="." instance=ExtResource( 6 )]
-
-transform/pos = Vector2( 343.172, 303.774 )
-
-[node name="pendulum 3" parent="." instance=ExtResource( 6 )]
-
-transform/pos = Vector2( 288.056, 303.774 )
-
-[node name="pendulum 4" parent="." instance=ExtResource( 6 )]
-
-transform/pos = Vector2( 236.28, 303.774 )
-
-[node name="Ball 5" parent="." instance=ExtResource( 2 )]
-
-transform/pos = Vector2( 116.165, 526.515 )
-velocity/linear = Vector2( 0, -200 )
-
-
diff --git a/demos/2d/rubegoldberg/seesaw.tscn b/demos/2d/rubegoldberg/seesaw.tscn
deleted file mode 100644
index 3b915d3e7f..0000000000
--- a/demos/2d/rubegoldberg/seesaw.tscn
+++ /dev/null
@@ -1,89 +0,0 @@
-[gd_scene load_steps=5 format=1]
-
-[ext_resource path="res://art/seesaw_base.png" type="Texture" id=1]
-[ext_resource path="res://art/seesaw_top.png" type="Texture" id=2]
-
-[sub_resource type="ConcavePolygonShape2D" id=1]
-
-custom_solver_bias = 0.0
-segments = Vector2Array( -32.6231, 32.0838, -1.28218, -31.1383, -1.28218, -31.1383, 33.8412, 33.1645, 33.8412, 33.1645, -32.6231, 32.0838 )
-
-[sub_resource type="ConvexPolygonShape2D" id=2]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -99.0874, 7.76759, -125.025, -8.98358, 125.162, -8.44321, 99.2248, 7.22723 )
-
-[node name="SeeSaw" type="Node2D"]
-
-[node name="Sprite" type="Sprite" parent="."]
-
-texture = ExtResource( 1 )
-
-[node name="StaticBody2D" type="StaticBody2D" parent="Sprite"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Sprite/StaticBody2D"]
-
-build_mode = 0
-polygon = Vector2Array( -32.6231, 32.0838, -1.28218, -31.1383, 33.8412, 33.1645 )
-shape_range = Vector2( -1, -1 )
-trigger = false
-
-[node name="RigidBody2D" type="RigidBody2D" parent="."]
-
-transform/pos = Vector2( 1.19748, -29.9368 )
-transform/rot = 16.2233
-input/pickable = false
-shapes/0/shape = SubResource( 2 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-mode = 0
-mass = 1.0
-friction = 1.0
-bounce = 0.0
-gravity_scale = 1.0
-custom_integrator = false
-continuous_cd = 0
-contacts_reported = 0
-contact_monitor = false
-sleeping = false
-can_sleep = true
-velocity/linear = Vector2( 0, 0 )
-velocity/angular = 0.0
-damp_override/linear = -1.0
-damp_override/angular = -1.0
-
-[node name="Sprite" type="Sprite" parent="RigidBody2D"]
-
-transform/scale = Vector2( 1, 0.5 )
-texture = ExtResource( 2 )
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="RigidBody2D"]
-
-build_mode = 0
-polygon = Vector2Array( -125.025, -8.98358, 125.162, -8.44321, 99.2248, 7.22723, -99.0874, 7.76759 )
-shape_range = Vector2( -1, -1 )
-trigger = false
-
-[node name="PinJoint2D" type="PinJoint2D" parent="."]
-
-transform/pos = Vector2( 0, -31.1343 )
-node_a = NodePath("../RigidBody2D")
-node_b = NodePath("../Sprite/StaticBody2D")
-bias/bias = 0.0
-collision/exclude_nodes = true
-softness = 0.0
-
-
diff --git a/demos/2d/screen_space_shaders/art/burano.jpg b/demos/2d/screen_space_shaders/art/burano.jpg
deleted file mode 100644
index 3017616384..0000000000
--- a/demos/2d/screen_space_shaders/art/burano.jpg
+++ /dev/null
Binary files differ
diff --git a/demos/2d/screen_space_shaders/art/filmgrain.png b/demos/2d/screen_space_shaders/art/filmgrain.png
deleted file mode 100644
index b8ea89902c..0000000000
--- a/demos/2d/screen_space_shaders/art/filmgrain.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/screen_space_shaders/art/filmgrain.png.flags b/demos/2d/screen_space_shaders/art/filmgrain.png.flags
deleted file mode 100644
index d5476d5499..0000000000
--- a/demos/2d/screen_space_shaders/art/filmgrain.png.flags
+++ /dev/null
@@ -1 +0,0 @@
-repeat=true
diff --git a/demos/2d/screen_space_shaders/art/forest.jpg b/demos/2d/screen_space_shaders/art/forest.jpg
deleted file mode 100644
index 705acf8a5d..0000000000
--- a/demos/2d/screen_space_shaders/art/forest.jpg
+++ /dev/null
Binary files differ
diff --git a/demos/2d/screen_space_shaders/art/mountains.jpg b/demos/2d/screen_space_shaders/art/mountains.jpg
deleted file mode 100644
index d75baf530c..0000000000
--- a/demos/2d/screen_space_shaders/art/mountains.jpg
+++ /dev/null
Binary files differ
diff --git a/demos/2d/screen_space_shaders/art/platformer.jpg b/demos/2d/screen_space_shaders/art/platformer.jpg
deleted file mode 100644
index e6197cd62b..0000000000
--- a/demos/2d/screen_space_shaders/art/platformer.jpg
+++ /dev/null
Binary files differ
diff --git a/demos/2d/screen_space_shaders/art/vignette.png b/demos/2d/screen_space_shaders/art/vignette.png
deleted file mode 100644
index 8afeb7f9e1..0000000000
--- a/demos/2d/screen_space_shaders/art/vignette.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/screen_space_shaders/art/white.png b/demos/2d/screen_space_shaders/art/white.png
deleted file mode 100644
index 573faa33f2..0000000000
--- a/demos/2d/screen_space_shaders/art/white.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/screen_space_shaders/engine.cfg b/demos/2d/screen_space_shaders/engine.cfg
deleted file mode 100644
index 9a74e7b7bd..0000000000
--- a/demos/2d/screen_space_shaders/engine.cfg
+++ /dev/null
@@ -1,12 +0,0 @@
-[application]
-
-name="Screen-Space Shaders"
-main_scene="res://screen_shaders.tscn"
-icon="res://icon.png"
-
-[display]
-
-width=800
-height=600
-stretch_mode="2d"
-stretch_aspect="keep"
diff --git a/demos/2d/screen_space_shaders/icon.png b/demos/2d/screen_space_shaders/icon.png
deleted file mode 100644
index e3cc049081..0000000000
--- a/demos/2d/screen_space_shaders/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/screen_space_shaders/screen_shaders.gd b/demos/2d/screen_space_shaders/screen_shaders.gd
deleted file mode 100644
index b847a9c923..0000000000
--- a/demos/2d/screen_space_shaders/screen_shaders.gd
+++ /dev/null
@@ -1,25 +0,0 @@
-
-extends Control
-
-
-func _ready():
- for c in get_node("pictures").get_children():
- get_node("picture").add_item("PIC: " + c.get_name())
- for c in get_node("effects").get_children():
- get_node("effect").add_item("FX: " + c.get_name())
-
-
-func _on_picture_item_selected(ID):
- for c in range(get_node("pictures").get_child_count()):
- if (ID == c):
- get_node("pictures").get_child(c).show()
- else:
- get_node("pictures").get_child(c).hide()
-
-
-func _on_effect_item_selected(ID):
- for c in range(get_node("effects").get_child_count()):
- if (ID == c):
- get_node("effects").get_child(c).show()
- else:
- get_node("effects").get_child(c).hide()
diff --git a/demos/2d/screen_space_shaders/screen_shaders.tscn b/demos/2d/screen_space_shaders/screen_shaders.tscn
deleted file mode 100644
index 98a3224696..0000000000
--- a/demos/2d/screen_space_shaders/screen_shaders.tscn
+++ /dev/null
@@ -1,512 +0,0 @@
-[gd_scene load_steps=34 format=1]
-
-[ext_resource path="res://screen_shaders.gd" type="Script" id=1]
-[ext_resource path="res://art/burano.jpg" type="Texture" id=2]
-[ext_resource path="res://art/platformer.jpg" type="Texture" id=3]
-[ext_resource path="res://art/mountains.jpg" type="Texture" id=4]
-[ext_resource path="res://art/forest.jpg" type="Texture" id=5]
-[ext_resource path="res://art/vignette.png" type="Texture" id=6]
-[ext_resource path="res://art/white.png" type="Texture" id=7]
-[ext_resource path="res://art/filmgrain.png" type="Texture" id=8]
-
-[sub_resource type="CanvasItemShader" id=1]
-
-_code = { "fragment":"uniform texture vignette;\n\nCOLOR.rgb = texscreen(SCREEN_UV);\nCOLOR.rgb*= tex(vignette,UV).rgb;\n\n", "fragment_ofs":0, "light":"", "light_ofs":0, "vertex":"", "vertex_ofs":0 }
-
-[sub_resource type="CanvasItemMaterial" id=2]
-
-shader/shader = SubResource( 1 )
-shader/shading_mode = 0
-shader_param/vignette = ExtResource( 6 )
-
-[sub_resource type="CanvasItemShader" id=3]
-
-_code = { "fragment":"uniform texture vignette;\nfloat radius = 0.003;\nvec3 col = vec3(0);\n\ncol+= texscreen(SCREEN_UV+vec2(-radius,-radius));\ncol+= texscreen(SCREEN_UV+vec2(0,-radius));\ncol+= texscreen(SCREEN_UV+vec2(radius,-radius));\n\ncol+= texscreen(SCREEN_UV+vec2(-radius,0));\ncol+= texscreen(SCREEN_UV+vec2(0,0));\ncol+= texscreen(SCREEN_UV+vec2(radius,0));\n\n\ncol+= texscreen(SCREEN_UV+vec2(-radius,radius));\ncol+= texscreen(SCREEN_UV+vec2(0,radius));\ncol+= texscreen(SCREEN_UV+vec2(radius,radius));\n\ncol/=9.0;\nCOLOR.rgb=col;\n\n", "fragment_ofs":0, "light":"", "light_ofs":0, "vertex":"", "vertex_ofs":0 }
-
-[sub_resource type="CanvasItemMaterial" id=4]
-
-shader/shader = SubResource( 3 )
-shader/shading_mode = 0
-shader_param/vignette = ExtResource( 6 )
-
-[sub_resource type="CanvasItemShader" id=5]
-
-_code = { "fragment":"uniform texture vignette;\nuniform float radius=0.005;\nuniform float etching=2.0;\nuniform float edge_darken=0.5;\n\nfloat d = length(UV-vec2(0.5,0.5))*etching;\nmat2 rot = mat2( vec2(cos(d),-sin(d)), vec2(sin(d),cos(d)) );\n\nvec3 col = vec3(0);\n\ncol+= texscreen(SCREEN_UV+rot*vec2(-radius,-radius));\ncol+= texscreen(SCREEN_UV+rot*vec2(0,-radius));\ncol+= texscreen(SCREEN_UV+rot*vec2(radius,-radius));\n\ncol+= texscreen(SCREEN_UV+rot*vec2(-radius,0));\nvec3 scol = texscreen(SCREEN_UV+vec2(0,0));\ncol+= scol;\ncol+= texscreen(SCREEN_UV+rot*vec2(radius,0));\n\n\ncol+= texscreen(SCREEN_UV+rot*vec2(-radius,radius));\ncol+= texscreen(SCREEN_UV+rot*vec2(0,radius));\ncol+= texscreen(SCREEN_UV+vec2(radius,radius));\n\ncol/=9.0;\nfloat v = tex(vignette,UV).r;\nCOLOR.rgb=mix(col,scol,v)*mix(1.0,v,edge_darken);\n\n", "fragment_ofs":0, "light":"", "light_ofs":0, "vertex":"", "vertex_ofs":0 }
-
-[sub_resource type="CanvasItemMaterial" id=6]
-
-shader/shader = SubResource( 5 )
-shader/shading_mode = 0
-shader_param/vignette = ExtResource( 6 )
-shader_param/radius = 0.005
-shader_param/etching = 2.0
-shader_param/edge_darken = 0.5
-
-[sub_resource type="CanvasItemMaterial" id=7]
-
-shader/shader = SubResource( 5 )
-shader/shading_mode = 0
-shader_param/vignette = ExtResource( 6 )
-shader_param/radius = 0.02
-shader_param/etching = 100.0
-shader_param/edge_darken = -0.5
-
-[sub_resource type="CanvasItemShader" id=8]
-
-_code = { "fragment":"uniform float size_x=0.008;\nuniform float size_y=0.008;\n\nvec2 uv = SCREEN_UV;\nuv-=mod(uv,vec2(size_x,size_y));\n\nCOLOR.rgb= texscreen(uv);\n", "fragment_ofs":0, "light":"", "light_ofs":0, "vertex":"", "vertex_ofs":0 }
-
-[sub_resource type="CanvasItemMaterial" id=9]
-
-shader/shader = SubResource( 8 )
-shader/shading_mode = 0
-shader_param/size_x = 0.01
-shader_param/size_y = 0.01
-
-[sub_resource type="CanvasItemShader" id=10]
-
-_code = { "fragment":"uniform float rotation=3.0;\n\nvec2 uv = SCREEN_UV;\nvec2 rel = uv-vec2(0.5,0.5);\nfloat angle = length(rel)*rotation;\nmat2 rot = mat2(vec2(cos(angle),-sin(angle)),vec2(sin(angle),cos(angle)));\nrel = rot * rel;\nuv = clamp(rel + vec2(0.5,0.5),vec2(0,0),vec2(1,1));\nCOLOR.rgb= texscreen(uv);\n", "fragment_ofs":0, "light":"", "light_ofs":0, "vertex":"", "vertex_ofs":0 }
-
-[sub_resource type="CanvasItemMaterial" id=11]
-
-shader/shader = SubResource( 10 )
-shader/shading_mode = 0
-shader_param/rotation = 3.0
-
-[sub_resource type="CanvasItemShader" id=12]
-
-_code = { "fragment":"uniform color base=color(0.75,0.6,0.6,1.0);\nvec3 c = texscreen(SCREEN_UV);\n\n//float v = max(c.r,max(c.g,c.b));\nfloat v = dot(c,vec3(0.33333,0.33333,0.33333));\nv=sqrt(v);\n//v*=v;\nCOLOR.rgb= base.rgb*v;\n", "fragment_ofs":0, "light":"", "light_ofs":0, "vertex":"", "vertex_ofs":0 }
-
-[sub_resource type="CanvasItemMaterial" id=13]
-
-shader/shader = SubResource( 12 )
-shader/shading_mode = 0
-shader_param/base = Color( 0.75, 0.566284, 0.6, 1 )
-
-[sub_resource type="CanvasItemShader" id=14]
-
-_code = { "fragment":"vec3 c = texscreen(SCREEN_UV);\nc=vec3(1.0)-c;\nCOLOR.rgb=c;\n", "fragment_ofs":0, "light":"", "light_ofs":0, "vertex":"", "vertex_ofs":0 }
-
-[sub_resource type="CanvasItemMaterial" id=15]
-
-shader/shader = SubResource( 14 )
-shader/shading_mode = 0
-
-[sub_resource type="CanvasItemShader" id=16]
-
-_code = { "fragment":"vec3 c = texscreen(SCREEN_UV);\nc=mod(c+vec3(0.5),vec3(1.0));\nCOLOR.rgb=c;\n", "fragment_ofs":0, "light":"", "light_ofs":0, "vertex":"", "vertex_ofs":0 }
-
-[sub_resource type="CanvasItemMaterial" id=17]
-
-shader/shader = SubResource( 16 )
-shader/shading_mode = 0
-
-[sub_resource type="CanvasItemShader" id=18]
-
-_code = { "fragment":"vec3 c = texscreen(SCREEN_UV);\nCOLOR.rgb=normalize(c);\n", "fragment_ofs":0, "light":"", "light_ofs":0, "vertex":"", "vertex_ofs":0 }
-
-[sub_resource type="CanvasItemMaterial" id=19]
-
-shader/shader = SubResource( 18 )
-shader/shading_mode = 0
-
-[sub_resource type="CanvasItemShader" id=20]
-
-_code = { "fragment":"uniform float brightness=0.8;\nuniform float contrast=1.5;\nuniform float saturation=1.8;\n\nvec3 c = texscreen(SCREEN_UV);\n\nc.rgb = mix(vec3(0.0),c.rgb,brightness);\nc.rgb = mix(vec3(0.5),c.rgb,contrast);\nc.rgb = mix(vec3(dot(vec3(1.0),c.rgb)*0.33333),c.rgb,saturation);\n\nCOLOR.rgb=c;\n", "fragment_ofs":0, "light":"", "light_ofs":0, "vertex":"", "vertex_ofs":0 }
-
-[sub_resource type="CanvasItemMaterial" id=21]
-
-shader/shader = SubResource( 20 )
-shader/shading_mode = 0
-shader_param/brightness = 0.8
-shader_param/contrast = 1.5
-shader_param/saturation = 1.8
-
-[sub_resource type="CanvasItemShader" id=22]
-
-_code = { "fragment":"uniform float frequency=60;\nuniform float depth = 0.005;\n\nvec2 uv = SCREEN_UV;\nuv.x += sin(uv.y*frequency+TIME)*depth;\nuv.x = clamp(uv.x,0,1);\nvec3 c = texscreen(uv);\n\n\nCOLOR.rgb=c;\n", "fragment_ofs":0, "light":"", "light_ofs":0, "vertex":"", "vertex_ofs":0 }
-
-[sub_resource type="CanvasItemMaterial" id=23]
-
-shader/shader = SubResource( 22 )
-shader/shading_mode = 0
-shader_param/frequency = 60.0
-shader_param/depth = 0.005
-
-[sub_resource type="CanvasItemShader" id=24]
-
-_code = { "fragment":"uniform color base=color(0.75,0.6,0.6,1.0);\nuniform texture grain;\nuniform float grain_strength=0.3;\nuniform texture vignette;\nuniform float fps=12;\nuniform float stretch = 0.5;\nuniform float flashing=0.01;\n\nvec3 c = texscreen(SCREEN_UV);\n\n//float v = max(c.r,max(c.g,c.b));\nfloat v = dot(c,vec3(0.33333,0.33333,0.33333));\nv=sqrt(v);\n//v*=v;\nfloat make_grain(float time) {\n\n\tvec2 ofs = vec2(sin(41*time*sin(time*123)),sin(27*time*sin(time*312)));\n\treturn tex(grain,(UV+mod(ofs,vec2(1,1)))*stretch).r;\n}\n\nfloat f = 1.0/fps;\nfloat g = make_grain(TIME-mod(TIME,f));\ng=max(g,make_grain(TIME-mod(TIME,f)+f)*0.5);\ng=max(g,make_grain(TIME-mod(TIME,f)+f*2.0)*0.25);\n\n\nCOLOR.rgb= base.rgb*v-vec3(g)*grain_strength;\nCOLOR.rgb*=tex(vignette,UV).r;\nfloat ft = TIME * 0.002;\nCOLOR.rgb+=vec3(sin(75*ft*sin(ft*123)))*flashing;\n", "fragment_ofs":0, "light":"", "light_ofs":0, "vertex":"", "vertex_ofs":0 }
-
-[sub_resource type="CanvasItemMaterial" id=25]
-
-shader/shader = SubResource( 24 )
-shader/shading_mode = 0
-shader_param/base = Color( 0.75, 0.566284, 0.6, 1 )
-shader_param/grain = ExtResource( 8 )
-shader_param/grain_strength = 0.3
-shader_param/vignette = ExtResource( 6 )
-shader_param/fps = 12.0
-shader_param/stretch = 0.5
-shader_param/flashing = 0.01
-
-[node name="Control" type="Control"]
-
-anchor/right = 1
-anchor/bottom = 1
-focus/ignore_mouse = false
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 0.0
-margin/bottom = 0.0
-script/script = ExtResource( 1 )
-
-[node name="pictures" type="Control" parent="."]
-
-anchor/right = 1
-anchor/bottom = 1
-focus/ignore_mouse = false
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 0.0
-margin/bottom = 0.0
-
-[node name="burano" type="TextureFrame" parent="pictures"]
-
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 40.0
-margin/bottom = 40.0
-texture = ExtResource( 2 )
-
-[node name="roby" type="TextureFrame" parent="pictures"]
-
-visibility/visible = false
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 40.0
-margin/bottom = 40.0
-texture = ExtResource( 3 )
-
-[node name="mountains" type="TextureFrame" parent="pictures"]
-
-visibility/visible = false
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 40.0
-margin/bottom = 40.0
-texture = ExtResource( 4 )
-
-[node name="forest" type="TextureFrame" parent="pictures"]
-
-visibility/visible = false
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 40.0
-margin/bottom = 40.0
-texture = ExtResource( 5 )
-
-[node name="effects" type="Control" parent="."]
-
-anchor/right = 1
-anchor/bottom = 1
-focus/ignore_mouse = false
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = -20.0
-margin/bottom = 0.0
-
-[node name="disabled" type="Control" parent="effects"]
-
-focus/ignore_mouse = false
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 40.0
-margin/bottom = 40.0
-
-[node name="vignette" type="TextureFrame" parent="effects"]
-
-visibility/visible = false
-material/material = SubResource( 2 )
-anchor/right = 1
-anchor/bottom = 1
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 0.0
-margin/bottom = 0.0
-texture = ExtResource( 7 )
-expand = true
-
-[node name="blur" type="TextureFrame" parent="effects"]
-
-visibility/visible = false
-material/material = SubResource( 4 )
-anchor/right = 1
-anchor/bottom = 1
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 0.0
-margin/bottom = 0.0
-texture = ExtResource( 7 )
-expand = true
-
-[node name="radial_blur" type="TextureFrame" parent="effects"]
-
-visibility/visible = false
-material/material = SubResource( 6 )
-anchor/right = 1
-anchor/bottom = 1
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = -1.0
-margin/top = 0.0
-margin/right = 1.0
-margin/bottom = 0.0
-texture = ExtResource( 7 )
-expand = true
-
-[node name="radial_etch" type="TextureFrame" parent="effects"]
-
-visibility/visible = false
-material/material = SubResource( 7 )
-anchor/right = 1
-anchor/bottom = 1
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = -1.0
-margin/top = 0.0
-margin/right = 1.0
-margin/bottom = 0.0
-texture = ExtResource( 7 )
-expand = true
-
-[node name="pixelize" type="TextureFrame" parent="effects"]
-
-visibility/visible = false
-material/material = SubResource( 9 )
-anchor/right = 1
-anchor/bottom = 1
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 0.0
-margin/bottom = 0.0
-texture = ExtResource( 7 )
-expand = true
-
-[node name="whirl" type="TextureFrame" parent="effects"]
-
-visibility/visible = false
-material/material = SubResource( 11 )
-anchor/right = 1
-anchor/bottom = 1
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 0.0
-margin/bottom = 0.0
-texture = ExtResource( 7 )
-expand = true
-
-[node name="sepia" type="TextureFrame" parent="effects"]
-
-visibility/visible = false
-material/material = SubResource( 13 )
-anchor/right = 1
-anchor/bottom = 1
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 0.0
-margin/bottom = 0.0
-texture = ExtResource( 7 )
-expand = true
-
-[node name="negative" type="TextureFrame" parent="effects"]
-
-visibility/visible = false
-material/material = SubResource( 15 )
-anchor/right = 1
-anchor/bottom = 1
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 0.0
-margin/bottom = 0.0
-texture = ExtResource( 7 )
-expand = true
-
-[node name="contrasted" type="TextureFrame" parent="effects"]
-
-visibility/visible = false
-material/material = SubResource( 17 )
-anchor/right = 1
-anchor/bottom = 1
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 0.0
-margin/bottom = 0.0
-texture = ExtResource( 7 )
-expand = true
-
-[node name="normalized" type="TextureFrame" parent="effects"]
-
-visibility/visible = false
-material/material = SubResource( 19 )
-anchor/right = 1
-anchor/bottom = 1
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 0.0
-margin/bottom = 0.0
-texture = ExtResource( 7 )
-expand = true
-
-[node name="BCS" type="TextureFrame" parent="effects"]
-
-visibility/visible = false
-material/material = SubResource( 21 )
-anchor/right = 1
-anchor/bottom = 1
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 3.0
-margin/right = 0.0
-margin/bottom = -3.0
-texture = ExtResource( 7 )
-expand = true
-
-[node name="mirage" type="TextureFrame" parent="effects"]
-
-visibility/visible = false
-material/material = SubResource( 23 )
-anchor/right = 1
-anchor/bottom = 1
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 0.0
-margin/bottom = 0.0
-texture = ExtResource( 7 )
-expand = true
-
-[node name="old_film" type="TextureFrame" parent="effects"]
-
-visibility/visible = false
-material/material = SubResource( 25 )
-anchor/right = 1
-anchor/bottom = 1
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = -3.0
-margin/top = 0.0
-margin/right = 3.0
-margin/bottom = 0.0
-texture = ExtResource( 7 )
-expand = true
-
-[node name="picture" type="OptionButton" parent="."]
-
-visibility/opacity = 0.8
-focus/ignore_mouse = false
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 8.0
-margin/top = 7.0
-margin/right = 131.0
-margin/bottom = 28.0
-toggle_mode = false
-flat = false
-align = 0
-selected = -1
-items = [ ]
-
-[node name="effect" type="OptionButton" parent="."]
-
-visibility/opacity = 0.8
-focus/ignore_mouse = false
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 137.0
-margin/top = 7.0
-margin/right = 260.0
-margin/bottom = 28.0
-toggle_mode = false
-flat = false
-align = 0
-selected = -1
-items = [ ]
-
-[connection signal="item_selected" from="picture" to="." method="_on_picture_item_selected"]
-
-[connection signal="item_selected" from="effect" to="." method="_on_effect_item_selected"]
-
-
diff --git a/demos/2d/sdf_font/KaushanScript-Regular.otf b/demos/2d/sdf_font/KaushanScript-Regular.otf
deleted file mode 100644
index bd29502100..0000000000
--- a/demos/2d/sdf_font/KaushanScript-Regular.otf
+++ /dev/null
Binary files differ
diff --git a/demos/2d/sdf_font/engine.cfg b/demos/2d/sdf_font/engine.cfg
deleted file mode 100644
index 22f5e034cb..0000000000
--- a/demos/2d/sdf_font/engine.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-[application]
-
-name="Signed Distance Field Font"
-main_scene="res://sdf.tscn"
-icon="res://icon.png"
diff --git a/demos/2d/sdf_font/font.fnt b/demos/2d/sdf_font/font.fnt
deleted file mode 100644
index c2b6b0177d..0000000000
--- a/demos/2d/sdf_font/font.fnt
+++ /dev/null
Binary files differ
diff --git a/demos/2d/sdf_font/icon.png b/demos/2d/sdf_font/icon.png
deleted file mode 100644
index 0c700ad77c..0000000000
--- a/demos/2d/sdf_font/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/sdf_font/sdf.tscn b/demos/2d/sdf_font/sdf.tscn
deleted file mode 100644
index a3305c2edc..0000000000
--- a/demos/2d/sdf_font/sdf.tscn
+++ /dev/null
@@ -1,74 +0,0 @@
-[gd_scene load_steps=4 format=1]
-
-[ext_resource path="res://font.fnt" type="Font" id=1]
-
-[sub_resource type="Animation" id=1]
-
-resource/name = "zoomin_zoomout"
-length = 10.0
-loop = true
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath("base:transform/scale")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":true, "times":FloatArray( 0, 5 ), "transitions":FloatArray( -2, -2 ), "values":[ Vector2( 0.5, 0.5 ), Vector2( 20, 20 ) ] }
-
-[sub_resource type="Animation" id=2]
-
-length = 15.0
-loop = true
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath("base:transform/rot")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":true, "times":FloatArray( 0, 15 ), "transitions":FloatArray( 1, 1 ), "values":[ 0.0, -360.0 ] }
-
-[node name="node" type="Node2D"]
-
-[node name="base" type="Position2D" parent="."]
-
-transform/pos = Vector2( 376.532, 275.119 )
-transform/scale = Vector2( 0.5, 0.5 )
-
-[node name="Label" type="Label" parent="base"]
-
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-margin/left = -132.0
-margin/top = -34.0
-margin/right = 124.0
-margin/bottom = 64.0
-custom_fonts/font = ExtResource( 1 )
-custom_colors/font_color = Color( 0.853858, 0.771714, 0.753746, 1 )
-custom_colors/font_color_shadow = Color( 0.56592, 0.454525, 0.518426, 1 )
-text = "Signed Distance\nField Font!!"
-align = 1
-percent_visible = 1.0
-lines_skipped = 0
-max_lines_visible = -1
-
-[node name="zoom" type="AnimationPlayer" parent="."]
-
-playback/process_mode = 1
-playback/default_blend_time = 0.0
-root/root = NodePath("..")
-anims/zoomin_zoomout = SubResource( 1 )
-playback/active = true
-playback/speed = 1.0
-blend_times = [ ]
-autoplay = "zoomin_zoomout"
-
-[node name="rotate" type="AnimationPlayer" parent="."]
-
-playback/process_mode = 1
-playback/default_blend_time = 0.0
-root/root = NodePath("..")
-anims/rotate = SubResource( 2 )
-anims/zoomin_zoomout = SubResource( 1 )
-playback/active = true
-playback/speed = 1.0
-blend_times = [ ]
-autoplay = "rotate"
-
-
diff --git a/demos/2d/shower_of_bullets/bullet.png b/demos/2d/shower_of_bullets/bullet.png
deleted file mode 100644
index 7466374129..0000000000
--- a/demos/2d/shower_of_bullets/bullet.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/shower_of_bullets/bullets.gd b/demos/2d/shower_of_bullets/bullets.gd
deleted file mode 100644
index e0eba2682a..0000000000
--- a/demos/2d/shower_of_bullets/bullets.gd
+++ /dev/null
@@ -1,71 +0,0 @@
-
-extends Node2D
-
-# This demo is an example of controling a high number of 2D objects with logic and collision without using scene nodes.
-# This technique is a lot more efficient than using instancing and nodes, but requires more programming and is less visual
-
-# Member variables
-const BULLET_COUNT = 500
-const SPEED_MIN = 20
-const SPEED_MAX = 50
-
-var bullets = []
-var shape
-
-
-# Inner classes
-class Bullet:
- var pos = Vector2()
- var speed = 1.0
- var body = RID()
-
-
-func _draw():
- var t = preload("res://bullet.png")
- var tofs = -t.get_size()*0.5
- for b in bullets:
- draw_texture(t, b.pos + tofs)
-
-
-func _process(delta):
- var width = get_viewport_rect().size.x*2.0
- var mat = Matrix32()
- for b in bullets:
- b.pos.x -= b.speed*delta
- if (b.pos.x < -30):
- b.pos.x += width
- mat.o = b.pos
-
- Physics2DServer.body_set_state(b.body, Physics2DServer.BODY_STATE_TRANSFORM, mat)
-
- update()
-
-
-func _ready():
- shape = Physics2DServer.shape_create(Physics2DServer.SHAPE_CIRCLE)
- Physics2DServer.shape_set_data(shape, 8) # Radius
-
- for i in range(BULLET_COUNT):
- var b = Bullet.new()
- b.speed = rand_range(SPEED_MIN, SPEED_MAX)
- b.body = Physics2DServer.body_create(Physics2DServer.BODY_MODE_KINEMATIC)
- Physics2DServer.body_set_space(b.body, get_world_2d().get_space())
- Physics2DServer.body_add_shape(b.body, shape)
-
- b.pos = Vector2(get_viewport_rect().size * Vector2(randf()*2.0, randf())) # Twice as long
- b.pos.x += get_viewport_rect().size.x # Start outside
- var mat = Matrix32()
- mat.o = b.pos
- Physics2DServer.body_set_state(b.body, Physics2DServer.BODY_STATE_TRANSFORM, mat)
-
- bullets.append(b)
-
- set_process(true)
-
-
-func _exit_tree():
- for b in bullets:
- Physics2DServer.free_rid(b.body)
-
- Physics2DServer.free_rid(shape)
- bullets.clear()
diff --git a/demos/2d/shower_of_bullets/engine.cfg b/demos/2d/shower_of_bullets/engine.cfg
deleted file mode 100644
index 8db2ae9006..0000000000
--- a/demos/2d/shower_of_bullets/engine.cfg
+++ /dev/null
@@ -1,16 +0,0 @@
-[application]
-
-name="Bullet Shower"
-main_scene="res://shower.tscn"
-icon="res://icon.png"
-
-[display]
-
-width=1024
-height=600
-resizable=true
-stretch_aspect="keep"
-
-[physics_2d]
-
-cell_size=64
diff --git a/demos/2d/shower_of_bullets/face_happy.png b/demos/2d/shower_of_bullets/face_happy.png
deleted file mode 100644
index 6ed643b62d..0000000000
--- a/demos/2d/shower_of_bullets/face_happy.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/shower_of_bullets/face_sad.png b/demos/2d/shower_of_bullets/face_sad.png
deleted file mode 100644
index d6318b20a3..0000000000
--- a/demos/2d/shower_of_bullets/face_sad.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/shower_of_bullets/icon.png b/demos/2d/shower_of_bullets/icon.png
deleted file mode 100644
index 432c74a5a3..0000000000
--- a/demos/2d/shower_of_bullets/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/shower_of_bullets/shower.gd b/demos/2d/shower_of_bullets/shower.gd
deleted file mode 100644
index 50c1109489..0000000000
--- a/demos/2d/shower_of_bullets/shower.gd
+++ /dev/null
@@ -1,25 +0,0 @@
-
-extends Node2D
-
-# Member variables
-var touching = 0
-
-func _input(event):
- if (event.type == InputEvent.MOUSE_MOTION):
- get_node("player").set_pos(event.pos - Vector2(0, 16))
-
-
-func _on_player_body_enter_shape(body_id, body, body_shape, area_shape):
- touching += 1
- if (touching == 1):
- get_node("player/sprite").set_frame(1)
-
-
-func _on_player_body_exit_shape(body_id, body, body_shape, area_shape):
- touching -= 1
- if (touching == 0):
- get_node("player/sprite").set_frame(0)
-
-
-func _ready():
- set_process_input(true)
diff --git a/demos/2d/shower_of_bullets/shower.tscn b/demos/2d/shower_of_bullets/shower.tscn
deleted file mode 100644
index 9df555f96a..0000000000
--- a/demos/2d/shower_of_bullets/shower.tscn
+++ /dev/null
@@ -1,51 +0,0 @@
-[gd_scene load_steps=7 format=1]
-
-[ext_resource path="res://shower.gd" type="Script" id=1]
-[ext_resource path="res://bullets.gd" type="Script" id=2]
-[ext_resource path="res://face_happy.png" type="Texture" id=3]
-[ext_resource path="res://face_sad.png" type="Texture" id=4]
-
-[sub_resource type="CircleShape2D" id=1]
-
-custom_solver_bias = 0.0
-radius = 14.0
-
-[sub_resource type="SpriteFrames" id=2]
-
-frames = [ ExtResource( 3 ), ExtResource( 4 ) ]
-
-[node name="shower" type="Node2D"]
-
-script/script = ExtResource( 1 )
-
-[node name="bullets" type="Node2D" parent="."]
-
-script/script = ExtResource( 2 )
-
-[node name="player" type="Area2D" parent="."]
-
-input/pickable = true
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-gravity_vec = Vector2( 0, 1 )
-gravity = 98.0
-linear_damp = 0.1
-angular_damp = 1.0
-
-[node name="sprite" type="AnimatedSprite" parent="player"]
-
-transform/scale = Vector2( 0.5, 0.5 )
-frames = SubResource( 2 )
-
-[node name="collision" type="CollisionShape2D" parent="player"]
-
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = -1
-
-[connection signal="body_enter_shape" from="player" to="." method="_on_player_body_enter_shape"]
-
-[connection signal="body_exit_shape" from="player" to="." method="_on_player_body_exit_shape"]
-
-
diff --git a/demos/2d/space_shooter/asteroid.gd b/demos/2d/space_shooter/asteroid.gd
deleted file mode 100644
index 9f6734e122..0000000000
--- a/demos/2d/space_shooter/asteroid.gd
+++ /dev/null
@@ -1,43 +0,0 @@
-
-extends Area2D
-
-# Member variables
-const SPEED = -200
-const Y_RANDOM = 10
-
-var points = 1
-var speed_y = 0.0
-var destroyed = false
-
-
-func _process(delta):
- translate(Vector2(SPEED, speed_y)*delta)
-
-
-func _ready():
- speed_y = rand_range(-Y_RANDOM, Y_RANDOM)
-
-
-func destroy():
- if (destroyed):
- return
- destroyed = true
- get_node("anim").play("explode")
- set_process(false)
- get_node("sfx").play("sound_explode")
- # Accumulate points
- get_node("/root/game_state").points += 1
-
-
-func is_enemy():
- return not destroyed
-
-
-func _on_visibility_enter_screen():
- set_process(true)
- # Make it spin!
- get_node("anim").play("spin")
-
-
-func _on_visibility_exit_screen():
- queue_free()
diff --git a/demos/2d/space_shooter/asteroid.tscn b/demos/2d/space_shooter/asteroid.tscn
deleted file mode 100644
index ad57f6ef7c..0000000000
--- a/demos/2d/space_shooter/asteroid.tscn
+++ /dev/null
@@ -1,129 +0,0 @@
-[gd_scene load_steps=9 format=1]
-
-[ext_resource path="res://asteroid.gd" type="Script" id=1]
-[ext_resource path="res://meteorite.png" type="Texture" id=2]
-[ext_resource path="res://sound_explode.wav" type="Sample" id=3]
-
-[sub_resource type="CircleShape2D" id=1]
-
-custom_solver_bias = 0.0
-radius = 22.0
-
-[sub_resource type="Animation" id=2]
-
-resource/name = "explode"
-length = 1.0
-loop = false
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath("particles:config/emitting")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.1 ), "transitions":FloatArray( 1, 1 ), "values":[ true, false ] }
-tracks/1/type = "value"
-tracks/1/path = NodePath("sprite:visibility/visible")
-tracks/1/interp = 1
-tracks/1/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ false ] }
-tracks/2/type = "method"
-tracks/2/path = NodePath(".")
-tracks/2/interp = 1
-tracks/2/keys = { "times":FloatArray( 0.7 ), "transitions":FloatArray( 1 ), "values":[ { "args":[ ], "method":"queue_free" } ] }
-
-[sub_resource type="Animation" id=3]
-
-length = 3.0
-loop = true
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath("sprite:transform/rot")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":true, "times":FloatArray( 0, 3 ), "transitions":FloatArray( 1, 1 ), "values":[ 0.0, 360.0 ] }
-
-[sub_resource type="ColorRamp" id=4]
-
-offsets = FloatArray( 0, 1 )
-colors = ColorArray( 1, 1, 1, 1, 1, 1, 1, 0 )
-
-[sub_resource type="SampleLibrary" id=5]
-
-samples/sound_explode = { "db":0.0, "pitch":1.0, "sample":ExtResource( 3 ) }
-
-[node name="asteroid" type="Area2D"]
-
-input/pickable = true
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-gravity_vec = Vector2( 0, 1 )
-gravity = 98.0
-linear_damp = 0.1
-angular_damp = 1.0
-script/script = ExtResource( 1 )
-
-[node name="sprite" type="Sprite" parent="."]
-
-texture = ExtResource( 2 )
-
-[node name="anim" type="AnimationPlayer" parent="."]
-
-playback/process_mode = 1
-playback/default_blend_time = 0.0
-root/root = NodePath("..")
-anims/explode = SubResource( 2 )
-anims/spin = SubResource( 3 )
-playback/active = true
-playback/speed = 1.0
-blend_times = [ ]
-autoplay = ""
-
-[node name="collision" type="CollisionShape2D" parent="."]
-
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = -1
-
-[node name="visibility" type="VisibilityNotifier2D" parent="."]
-
-rect = Rect2( -10, -10, 20, 20 )
-
-[node name="particles" type="Particles2D" parent="."]
-
-config/amount = 32
-config/lifetime = 0.5
-config/emitting = false
-config/half_extents = Vector2( 20, 20 )
-config/explosiveness = 0.1
-config/texture = ExtResource( 2 )
-params/direction = 0.0
-params/spread = 180.0
-params/linear_velocity = 200.0
-params/spin_velocity = 0.0
-params/orbit_velocity = 0.0
-params/gravity_direction = 0.0
-params/gravity_strength = 9.8
-params/radial_accel = 0.0
-params/tangential_accel = 0.0
-params/damping = 0.0
-params/initial_angle = 0.0
-params/initial_size = 0.5
-params/final_size = 0.2
-params/hue_variation = 0.0
-params/anim_speed_scale = 1.0
-params/anim_initial_pos = 0.0
-color/color_ramp = SubResource( 4 )
-
-[node name="sfx" type="SamplePlayer2D" parent="."]
-
-params/volume_db = 0.0
-params/pitch_scale = 1.0
-params/attenuation/min_distance = 1.0
-params/attenuation/max_distance = 2048.0
-params/attenuation/distance_exp = 1.0
-config/polyphony = 1
-config/samples = SubResource( 5 )
-config/pitch_random = 0.0
-
-[connection signal="enter_screen" from="visibility" to="." method="_on_visibility_enter_screen"]
-
-[connection signal="exit_screen" from="visibility" to="." method="_on_visibility_exit_screen"]
-
-
diff --git a/demos/2d/space_shooter/bg_gradient.png b/demos/2d/space_shooter/bg_gradient.png
deleted file mode 100644
index 3e71976dc6..0000000000
--- a/demos/2d/space_shooter/bg_gradient.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/space_shooter/big_star.png b/demos/2d/space_shooter/big_star.png
deleted file mode 100644
index 7726a7aa12..0000000000
--- a/demos/2d/space_shooter/big_star.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/space_shooter/enemy1.gd b/demos/2d/space_shooter/enemy1.gd
deleted file mode 100644
index 204995c05d..0000000000
--- a/demos/2d/space_shooter/enemy1.gd
+++ /dev/null
@@ -1,36 +0,0 @@
-
-extends Area2D
-
-# Member variables
-const SPEED = -200
-
-var destroyed=false
-
-
-func _process(delta):
- get_parent().translate(Vector2(SPEED*delta, 0))
-
-
-func is_enemy():
- return not destroyed
-
-
-func destroy():
- if (destroyed):
- return
- destroyed = true
- get_node("anim").play("explode")
- set_process(false)
- get_node("sfx").play("sound_explode")
- # Accumulate points
- get_node("/root/game_state").points += 5
-
-
-func _on_visibility_enter_screen():
- set_process(true)
- get_node("anim").play("zigzag")
- get_node("anim").seek(randf()*2.0) # Make it start from any pos
-
-
-func _on_visibility_exit_screen():
- queue_free()
diff --git a/demos/2d/space_shooter/enemy1.png b/demos/2d/space_shooter/enemy1.png
deleted file mode 100644
index 242d8f0055..0000000000
--- a/demos/2d/space_shooter/enemy1.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/space_shooter/enemy1.tscn b/demos/2d/space_shooter/enemy1.tscn
deleted file mode 100644
index 5fd4435382..0000000000
--- a/demos/2d/space_shooter/enemy1.tscn
+++ /dev/null
@@ -1,108 +0,0 @@
-[gd_scene load_steps=9 format=1]
-
-[ext_resource path="res://enemy1.gd" type="Script" id=1]
-[ext_resource path="res://enemy1.png" type="Texture" id=2]
-[ext_resource path="res://explosion.tscn" type="PackedScene" id=3]
-[ext_resource path="res://sound_explode.wav" type="Sample" id=4]
-
-[sub_resource type="ConvexPolygonShape2D" id=1]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -25.3272, 15.4072, -31.2711, -7.28794, -1.01097, -20.7969, 24.9263, -4.58614, 30.3299, 13.2457, -2.63205, 17.5686 )
-
-[sub_resource type="Animation" id=2]
-
-length = 1.0
-loop = false
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath("sprite:visibility/visible")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ false ] }
-tracks/1/type = "value"
-tracks/1/path = NodePath("explosion:config/emitting")
-tracks/1/interp = 1
-tracks/1/keys = { "cont":false, "times":FloatArray( 0, 0.1 ), "transitions":FloatArray( 1, 1 ), "values":[ true, false ] }
-tracks/2/type = "method"
-tracks/2/path = NodePath("..")
-tracks/2/interp = 1
-tracks/2/keys = { "times":FloatArray( 0.9 ), "transitions":FloatArray( 1 ), "values":[ { "args":[ ], "method":"queue_free" } ] }
-
-[sub_resource type="Animation" id=3]
-
-length = 2.0
-loop = true
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath(".:transform/pos")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":true, "times":FloatArray( 0, 1 ), "transitions":FloatArray( -1.86607, -1.86607 ), "values":[ Vector2( 0, -100 ), Vector2( 0, 100 ) ] }
-
-[sub_resource type="SampleLibrary" id=4]
-
-samples/sound_explode = { "db":0.0, "pitch":1.0, "sample":ExtResource( 4 ) }
-
-[node name="enemy1" type="Node2D"]
-
-[node name="area" type="Area2D" parent="."]
-
-transform/pos = Vector2( 0, -100 )
-input/pickable = true
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-gravity_vec = Vector2( 0, 1 )
-gravity = 98.0
-linear_damp = 0.1
-angular_damp = 1.0
-script/script = ExtResource( 1 )
-
-[node name="collision" type="CollisionPolygon2D" parent="area"]
-
-build_mode = 0
-polygon = Vector2Array( -31.2711, -7.28794, -1.01097, -20.7969, 24.9263, -4.58614, 30.3299, 13.2457, -2.63205, 17.5686, -25.3272, 15.4072 )
-shape_range = Vector2( -1, -1 )
-trigger = false
-
-[node name="sprite" type="Sprite" parent="area"]
-
-texture = ExtResource( 2 )
-
-[node name="explosion" parent="area" instance=ExtResource( 3 )]
-
-transform/rot = -91.1436
-config/explosiveness = 0.1
-params/gravity_strength = 9.8
-
-[node name="anim" type="AnimationPlayer" parent="area"]
-
-playback/process_mode = 1
-playback/default_blend_time = 0.0
-root/root = NodePath("..")
-anims/explode = SubResource( 2 )
-anims/zigzag = SubResource( 3 )
-playback/active = true
-playback/speed = 1.0
-blend_times = [ ]
-autoplay = ""
-
-[node name="visibility" type="VisibilityNotifier2D" parent="area"]
-
-rect = Rect2( -10, -10, 20, 20 )
-
-[node name="sfx" type="SamplePlayer2D" parent="area"]
-
-params/volume_db = 0.0
-params/pitch_scale = 1.0
-params/attenuation/min_distance = 1.0
-params/attenuation/max_distance = 2048.0
-params/attenuation/distance_exp = 1.0
-config/polyphony = 1
-config/samples = SubResource( 4 )
-config/pitch_random = 0.0
-
-[connection signal="enter_screen" from="area/visibility" to="area" method="_on_visibility_enter_screen"]
-
-[connection signal="exit_screen" from="area/visibility" to="area" method="_on_visibility_exit_screen"]
-
-
diff --git a/demos/2d/space_shooter/enemy2.gd b/demos/2d/space_shooter/enemy2.gd
deleted file mode 100644
index cd06579d74..0000000000
--- a/demos/2d/space_shooter/enemy2.gd
+++ /dev/null
@@ -1,51 +0,0 @@
-
-extends Area2D
-
-# Member variables
-const SPEED = -220
-const SHOOT_INTERVAL = 1
-
-var shoot_timeout = 0
-var destroyed=false
-
-
-func _process(delta):
- translate(Vector2(SPEED*delta, 0))
- shoot_timeout -= delta
-
- if (shoot_timeout < 0):
- shoot_timeout = SHOOT_INTERVAL
-
- # Instance a shot
- var shot = preload("res://enemy_shot.tscn").instance()
- # Set pos as "shoot_from" Position2D node
- shot.set_pos(get_node("shoot_from").get_global_pos())
- # Add it to parent, so it has world coordinates
- get_parent().add_child(shot)
-
-
-func is_enemy():
- return not destroyed
-
-
-func destroy():
- if (destroyed):
- return
- destroyed = true
- get_node("anim").play("explode")
- set_process(false)
- get_node("sfx").play("sound_explode")
- # Accumulate points
- get_node("/root/game_state").points += 10
-
-
-func _ready():
- set_fixed_process(true)
-
-
-func _on_visibility_enter_screen():
- set_process(true)
-
-
-func _on_visibility_exit_screen():
- queue_free()
diff --git a/demos/2d/space_shooter/enemy2.png b/demos/2d/space_shooter/enemy2.png
deleted file mode 100644
index 5b63033696..0000000000
--- a/demos/2d/space_shooter/enemy2.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/space_shooter/enemy2.tscn b/demos/2d/space_shooter/enemy2.tscn
deleted file mode 100644
index 56d9f49720..0000000000
--- a/demos/2d/space_shooter/enemy2.tscn
+++ /dev/null
@@ -1,98 +0,0 @@
-[gd_scene load_steps=8 format=1]
-
-[ext_resource path="res://enemy2.gd" type="Script" id=1]
-[ext_resource path="res://enemy2.png" type="Texture" id=2]
-[ext_resource path="res://explosion.tscn" type="PackedScene" id=3]
-[ext_resource path="res://sound_explode.wav" type="Sample" id=4]
-
-[sub_resource type="ConvexPolygonShape2D" id=1]
-
-custom_solver_bias = 0.0
-points = Vector2Array( -31.9306, -11.1163, 15.748, -16.1351, 32.2383, -3.94662, 25.7856, 13.6192, -20.4591, 16.1286 )
-
-[sub_resource type="Animation" id=2]
-
-length = 1.0
-loop = false
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath("explosion:config/emitting")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.1 ), "transitions":FloatArray( 1, 1 ), "values":[ true, false ] }
-tracks/1/type = "value"
-tracks/1/path = NodePath("sprite:visibility/visible")
-tracks/1/interp = 1
-tracks/1/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ false ] }
-tracks/2/type = "method"
-tracks/2/path = NodePath(".")
-tracks/2/interp = 1
-tracks/2/keys = { "times":FloatArray( 0.9 ), "transitions":FloatArray( 1 ), "values":[ { "args":[ ], "method":"queue_free" } ] }
-
-[sub_resource type="SampleLibrary" id=3]
-
-samples/sound_explode = { "db":0.0, "pitch":1.0, "sample":ExtResource( 4 ) }
-
-[node name="enemy2" type="Area2D"]
-
-input/pickable = true
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-gravity_vec = Vector2( 0, 1 )
-gravity = 98.0
-linear_damp = 0.1
-angular_damp = 1.0
-script/script = ExtResource( 1 )
-
-[node name="collision" type="CollisionPolygon2D" parent="."]
-
-build_mode = 0
-polygon = Vector2Array( -31.9306, -11.1163, 15.748, -16.1351, 32.2383, -3.94662, 25.7856, 13.6192, -20.4591, 16.1286 )
-shape_range = Vector2( -1, -1 )
-trigger = false
-
-[node name="sprite" type="Sprite" parent="."]
-
-texture = ExtResource( 2 )
-
-[node name="explosion" parent="." instance=ExtResource( 3 )]
-
-transform/rot = -91.1436
-config/explosiveness = 0.1
-params/gravity_strength = 9.8
-
-[node name="anim" type="AnimationPlayer" parent="."]
-
-playback/process_mode = 1
-playback/default_blend_time = 0.0
-root/root = NodePath("..")
-anims/explode = SubResource( 2 )
-playback/active = true
-playback/speed = 1.0
-blend_times = [ ]
-autoplay = ""
-
-[node name="visibility" type="VisibilityNotifier2D" parent="."]
-
-rect = Rect2( -10, -10, 20, 20 )
-
-[node name="sfx" type="SamplePlayer2D" parent="."]
-
-params/volume_db = 0.0
-params/pitch_scale = 1.0
-params/attenuation/min_distance = 1.0
-params/attenuation/max_distance = 2048.0
-params/attenuation/distance_exp = 1.0
-config/polyphony = 1
-config/samples = SubResource( 3 )
-config/pitch_random = 0.0
-
-[node name="shoot_from" type="Position2D" parent="."]
-
-transform/pos = Vector2( -84.6027, 0.358482 )
-
-[connection signal="enter_screen" from="visibility" to="." method="_on_visibility_enter_screen"]
-
-[connection signal="exit_screen" from="visibility" to="." method="_on_visibility_exit_screen"]
-
-
diff --git a/demos/2d/space_shooter/enemy_shot.gd b/demos/2d/space_shooter/enemy_shot.gd
deleted file mode 100644
index 6c782b69f1..0000000000
--- a/demos/2d/space_shooter/enemy_shot.gd
+++ /dev/null
@@ -1,31 +0,0 @@
-
-extends Area2D
-
-# Member variables
-const SPEED = -800
-
-var hit = false
-
-
-func _process(delta):
- translate(Vector2(delta*SPEED, 0))
-
-
-func _ready():
- set_process(true)
-
-
-func is_enemy():
- return true
-
-
-func _hit_something():
- if (hit):
- return
- hit = true
- set_process(false)
- get_node("anim").play("splash")
-
-
-func _on_visibility_exit_screen():
- queue_free()
diff --git a/demos/2d/space_shooter/enemy_shot.png b/demos/2d/space_shooter/enemy_shot.png
deleted file mode 100644
index 04287211a9..0000000000
--- a/demos/2d/space_shooter/enemy_shot.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/space_shooter/enemy_shot.tscn b/demos/2d/space_shooter/enemy_shot.tscn
deleted file mode 100644
index da6ed6f806..0000000000
--- a/demos/2d/space_shooter/enemy_shot.tscn
+++ /dev/null
@@ -1,99 +0,0 @@
-[gd_scene load_steps=6 format=1]
-
-[ext_resource path="res://enemy_shot.gd" type="Script" id=1]
-[ext_resource path="res://enemy_shot.png" type="Texture" id=2]
-
-[sub_resource type="RectangleShape2D" id=1]
-
-custom_solver_bias = 0.0
-extents = Vector2( 10, 4 )
-
-[sub_resource type="ColorRamp" id=2]
-
-offsets = FloatArray( 0, 1 )
-colors = ColorArray( 1, 0.0491249, 0.0113636, 1, 1, 1, 1, 0 )
-
-[sub_resource type="Animation" id=3]
-
-length = 1.0
-loop = false
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath("hit_splash:config/emitting")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.1 ), "transitions":FloatArray( 1, 1 ), "values":[ true, false ] }
-tracks/1/type = "method"
-tracks/1/path = NodePath(".")
-tracks/1/interp = 1
-tracks/1/keys = { "times":FloatArray( 0.9 ), "transitions":FloatArray( 1 ), "values":[ { "args":[ ], "method":"queue_free" } ] }
-tracks/2/type = "value"
-tracks/2/path = NodePath("sprite:visibility/visible")
-tracks/2/interp = 1
-tracks/2/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ false ] }
-
-[node name="enemy_shot" type="Area2D"]
-
-input/pickable = true
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-gravity_vec = Vector2( 0, 1 )
-gravity = 98.0
-linear_damp = 0.1
-angular_damp = 1.0
-script/script = ExtResource( 1 )
-
-[node name="visibility" type="VisibilityNotifier2D" parent="."]
-
-transform/pos = Vector2( 1.8353, -0.0742126 )
-transform/scale = Vector2( 1.54149, 0.770745 )
-rect = Rect2( -10, -10, 20, 20 )
-
-[node name="sprite" type="Sprite" parent="."]
-
-texture = ExtResource( 2 )
-
-[node name="collision" type="CollisionShape2D" parent="."]
-
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = -1
-
-[node name="hit_splash" type="Particles2D" parent="."]
-
-config/amount = 32
-config/lifetime = 0.5
-config/emitting = false
-config/explosiveness = 0.1
-params/direction = 0.0
-params/spread = 180.0
-params/linear_velocity = 50.0
-params/spin_velocity = 0.0
-params/orbit_velocity = 0.0
-params/gravity_direction = 0.0
-params/gravity_strength = 0.0
-params/radial_accel = 0.0
-params/tangential_accel = 0.0
-params/damping = 0.0
-params/initial_angle = 0.0
-params/initial_size = 3.0
-params/final_size = 3.0
-params/hue_variation = 0.0
-params/anim_speed_scale = 1.0
-params/anim_initial_pos = 0.0
-color/color_ramp = SubResource( 2 )
-
-[node name="anim" type="AnimationPlayer" parent="."]
-
-playback/process_mode = 1
-playback/default_blend_time = 0.0
-root/root = NodePath("..")
-anims/splash = SubResource( 3 )
-playback/active = true
-playback/speed = 1.0
-blend_times = [ ]
-autoplay = ""
-
-[connection signal="exit_screen" from="visibility" to="." method="_on_visibility_exit_screen"]
-
-
diff --git a/demos/2d/space_shooter/engine.cfg b/demos/2d/space_shooter/engine.cfg
deleted file mode 100644
index 8563bd8aa9..0000000000
--- a/demos/2d/space_shooter/engine.cfg
+++ /dev/null
@@ -1,22 +0,0 @@
-[application]
-
-name="Simple Shooter"
-main_scene="res://main_menu.tscn"
-icon="res://icon.png"
-
-[autoload]
-
-game_state="res://game_state.gd"
-
-[display]
-
-width=1024
-height=600
-
-[input]
-
-move_up=[key(Up)]
-move_down=[key(Down)]
-move_left=[key(Left)]
-move_right=[key(Right)]
-shoot=[key(Space)]
diff --git a/demos/2d/space_shooter/explosion.tscn b/demos/2d/space_shooter/explosion.tscn
deleted file mode 100644
index 7c8f94be7d..0000000000
--- a/demos/2d/space_shooter/explosion.tscn
+++ /dev/null
@@ -1,37 +0,0 @@
-[gd_scene load_steps=3 format=1]
-
-[ext_resource path="res://fire.png" type="Texture" id=1]
-
-[sub_resource type="ColorRamp" id=1]
-
-offsets = FloatArray( 0, 0.364725, 0.77494, 1 )
-colors = ColorArray( 1, 1, 1, 1, 1, 0, 0, 1, 0.184473, 0.181601, 0.181345, 1, 1, 1, 1, 0 )
-
-[node name="explosion" type="Particles2D"]
-
-transform/pos = Vector2( 0.918983, -2.11041 )
-transform/rot = -91.1436
-config/amount = 32
-config/lifetime = 0.5
-config/emitting = false
-config/explosiveness = 0.1
-config/texture = ExtResource( 1 )
-params/direction = 0.0
-params/spread = 180.0
-params/linear_velocity = 100.0
-params/spin_velocity = 0.0
-params/orbit_velocity = 0.0
-params/gravity_direction = 0.0
-params/gravity_strength = 9.8
-params/radial_accel = 0.0
-params/tangential_accel = 0.0
-params/damping = 0.0
-params/initial_angle = 0.0
-params/initial_size = 3.0
-params/final_size = 1.0
-params/hue_variation = 0.0
-params/anim_speed_scale = 1.0
-params/anim_initial_pos = 0.0
-color/color_ramp = SubResource( 1 )
-
-
diff --git a/demos/2d/space_shooter/fire.png b/demos/2d/space_shooter/fire.png
deleted file mode 100644
index 1c68c36213..0000000000
--- a/demos/2d/space_shooter/fire.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/space_shooter/game_state.gd b/demos/2d/space_shooter/game_state.gd
deleted file mode 100644
index 0aa5e1f42b..0000000000
--- a/demos/2d/space_shooter/game_state.gd
+++ /dev/null
@@ -1,22 +0,0 @@
-
-extends Node
-
-# Member variables
-var points = 0
-var max_points = 0
-
-
-func _ready():
- var f = File.new()
- # Load high score
- if (f.open("user://highscore", File.READ) == OK):
- max_points = f.get_var()
-
-
-func game_over():
- if (points > max_points):
- max_points = points
- # Save high score
- var f = File.new()
- f.open("user://highscore", File.WRITE)
- f.store_var(max_points)
diff --git a/demos/2d/space_shooter/icon.png b/demos/2d/space_shooter/icon.png
deleted file mode 100644
index 1df2bf5d9d..0000000000
--- a/demos/2d/space_shooter/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/space_shooter/level.tscn b/demos/2d/space_shooter/level.tscn
deleted file mode 100644
index 840d66bd5a..0000000000
--- a/demos/2d/space_shooter/level.tscn
+++ /dev/null
@@ -1,354 +0,0 @@
-[gd_scene load_steps=7 format=1]
-
-[ext_resource path="res://tileset.tres" type="TileSet" id=1]
-[ext_resource path="res://ship.tscn" type="PackedScene" id=2]
-[ext_resource path="res://asteroid.tscn" type="PackedScene" id=3]
-[ext_resource path="res://enemy1.tscn" type="PackedScene" id=4]
-[ext_resource path="res://enemy2.tscn" type="PackedScene" id=5]
-[ext_resource path="res://parallax.tscn" type="PackedScene" id=6]
-
-[node name="Node2D" type="Node2D"]
-
-[node name="TileMap" type="TileMap" parent="."]
-
-mode = 0
-tile_set = ExtResource( 1 )
-cell/size = Vector2( 32, 32 )
-cell/quadrant_size = 16
-cell/custom_transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-cell/half_offset = 2
-cell/tile_origin = 0
-cell/y_sort = false
-collision/use_kinematic = false
-collision/friction = 1.0
-collision/bounce = 0.0
-collision/layers = 1
-collision/mask = 1
-occluder/light_mask = 1
-tile_data = IntArray( 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 31, 0, 32, 0, 33, 0, 34, 0, 35, 0, 36, 0, 37, 0, 38, 0, 39, 0, 63, 0, 64, 0, 99, 0, 100, 0, 101, 0, 102, 0, 103, 0, 104, 0, 105, 0, 106, 0, 107, 0, 108, 0, 109, 0, 110, 0, 111, 0, 112, 0, 113, 0, 114, 0, 115, 0, 116, 0, 117, 0, 118, 0, 119, 0, 120, 0, 121, 0, 122, 0, 123, 0, 124, 0, 125, 0, 126, 0, 127, 0, 128, 0, 145, 0, 184, 0, 65556, 0, 65557, 0, 65558, 0, 65559, 0, 65560, 0, 65561, 0, 65562, 0, 65563, 0, 65564, 0, 65565, 0, 65566, 0, 65567, 0, 65568, 0, 65569, 0, 65570, 0, 65571, 0, 65572, 0, 65573, 0, 65574, 0, 65575, 0, 65599, 0, 65600, 0, 65637, 0, 65638, 0, 65639, 0, 65640, 0, 65641, 0, 65642, 0, 65643, 0, 65644, 0, 65645, 0, 65646, 0, 65647, 0, 65648, 0, 65649, 0, 65650, 0, 65651, 0, 65652, 0, 65653, 0, 65654, 0, 65655, 0, 65656, 0, 65657, 0, 65658, 0, 65659, 0, 65660, 0, 65661, 0, 65662, 0, 65663, 0, 65664, 0, 65681, 0, 65720, 0, 131094, 0, 131095, 0, 131096, 0, 131097, 0, 131098, 0, 131099, 0, 131100, 0, 131101, 0, 131102, 0, 131103, 0, 131104, 0, 131105, 0, 131106, 0, 131107, 0, 131108, 0, 131109, 0, 131135, 0, 131136, 0, 131137, 0, 131176, 0, 131177, 0, 131178, 0, 131179, 0, 131180, 0, 131181, 0, 131182, 0, 131183, 0, 131184, 0, 131185, 0, 131186, 0, 131187, 0, 131188, 0, 131189, 0, 131190, 0, 131191, 0, 131192, 0, 131193, 0, 131194, 0, 131195, 0, 131196, 0, 131197, 0, 131198, 0, 131199, 0, 131217, 0, 131256, 0, 196631, 0, 196632, 0, 196633, 0, 196634, 0, 196635, 0, 196636, 0, 196637, 0, 196638, 0, 196639, 0, 196640, 0, 196641, 0, 196642, 0, 196671, 0, 196672, 0, 196673, 0, 196716, 0, 196717, 0, 196718, 0, 196719, 0, 196720, 0, 196721, 0, 196722, 0, 196723, 0, 196724, 0, 196725, 0, 196726, 0, 196727, 0, 196728, 0, 196729, 0, 196730, 0, 196753, 0, 196792, 0, 262169, 0, 262170, 0, 262171, 0, 262172, 0, 262173, 0, 262174, 0, 262175, 0, 262207, 0, 262208, 0, 262209, 0, 262256, 0, 262257, 0, 262258, 0, 262259, 0, 262260, 0, 262261, 0, 262262, 0, 262263, 0, 262289, 0, 262328, 0, 327707, 0, 327708, 0, 327743, 0, 327744, 0, 327825, 0, 327826, 0, 327827, 0, 327828, 0, 327829, 0, 327830, 0, 327831, 0, 327832, 0, 327833, 0, 327834, 0, 327835, 0, 327836, 0, 327845, 0, 327846, 0, 327847, 0, 327848, 0, 327849, 0, 327850, 0, 327851, 0, 327852, 0, 327853, 0, 327854, 0, 327855, 0, 327856, 0, 327857, 0, 327864, 0, 327911, 0, 327912, 0, 328010, 0, 328011, 0, 328012, 0, 328013, 0, 328014, 0, 393372, 0, 393393, 0, 393400, 0, 393445, 0, 393446, 0, 393447, 0, 393448, 0, 393548, 0, 393549, 0, 393550, 0, 458908, 0, 458929, 0, 458936, 0, 458981, 0, 458982, 0, 458983, 0, 524444, 0, 524465, 0, 524472, 0, 524517, 0, 524518, 0, 589980, 0, 590001, 0, 590008, 0, 655516, 0, 655521, 0, 655522, 0, 655523, 0, 655524, 0, 655525, 0, 655526, 0, 655537, 0, 655544, 0, 655646, 0, 721041, 0, 721042, 0, 721043, 0, 721044, 0, 721045, 0, 721046, 0, 721052, 0, 721062, 0, 721073, 0, 721080, 0, 721181, 0, 721182, 0, 721183, 0, 721184, 0, 786577, 0, 786588, 0, 786598, 0, 786616, 0, 786717, 0, 786718, 0, 786719, 0, 786720, 0, 852113, 0, 852124, 0, 852134, 0, 852152, 0, 852253, 0, 852254, 0, 852255, 0, 917573, 0, 917574, 0, 917575, 0, 917576, 0, 917577, 0, 917578, 0, 917579, 0, 917580, 0, 917581, 0, 917582, 0, 917583, 0, 917584, 0, 917585, 0, 917649, 0, 917660, 0, 917670, 0, 917688, 0, 983106, 0, 983107, 0, 983108, 0, 983109, 0, 983110, 0, 983111, 0, 983112, 0, 983113, 0, 983114, 0, 983115, 0, 983116, 0, 983117, 0, 983118, 0, 983119, 0, 983120, 0, 983121, 0, 983122, 0, 983185, 0, 983206, 0, 983224, 0, 1048640, 0, 1048641, 0, 1048642, 0, 1048643, 0, 1048644, 0, 1048645, 0, 1048646, 0, 1048647, 0, 1048648, 0, 1048649, 0, 1048650, 0, 1048651, 0, 1048652, 0, 1048653, 0, 1048654, 0, 1048655, 0, 1048656, 0, 1048657, 0, 1048658, 0, 1048659, 0, 1048721, 0, 1048742, 0, 1048826, 0, 1048828, 0, 1114175, 0, 1114176, 0, 1114177, 0, 1114178, 0, 1114179, 0, 1114180, 0, 1114181, 0, 1114182, 0, 1114183, 0, 1114184, 0, 1114185, 0, 1114186, 0, 1114187, 0, 1114188, 0, 1114189, 0, 1114190, 0, 1114191, 0, 1114192, 0, 1114193, 0, 1114194, 0, 1114195, 0, 1114196, 0, 1114197, 0, 1114198, 0, 1114257, 0, 1114278, 0, 1114360, 0, 1114361, 0, 1114362, 0, 1114363, 0, 1114365, 0, 1114480, 0, 1114481, 0, 1179707, 0, 1179708, 0, 1179709, 0, 1179710, 0, 1179711, 0, 1179712, 0, 1179713, 0, 1179714, 0, 1179715, 0, 1179716, 0, 1179717, 0, 1179718, 0, 1179719, 0, 1179720, 0, 1179721, 0, 1179722, 0, 1179723, 0, 1179724, 0, 1179725, 0, 1179726, 0, 1179727, 0, 1179728, 0, 1179729, 0, 1179730, 0, 1179731, 0, 1179732, 0, 1179733, 0, 1179734, 0, 1179735, 0, 1179736, 0, 1179737, 0, 1179738, 0, 1179739, 0, 1179740, 0, 1179741, 0, 1179793, 0, 1179814, 0, 1179896, 0, 1179898, 0, 1179899, 0, 1179900, 0, 1179901, 0, 1180015, 0, 1180016, 0, 1180017, 0, 1180018, 0, 1180019, 0, 1245244, 0, 1245245, 0, 1245246, 0, 1245247, 0, 1245248, 0, 1245249, 0, 1245250, 0, 1245251, 0, 1245252, 0, 1245253, 0, 1245254, 0, 1245255, 0, 1245256, 0, 1245257, 0, 1245258, 0, 1245259, 0, 1245260, 0, 1245261, 0, 1245262, 0, 1245263, 0, 1245264, 0, 1245265, 0, 1245266, 0, 1245267, 0, 1245268, 0, 1245269, 0, 1245270, 0, 1245271, 0, 1245272, 0, 1245273, 0, 1245274, 0, 1245275, 0, 1245276, 0, 1245277, 0, 1245329, 0, 1245350, 0, 1245432, 0, 1245433, 0, 1245434, 0, 1245435, 0, 1245480, 0, 1245481, 0, 1245482, 0, 1245551, 0, 1245552, 0, 1245553, 0, 1245554, 0, 1310886, 0, 1310905, 0, 1311015, 0, 1311016, 0, 1311017, 0, 1311018, 0 )
-
-[node name="rail" parent="." instance=ExtResource( 2 )]
-
-[node name="enemies" type="Node2D" parent="."]
-
-[node name="asteroid" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 1797.52, 105.736 )
-linear_damp = 0.1
-
-[node name="asteroid1" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 1666.61, 304.621 )
-linear_damp = 0.1
-
-[node name="asteroid2" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 1988.85, 443.086 )
-linear_damp = 0.1
-
-[node name="asteroid3" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 2595.58, 103.219 )
-linear_damp = 0.1
-
-[node name="asteroid4" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 3229.99, 299.586 )
-linear_damp = 0.1
-
-[node name="asteroid5" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 3592.52, 541.269 )
-linear_damp = 0.1
-
-[node name="asteroid6" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 4571.84, 216.508 )
-linear_damp = 0.1
-
-[node name="asteroid7" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 4571.84, 284.481 )
-linear_damp = 0.1
-
-[node name="asteroid8" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 4571.84, 360.007 )
-linear_damp = 0.1
-
-[node name="asteroid9" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 5140.8, 108.254 )
-linear_damp = 0.1
-
-[node name="asteroid10" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 5168.5, 475.814 )
-linear_damp = 0.1
-
-[node name="asteroid11" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 5767.67, 113.289 )
-linear_damp = 0.1
-
-[node name="asteroid12" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 6107.53, 480.849 )
-linear_damp = 0.1
-
-[node name="asteroid13" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 6364.32, 105.736 )
-linear_damp = 0.1
-
-[node name="asteroid14" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 6731.88, 573.997 )
-linear_damp = 0.1
-
-[node name="asteroid15" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 7033.99, 166.157 )
-linear_damp = 0.1
-
-[node name="asteroid16" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 6424.74, 352.454 )
-linear_damp = 0.1
-
-[node name="asteroid17" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 7263.08, 80.5608 )
-linear_damp = 0.1
-
-[node name="asteroid18" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 7177.49, 541.269 )
-linear_damp = 0.1
-
-[node name="asteroid19" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 7066.71, 344.902 )
-linear_damp = 0.1
-
-[node name="asteroid20" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 7655.82, 118.324 )
-linear_damp = 0.1
-
-[node name="asteroid21" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 7540.01, 324.762 )
-linear_damp = 0.1
-
-[node name="asteroid22" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 7764.07, 566.445 )
-linear_damp = 0.1
-
-[node name="asteroid23" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 7872.33, 216.508 )
-linear_damp = 0.1
-
-[node name="asteroid24" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 8458.91, 95.666 )
-linear_damp = 0.1
-
-[node name="asteroid25" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 8786.19, 231.613 )
-linear_damp = 0.1
-
-[node name="asteroid26" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 8599.89, 551.339 )
-linear_damp = 0.1
-
-[node name="asteroid27" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 8353.17, 289.516 )
-linear_damp = 0.1
-
-[node name="asteroid28" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 8995.14, 95.6658 )
-linear_damp = 0.1
-
-[node name="asteroid29" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 9294.73, 579.032 )
-linear_damp = 0.1
-
-[node name="asteroid30" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 9392.91, 140.981 )
-linear_damp = 0.1
-
-[node name="asteroid31" parent="enemies" instance=ExtResource( 3 )]
-
-transform/pos = Vector2( 9644.67, 281.963 )
-linear_damp = 0.1
-
-[node name="enemy1" parent="enemies" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 2920.34, 365.042 )
-
-[node name="enemy2" parent="enemies" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 3894.62, 506.024 )
-
-[node name="enemy3" parent="enemies" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 4325.12, 302.104 )
-
-[node name="enemy4" parent="enemies" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 4753.1, 506.024 )
-
-[node name="enemy5" parent="enemies" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 5158.43, 211.473 )
-
-[node name="enemy6" parent="enemies" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 5490.74, 349.937 )
-
-[node name="enemy7" parent="enemies" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 5765.15, 546.305 )
-
-[node name="enemy8" parent="enemies" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 6142.78, 244.201 )
-
-[node name="enemy9" parent="enemies" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 6701.67, 221.543 )
-
-[node name="enemy10" parent="enemies" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 6701.67, 352.455 )
-
-[node name="enemy11" parent="enemies" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 6706.71, 500.989 )
-
-[node name="enemy12" parent="enemies" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 6711.74, 566.445 )
-
-[node name="enemy13" parent="enemies" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 7157.35, 332.314 )
-
-[node name="enemy14" parent="enemies" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 7421.69, 511.059 )
-
-[node name="enemy15" parent="enemies" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 7887.43, 239.166 )
-
-[node name="enemy16" parent="enemies" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 8463.95, 382.665 )
-
-[node name="enemy17" parent="enemies" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 9065.64, 244.201 )
-
-[node name="enemy18" parent="enemies" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 8967.46, 566.445 )
-
-[node name="enemy19" parent="enemies" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 9483.55, 422.946 )
-
-[node name="enemy20" parent="enemies" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 9687.47, 234.131 )
-
-[node name="enemy21" parent="enemies" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 9815.86, 579.033 )
-
-[node name="enemy22" parent="enemies" instance=ExtResource( 4 )]
-
-transform/pos = Vector2( 9815.86, 579.033 )
-
-[node name="enemy2 2" parent="enemies" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 4759.97, 278.527 )
-linear_damp = 0.1
-
-[node name="enemy23" parent="enemies" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 6277.15, 559.36 )
-linear_damp = 0.1
-
-[node name="enemy24" parent="enemies" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 7136.77, 100.438 )
-linear_damp = 0.1
-
-[node name="enemy25" parent="enemies" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 7766.93, 370.996 )
-linear_damp = 0.1
-
-[node name="enemy26" parent="enemies" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 7890.23, 309.35 )
-linear_damp = 0.1
-
-[node name="enemy27" parent="enemies" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 8006.67, 237.43 )
-linear_damp = 0.1
-
-[node name="enemy28" parent="enemies" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 8664.23, 257.978 )
-linear_damp = 0.1
-
-[node name="enemy29" parent="enemies" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 8660.8, 357.297 )
-linear_damp = 0.1
-
-[node name="enemy30" parent="enemies" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 8657.38, 453.191 )
-linear_damp = 0.1
-
-[node name="enemy31" parent="enemies" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 9475.9, 189.483 )
-linear_damp = 0.1
-
-[node name="enemy32" parent="enemies" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 9564.95, 234.005 )
-linear_damp = 0.1
-
-[node name="enemy33" parent="enemies" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 9674.54, 281.952 )
-linear_damp = 0.1
-
-[node name="enemy34" parent="enemies" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 9575.22, 391.545 )
-linear_damp = 0.1
-
-[node name="enemy35" parent="enemies" instance=ExtResource( 5 )]
-
-transform/pos = Vector2( 9458.78, 446.342 )
-linear_damp = 0.1
-
-[node name="parallax" parent="." instance=ExtResource( 6 )]
-
-
diff --git a/demos/2d/space_shooter/main_menu.gd b/demos/2d/space_shooter/main_menu.gd
deleted file mode 100644
index 0c7e0de542..0000000000
--- a/demos/2d/space_shooter/main_menu.gd
+++ /dev/null
@@ -1,11 +0,0 @@
-
-extends Control
-
-
-func _ready():
- get_node("score").set_text("HIGH SCORE: " + str(get_node("/root/game_state").max_points))
-
-
-func _on_play_pressed():
- get_node("/root/game_state").points = 0
- get_tree().change_scene("res://level.tscn")
diff --git a/demos/2d/space_shooter/main_menu.tscn b/demos/2d/space_shooter/main_menu.tscn
deleted file mode 100644
index e51791611d..0000000000
--- a/demos/2d/space_shooter/main_menu.tscn
+++ /dev/null
@@ -1,64 +0,0 @@
-[gd_scene load_steps=2 format=1]
-
-[ext_resource path="res://main_menu.gd" type="Script" id=1]
-
-[node name="main_screen" type="Control"]
-
-anchor/right = 1
-anchor/bottom = 1
-focus/ignore_mouse = false
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 0.0
-margin/bottom = 0.0
-script/script = ExtResource( 1 )
-
-[node name="title" type="Label" parent="."]
-
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-margin/left = 405.0
-margin/top = 86.0
-margin/right = 547.0
-margin/bottom = 99.0
-text = "S P A C E S H O O T E R"
-percent_visible = 1.0
-lines_skipped = 0
-max_lines_visible = -1
-
-[node name="score" type="Label" parent="."]
-
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-margin/left = 349.0
-margin/top = 204.0
-margin/right = 585.0
-margin/bottom = 218.0
-text = "HIGH SCORE:"
-align = 1
-percent_visible = 1.0
-lines_skipped = 0
-max_lines_visible = -1
-
-[node name="play" type="Button" parent="."]
-
-focus/ignore_mouse = false
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 412.0
-margin/top = 390.0
-margin/right = 535.0
-margin/bottom = 442.0
-toggle_mode = false
-text = "PLAY"
-flat = false
-
-[connection signal="pressed" from="play" to="." method="_on_play_pressed"]
-
-
diff --git a/demos/2d/space_shooter/meteorite.png b/demos/2d/space_shooter/meteorite.png
deleted file mode 100644
index 92fb4387df..0000000000
--- a/demos/2d/space_shooter/meteorite.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/space_shooter/parallax.tscn b/demos/2d/space_shooter/parallax.tscn
deleted file mode 100644
index 0cbd0f5b19..0000000000
--- a/demos/2d/space_shooter/parallax.tscn
+++ /dev/null
@@ -1,201 +0,0 @@
-[gd_scene load_steps=4 format=1]
-
-[ext_resource path="res://bg_gradient.png" type="Texture" id=1]
-[ext_resource path="res://small_star.png" type="Texture" id=2]
-[ext_resource path="res://big_star.png" type="Texture" id=3]
-
-[node name="parallax" type="ParallaxBackground"]
-
-layer = -1
-offset = Vector2( 0, 0 )
-rotation = 0.0
-scale = Vector2( 1, 1 )
-scroll/offset = Vector2( 0, 0 )
-scroll/base_offset = Vector2( 0, 0 )
-scroll/base_scale = Vector2( 1, 1 )
-scroll/limit_begin = Vector2( 0, 0 )
-scroll/limit_end = Vector2( 0, 0 )
-scroll/ignore_camera_zoom = true
-
-[node name="bg_layer" type="ParallaxLayer" parent="."]
-
-motion/scale = Vector2( 0.2, 1 )
-motion/mirroring = Vector2( 1024, 0 )
-
-[node name="gradient" type="Sprite" parent="bg_layer"]
-
-transform/scale = Vector2( 128, 1 )
-texture = ExtResource( 1 )
-centered = false
-
-[node name="Sprite" type="Sprite" parent="bg_layer"]
-
-transform/pos = Vector2( 73.6643, 65.0701 )
-texture = ExtResource( 2 )
-
-[node name="Sprite1" type="Sprite" parent="bg_layer"]
-
-transform/pos = Vector2( 127.685, 206.26 )
-texture = ExtResource( 2 )
-
-[node name="Sprite2" type="Sprite" parent="bg_layer"]
-
-transform/pos = Vector2( 60.1591, 255.369 )
-texture = ExtResource( 2 )
-
-[node name="Sprite3" type="Sprite" parent="bg_layer"]
-
-transform/pos = Vector2( 252.914, 142.418 )
-texture = ExtResource( 2 )
-
-[node name="Sprite4" type="Sprite" parent="bg_layer"]
-
-transform/pos = Vector2( 241.864, 335.172 )
-texture = ExtResource( 2 )
-
-[node name="Sprite5" type="Sprite" parent="bg_layer"]
-
-transform/pos = Vector2( 127.685, 455.491 )
-texture = ExtResource( 2 )
-
-[node name="Sprite6" type="Sprite" parent="bg_layer"]
-
-transform/pos = Vector2( 289.746, 547.571 )
-texture = ExtResource( 2 )
-
-[node name="Sprite7" type="Sprite" parent="bg_layer"]
-
-transform/pos = Vector2( 56.4759, 559.848 )
-texture = ExtResource( 2 )
-
-[node name="Sprite8" type="Sprite" parent="bg_layer"]
-
-transform/pos = Vector2( 487.412, 166.972 )
-texture = ExtResource( 2 )
-
-[node name="Sprite9" type="Sprite" parent="bg_layer"]
-
-transform/pos = Vector2( 358.499, 77.3474 )
-texture = ExtResource( 2 )
-
-[node name="Sprite10" type="Sprite" parent="bg_layer"]
-
-transform/pos = Vector2( 647.018, 71.2088 )
-texture = ExtResource( 2 )
-
-[node name="Sprite11" type="Sprite" parent="bg_layer"]
-
-transform/pos = Vector2( 592.997, 270.102 )
-texture = ExtResource( 2 )
-
-[node name="Sprite12" type="Sprite" parent="bg_layer"]
-
-transform/pos = Vector2( 868.011, 252.914 )
-texture = ExtResource( 2 )
-
-[node name="Sprite13" type="Sprite" parent="bg_layer"]
-
-transform/pos = Vector2( 869.238, 93.308 )
-texture = ExtResource( 2 )
-
-[node name="Sprite14" type="Sprite" parent="bg_layer"]
-
-transform/pos = Vector2( 965.002, 95.7635 )
-texture = ExtResource( 2 )
-
-[node name="Sprite15" type="Sprite" parent="bg_layer"]
-
-transform/pos = Vector2( 968.685, 559.848 )
-texture = ExtResource( 2 )
-
-[node name="Sprite16" type="Sprite" parent="bg_layer"]
-
-transform/pos = Vector2( 815.218, 470.224 )
-texture = ExtResource( 2 )
-
-[node name="Sprite17" type="Sprite" parent="bg_layer"]
-
-transform/pos = Vector2( 475.134, 530.383 )
-texture = ExtResource( 2 )
-
-[node name="Sprite18" type="Sprite" parent="bg_layer"]
-
-transform/pos = Vector2( 550.026, 421.114 )
-texture = ExtResource( 2 )
-
-[node name="Sprite19" type="Sprite" parent="bg_layer"]
-
-transform/pos = Vector2( 696.127, 574.581 )
-texture = ExtResource( 2 )
-
-[node name="Sprite20" type="Sprite" parent="bg_layer"]
-
-transform/pos = Vector2( 990.784, 423.569 )
-texture = ExtResource( 2 )
-
-[node name="bg_layer2" type="ParallaxLayer" parent="."]
-
-motion/scale = Vector2( 0.5, 1 )
-motion/mirroring = Vector2( 1024, 0 )
-
-[node name="Sprite" type="Sprite" parent="bg_layer2"]
-
-transform/pos = Vector2( 88, 114 )
-texture = ExtResource( 3 )
-
-[node name="Sprite1" type="Sprite" parent="bg_layer2"]
-
-transform/pos = Vector2( 349, 254 )
-texture = ExtResource( 3 )
-
-[node name="Sprite2" type="Sprite" parent="bg_layer2"]
-
-transform/pos = Vector2( 472, 80 )
-texture = ExtResource( 3 )
-
-[node name="Sprite3" type="Sprite" parent="bg_layer2"]
-
-transform/pos = Vector2( 803, 107 )
-texture = ExtResource( 3 )
-
-[node name="Sprite4" type="Sprite" parent="bg_layer2"]
-
-transform/pos = Vector2( 93, 363 )
-texture = ExtResource( 3 )
-
-[node name="Sprite5" type="Sprite" parent="bg_layer2"]
-
-transform/pos = Vector2( 891, 519 )
-texture = ExtResource( 3 )
-
-[node name="Sprite6" type="Sprite" parent="bg_layer2"]
-
-transform/pos = Vector2( 934, 338 )
-texture = ExtResource( 3 )
-
-[node name="Sprite7" type="Sprite" parent="bg_layer2"]
-
-transform/pos = Vector2( 665, 332 )
-texture = ExtResource( 3 )
-
-[node name="Sprite8" type="Sprite" parent="bg_layer2"]
-
-transform/pos = Vector2( 218, 423 )
-texture = ExtResource( 3 )
-
-[node name="Sprite9" type="Sprite" parent="bg_layer2"]
-
-transform/pos = Vector2( 564, 568 )
-texture = ExtResource( 3 )
-
-[node name="Sprite10" type="Sprite" parent="bg_layer2"]
-
-transform/pos = Vector2( 753, 466 )
-texture = ExtResource( 3 )
-
-[node name="Sprite11" type="Sprite" parent="bg_layer2"]
-
-transform/pos = Vector2( 77.9999, 570 )
-texture = ExtResource( 3 )
-
-
diff --git a/demos/2d/space_shooter/rail.gd b/demos/2d/space_shooter/rail.gd
deleted file mode 100644
index 7362dff97d..0000000000
--- a/demos/2d/space_shooter/rail.gd
+++ /dev/null
@@ -1,19 +0,0 @@
-
-extends Node2D
-
-# Member variables
-const SPEED = 200
-var offset = 0
-
-
-func stop():
- set_process(false)
-
-
-func _process(delta):
- offset += delta*SPEED
- set_pos(Vector2(offset, 0))
-
-
-func _ready():
- set_process(true)
diff --git a/demos/2d/space_shooter/ship.gd b/demos/2d/space_shooter/ship.gd
deleted file mode 100644
index 0bc9ca6b13..0000000000
--- a/demos/2d/space_shooter/ship.gd
+++ /dev/null
@@ -1,81 +0,0 @@
-
-extends Area2D
-
-# Member variables
-const SPEED = 200
-
-var screen_size
-var prev_shooting = false
-var killed = false
-
-
-func _process(delta):
- var motion = Vector2()
- if Input.is_action_pressed("move_up"):
- motion += Vector2(0, -1)
- if Input.is_action_pressed("move_down"):
- motion += Vector2(0, 1)
- if Input.is_action_pressed("move_left"):
- motion += Vector2(-1, 0)
- if Input.is_action_pressed("move_right"):
- motion += Vector2(1, 0)
- var shooting = Input.is_action_pressed("shoot")
-
- var pos = get_pos()
-
- pos += motion*delta*SPEED
- if (pos.x < 0):
- pos.x = 0
- if (pos.x > screen_size.x):
- pos.x = screen_size.x
- if (pos.y < 0):
- pos.y = 0
- if (pos.y > screen_size.y):
- pos.y = screen_size.y
-
- set_pos(pos)
-
- if (shooting and not prev_shooting):
- # Just pressed
- var shot = preload("res://shot.tscn").instance()
- # Use the Position2D as reference
- shot.set_pos(get_node("shootfrom").get_global_pos())
- # Put it two parents above, so it is not moved by us
- get_node("../..").add_child(shot)
- # Play sound
- get_node("sfx").play("shoot")
-
- prev_shooting = shooting
-
- # Update points counter
- get_node("../hud/score_points").set_text(str(get_node("/root/game_state").points))
-
-
-func _ready():
- screen_size = get_viewport().get_rect().size
- set_process(true)
-
-
-func _hit_something():
- if (killed):
- return
- killed = true
- get_node("anim").play("explode")
- get_node("sfx").play("sound_explode")
- get_node("../hud/game_over").show()
- get_node("/root/game_state").game_over()
- get_parent().stop()
- set_process(false)
-
-
-func _on_ship_body_enter(body):
- _hit_something()
-
-
-func _on_ship_area_enter(area):
- if (area.has_method("is_enemy") and area.is_enemy()):
- _hit_something()
-
-
-func _on_back_to_menu_pressed():
- get_tree().change_scene("res://main_menu.tscn")
diff --git a/demos/2d/space_shooter/ship.png b/demos/2d/space_shooter/ship.png
deleted file mode 100644
index a36b833903..0000000000
--- a/demos/2d/space_shooter/ship.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/space_shooter/ship.tscn b/demos/2d/space_shooter/ship.tscn
deleted file mode 100644
index be6bf6b82e..0000000000
--- a/demos/2d/space_shooter/ship.tscn
+++ /dev/null
@@ -1,229 +0,0 @@
-[gd_scene load_steps=12 format=1]
-
-[ext_resource path="res://rail.gd" type="Script" id=1]
-[ext_resource path="res://ship.gd" type="Script" id=2]
-[ext_resource path="res://ship.png" type="Texture" id=3]
-[ext_resource path="res://fire.png" type="Texture" id=4]
-[ext_resource path="res://explosion.tscn" type="PackedScene" id=5]
-[ext_resource path="res://sound_shoot.wav" type="Sample" id=6]
-[ext_resource path="res://sound_explode.wav" type="Sample" id=7]
-
-[sub_resource type="ConvexPolygonShape2D" id=1]
-
-custom_solver_bias = 0.0
-points = Vector2Array( 25.9104, 1.3603, -20.5637, 14.8656, -20.5637, -15.3227 )
-
-[sub_resource type="ColorRamp" id=2]
-
-offsets = FloatArray( 0, 0.474062, 0.653631, 1 )
-colors = ColorArray( 0.154794, 0.413313, 0.991004, 1, 0.555474, 0.971578, 0, 1, 0.82934, 0.989088, 0.616085, 0.383915, 1, 1, 1, 0 )
-
-[sub_resource type="Animation" id=3]
-
-length = 1.0
-loop = false
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath("sprite:visibility/visible")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.1 ), "transitions":FloatArray( 1, 1 ), "values":[ true, false ] }
-tracks/1/type = "value"
-tracks/1/path = NodePath("thruster:config/emitting")
-tracks/1/interp = 1
-tracks/1/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ false ] }
-tracks/2/type = "value"
-tracks/2/path = NodePath("explosion:config/emitting")
-tracks/2/interp = 1
-tracks/2/keys = { "cont":false, "times":FloatArray( 0, 0.1 ), "transitions":FloatArray( 1, 1 ), "values":[ true, false ] }
-
-[sub_resource type="SampleLibrary" id=4]
-
-samples/shoot = { "db":0.0, "pitch":1.0, "sample":ExtResource( 6 ) }
-samples/sound_explode = { "db":0.0, "pitch":1.0, "sample":ExtResource( 7 ) }
-
-[node name="rail" type="Node2D"]
-
-script/script = ExtResource( 1 )
-
-[node name="ship" type="Area2D" parent="."]
-
-transform/pos = Vector2( 253.607, 282.275 )
-input/pickable = true
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-gravity_vec = Vector2( 0, 1 )
-gravity = 98.0
-linear_damp = 0.1
-angular_damp = 1.0
-script/script = ExtResource( 2 )
-
-[node name="sprite" type="Sprite" parent="ship"]
-
-texture = ExtResource( 3 )
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="ship"]
-
-build_mode = 0
-polygon = Vector2Array( -20.5637, -15.3227, 25.9104, 1.3603, -20.5637, 14.8656 )
-shape_range = Vector2( -1, -1 )
-trigger = false
-
-[node name="thruster" type="Particles2D" parent="ship"]
-
-visibility/blend_mode = 1
-transform/pos = Vector2( -26.528, -0.358481 )
-transform/rot = -91.1436
-config/amount = 32
-config/lifetime = 2.0
-config/time_scale = 5.0
-config/emitting = false
-config/local_space = false
-config/texture = ExtResource( 4 )
-params/direction = 0.0
-params/spread = 10.0
-params/linear_velocity = 20.0
-params/spin_velocity = 0.0
-params/orbit_velocity = 0.0
-params/gravity_direction = 0.0
-params/gravity_strength = 0.0
-params/radial_accel = 0.0
-params/tangential_accel = 0.0
-params/damping = 0.0
-params/initial_angle = 0.0
-params/initial_size = 1.0
-params/final_size = 1.0
-params/hue_variation = 0.0
-params/anim_speed_scale = 1.0
-params/anim_initial_pos = 0.0
-color/color_ramp = SubResource( 2 )
-
-[node name="anim" type="AnimationPlayer" parent="ship"]
-
-playback/process_mode = 1
-playback/default_blend_time = 0.0
-root/root = NodePath("..")
-anims/explode = SubResource( 3 )
-playback/active = true
-playback/speed = 1.0
-blend_times = [ ]
-autoplay = ""
-
-[node name="shootfrom" type="Position2D" parent="ship"]
-
-transform/pos = Vector2( 35.3307, 0.875969 )
-
-[node name="explosion" parent="ship" instance=ExtResource( 5 )]
-
-transform/rot = -91.1436
-config/explosiveness = 0.1
-params/gravity_strength = 9.8
-
-[node name="sfx" type="SamplePlayer" parent="ship"]
-
-config/polyphony = 1
-config/samples = SubResource( 4 )
-default/volume_db = 0.0
-default/pitch_scale = 1.0
-default/pan = 0.0
-default/depth = 0.0
-default/height = 0.0
-default/filter/type = 0
-default/filter/cutoff = 0.0
-default/filter/resonance = 0.0
-default/filter/gain = 0.0
-default/reverb_room = 2
-default/reverb_send = 0.0
-default/chorus_send = 0.0
-
-[node name="camera" type="Camera2D" parent="."]
-
-anchor_mode = 0
-rotating = false
-current = true
-zoom = Vector2( 1, 1 )
-limit/left = -10000000
-limit/top = -10000000
-limit/right = 10000000
-limit/bottom = 10000000
-drag_margin/h_enabled = true
-drag_margin/v_enabled = true
-smoothing/enable = false
-smoothing/speed = 5.0
-drag_margin/left = 0.2
-drag_margin/top = 0.2
-drag_margin/right = 0.2
-drag_margin/bottom = 0.2
-
-[node name="hud" type="CanvasLayer" parent="."]
-
-layer = 1
-offset = Vector2( 0, 0 )
-rotation = 0.0
-scale = Vector2( 1, 1 )
-
-[node name="score" type="Label" parent="hud"]
-
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-margin/left = 15.0
-margin/top = 13.0
-margin/right = 66.0
-margin/bottom = 26.0
-text = "SCORE:"
-percent_visible = 1.0
-lines_skipped = 0
-max_lines_visible = -1
-
-[node name="score_points" type="Label" parent="hud"]
-
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-margin/left = 70.0
-margin/top = 13.0
-margin/right = 121.0
-margin/bottom = 26.0
-text = "0"
-align = 1
-percent_visible = 1.0
-lines_skipped = 0
-max_lines_visible = -1
-
-[node name="back_to_menu" type="Button" parent="hud"]
-
-focus/ignore_mouse = false
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 911.0
-margin/top = 10.0
-margin/right = 1006.0
-margin/bottom = 31.0
-toggle_mode = false
-text = "Back to Menu"
-flat = false
-
-[node name="game_over" type="Label" parent="hud"]
-
-visibility/visible = false
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-margin/left = 482.0
-margin/top = 286.0
-margin/right = 564.0
-margin/bottom = 299.0
-text = "GAME_OVER"
-percent_visible = 1.0
-lines_skipped = 0
-max_lines_visible = -1
-
-[connection signal="body_enter" from="ship" to="ship" method="_on_ship_body_enter"]
-
-[connection signal="area_enter" from="ship" to="ship" method="_on_ship_area_enter"]
-
-[connection signal="pressed" from="hud/back_to_menu" to="ship" method="_on_back_to_menu_pressed"]
-
-
diff --git a/demos/2d/space_shooter/shoot.png b/demos/2d/space_shooter/shoot.png
deleted file mode 100644
index 6e80ddab93..0000000000
--- a/demos/2d/space_shooter/shoot.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/space_shooter/shot.gd b/demos/2d/space_shooter/shot.gd
deleted file mode 100644
index 936dde73d1..0000000000
--- a/demos/2d/space_shooter/shot.gd
+++ /dev/null
@@ -1,40 +0,0 @@
-
-extends Area2D
-
-# Member variables
-const SPEED = 800
-
-var hit = false
-
-
-func _process(delta):
- translate(Vector2(delta*SPEED, 0))
-
-
-func _ready():
- set_process(true)
-
-
-func _hit_something():
- if (hit):
- return
- hit = true
- set_process(false)
- get_node("anim").play("splash")
-
-
-func _on_visibility_exit_screen():
- queue_free()
-
-
-func _on_shot_area_enter(area):
- # Hit an enemy or asteroid
- if (area.has_method("destroy")):
- # Duck typing at it's best
- area.destroy()
- _hit_something()
-
-
-func _on_shot_body_enter(body):
- # Hit the tilemap
- _hit_something()
diff --git a/demos/2d/space_shooter/shot.tscn b/demos/2d/space_shooter/shot.tscn
deleted file mode 100644
index 2913eaf5b7..0000000000
--- a/demos/2d/space_shooter/shot.tscn
+++ /dev/null
@@ -1,103 +0,0 @@
-[gd_scene load_steps=6 format=1]
-
-[ext_resource path="res://shot.gd" type="Script" id=1]
-[ext_resource path="res://shoot.png" type="Texture" id=2]
-
-[sub_resource type="RectangleShape2D" id=1]
-
-custom_solver_bias = 0.0
-extents = Vector2( 10, 4 )
-
-[sub_resource type="ColorRamp" id=2]
-
-offsets = FloatArray( 0, 1 )
-colors = ColorArray( 0.238085, 0.881885, 0.983902, 1, 1, 1, 1, 0 )
-
-[sub_resource type="Animation" id=3]
-
-length = 1.0
-loop = false
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath("hit_splash:config/emitting")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.1 ), "transitions":FloatArray( 1, 1 ), "values":[ true, false ] }
-tracks/1/type = "method"
-tracks/1/path = NodePath(".")
-tracks/1/interp = 1
-tracks/1/keys = { "times":FloatArray( 1 ), "transitions":FloatArray( 1 ), "values":[ { "args":[ ], "method":"queue_free" } ] }
-tracks/2/type = "value"
-tracks/2/path = NodePath("sprite:visibility/visible")
-tracks/2/interp = 1
-tracks/2/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ false ] }
-
-[node name="shot" type="Area2D"]
-
-input/pickable = true
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-gravity_vec = Vector2( 0, 1 )
-gravity = 98.0
-linear_damp = 0.1
-angular_damp = 1.0
-script/script = ExtResource( 1 )
-
-[node name="visibility" type="VisibilityNotifier2D" parent="."]
-
-transform/pos = Vector2( 1.8353, -0.0742126 )
-transform/scale = Vector2( 1.54149, 0.770745 )
-rect = Rect2( -10, -10, 20, 20 )
-
-[node name="sprite" type="Sprite" parent="."]
-
-texture = ExtResource( 2 )
-
-[node name="collision" type="CollisionShape2D" parent="."]
-
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = -1
-
-[node name="hit_splash" type="Particles2D" parent="."]
-
-config/amount = 32
-config/lifetime = 0.5
-config/emitting = false
-config/explosiveness = 0.1
-params/direction = 0.0
-params/spread = 180.0
-params/linear_velocity = 50.0
-params/spin_velocity = 0.0
-params/orbit_velocity = 0.0
-params/gravity_direction = 0.0
-params/gravity_strength = 0.0
-params/radial_accel = 0.0
-params/tangential_accel = 0.0
-params/damping = 0.0
-params/initial_angle = 0.0
-params/initial_size = 3.0
-params/final_size = 3.0
-params/hue_variation = 0.0
-params/anim_speed_scale = 1.0
-params/anim_initial_pos = 0.0
-color/color_ramp = SubResource( 2 )
-
-[node name="anim" type="AnimationPlayer" parent="."]
-
-playback/process_mode = 1
-playback/default_blend_time = 0.0
-root/root = NodePath("..")
-anims/splash = SubResource( 3 )
-playback/active = true
-playback/speed = 1.0
-blend_times = [ ]
-autoplay = ""
-
-[connection signal="body_enter" from="." to="." method="_on_shot_body_enter"]
-
-[connection signal="area_enter" from="." to="." method="_on_shot_area_enter"]
-
-[connection signal="exit_screen" from="visibility" to="." method="_on_visibility_exit_screen"]
-
-
diff --git a/demos/2d/space_shooter/small_star.png b/demos/2d/space_shooter/small_star.png
deleted file mode 100644
index 71c3c531cd..0000000000
--- a/demos/2d/space_shooter/small_star.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/space_shooter/sound_explode.wav b/demos/2d/space_shooter/sound_explode.wav
deleted file mode 100644
index 229c85399c..0000000000
--- a/demos/2d/space_shooter/sound_explode.wav
+++ /dev/null
Binary files differ
diff --git a/demos/2d/space_shooter/sound_shoot.wav b/demos/2d/space_shooter/sound_shoot.wav
deleted file mode 100644
index ad74f328cb..0000000000
--- a/demos/2d/space_shooter/sound_shoot.wav
+++ /dev/null
Binary files differ
diff --git a/demos/2d/space_shooter/tile.png b/demos/2d/space_shooter/tile.png
deleted file mode 100644
index d8f41d16f6..0000000000
--- a/demos/2d/space_shooter/tile.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/space_shooter/tileset.tres b/demos/2d/space_shooter/tileset.tres
deleted file mode 100644
index 0a62a0048e..0000000000
--- a/demos/2d/space_shooter/tileset.tres
+++ /dev/null
@@ -1,20 +0,0 @@
-[gd_resource type="TileSet" load_steps=3 format=1]
-
-[ext_resource path="res://tile.png" type="Texture" id=1]
-
-[sub_resource type="RectangleShape2D" id=1]
-
-custom_solver_bias = 0.0
-extents = Vector2( 16, 16 )
-
-[resource]
-
-0/name = "block"
-0/texture = ExtResource( 1 )
-0/tex_offset = Vector2( 0, 0 )
-0/region = Rect2( 0, 0, 0, 0 )
-0/occluder_offset = Vector2( 16, 16 )
-0/navigation_offset = Vector2( 16, 16 )
-0/shape_offset = Vector2( 16, 16 )
-0/shapes = [ SubResource( 1 ) ]
-
diff --git a/demos/2d/space_shooter/tileset_edit.tscn b/demos/2d/space_shooter/tileset_edit.tscn
deleted file mode 100644
index 87152a1818..0000000000
--- a/demos/2d/space_shooter/tileset_edit.tscn
+++ /dev/null
@@ -1,35 +0,0 @@
-[gd_scene load_steps=3 format=1]
-
-[ext_resource path="res://tile.png" type="Texture" id=1]
-
-[sub_resource type="RectangleShape2D" id=1]
-
-custom_solver_bias = 0.0
-extents = Vector2( 16, 16 )
-
-[node name="Node2D" type="Node2D"]
-
-[node name="block" type="Sprite" parent="."]
-
-texture = ExtResource( 1 )
-
-[node name="StaticBody2D" type="StaticBody2D" parent="block"]
-
-input/pickable = false
-shapes/0/shape = SubResource( 1 )
-shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
-shapes/0/trigger = false
-collision/layers = 1
-collision/mask = 1
-constant_linear_velocity = Vector2( 0, 0 )
-constant_angular_velocity = 0.0
-friction = 1.0
-bounce = 0.0
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="block/StaticBody2D"]
-
-shape = SubResource( 1 )
-trigger = false
-_update_shape_index = -1
-
-
diff --git a/demos/2d/splash/bg.png b/demos/2d/splash/bg.png
deleted file mode 100644
index 197a0484d2..0000000000
--- a/demos/2d/splash/bg.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/splash/bg_layer_1.png b/demos/2d/splash/bg_layer_1.png
deleted file mode 100644
index 7f18411465..0000000000
--- a/demos/2d/splash/bg_layer_1.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/splash/bg_layer_2.png b/demos/2d/splash/bg_layer_2.png
deleted file mode 100644
index fac5574bfa..0000000000
--- a/demos/2d/splash/bg_layer_2.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/splash/button.png b/demos/2d/splash/button.png
deleted file mode 100644
index ce62e011bd..0000000000
--- a/demos/2d/splash/button.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/splash/button_pressed.png b/demos/2d/splash/button_pressed.png
deleted file mode 100644
index d9c31f2b6c..0000000000
--- a/demos/2d/splash/button_pressed.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/splash/engine.cfg b/demos/2d/splash/engine.cfg
deleted file mode 100644
index e970840eae..0000000000
--- a/demos/2d/splash/engine.cfg
+++ /dev/null
@@ -1,9 +0,0 @@
-[application]
-
-name="Splash Screen"
-main_scene="res://splash.tscn"
-icon="res://icon.png"
-
-[display]
-
-height=450
diff --git a/demos/2d/splash/freesans.fnt b/demos/2d/splash/freesans.fnt
deleted file mode 100644
index 61167a20eb..0000000000
--- a/demos/2d/splash/freesans.fnt
+++ /dev/null
Binary files differ
diff --git a/demos/2d/splash/icon.png b/demos/2d/splash/icon.png
deleted file mode 100644
index b8e24f209e..0000000000
--- a/demos/2d/splash/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/splash/splash.tscn b/demos/2d/splash/splash.tscn
deleted file mode 100644
index 5523d4c3f0..0000000000
--- a/demos/2d/splash/splash.tscn
+++ /dev/null
@@ -1,274 +0,0 @@
-[gd_scene load_steps=20 format=1]
-
-[ext_resource path="res://bg.png" type="Texture" id=1]
-[ext_resource path="res://bg_layer_2.png" type="Texture" id=2]
-[ext_resource path="res://bg_layer_1.png" type="Texture" id=3]
-[ext_resource path="res://splash_01.png" type="Texture" id=4]
-[ext_resource path="res://splash_02.png" type="Texture" id=5]
-[ext_resource path="res://splash_03.png" type="Texture" id=6]
-[ext_resource path="res://splash_04.png" type="Texture" id=7]
-[ext_resource path="res://splash_05.png" type="Texture" id=8]
-[ext_resource path="res://splash_06.png" type="Texture" id=9]
-[ext_resource path="res://splash_07.png" type="Texture" id=10]
-[ext_resource path="res://splash_08.png" type="Texture" id=11]
-[ext_resource path="res://splash_09.png" type="Texture" id=12]
-[ext_resource path="res://button.png" type="Texture" id=13]
-[ext_resource path="res://button_pressed.png" type="Texture" id=14]
-[ext_resource path="res://freesans.fnt" type="Font" id=15]
-
-[sub_resource type="Animation" id=1]
-
-resource/name = "scroll"
-length = 1.0
-loop = true
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath(".:rect/pos")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":true, "times":FloatArray( 0, 1 ), "transitions":FloatArray( 1, 1 ), "values":[ Vector2( 0, 0 ), Vector2( -800, 0 ) ] }
-
-[sub_resource type="SpriteFrames" id=2]
-
-frames = [ ExtResource( 4 ), ExtResource( 5 ), ExtResource( 6 ), ExtResource( 7 ), ExtResource( 8 ), ExtResource( 9 ), ExtResource( 10 ), ExtResource( 11 ), ExtResource( 12 ) ]
-
-[sub_resource type="Animation" id=3]
-
-resource/name = "intro"
-length = 3.0
-loop = false
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath("logo:transform/pos")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":true, "times":FloatArray( 1, 1.5 ), "transitions":FloatArray( 2, 1 ), "values":[ Vector2( 412, -212.981 ), Vector2( 412, 171 ) ] }
-tracks/1/type = "value"
-tracks/1/path = NodePath("logo:frame")
-tracks/1/interp = 1
-tracks/1/keys = { "cont":false, "times":FloatArray( 0, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3 ), "transitions":FloatArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), "values":[ 0, 0, 1, 2, 3, 4, 5, 6, 7, 8 ] }
-tracks/2/type = "value"
-tracks/2/path = NodePath("start:visibility/opacity")
-tracks/2/interp = 1
-tracks/2/keys = { "cont":true, "times":FloatArray( 2.5, 2.8 ), "transitions":FloatArray( 1, 1 ), "values":[ 0.0, 1.0 ] }
-tracks/3/type = "value"
-tracks/3/path = NodePath("start:visibility/visible")
-tracks/3/interp = 1
-tracks/3/keys = { "cont":false, "times":FloatArray( 0, 2.5 ), "transitions":FloatArray( 1, 1 ), "values":[ false, true ] }
-tracks/4/type = "value"
-tracks/4/path = NodePath("copyright:visibility/visible")
-tracks/4/interp = 1
-tracks/4/keys = { "cont":false, "times":FloatArray( 0, 2.5 ), "transitions":FloatArray( 1, 1 ), "values":[ false, true ] }
-tracks/5/type = "value"
-tracks/5/path = NodePath("copyright:visibility/opacity")
-tracks/5/interp = 1
-tracks/5/keys = { "cont":true, "times":FloatArray( 2.5, 2.8 ), "transitions":FloatArray( 1, 1 ), "values":[ 0.0, 1.0 ] }
-
-[sub_resource type="Animation" id=4]
-
-length = 0.6
-loop = true
-step = 0.1
-tracks/0/type = "value"
-tracks/0/path = NodePath("logo:frame")
-tracks/0/interp = 1
-tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.3 ), "transitions":FloatArray( 1, 1 ), "values":[ 8, 7 ] }
-
-[node name="splash" type="Control"]
-
-anchor/right = 1
-anchor/bottom = 1
-focus/ignore_mouse = false
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 0.0
-margin/bottom = 0.0
-
-[node name="bg" type="Control" parent="."]
-
-focus/ignore_mouse = false
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 40.0
-margin/bottom = 40.0
-
-[node name="1" type="TextureFrame" parent="bg"]
-
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 40.0
-margin/bottom = 40.0
-texture = ExtResource( 1 )
-
-[node name="2" type="TextureFrame" parent="bg"]
-
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 800.0
-margin/top = 0.0
-margin/right = 1600.0
-margin/bottom = 450.0
-texture = ExtResource( 1 )
-
-[node name="scroll" type="AnimationPlayer" parent="bg"]
-
-playback/process_mode = 1
-playback/default_blend_time = 0.0
-root/root = NodePath("..")
-anims/scroll = SubResource( 1 )
-playback/active = true
-playback/speed = 0.04
-blend_times = [ ]
-autoplay = "scroll"
-
-[node name="layer2" type="Control" parent="."]
-
-focus/ignore_mouse = false
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 40.0
-margin/bottom = 40.0
-
-[node name="1" type="TextureFrame" parent="layer2"]
-
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 194.0
-margin/right = 800.0
-margin/bottom = 456.0
-texture = ExtResource( 2 )
-
-[node name="2" type="TextureFrame" parent="layer2"]
-
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 800.0
-margin/top = 194.0
-margin/right = 1600.0
-margin/bottom = 456.0
-texture = ExtResource( 2 )
-
-[node name="scroll" type="AnimationPlayer" parent="layer2"]
-
-playback/process_mode = 1
-playback/default_blend_time = 0.0
-root/root = NodePath("..")
-anims/scroll = SubResource( 1 )
-playback/active = true
-playback/speed = 0.1
-blend_times = [ ]
-autoplay = "scroll"
-
-[node name="layer1" type="Control" parent="."]
-
-focus/ignore_mouse = false
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 40.0
-margin/bottom = 40.0
-
-[node name="1" type="TextureFrame" parent="layer1"]
-
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 212.0
-margin/right = 800.0
-margin/bottom = 456.0
-texture = ExtResource( 3 )
-
-[node name="2" type="TextureFrame" parent="layer1"]
-
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 800.0
-margin/top = 212.0
-margin/right = 1600.0
-margin/bottom = 456.0
-texture = ExtResource( 3 )
-
-[node name="scroll" type="AnimationPlayer" parent="layer1"]
-
-playback/process_mode = 1
-playback/default_blend_time = 0.0
-root/root = NodePath("..")
-anims/scroll = SubResource( 1 )
-playback/active = true
-playback/speed = 0.2
-blend_times = [ ]
-autoplay = "scroll"
-
-[node name="logo" type="AnimatedSprite" parent="."]
-
-transform/pos = Vector2( 412, 171 )
-frames = SubResource( 2 )
-frame = 8
-
-[node name="start" type="TextureButton" parent="."]
-
-focus/ignore_mouse = false
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 345.0
-margin/top = 369.0
-margin/right = 494.0
-margin/bottom = 443.0
-toggle_mode = false
-textures/normal = ExtResource( 13 )
-textures/pressed = ExtResource( 14 )
-
-[node name="copyright" type="Label" parent="."]
-
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-margin/left = 658.0
-margin/top = 417.0
-margin/right = 776.0
-margin/bottom = 434.0
-custom_fonts/font = ExtResource( 15 )
-text = "(c) 1994 SOGA"
-percent_visible = 1.0
-lines_skipped = 0
-max_lines_visible = -1
-
-[node name="intro" type="AnimationPlayer" parent="."]
-
-playback/process_mode = 1
-playback/default_blend_time = 0.0
-root/root = NodePath("..")
-anims/intro = SubResource( 3 )
-anims/loop = SubResource( 4 )
-next/intro = "loop"
-playback/active = true
-playback/speed = 1.0
-blend_times = [ ]
-autoplay = "intro"
-
-
diff --git a/demos/2d/splash/splash_01.png b/demos/2d/splash/splash_01.png
deleted file mode 100644
index 79a96ac735..0000000000
--- a/demos/2d/splash/splash_01.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/splash/splash_02.png b/demos/2d/splash/splash_02.png
deleted file mode 100644
index fab8bc6b38..0000000000
--- a/demos/2d/splash/splash_02.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/splash/splash_03.png b/demos/2d/splash/splash_03.png
deleted file mode 100644
index 07c6cee8d2..0000000000
--- a/demos/2d/splash/splash_03.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/splash/splash_04.png b/demos/2d/splash/splash_04.png
deleted file mode 100644
index e2b6a607ad..0000000000
--- a/demos/2d/splash/splash_04.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/splash/splash_05.png b/demos/2d/splash/splash_05.png
deleted file mode 100644
index de42ab4cb7..0000000000
--- a/demos/2d/splash/splash_05.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/splash/splash_06.png b/demos/2d/splash/splash_06.png
deleted file mode 100644
index c1b5e5dace..0000000000
--- a/demos/2d/splash/splash_06.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/splash/splash_07.png b/demos/2d/splash/splash_07.png
deleted file mode 100644
index c65a6d8aec..0000000000
--- a/demos/2d/splash/splash_07.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/splash/splash_08.png b/demos/2d/splash/splash_08.png
deleted file mode 100644
index 0bcf0bafe4..0000000000
--- a/demos/2d/splash/splash_08.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/splash/splash_09.png b/demos/2d/splash/splash_09.png
deleted file mode 100644
index de774104f9..0000000000
--- a/demos/2d/splash/splash_09.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/sprite_shaders/cubio.png b/demos/2d/sprite_shaders/cubio.png
deleted file mode 100644
index 6f76220225..0000000000
--- a/demos/2d/sprite_shaders/cubio.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/sprite_shaders/engine.cfg b/demos/2d/sprite_shaders/engine.cfg
deleted file mode 100644
index fa17a2e800..0000000000
--- a/demos/2d/sprite_shaders/engine.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-[application]
-
-name="2D Shaders for Sprites"
-main_scene="res://sprite_shaders.tscn"
-icon="res://icon.png"
diff --git a/demos/2d/sprite_shaders/icon.png b/demos/2d/sprite_shaders/icon.png
deleted file mode 100644
index 8b13ef6bb4..0000000000
--- a/demos/2d/sprite_shaders/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/sprite_shaders/sprite_shaders.tscn b/demos/2d/sprite_shaders/sprite_shaders.tscn
deleted file mode 100644
index feb6003890..0000000000
--- a/demos/2d/sprite_shaders/sprite_shaders.tscn
+++ /dev/null
@@ -1,163 +0,0 @@
-[gd_scene load_steps=20 format=1]
-
-[ext_resource path="res://cubio.png" type="Texture" id=1]
-
-[sub_resource type="CanvasItemShader" id=1]
-
-_code = { "fragment":"uniform float outline_width=2.0;\nuniform color outline_color=vec4(0,0,0,1);\n\nvec4 col = tex(TEXTURE,UV);\nvec2 ps = TEXTURE_PIXEL_SIZE;\nfloat a;\nfloat maxa=col.a;\nfloat mina=col.a;\na=tex(TEXTURE,UV+vec2(0,-outline_width)*ps).a;\nmaxa=max(a,maxa); \nmina=min(a,mina);\na=tex(TEXTURE,UV+vec2(0,outline_width)*ps).a;\nmaxa=max(a,maxa); \nmina=min(a,mina);\na=tex(TEXTURE,UV+vec2(-outline_width,0)*ps).a;\nmaxa=max(a,maxa); \nmina=min(a,mina);\na=tex(TEXTURE,UV+vec2(outline_width,0)*ps).a;\nmaxa=max(a,maxa); \nmina=min(a,mina);\n\nCOLOR=mix(col,outline_color,maxa-mina);", "fragment_ofs":0, "light":"", "light_ofs":0, "vertex":"", "vertex_ofs":0 }
-
-[sub_resource type="CanvasItemMaterial" id=2]
-
-shader/shader = SubResource( 1 )
-shader/shading_mode = 0
-shader_param/outline_width = 2.0
-shader_param/outline_color = Color( 0, 0, 0, 1 )
-
-[sub_resource type="CanvasItemShader" id=3]
-
-_code = { "fragment":"//this shader only works properly with premultiplied alpha blend mode\nuniform float aura_width=2.0;\nuniform color aura_color=vec4(0.4,0.7,0.3,1);\n\nvec4 col = tex(TEXTURE,UV);\nvec2 ps = TEXTURE_PIXEL_SIZE;\nfloat a;\nfloat maxa=col.a;\nfloat mina=col.a;\na=tex(TEXTURE,UV+vec2(0,-aura_width)*ps).a;\nmaxa=max(a,maxa); \nmina=min(a,mina);\na=tex(TEXTURE,UV+vec2(0,aura_width)*ps).a;\nmaxa=max(a,maxa); \nmina=min(a,mina);\na=tex(TEXTURE,UV+vec2(-aura_width,0)*ps).a;\nmaxa=max(a,maxa); \nmina=min(a,mina);\na=tex(TEXTURE,UV+vec2(aura_width,0)*ps).a;\nmaxa=max(a,maxa); \nmina=min(a,mina);\ncol.rgb*=col.a;\nCOLOR=col;//mix(col,aura_color,maxa-mina);\nfloat auraa=(maxa-mina);\n\nCOLOR.rgb+=aura_color.rgb*(maxa-mina);", "fragment_ofs":0, "light":"", "light_ofs":0, "vertex":"", "vertex_ofs":0 }
-
-[sub_resource type="CanvasItemMaterial" id=4]
-
-shader/shader = SubResource( 3 )
-shader/shading_mode = 0
-shader_param/aura_width = 2.0
-shader_param/aura_color = Color( 0.4, 0.7, 0.3, 1 )
-
-[sub_resource type="CanvasItemShader" id=5]
-
-_code = { "fragment":"uniform float radius=2.0;\n\nvec4 col = tex(TEXTURE,UV);\nvec2 ps = TEXTURE_PIXEL_SIZE;\ncol+=tex(TEXTURE,UV+vec2(0,-radius)*ps);\ncol+=tex(TEXTURE,UV+vec2(0,radius)*ps);\ncol+=tex(TEXTURE,UV+vec2(-radius,0)*ps);\ncol+=tex(TEXTURE,UV+vec2(radius,0)*ps);\ncol/=5.0;\nCOLOR=col;", "fragment_ofs":0, "light":"", "light_ofs":0, "vertex":"", "vertex_ofs":0 }
-
-[sub_resource type="CanvasItemMaterial" id=6]
-
-shader/shader = SubResource( 5 )
-shader/shading_mode = 0
-shader_param/radius = 4.0
-
-[sub_resource type="CanvasItemShader" id=7]
-
-_code = { "fragment":"uniform float fattyness=2.0;\n\nvec2 ruv=(UV-vec2(0.5,0.5));\nfloat len = length(ruv);\nvec2 dir = normalize(ruv);\nlen=pow(len*2.0,fattyness)*0.5;\nruv=len*dir;\nvec4 col = tex(TEXTURE,ruv+vec2(0.5,0.5));\nCOLOR=col;", "fragment_ofs":0, "light":"", "light_ofs":0, "vertex":"", "vertex_ofs":0 }
-
-[sub_resource type="CanvasItemMaterial" id=8]
-
-shader/shader = SubResource( 7 )
-shader/shading_mode = 0
-shader_param/fattyness = 2.0
-
-[sub_resource type="CanvasItemShader" id=9]
-
-_code = { "fragment":"\nuniform float radius=5.0;\nuniform color modulate=color(0,0,0,0.7);\n\nvec2 ps = TEXTURE_PIXEL_SIZE;\n\nvec4 shadow = tex(TEXTURE,UV+vec2(-radius,-radius)*ps);\nshadow += tex(TEXTURE,UV+vec2(-radius,0)*ps);\nshadow += tex(TEXTURE,UV+vec2(-radius,radius)*ps);\nshadow += tex(TEXTURE,UV+vec2(0,-radius)*ps);\nshadow += tex(TEXTURE,UV+vec2(0,radius)*ps);\nshadow += tex(TEXTURE,UV+vec2(radius,-radius)*ps);\nshadow += tex(TEXTURE,UV+vec2(radius,0)*ps);\nshadow += tex(TEXTURE,UV+vec2(radius,radius)*ps);\nshadow/=8;\nshadow*=modulate;\n\nvec4 col = tex(TEXTURE,UV);\nCOLOR=mix(shadow,col,col.a);", "fragment_ofs":0, "light":"", "light_ofs":0, "vertex":"", "vertex_ofs":0 }
-
-[sub_resource type="CanvasItemMaterial" id=10]
-
-shader/shader = SubResource( 9 )
-shader/shading_mode = 0
-shader_param/radius = 5.0
-shader_param/modulate = Color( 0, 0, 0, 0.7 )
-
-[sub_resource type="CanvasItemShader" id=11]
-
-_code = { "fragment":"\nuniform vec2 offset=vec2(8,8);\nuniform color modulate=color(0.5,0,0.1,0.5);\n\nvec2 ps = TEXTURE_PIXEL_SIZE;\n\nvec4 shadow = vec4(modulate.rgb,tex(TEXTURE,UV-offset*ps).a*modulate.a);\nvec4 col = tex(TEXTURE,UV);\n\nCOLOR=mix(shadow,col,col.a);", "fragment_ofs":0, "light":"", "light_ofs":0, "vertex":"", "vertex_ofs":0 }
-
-[sub_resource type="CanvasItemMaterial" id=12]
-
-shader/shader = SubResource( 11 )
-shader/shading_mode = 0
-shader_param/offset = Vector2( 8, 8 )
-shader_param/modulate = Color( 0.5, 0, 0.1, 0.5 )
-
-[sub_resource type="CanvasItemShader" id=13]
-
-_code = { "fragment":"\nuniform color modulate=color(0.2,0.4,1.0,0.8);\nCOLOR = vec4(modulate.rgb,tex(TEXTURE,UV).a*modulate.a);\n\n\n", "fragment_ofs":0, "light":"", "light_ofs":0, "vertex":"", "vertex_ofs":0 }
-
-[sub_resource type="CanvasItemMaterial" id=14]
-
-shader/shader = SubResource( 13 )
-shader/shading_mode = 0
-shader_param/modulate = Color( 0.013125, 0.194829, 0.406815, 0.818237 )
-
-[sub_resource type="CanvasItemShader" id=15]
-
-_code = { "fragment":"\nuniform float radius=2.0;\nuniform float amount=0.6;\nfloat r = radius;\nvec2 ps = TEXTURE_PIXEL_SIZE;\n\nvec4 col = tex(TEXTURE,UV);\n\nvec4 glow = col;\nglow += tex(TEXTURE,UV+vec2(-r,-r)*ps);\nglow += tex(TEXTURE,UV+vec2(-r,0)*ps);\nglow += tex(TEXTURE,UV+vec2(-r,r)*ps);\nglow += tex(TEXTURE,UV+vec2(0,-r)*ps);\nglow += tex(TEXTURE,UV+vec2(0,r)*ps);\nglow += tex(TEXTURE,UV+vec2(r,-r)*ps);\nglow += tex(TEXTURE,UV+vec2(r,0)*ps);\nglow += tex(TEXTURE,UV+vec2(r,r)*ps);\nr*=2.0;\nglow += tex(TEXTURE,UV+vec2(-r,-r)*ps);\nglow += tex(TEXTURE,UV+vec2(-r,0)*ps);\nglow += tex(TEXTURE,UV+vec2(-r,r)*ps);\nglow += tex(TEXTURE,UV+vec2(0,-r)*ps);\nglow += tex(TEXTURE,UV+vec2(0,r)*ps);\nglow += tex(TEXTURE,UV+vec2(r,-r)*ps);\nglow += tex(TEXTURE,UV+vec2(r,0)*ps);\nglow += tex(TEXTURE,UV+vec2(r,r)*ps);\n\nglow/=17.0;\nglow*=amount;\ncol.rgb*=col.a;\nCOLOR=glow+col;", "fragment_ofs":0, "light":"", "light_ofs":0, "vertex":"", "vertex_ofs":0 }
-
-[sub_resource type="CanvasItemMaterial" id=16]
-
-shader/shader = SubResource( 15 )
-shader/shading_mode = 0
-shader_param/radius = 2.0
-shader_param/amount = 0.5
-
-[sub_resource type="CanvasItemShader" id=17]
-
-_code = { "fragment":"\nuniform float amount = 20;\nvec2 uv = UV*0.05;\nfloat a = fract(sin(dot(UV ,vec2(12.9898,78.233))) * 438.5453);\nvec4 col = tex(TEXTURE,UV);\ncol.a*=pow(a,amount);\nCOLOR = col;\n\n\n", "fragment_ofs":0, "light":"", "light_ofs":0, "vertex":"", "vertex_ofs":0 }
-
-[sub_resource type="CanvasItemMaterial" id=18]
-
-shader/shader = SubResource( 17 )
-shader/shading_mode = 0
-shader_param/amount = 2.0
-
-[node name="shaders" type="Node2D"]
-
-[node name="normal" type="Sprite" parent="."]
-
-transform/pos = Vector2( 95.4559, 131.272 )
-texture = ExtResource( 1 )
-
-[node name="outline" type="Sprite" parent="."]
-
-material/material = SubResource( 2 )
-transform/pos = Vector2( 246.456, 128.272 )
-texture = ExtResource( 1 )
-
-[node name="aura" type="Sprite" parent="."]
-
-visibility/blend_mode = 4
-material/material = SubResource( 4 )
-transform/pos = Vector2( 398.185, 130.624 )
-texture = ExtResource( 1 )
-
-[node name="blur" type="Sprite" parent="."]
-
-material/material = SubResource( 6 )
-transform/pos = Vector2( 548.503, 123.04 )
-texture = ExtResource( 1 )
-
-[node name="fatty" type="Sprite" parent="."]
-
-material/material = SubResource( 8 )
-transform/pos = Vector2( 696.518, 125.393 )
-texture = ExtResource( 1 )
-
-[node name="dropshadow" type="Sprite" parent="."]
-
-material/material = SubResource( 10 )
-transform/pos = Vector2( 97.4079, 389.709 )
-texture = ExtResource( 1 )
-
-[node name="offsetshadow" type="Sprite" parent="."]
-
-material/material = SubResource( 12 )
-transform/pos = Vector2( 254.821, 384.238 )
-texture = ExtResource( 1 )
-
-[node name="silouette" type="Sprite" parent="."]
-
-material/material = SubResource( 14 )
-transform/pos = Vector2( 418.854, 387.184 )
-texture = ExtResource( 1 )
-
-[node name="glow" type="Sprite" parent="."]
-
-visibility/blend_mode = 4
-material/material = SubResource( 16 )
-transform/pos = Vector2( 563.75, 385.42 )
-texture = ExtResource( 1 )
-
-[node name="dissintegrate" type="Sprite" parent="."]
-
-material/material = SubResource( 18 )
-transform/pos = Vector2( 708.613, 385.444 )
-texture = ExtResource( 1 )
-
-
diff --git a/demos/2d/tetris/block.png b/demos/2d/tetris/block.png
deleted file mode 100644
index b7759b35b4..0000000000
--- a/demos/2d/tetris/block.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/tetris/engine.cfg b/demos/2d/tetris/engine.cfg
deleted file mode 100644
index db20f0b888..0000000000
--- a/demos/2d/tetris/engine.cfg
+++ /dev/null
@@ -1,17 +0,0 @@
-[application]
-
-name="Tetris"
-main_scene="res://tetris.tscn"
-icon="res://tetris.png"
-
-[display]
-
-width=400
-height=400
-
-[input]
-
-move_left=[key(Left)]
-move_right=[key(Right)]
-move_down=[key(Down)]
-rotate=[key(Space)]
diff --git a/demos/2d/tetris/grid.gd b/demos/2d/tetris/grid.gd
deleted file mode 100644
index 75fabb4210..0000000000
--- a/demos/2d/tetris/grid.gd
+++ /dev/null
@@ -1,194 +0,0 @@
-
-extends Control
-
-# Simple Tetris-like demo, (c) 2012 Juan Linietsky
-# Implemented by using a regular Control and drawing on it during the _draw() callback.
-# The drawing surface is updated only when changes happen (by calling update())
-
-# Member variables
-var score = 0
-var score_label = null
-
-const MAX_SHAPES = 7
-
-var block = preload("block.png")
-
-var block_colors = [
- Color(1, 0.5, 0.5),
- Color(0.5, 1, 0.5),
- Color(0.5, 0.5, 1),
- Color(0.8, 0.4, 0.8),
- Color(0.8, 0.8, 0.4),
- Color(0.4, 0.8, 0.8),
- Color(0.7, 0.7, 0.7)]
-
-var block_shapes = [
- [ Vector2(0, -1), Vector2(0, 0), Vector2(0, 1), Vector2(0, 2) ], # I
- [ Vector2(0, 0), Vector2(1, 0), Vector2(1, 1), Vector2(0, 1) ], # O
- [ Vector2(-1, 1), Vector2(0, 1), Vector2(0, 0), Vector2(1, 0) ], # S
- [ Vector2(1, 1), Vector2(0, 1), Vector2(0, 0), Vector2(-1, 0) ], # Z
- [ Vector2(-1, 1), Vector2(-1, 0), Vector2(0, 0), Vector2(1, 0) ], # L
- [ Vector2(1, 1), Vector2(1, 0), Vector2(0, 0), Vector2(-1, 0) ], # J
- [ Vector2(0, 1), Vector2(1, 0), Vector2(0, 0), Vector2(-1, 0) ]] # T
-
-var block_rotations = [
- Matrix32(Vector2(1, 0), Vector2(0, 1), Vector2()),
- Matrix32(Vector2(0, 1), Vector2(-1, 0), Vector2()),
- Matrix32(Vector2(-1, 0), Vector2(0, -1), Vector2()),
- Matrix32(Vector2(0, -1), Vector2(1, 0), Vector2())]
-
-var width = 0
-var height = 0
-
-var cells = {}
-
-var piece_active = false
-var piece_shape = 0
-var piece_pos = Vector2()
-var piece_rot = 0
-
-
-func piece_cell_xform(p, er = 0):
- var r = (4 + er + piece_rot) % 4
- return piece_pos + block_rotations[r].xform(p)
-
-
-func _draw():
- var sb = get_stylebox("bg", "Tree") # Use line edit bg
- draw_style_box(sb, Rect2(Vector2(), get_size()).grow(3))
-
- var bs = block.get_size()
- for y in range(height):
- for x in range(width):
- if (Vector2(x, y) in cells):
- draw_texture_rect(block, Rect2(Vector2(x, y)*bs, bs), false, block_colors[cells[Vector2(x, y)]])
-
- if (piece_active):
- for c in block_shapes[piece_shape]:
- draw_texture_rect(block, Rect2(piece_cell_xform(c)*bs, bs), false, block_colors[piece_shape])
-
-
-func piece_check_fit(ofs, er = 0):
- for c in block_shapes[piece_shape]:
- var pos = piece_cell_xform(c, er) + ofs
- if (pos.x < 0):
- return false
- if (pos.y < 0):
- return false
- if (pos.x >= width):
- return false
- if (pos.y >= height):
- return false
- if (pos in cells):
- return false
-
- return true
-
-
-func new_piece():
- piece_shape = randi() % MAX_SHAPES
- piece_pos = Vector2(width/2, 0)
- piece_active = true
- piece_rot = 0
- if (piece_shape == 0):
- piece_pos.y += 1
-
- if (not piece_check_fit(Vector2())):
- # Game over
- game_over()
-
- update()
-
-
-func test_collapse_rows():
- var accum_down = 0
- for i in range(height):
- var y = height - i - 1
- var collapse = true
- for x in range(width):
- if (Vector2(x, y) in cells):
- if (accum_down):
- cells[Vector2(x, y + accum_down)] = cells[Vector2(x, y)]
- else:
- collapse = false
- if (accum_down):
- cells.erase(Vector2(x, y + accum_down))
-
- if (collapse):
- accum_down += 1
-
- score += accum_down*100
- score_label.set_text(str(score))
-
-
-func game_over():
- piece_active = false
- get_node("gameover").set_text("Game over!")
- update()
-
-
-func restart_pressed():
- score = 0
- score_label.set_text("0")
- cells.clear()
- get_node("gameover").set_text("")
- piece_active = true
- get_node("../restart").release_focus()
- update()
-
-
-func piece_move_down():
- if (!piece_active):
- return
- if (piece_check_fit(Vector2(0, 1))):
- piece_pos.y += 1
- update()
- else:
- for c in block_shapes[piece_shape]:
- var pos = piece_cell_xform(c)
- cells[pos] = piece_shape
- test_collapse_rows()
- new_piece()
-
-
-func piece_rotate():
- var adv = 1
- if (not piece_check_fit(Vector2(), 1)):
- return
- piece_rot = (piece_rot + adv) % 4
- update()
-
-
-func _input(ie):
- if (not piece_active):
- return
- if (!ie.is_pressed()):
- return
-
- if (ie.is_action("move_left")):
- if (piece_check_fit(Vector2(-1, 0))):
- piece_pos.x -= 1
- update()
- elif (ie.is_action("move_right")):
- if (piece_check_fit(Vector2(1, 0))):
- piece_pos.x += 1
- update()
- elif (ie.is_action("move_down")):
- piece_move_down()
- elif (ie.is_action("rotate")):
- piece_rotate()
-
-
-func setup(w, h):
- width = w
- height = h
- set_size(Vector2(w, h)*block.get_size())
- new_piece()
- get_node("timer").start()
-
-
-func _ready():
- setup(10, 20)
- score_label = get_node("../score")
-
- set_process_input(true)
diff --git a/demos/2d/tetris/grid.tscn b/demos/2d/tetris/grid.tscn
deleted file mode 100644
index 9df85e3817..0000000000
--- a/demos/2d/tetris/grid.tscn
+++ /dev/null
@@ -1,47 +0,0 @@
-[gd_scene load_steps=2 format=1]
-
-[ext_resource path="res://grid.gd" type="Script" id=1]
-
-[node name="Grid" type="Control"]
-
-focus/ignore_mouse = false
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 40.0
-margin/bottom = 40.0
-script/script = ExtResource( 1 )
-
-[node name="timer" type="Timer" parent="."]
-
-process_mode = 1
-wait_time = 1.0
-one_shot = false
-autostart = false
-
-[node name="gameover" type="Label" parent="."]
-
-anchor/right = 1
-anchor/bottom = 1
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 0.0
-margin/bottom = 0.0
-custom_colors/font_color = Color( 1, 1, 1, 1 )
-custom_colors/font_color_shadow = Color( 0, 0, 0, 1 )
-custom_constants/shadow_offset_x = 1
-custom_constants/shadow_offset_y = 1
-align = 1
-valign = 1
-percent_visible = 1.0
-lines_skipped = 0
-max_lines_visible = -1
-
-[connection signal="timeout" from="timer" to="." method="piece_move_down"]
-
-
diff --git a/demos/2d/tetris/tetris.png b/demos/2d/tetris/tetris.png
deleted file mode 100644
index 8b63977bfe..0000000000
--- a/demos/2d/tetris/tetris.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/tetris/tetris.tscn b/demos/2d/tetris/tetris.tscn
deleted file mode 100644
index de81044c22..0000000000
--- a/demos/2d/tetris/tetris.tscn
+++ /dev/null
@@ -1,67 +0,0 @@
-[gd_scene load_steps=2 format=1]
-
-[ext_resource path="res://grid.tscn" type="PackedScene" id=1]
-
-[node name="Tetris" type="Panel"]
-
-focus/ignore_mouse = false
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 400.0
-margin/bottom = 400.0
-
-[node name="Grid" parent="." instance=ExtResource( 1 )]
-
-margin/left = 40.0
-margin/top = 35.0
-margin/right = 80.0
-margin/bottom = 75.0
-
-[node name="Label" type="Label" parent="."]
-
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-margin/left = 243.0
-margin/top = 36.0
-margin/right = 283.0
-margin/bottom = 49.0
-text = "Score:"
-percent_visible = 1.0
-lines_skipped = 0
-max_lines_visible = -1
-
-[node name="score" type="Label" parent="."]
-
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-margin/left = 252.0
-margin/top = 55.0
-margin/right = 293.0
-margin/bottom = 68.0
-text = "0"
-percent_visible = 1.0
-lines_skipped = 0
-max_lines_visible = -1
-
-[node name="restart" type="Button" parent="."]
-
-focus/ignore_mouse = false
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 243.0
-margin/top = 292.0
-margin/right = 303.0
-margin/bottom = 311.0
-toggle_mode = false
-text = "Restart"
-flat = false
-
-[connection signal="pressed" from="restart" to="Grid" method="restart_pressed"]
-
-
diff --git a/demos/2d/texscreen/OpenCV_Chessboard.png b/demos/2d/texscreen/OpenCV_Chessboard.png
deleted file mode 100644
index 31b7f8ccd8..0000000000
--- a/demos/2d/texscreen/OpenCV_Chessboard.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/texscreen/bubble.png b/demos/2d/texscreen/bubble.png
deleted file mode 100644
index 021abba601..0000000000
--- a/demos/2d/texscreen/bubble.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/texscreen/bubbles.gd b/demos/2d/texscreen/bubbles.gd
deleted file mode 100644
index c0c7d892e6..0000000000
--- a/demos/2d/texscreen/bubbles.gd
+++ /dev/null
@@ -1,11 +0,0 @@
-
-extends Control
-
-# Member variables
-const MAX_BUBBLES = 10
-
-
-func _ready():
- for i in range(MAX_BUBBLES):
- var bubble = preload("res://lens.tscn").instance()
- add_child(bubble)
diff --git a/demos/2d/texscreen/bubbles.tscn b/demos/2d/texscreen/bubbles.tscn
deleted file mode 100644
index 72b7874b92..0000000000
--- a/demos/2d/texscreen/bubbles.tscn
+++ /dev/null
@@ -1,32 +0,0 @@
-[gd_scene load_steps=3 format=1]
-
-[ext_resource path="res://bubbles.gd" type="Script" id=1]
-[ext_resource path="res://burano.png" type="Texture" id=2]
-
-[node name="texscreen_demo" type="Control"]
-
-anchor/right = 1
-anchor/bottom = 1
-focus/ignore_mouse = false
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 0.0
-margin/bottom = 0.0
-script/script = ExtResource( 1 )
-
-[node name="burano" type="TextureFrame" parent="."]
-
-focus/ignore_mouse = true
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-margin/left = 0.0
-margin/top = 0.0
-margin/right = 800.0
-margin/bottom = 600.0
-texture = ExtResource( 2 )
-
-
diff --git a/demos/2d/texscreen/burano.png b/demos/2d/texscreen/burano.png
deleted file mode 100644
index 6eec09d585..0000000000
--- a/demos/2d/texscreen/burano.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/texscreen/engine.cfg b/demos/2d/texscreen/engine.cfg
deleted file mode 100644
index 0a3f084270..0000000000
--- a/demos/2d/texscreen/engine.cfg
+++ /dev/null
@@ -1,12 +0,0 @@
-[application]
-
-name="Glass Bubbles (Texscreen)"
-main_scene="res://bubbles.tscn"
-icon="res://icon.png"
-
-[display]
-
-width=800
-height=600
-stretch_mode="2d"
-stretch_aspect="keep"
diff --git a/demos/2d/texscreen/icon.png b/demos/2d/texscreen/icon.png
deleted file mode 100644
index d74d025ced..0000000000
--- a/demos/2d/texscreen/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/2d/texscreen/lens.gd b/demos/2d/texscreen/lens.gd
deleted file mode 100644
index d1007553b0..0000000000
--- a/demos/2d/texscreen/lens.gd
+++ /dev/null
@@ -1,32 +0,0 @@
-
-extends BackBufferCopy
-
-# Member variables
-const MOTION_SPEED = 150
-
-var vsize
-var dir
-
-
-func _process(delta):
- var pos = get_pos() + dir*delta*MOTION_SPEED
-
- if (pos.x < 0):
- dir.x = abs(dir.x)
- elif (pos.x > vsize.x):
- dir.x = -abs(dir.x)
-
- if (pos.y < 0):
- dir.y = abs(dir.y)
- elif (pos.y > vsize.y):
- dir.y = -abs(dir.y)
-
- set_pos(pos)
-
-
-func _ready():
- vsize = get_viewport_rect().size
- var pos = vsize*Vector2(randf(), randf())
- set_pos(pos)
- dir = Vector2(randf()*2.0 - 1, randf()*2.0 - 1).normalized()
- set_process(true)
diff --git a/demos/2d/texscreen/lens.tscn b/demos/2d/texscreen/lens.tscn
deleted file mode 100644
index 7f449e46ae..0000000000
--- a/demos/2d/texscreen/lens.tscn
+++ /dev/null
@@ -1,29 +0,0 @@
-[gd_scene load_steps=5 format=1]
-
-[ext_resource path="res://lens.gd" type="Script" id=1]
-[ext_resource path="res://bubble.png" type="Texture" id=2]
-
-[sub_resource type="CanvasItemShader" id=1]
-
-_code = { "fragment":"vec4 normal = tex(TEXTURE,UV);\nvec2 offset = normal.xy * 2.0 - vec2(1.0);\nCOLOR.rgb=texscreen(SCREEN_UV+offset*0.03);\nCOLOR.a=normal.a;\nCOLOR.rgb*=vec3(1.0,0.8,0.7);\n", "fragment_ofs":0, "light":"", "light_ofs":0, "vertex":"", "vertex_ofs":0 }
-
-[sub_resource type="CanvasItemMaterial" id=2]
-
-shader/shader = SubResource( 1 )
-shader/shading_mode = 0
-
-[node name="glass" type="BackBufferCopy"]
-
-transform/pos = Vector2( 482.908, 346.807 )
-transform/scale = Vector2( 1.31289, 1.34009 )
-copy_mode = 1
-rect = Rect2( -100, -100, 200, 200 )
-script/script = ExtResource( 1 )
-
-[node name="lens" type="Sprite" parent="."]
-
-material/material = SubResource( 2 )
-transform/pos = Vector2( 1.6427, -2.90363 )
-texture = ExtResource( 2 )
-
-
diff --git a/demos/3d/fixed_materials/brick_color.png b/demos/3d/fixed_materials/brick_color.png
deleted file mode 100644
index 3c0548a428..0000000000
--- a/demos/3d/fixed_materials/brick_color.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/fixed_materials/brick_detail.png b/demos/3d/fixed_materials/brick_detail.png
deleted file mode 100644
index febad683a6..0000000000
--- a/demos/3d/fixed_materials/brick_detail.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/fixed_materials/brick_detail_emission.png b/demos/3d/fixed_materials/brick_detail_emission.png
deleted file mode 100644
index 4f11f6d920..0000000000
--- a/demos/3d/fixed_materials/brick_detail_emission.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/fixed_materials/brick_detail_glow.png b/demos/3d/fixed_materials/brick_detail_glow.png
deleted file mode 100644
index be833564fa..0000000000
--- a/demos/3d/fixed_materials/brick_detail_glow.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/fixed_materials/brick_emission.png b/demos/3d/fixed_materials/brick_emission.png
deleted file mode 100644
index 4de915f56b..0000000000
--- a/demos/3d/fixed_materials/brick_emission.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/fixed_materials/brick_normal.png b/demos/3d/fixed_materials/brick_normal.png
deleted file mode 100644
index 54d3e0288d..0000000000
--- a/demos/3d/fixed_materials/brick_normal.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/fixed_materials/engine.cfg b/demos/3d/fixed_materials/engine.cfg
deleted file mode 100644
index 6e6a23cb52..0000000000
--- a/demos/3d/fixed_materials/engine.cfg
+++ /dev/null
@@ -1,9 +0,0 @@
-[application]
-
-name="Fixed Materials"
-main_scene="res://fixed_materials.scn"
-icon="res://icon.png"
-
-[rasterizer]
-
-blur_buffer_size=128
diff --git a/demos/3d/fixed_materials/fixed_materials.scn b/demos/3d/fixed_materials/fixed_materials.scn
deleted file mode 100644
index 94809b9a5e..0000000000
--- a/demos/3d/fixed_materials/fixed_materials.scn
+++ /dev/null
Binary files differ
diff --git a/demos/3d/fixed_materials/icon.png b/demos/3d/fixed_materials/icon.png
deleted file mode 100644
index 031c4822e8..0000000000
--- a/demos/3d/fixed_materials/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/fixed_materials/refmap.png b/demos/3d/fixed_materials/refmap.png
deleted file mode 100644
index cb8d0fb6ec..0000000000
--- a/demos/3d/fixed_materials/refmap.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/fixed_materials/rim.png b/demos/3d/fixed_materials/rim.png
deleted file mode 100644
index 9282e9aa52..0000000000
--- a/demos/3d/fixed_materials/rim.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/fixed_materials/rocky_specular.png b/demos/3d/fixed_materials/rocky_specular.png
deleted file mode 100644
index ae210c4974..0000000000
--- a/demos/3d/fixed_materials/rocky_specular.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/fixed_materials/s.xml b/demos/3d/fixed_materials/s.xml
deleted file mode 100644
index f974234e05..0000000000
--- a/demos/3d/fixed_materials/s.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<resource_file type="Mesh" subresource_count="4" version="0.99" version_name="Godot Engine v0.99.3735-pre-beta">
- <ext_resource path="res://brick_color.*" type="ImageTexture"></ext_resource>
- <ext_resource path="res://brick_normal.*" type="ImageTexture"></ext_resource>
- <resource type="FixedMaterial" path="local://1">
- <bool name="flags/visible"> True </bool>
- <bool name="flags/double_sided"> True </bool>
- <bool name="flags/invert_faces"> False </bool>
- <bool name="flags/unshaded"> False </bool>
- <bool name="flags/on_top"> False </bool>
- <bool name="flags/wireframe"> False </bool>
- <bool name="flags/billboard_sw"> False </bool>
- <bool name="hints/decal"> False </bool>
- <bool name="hints/opaque_pre_zpass"> False </bool>
- <bool name="hints/no_shadow"> False </bool>
- <bool name="hints/no_depth_draw"> False </bool>
- <int name="params/blend_mode"> 0 </int>
- <real name="params/line_width"> 0 </real>
- <bool name="fixed_flags/use_alpha"> False </bool>
- <bool name="fixed_flags/use_color_array"> False </bool>
- <bool name="fixed_flags/use_point_size"> False </bool>
- <color name="params/diffuse"> 0.64, 0.64, 0.64, 1 </color>
- <color name="params/specular"> 0.63226, 0.63226, 0.63226, 1 </color>
- <color name="params/emission"> 0, 0, 0, 1 </color>
- <real name="params/specular_exp"> 34.20256 </real>
- <int name="params/detail_blend"> 0 </int>
- <real name="params/detail_mix"> 1 </real>
- <real name="params/normal_depth"> 0.5 </real>
- <real name="params/shade_param"> 0.5 </real>
- <int name="params/glow"> 0 </int>
- <real name="params/point_size"> 1 </real>
- <transform name="uv_xform"> 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 </transform>
- <resource name="textures/diffuse" resource_type="ImageTexture" path="res://brick_color.*"> </resource>
- <int name="textures/diffuse_tc"> 0 </int>
- <resource name="textures/detail"></resource> <int name="textures/detail_tc"> 0 </int>
- <resource name="textures/specular"></resource> <int name="textures/specular_tc"> 0 </int>
- <resource name="textures/emission"></resource> <int name="textures/emission_tc"> 0 </int>
- <resource name="textures/specular_exp"></resource> <int name="textures/specular_exp_tc"> 0 </int>
- <resource name="textures/glow"></resource> <int name="textures/glow_tc"> 0 </int>
- <resource name="textures/normal" resource_type="ImageTexture" path="res://brick_normal.*"> </resource>
- <int name="textures/normal_tc"> 0 </int>
- <resource name="textures/shade_param"></resource> <int name="textures/shade_param_tc"> 0 </int>
-
- </resource>
- <main_resource>
- <string name="resource/name"> "Sphere" </string>
- <dictionary name="surfaces/0" shared="false">
- <string> "alphasort" </string>
- <bool> False </bool>
- <string> "material" </string>
- <resource resource_type="FixedMaterial" path="local://1"> </resource>
- <string> "morph_arrays" </string>
- <array len="0" shared="false">
- </array>
- <string> "primitive" </string>
- <int> 4 </int>
- <string> "arrays" </string>
- <array len="9" shared="false">
- <vector3_array len="529"> -0.382683, -0.92388, -0, -0.55557, -0.83147, -0, -0.544895, -0.83147, -0.108386, -0.37533, -0.92388, -0.0746578, -1, 0, -0, -0.980785, 0.19509, -0, -0.96194, 0.19509, -0.191342, -0.980785, 1.19209e-07, -0.19509, -0.382683, 0.92388, -0, -0.19509, 0.980785, -0, -0.191342, 0.980785, -0.0380602, -0.37533, 0.92388, -0.0746578, -0.19509, -0.980785, -0, -0.191342, -0.980785, -0.0380602, -0.980785, -0.19509, -0, -0.96194, -0.19509, -0.191342, -0.55557, 0.83147, -0, -0.544895, 0.831469, -0.108386, -0.92388, -0.382683, -0, -0.906128, -0.382683, -0.18024, -0.707107, 0.707107, -0, -0.69352, 0.707107, -0.13795, -0.83147, -0.55557, -0, -0.815493, -0.55557, -0.162212, -0.83147, 0.55557, -0, -0.815493, 0.55557, -0.162212, -0.707107, -0.707107, -0, -0.69352, -0.707107, -0.13795, -0.92388, 0.382683, -0, -0.906127, 0.382683, -0.18024, -0.906127, -0.19509, -0.37533, -0.853553, -0.382683, -0.353554, -0.51328, 0.831469, -0.212608, -0.653281, 0.707107, -0.270598, -0.768178, -0.55557, -0.31819, -0.768178, 0.55557, -0.31819, -0.653281, -0.707107, -0.270598, -0.853553, 0.382683, -0.353554, -0.51328, -0.83147, -0.212608, -0.906127, 0.19509, -0.37533, -0.353553, -0.92388, -0.146447, -0.92388, 1.19209e-07, -0.382684, -0.18024, 0.980785, -0.0746579, -0.353553, 0.92388, -0.146447, -0.18024, -0.980785, -0.0746578, -0.46194, -0.83147, -0.308658, -0.31819, -0.92388, -0.212608, -0.815493, 0.19509, -0.544895, -0.831469, 1.19209e-07, -0.55557, -0.162211, 0.980785, -0.108387, -0.31819, 0.92388, -0.212608, -0.162211, -0.980785, -0.108386, -0.815493, -0.19509, -0.544895, -0.46194, 0.831469, -0.308658, -0.768178, -0.382683, -0.51328, -0.587938, 0.707107, -0.392848, -0.691342, -0.55557, -0.46194, -0.691342, 0.55557, -0.46194, -0.587938, -0.707107, -0.392848, -0.768178, 0.382683, -0.51328, -0.587938, -0.55557, -0.587938, -0.5, -0.707107, -0.5, -0.587938, 0.55557, -0.587938, -0.653281, 0.382683, -0.653282, -0.392847, -0.83147, -0.392848, -0.69352, 0.19509, -0.69352, -0.270598, -0.92388, -0.270598, -0.707107, 1.19209e-07, -0.707107, -0.137949, 0.980785, -0.13795, -0.270598, 0.92388, -0.270598, -0.137949, -0.980785, -0.13795, -0.69352, -0.19509, -0.69352, -0.392847, 0.831469, -0.392848, -0.653281, -0.382683, -0.653282, -0.5, 0.707107, -0.5, -0.544895, -0.19509, -0.815493, -0.51328, -0.382683, -0.768178, -0.308658, 0.831469, -0.46194, -0.392847, 0.707107, -0.587938, -0.46194, -0.55557, -0.691342, -0.46194, 0.55557, -0.691342, -0.392847, -0.707107, -0.587938, -0.51328, 0.382683, -0.768178, -0.308658, -0.83147, -0.46194, -0.544895, 0.19509, -0.815493, -0.212607, -0.92388, -0.31819, -0.55557, 1.19209e-07, -0.83147, -0.108386, 0.980785, -0.162212, -0.212607, 0.92388, -0.31819, -0.108386, -0.980785, -0.162212, -0.212607, -0.83147, -0.51328, -0.146446, -0.92388, -0.353554, -0.37533, 0.19509, -0.906128, -0.382683, 1.19209e-07, -0.92388, -0.0746576, 0.980785, -0.18024, -0.146446, 0.92388, -0.353554, -0.0746575, -0.980785, -0.18024, -0.37533, -0.19509, -0.906128, -0.212607, 0.831469, -0.51328, -0.353553, -0.382683, -0.853554, -0.270598, 0.707107, -0.653282, -0.318189, -0.55557, -0.768178, -0.318189, 0.55557, -0.768178, -0.270598, -0.707107, -0.653282, -0.353553, 0.382683, -0.853553, -0.162211, -0.55557, -0.815493, -0.137949, -0.707107, -0.69352, -0.162211, 0.55557, -0.815493, -0.18024, 0.382683, -0.906128, -0.108386, -0.83147, -0.544895, -0.191341, 0.19509, -0.96194, -0.0746575, -0.92388, -0.37533, -0.19509, 1.19209e-07, -0.980785, -0.0380599, 0.980785, -0.191342, -0.0746575, 0.92388, -0.375331, -0.0380599, -0.980785, -0.191342, -0.191341, -0.19509, -0.96194, -0.108386, 0.831469, -0.544895, -0.18024, -0.382683, -0.906128, -0.137949, 0.707107, -0.69352, -0.18024, -0.382683, -0.906128, -0.191341, -0.19509, -0.96194, 4.74853e-07, -0.19509, -0.980785, 3.40743e-07, -0.382683, -0.92388, -0.137949, 0.707107, -0.69352, -0.108386, 0.831469, -0.544895, 3.63094e-07, 0.831469, -0.55557, 4.00347e-07, 0.707107, -0.707107, -0.162211, -0.55557, -0.815493, 4.15248e-07, -0.55557, -0.83147, -0.162211, 0.55557, -0.815493, 4.15248e-07, 0.55557, -0.83147, -0.137949, -0.707107, -0.69352, 4.00347e-07, -0.707107, -0.707107, -0.18024, 0.382683, -0.906128, 3.70545e-07, 0.382683, -0.92388, -0.108386, -0.83147, -0.544895, 3.92897e-07, -0.83147, -0.55557, -0.191341, 0.19509, -0.96194, 4.74853e-07, 0.19509, -0.980785, -0.0746575, -0.92388, -0.37533, 3.55644e-07, -0.92388, -0.382683, -0.19509, 1.19209e-07, -0.980785, 3.40743e-07, 1.19209e-07, -1, -0.0746575, 0.92388, -0.375331, -0.0380599, 0.980785, -0.191342, 3.44468e-07, 0.980785, -0.195091, 3.63094e-07, 0.92388, -0.382684, -0.0380599, -0.980785, -0.191342, 3.14666e-07, -0.980785, -0.19509, 0.108387, -0.83147, -0.544895, 0.0746582, -0.92388, -0.37533, 0.191342, 0.19509, -0.96194, 0.195091, 1.19209e-07, -0.980785, 0.0380606, 0.980785, -0.191342, 0.0746582, 0.92388, -0.375331, 0.0380605, -0.980785, -0.191342, 0.191342, -0.19509, -0.96194, 0.108387, 0.831469, -0.544895, 0.18024, -0.382683, -0.906128, 0.13795, 0.707107, -0.69352, 0.162212, -0.55557, -0.815493, 0.162212, 0.55557, -0.815493, 0.13795, -0.707107, -0.69352, 0.18024, 0.382683, -0.906128, 0.270599, 0.707107, -0.653282, 0.31819, 0.55557, -0.768178, 0.31819, -0.55557, -0.768178, 0.270599, -0.707107, -0.653282, 0.353554, 0.382683, -0.853553, 0.212608, -0.83147, -0.51328, 0.375331, 0.19509, -0.906127, 0.146447, -0.92388, -0.353554, 0.382684, 1.19209e-07, -0.92388, 0.0746583, 0.980785, -0.18024, 0.146447, 0.92388, -0.353554, 0.0746581, -0.980785, -0.18024, 0.375331, -0.19509, -0.906127, 0.212608, 0.831469, -0.51328, 0.353554, -0.382683, -0.853553, 0.555571, 1.19209e-07, -0.83147, 0.544896, -0.19509, -0.815493, 0.212608, 0.92388, -0.31819, 0.308659, 0.831469, -0.46194, 0.51328, -0.382683, -0.768178, 0.392848, 0.707107, -0.587938, 0.46194, -0.55557, -0.691342, 0.46194, 0.55557, -0.691342, 0.392848, -0.707107, -0.587938, 0.51328, 0.382683, -0.768178, 0.308659, -0.83147, -0.46194, 0.544896, 0.19509, -0.815493, 0.212608, -0.92388, -0.31819, 0.108387, 0.980785, -0.162212, 0.108387, -0.980785, -0.162212, 0.5, -0.707107, -0.5, 0.392848, -0.83147, -0.392848, 0.653282, 0.382683, -0.653282, 0.69352, 0.19509, -0.69352, 0.270598, -0.92388, -0.270598, 0.707107, 1.19209e-07, -0.707107, 0.13795, 0.980785, -0.13795, 0.270599, 0.92388, -0.270598, 0.13795, -0.980785, -0.13795, 0.69352, -0.19509, -0.69352, 0.392848, 0.831469, -0.392848, 0.653282, -0.382683, -0.653282, 0.5, 0.707107, -0.5, 0.587938, -0.55557, -0.587938, 0.587938, 0.55557, -0.587938, 0.768178, -0.382683, -0.51328, 0.691342, -0.55557, -0.46194, 0.587938, 0.707107, -0.392847, 0.691342, 0.55557, -0.46194, 0.587938, -0.707107, -0.392847, 0.768178, 0.382683, -0.51328, 0.46194, -0.83147, -0.308658, 0.815493, 0.19509, -0.544895, 0.31819, -0.92388, -0.212608, 0.83147, 1.19209e-07, -0.55557, 0.162212, 0.980785, -0.108387, 0.31819, 0.92388, -0.212608, 0.162212, -0.980785, -0.108386, 0.815493, -0.19509, -0.544895, 0.46194, 0.831469, -0.308658, 0.353554, -0.92388, -0.146447, 0.18024, -0.980785, -0.0746578, 0.92388, 1.19209e-07, -0.382683, 0.906128, -0.19509, -0.37533, 0.353554, 0.92388, -0.146447, 0.513281, 0.831469, -0.212608, 0.853554, -0.382683, -0.353553, 0.653282, 0.707107, -0.270598, 0.768178, -0.55557, -0.31819, 0.768178, 0.55557, -0.31819, 0.653282, -0.707107, -0.270598, 0.853554, 0.382683, -0.353553, 0.51328, -0.83147, -0.212608, 0.906128, 0.19509, -0.37533, 0.18024, 0.980785, -0.0746578, 0.69352, -0.707107, -0.13795, 0.544896, -0.83147, -0.108386, 0.906128, 0.382683, -0.18024, 0.96194, 0.19509, -0.191342, 0.375331, -0.92388, -0.0746578, 0.980785, 1.19209e-07, -0.19509, 0.191342, 0.980785, -0.0380602, 0.375331, 0.92388, -0.0746578, 0.191342, -0.980785, -0.0380602, 0.96194, -0.19509, -0.191342, 0.544896, 0.831469, -0.108386, 0.906128, -0.382683, -0.18024, 0.69352, 0.707107, -0.13795, 0.815493, -0.55557, -0.162211, 0.815493, 0.55557, -0.162211, 0.92388, -0.382683, -0, 0.83147, -0.55557, -0, 0.707107, 0.707107, -0, 0.83147, 0.55557, -0, 0.707107, -0.707107, -0, 0.92388, 0.382683, 1.49012e-07, 0.555571, -0.83147, -0, 0.980785, 0.19509, 1.49012e-07, 0.382684, -0.92388, -0, 1, 1.19209e-07, -0, 0.195091, 0.980785, -0, 0.382684, 0.92388, -0, 0.195091, -0.980785, -0, 0.980785, -0.19509, 1.49012e-07, 0.555571, 0.831469, -0, 0.375331, -0.92388, 0.0746578, 0.191342, -0.980785, 0.0380602, 0.980785, 1.19209e-07, 0.19509, 0.96194, -0.19509, 0.191342, 0.375331, 0.92388, 0.0746579, 0.544896, 0.831469, 0.108387, 0.906128, -0.382683, 0.18024, 0.69352, 0.707107, 0.13795, 0.815493, -0.55557, 0.162212, 0.815493, 0.55557, 0.162212, 0.69352, -0.707107, 0.13795, 0.906128, 0.382683, 0.18024, 0.544895, -0.83147, 0.108387, 0.96194, 0.19509, 0.191342, 0.191342, 0.980785, 0.0380603, 0.653282, -0.707107, 0.270598, 0.51328, -0.83147, 0.212608, 0.853554, 0.382683, 0.353554, 0.906128, 0.19509, 0.37533, 0.353554, -0.92388, 0.146447, 0.92388, 1.19209e-07, 0.382683, 0.18024, 0.980785, 0.0746579, 0.353554, 0.92388, 0.146447, 0.18024, -0.980785, 0.0746578, 0.906128, -0.19509, 0.37533, 0.51328, 0.831469, 0.212608, 0.853554, -0.382683, 0.353554, 0.653282, 0.707107, 0.270598, 0.768178, -0.55557, 0.31819, 0.768178, 0.55557, 0.31819, 0.46194, 0.831469, 0.308658, 0.587938, 0.707107, 0.392848, 0.768178, -0.382683, 0.51328, 0.691342, -0.55557, 0.46194, 0.691342, 0.55557, 0.46194, 0.587938, -0.707107, 0.392848, 0.768178, 0.382683, 0.51328, 0.46194, -0.83147, 0.308658, 0.815493, 0.19509, 0.544895, 0.31819, -0.92388, 0.212608, 0.83147, 1.19209e-07, 0.55557, 0.162212, 0.980785, 0.108387, 0.31819, 0.92388, 0.212608, 0.162212, -0.980785, 0.108386, 0.815493, -0.19509, 0.544895, 0.69352, 0.19509, 0.69352, 0.707107, 1.19209e-07, 0.707107, 0.13795, 0.980785, 0.13795, 0.270598, 0.92388, 0.270598, 0.270598, -0.92388, 0.270598, 0.13795, -0.980785, 0.13795, 0.69352, -0.19509, 0.69352, 0.392848, 0.831469, 0.392848, 0.653282, -0.382683, 0.653282, 0.5, 0.707107, 0.5, 0.587938, -0.55557, 0.587938, 0.587938, 0.55557, 0.587938, 0.5, -0.707107, 0.5, 0.653282, 0.382683, 0.653282, 0.392848, -0.83147, 0.392848, 0.46194, -0.55557, 0.691342, 0.392848, -0.707107, 0.587938, 0.46194, 0.55557, 0.691342, 0.51328, 0.382683, 0.768178, 0.308659, -0.83147, 0.46194, 0.544895, 0.19509, 0.815493, 0.212608, -0.92388, 0.31819, 0.55557, 1.19209e-07, 0.831469, 0.108387, 0.980785, 0.162212, 0.212608, 0.92388, 0.31819, 0.108387, -0.980785, 0.162212, 0.544895, -0.19509, 0.815493, 0.308659, 0.831469, 0.46194, 0.51328, -0.382683, 0.768178, 0.392848, 0.707107, 0.587938, 0.37533, -0.19509, 0.906127, 0.353554, -0.382683, 0.853553, 0.212608, 0.831469, 0.51328, 0.270598, 0.707107, 0.653282, 0.31819, -0.55557, 0.768178, 0.31819, 0.55557, 0.768178, 0.270598, -0.707107, 0.653282, 0.353554, 0.382683, 0.853553, 0.212608, -0.83147, 0.51328, 0.37533, 0.19509, 0.906127, 0.146447, -0.92388, 0.353553, 0.382683, 1.19209e-07, 0.923879, 0.0746581, 0.980785, 0.18024, 0.146447, 0.92388, 0.353554, 0.0746581, -0.980785, 0.18024, 0.108387, -0.83147, 0.544895, 0.0746581, -0.92388, 0.37533, 0.191342, 0.19509, 0.96194, 0.19509, 1.19209e-07, 0.980785, 0.0380605, 0.980785, 0.191342, 0.0746581, 0.92388, 0.37533, 0.0380605, -0.980785, 0.191342, 0.191342, -0.19509, 0.96194, 0.108387, 0.831469, 0.544895, 0.18024, -0.382683, 0.906128, 0.13795, 0.707107, 0.69352, 0.162212, -0.55557, 0.815493, 0.162212, 0.55557, 0.815493, 0.13795, -0.707107, 0.69352, 0.18024, 0.382683, 0.906127, 2.21533e-07, -0.55557, 0.831469, 2.21533e-07, -0.707107, 0.707107, 2.21533e-07, 0.55557, 0.831469, 1.47027e-07, 0.382683, 0.92388, 2.14083e-07, -0.83147, 0.55557, 0, 0.19509, 0.980785, 3.1094e-07, -0.92388, 0.382683, 1.61929e-07, 1.19209e-07, 1, 2.77413e-07, 0.980785, 0.19509, 2.51336e-07, 0.92388, 0.382683, 3.14666e-07, -0.980785, 0.19509, 0, -0.19509, 0.980785, 2.28984e-07, 0.831469, 0.55557, 1.7683e-07, -0.382683, 0.92388, 2.21533e-07, 0.707107, 0.707107, -0.191342, -0.19509, 0.961939, -0.18024, -0.382683, 0.906128, -0.108386, 0.831469, 0.544895, -0.137949, 0.707107, 0.69352, -0.162211, -0.55557, 0.815493, -0.162211, 0.55557, 0.815493, -0.137949, -0.707107, 0.69352, -0.18024, 0.382683, 0.906127, -0.108386, -0.83147, 0.544895, -0.191342, 0.19509, 0.961939, -0.0746575, -0.92388, 0.37533, -0.19509, 1.19209e-07, 0.980785, -0.0380599, 0.980785, 0.191342, -0.0746576, 0.92388, 0.37533, -0.0380599, -0.980785, 0.191342, -0.212607, -0.83147, 0.51328, -0.146446, -0.92388, 0.353553, -0.37533, 0.19509, 0.906127, -0.382683, 1.19209e-07, 0.923879, -0.0746576, 0.980785, 0.18024, -0.146446, 0.92388, 0.353553, -0.0746575, -0.980785, 0.18024, -0.37533, -0.19509, 0.906127, -0.212607, 0.831469, 0.51328, -0.353553, -0.382683, 0.853553, -0.270598, 0.707107, 0.653281, -0.318189, -0.55557, 0.768178, -0.318189, 0.55557, 0.768178, -0.270598, -0.707107, 0.653281, -0.353553, 0.382683, 0.853553, -0.461939, -0.55557, 0.691341, -0.392847, -0.707107, 0.587938, -0.461939, 0.55557, 0.691341, -0.51328, 0.382683, 0.768178, -0.308658, -0.83147, 0.46194, -0.544895, 0.19509, 0.815493, -0.212607, -0.92388, 0.31819, -0.55557, 1.19209e-07, 0.831469, -0.108386, 0.980785, 0.162212, -0.212607, 0.92388, 0.31819, -0.108386, -0.980785, 0.162211, -0.544895, -0.19509, 0.815493, -0.308658, 0.831469, 0.46194, -0.51328, -0.382683, 0.768178, -0.392847, 0.707107, 0.587938, -0.270598, 0.92388, 0.270598, -0.392847, 0.831469, 0.392847, -0.693519, -0.19509, 0.693519, -0.653281, -0.382683, 0.653281, -0.5, 0.707107, 0.5, -0.587937, -0.55557, 0.587937, -0.587937, 0.55557, 0.587937, -0.5, -0.707107, 0.5, -0.653281, 0.382683, 0.653281, -0.392847, -0.83147, 0.392847, -0.693519, 0.19509, 0.693519, -0.270598, -0.92388, 0.270598, -0.707106, 1.19209e-07, 0.707106, -0.137949, 0.980785, 0.13795, -0.137949, -0.980785, 0.13795, -0.768178, 0.382683, 0.51328, -0.815493, 0.19509, 0.544895, -0.461939, -0.83147, 0.308658, -0.318189, -0.92388, 0.212608, -0.831469, 1.19209e-07, 0.55557, -0.162211, 0.980785, 0.108386, -0.318189, 0.92388, 0.212608, -0.162211, -0.980785, 0.108386, -0.815493, -0.19509, 0.544895, -0.46194, 0.831469, 0.308658, -0.768178, -0.382683, 0.51328, -0.587937, 0.707107, 0.392847, -0.691341, -0.55557, 0.46194, -0.691341, 0.55557, 0.46194, -0.587937, -0.707107, 0.392847, -0.853553, -0.382683, 0.353553, -0.768177, -0.55557, 0.318189, -0.653281, 0.707107, 0.270598, -0.768177, 0.55557, 0.318189, -0.653281, -0.707107, 0.270598, -0.853553, 0.382683, 0.353553, -0.51328, -0.83147, 0.212607, -0.906127, 0.19509, 0.37533, -0.353553, -0.92388, 0.146446, -0.923879, 1.19209e-07, 0.382683, -0.18024, 0.980785, 0.0746578, -0.353553, 0.92388, 0.146446, -0.180239, -0.980785, 0.0746577, -0.906127, -0.19509, 0.37533, -0.51328, 0.831469, 0.212607, -0.37533, -0.92388, 0.0746578, -0.191341, -0.980785, 0.0380602, -0.980784, 1.19209e-07, 0.19509, -0.961939, -0.19509, 0.191341, -0.37533, 0.92388, 0.0746578, -0.544895, 0.831469, 0.108386, -0.906127, -0.382683, 0.18024, -0.693519, 0.707107, 0.137949, -0.815493, -0.55557, 0.162211, -0.815493, 0.55557, 0.162211, -0.693519, -0.707107, 0.137949, -0.906127, 0.382683, 0.18024, -0.544895, -0.83147, 0.108386, -0.961939, 0.19509, 0.191341, -0.191342, 0.980785, 0.0380602, 3.25841e-07, -1, -0, 2.01147e-07, 1, 3.01038e-07, -0.18024, -0.980785, -0.0746578, -0.162211, -0.980785, -0.108386, -0.137949, 0.980785, -0.13795, -0.137949, -0.980785, -0.13795, -0.108386, -0.980785, -0.162212, -0.108386, 0.980785, -0.162212, -0.0746575, -0.980785, -0.18024, -0.0746576, 0.980785, -0.18024, -1.0086, -1.73377, 0.997801, -1.0086, -1.73377, -1.0022, -1.0086, -3.73377, -1.0022, -1.0086, -3.73377, 0.997801, -1.0086, -1.73377, -1.0022, 0.991403, -1.73377, -1.0022, 0.991403, -3.73377, -1.0022, -1.0086, -3.73377, -1.0022, 0.991403, -1.73377, -1.0022, 0.991403, -1.73377, 0.997801, 0.991403, -3.73377, 0.997801, 0.991403, -3.73377, -1.0022, 0.991403, -1.73377, 0.997801, -1.0086, -1.73377, 0.997801, -1.0086, -3.73377, 0.997801, 0.991403, -3.73377, 0.997801, -1.0086, -3.73377, 0.997801, -1.0086, -3.73377, -1.0022, 0.991403, -3.73377, -1.0022, 0.991403, -3.73377, 0.997801, 0.991403, -1.73377, 0.997801, 0.991403, -1.73377, -1.0022, -1.0086, -1.73377, -1.0022, -1.0086, -1.73377, 0.997801 </vector3_array>
- <vector3_array len="529"> -0.387, -0.921, -0, -0.559, -0.828, -0, -0.548, -0.828, -0.109, -0.379, -0.921, -0.076, -0.999, 0, -0, -0.98, 0.194, -0, -0.961, 0.194, -0.191, -0.98, 0, -0.195, -0.387, 0.922, -0, -0.2, 0.98, -0, -0.196, 0.98, -0.039, -0.379, 0.922, -0.076, -0.2, -0.979, -0, -0.196, -0.979, -0.039, -0.98, -0.193, -0, -0.961, -0.193, -0.191, -0.559, 0.829, -0, -0.548, 0.829, -0.109, -0.924, -0.38, -0, -0.906, -0.38, -0.18, -0.709, 0.704, -0, -0.695, 0.704, -0.139, -0.832, -0.552, -0, -0.816, -0.552, -0.163, -0.832, 0.553, -0, -0.816, 0.553, -0.163, -0.709, -0.703, -0, -0.695, -0.703, -0.139, -0.924, 0.381, -0, -0.906, 0.381, -0.18, -0.905, -0.193, -0.375, -0.853, -0.38, -0.354, -0.516, 0.829, -0.214, -0.655, 0.704, -0.272, -0.769, -0.552, -0.319, -0.769, 0.553, -0.319, -0.655, -0.703, -0.272, -0.853, 0.381, -0.354, -0.516, -0.828, -0.214, -0.905, 0.194, -0.375, -0.357, -0.921, -0.148, -0.923, 0, -0.383, -0.185, 0.98, -0.077, -0.357, 0.922, -0.148, -0.185, -0.979, -0.077, -0.464, -0.828, -0.311, -0.321, -0.921, -0.215, -0.815, 0.194, -0.545, -0.83, 0, -0.556, -0.166, 0.98, -0.112, -0.321, 0.922, -0.215, -0.166, -0.979, -0.112, -0.815, -0.193, -0.545, -0.464, 0.829, -0.311, -0.768, -0.38, -0.514, -0.589, 0.704, -0.395, -0.692, -0.552, -0.463, -0.692, 0.553, -0.463, -0.589, -0.703, -0.395, -0.768, 0.381, -0.514, -0.588, -0.552, -0.589, -0.501, -0.703, -0.502, -0.588, 0.553, -0.589, -0.653, 0.381, -0.654, -0.395, -0.828, -0.396, -0.693, 0.194, -0.694, -0.273, -0.921, -0.274, -0.706, 0, -0.707, -0.141, 0.98, -0.142, -0.273, 0.922, -0.274, -0.141, -0.979, -0.142, -0.693, -0.193, -0.694, -0.395, 0.829, -0.396, -0.653, -0.38, -0.654, -0.501, 0.704, -0.502, -0.544, -0.193, -0.816, -0.513, -0.38, -0.769, -0.31, 0.829, -0.465, -0.394, 0.704, -0.59, -0.462, -0.552, -0.693, -0.462, 0.553, -0.693, -0.394, -0.703, -0.59, -0.513, 0.381, -0.769, -0.31, -0.828, -0.465, -0.544, 0.194, -0.816, -0.214, -0.921, -0.322, -0.555, 0, -0.831, -0.111, 0.98, -0.167, -0.214, 0.922, -0.322, -0.111, -0.979, -0.167, -0.213, -0.828, -0.517, -0.147, -0.921, -0.358, -0.374, 0.194, -0.906, -0.382, 0, -0.924, -0.076, 0.98, -0.186, -0.147, 0.922, -0.358, -0.076, -0.979, -0.186, -0.374, -0.193, -0.906, -0.213, 0.829, -0.517, -0.353, -0.38, -0.854, -0.271, 0.704, -0.656, -0.318, -0.552, -0.77, -0.318, 0.553, -0.77, -0.271, -0.703, -0.656, -0.353, 0.381, -0.854, -0.162, -0.552, -0.817, -0.138, -0.703, -0.696, -0.162, 0.553, -0.817, -0.179, 0.381, -0.907, -0.108, -0.828, -0.549, -0.19, 0.194, -0.962, -0.075, -0.921, -0.38, -0.194, 0, -0.981, -0.038, 0.98, -0.197, -0.075, 0.922, -0.38, -0.038, -0.979, -0.197, -0.19, -0.193, -0.962, -0.108, 0.829, -0.549, -0.179, -0.38, -0.907, -0.138, 0.704, -0.696, -0.179, -0.38, -0.907, -0.19, -0.193, -0.962, 0, -0.193, -0.981, 0, -0.38, -0.925, -0.138, 0.704, -0.696, -0.108, 0.829, -0.549, 0, 0.829, -0.56, 0, 0.704, -0.71, -0.162, -0.552, -0.817, 0, -0.552, -0.833, -0.162, 0.553, -0.817, 0, 0.553, -0.833, -0.138, -0.703, -0.696, 0, -0.703, -0.71, -0.179, 0.381, -0.907, 0, 0.381, -0.925, -0.108, -0.828, -0.549, 0, -0.828, -0.56, -0.19, 0.194, -0.962, 0, 0.194, -0.981, -0.075, -0.921, -0.38, 0, -0.921, -0.388, -0.194, 0, -0.981, 0, 0, -1, -0.075, 0.922, -0.38, -0.038, 0.98, -0.197, 0, 0.98, -0.201, 0, 0.922, -0.388, -0.038, -0.979, -0.197, 0, -0.979, -0.201, 0.109, -0.828, -0.549, 0.076, -0.921, -0.38, 0.191, 0.194, -0.962, 0.195, 0, -0.981, 0.039, 0.98, -0.197, 0.076, 0.922, -0.38, 0.039, -0.979, -0.197, 0.191, -0.193, -0.962, 0.109, 0.829, -0.549, 0.18, -0.38, -0.907, 0.139, 0.704, -0.696, 0.163, -0.552, -0.817, 0.163, 0.553, -0.817, 0.139, -0.703, -0.696, 0.18, 0.381, -0.907, 0.272, 0.704, -0.656, 0.319, 0.553, -0.77, 0.319, -0.552, -0.77, 0.272, -0.703, -0.656, 0.354, 0.381, -0.854, 0.214, -0.828, -0.517, 0.375, 0.194, -0.906, 0.148, -0.921, -0.358, 0.383, 0, -0.924, 0.077, 0.98, -0.186, 0.148, 0.922, -0.358, 0.077, -0.979, -0.186, 0.375, -0.193, -0.906, 0.214, 0.829, -0.517, 0.354, -0.38, -0.854, 0.556, 0, -0.831, 0.545, -0.193, -0.816, 0.215, 0.922, -0.322, 0.311, 0.829, -0.465, 0.514, -0.38, -0.769, 0.395, 0.704, -0.59, 0.463, -0.552, -0.693, 0.463, 0.553, -0.693, 0.395, -0.703, -0.59, 0.514, 0.381, -0.769, 0.311, -0.828, -0.465, 0.545, 0.194, -0.816, 0.215, -0.921, -0.322, 0.112, 0.98, -0.167, 0.112, -0.979, -0.167, 0.502, -0.703, -0.502, 0.396, -0.828, -0.396, 0.654, 0.381, -0.654, 0.694, 0.194, -0.694, 0.274, -0.921, -0.274, 0.707, 0, -0.707, 0.142, 0.98, -0.142, 0.274, 0.922, -0.274, 0.142, -0.979, -0.142, 0.694, -0.193, -0.694, 0.396, 0.829, -0.396, 0.654, -0.38, -0.654, 0.502, 0.704, -0.502, 0.589, -0.552, -0.589, 0.589, 0.553, -0.589, 0.769, -0.38, -0.514, 0.693, -0.552, -0.463, 0.59, 0.704, -0.395, 0.693, 0.553, -0.463, 0.59, -0.703, -0.395, 0.769, 0.381, -0.514, 0.465, -0.828, -0.311, 0.816, 0.194, -0.545, 0.322, -0.921, -0.215, 0.831, 0, -0.556, 0.167, 0.98, -0.112, 0.322, 0.922, -0.215, 0.167, -0.979, -0.112, 0.816, -0.193, -0.545, 0.465, 0.829, -0.311, 0.358, -0.921, -0.148, 0.186, -0.979, -0.077, 0.924, 0, -0.383, 0.906, -0.193, -0.375, 0.358, 0.922, -0.148, 0.517, 0.829, -0.214, 0.854, -0.38, -0.354, 0.656, 0.704, -0.272, 0.77, -0.552, -0.319, 0.77, 0.553, -0.319, 0.656, -0.703, -0.272, 0.854, 0.381, -0.354, 0.517, -0.828, -0.214, 0.906, 0.194, -0.375, 0.186, 0.98, -0.077, 0.696, -0.703, -0.139, 0.549, -0.828, -0.109, 0.907, 0.381, -0.18, 0.962, 0.194, -0.191, 0.38, -0.921, -0.076, 0.981, 0, -0.195, 0.197, 0.98, -0.039, 0.38, 0.922, -0.076, 0.197, -0.979, -0.039, 0.962, -0.193, -0.191, 0.549, 0.829, -0.109, 0.907, -0.38, -0.18, 0.696, 0.704, -0.139, 0.817, -0.552, -0.163, 0.817, 0.553, -0.163, 0.925, -0.38, -0, 0.833, -0.552, -0, 0.71, 0.704, -0, 0.833, 0.553, -0, 0.71, -0.703, -0, 0.925, 0.381, -0, 0.56, -0.828, -0, 0.981, 0.194, -0, 0.388, -0.921, -0, 1, 0, -0, 0.201, 0.98, -0, 0.388, 0.922, -0, 0.201, -0.979, -0, 0.981, -0.193, -0, 0.56, 0.829, -0, 0.38, -0.921, 0.075, 0.197, -0.979, 0.038, 0.981, 0, 0.194, 0.962, -0.193, 0.19, 0.38, 0.922, 0.075, 0.549, 0.829, 0.108, 0.907, -0.38, 0.179, 0.696, 0.704, 0.138, 0.817, -0.552, 0.162, 0.817, 0.553, 0.162, 0.696, -0.703, 0.138, 0.907, 0.381, 0.179, 0.549, -0.828, 0.108, 0.962, 0.194, 0.19, 0.197, 0.98, 0.038, 0.656, -0.703, 0.271, 0.517, -0.828, 0.213, 0.854, 0.381, 0.353, 0.906, 0.194, 0.374, 0.358, -0.921, 0.147, 0.924, 0, 0.382, 0.186, 0.98, 0.076, 0.358, 0.922, 0.147, 0.186, -0.979, 0.076, 0.906, -0.193, 0.374, 0.517, 0.829, 0.213, 0.854, -0.38, 0.353, 0.656, 0.704, 0.271, 0.77, -0.552, 0.318, 0.77, 0.553, 0.318, 0.465, 0.829, 0.31, 0.59, 0.704, 0.394, 0.769, -0.38, 0.513, 0.693, -0.552, 0.462, 0.693, 0.553, 0.462, 0.59, -0.703, 0.394, 0.769, 0.381, 0.513, 0.465, -0.828, 0.31, 0.816, 0.194, 0.544, 0.322, -0.921, 0.214, 0.831, 0, 0.555, 0.167, 0.98, 0.111, 0.322, 0.922, 0.214, 0.167, -0.979, 0.111, 0.816, -0.193, 0.544, 0.694, 0.194, 0.693, 0.707, 0, 0.706, 0.142, 0.98, 0.141, 0.274, 0.922, 0.273, 0.274, -0.921, 0.273, 0.142, -0.979, 0.141, 0.694, -0.193, 0.693, 0.396, 0.829, 0.395, 0.654, -0.38, 0.653, 0.502, 0.704, 0.501, 0.589, -0.552, 0.588, 0.589, 0.553, 0.588, 0.502, -0.703, 0.501, 0.654, 0.381, 0.653, 0.396, -0.828, 0.395, 0.463, -0.552, 0.692, 0.395, -0.703, 0.589, 0.463, 0.553, 0.692, 0.514, 0.381, 0.768, 0.311, -0.828, 0.464, 0.545, 0.194, 0.815, 0.215, -0.921, 0.321, 0.556, 0, 0.83, 0.112, 0.98, 0.166, 0.215, 0.922, 0.321, 0.112, -0.979, 0.166, 0.545, -0.193, 0.815, 0.311, 0.829, 0.464, 0.514, -0.38, 0.768, 0.395, 0.704, 0.589, 0.375, -0.193, 0.905, 0.354, -0.38, 0.853, 0.214, 0.829, 0.516, 0.272, 0.704, 0.655, 0.319, -0.552, 0.769, 0.319, 0.553, 0.769, 0.272, -0.703, 0.655, 0.354, 0.381, 0.853, 0.214, -0.828, 0.516, 0.375, 0.194, 0.905, 0.148, -0.921, 0.357, 0.383, 0, 0.923, 0.077, 0.98, 0.185, 0.148, 0.922, 0.357, 0.077, -0.979, 0.185, 0.109, -0.828, 0.548, 0.076, -0.921, 0.379, 0.191, 0.194, 0.961, 0.195, 0, 0.98, 0.039, 0.98, 0.196, 0.076, 0.922, 0.379, 0.039, -0.979, 0.196, 0.191, -0.193, 0.961, 0.109, 0.829, 0.548, 0.18, -0.38, 0.906, 0.139, 0.704, 0.695, 0.163, -0.552, 0.816, 0.163, 0.553, 0.816, 0.139, -0.703, 0.695, 0.18, 0.381, 0.906, 0, -0.552, 0.832, 0, -0.703, 0.709, 0, 0.553, 0.832, 0, 0.381, 0.924, 0, -0.828, 0.559, 0, 0.194, 0.98, 0, -0.921, 0.387, 0, 0, 0.999, 0, 0.98, 0.2, 0, 0.922, 0.387, 0, -0.979, 0.2, 0, -0.193, 0.98, 0, 0.829, 0.559, 0, -0.38, 0.924, 0, 0.704, 0.709, -0.19, -0.193, 0.961, -0.179, -0.38, 0.906, -0.108, 0.829, 0.548, -0.138, 0.704, 0.695, -0.162, -0.552, 0.816, -0.162, 0.553, 0.816, -0.138, -0.703, 0.695, -0.179, 0.381, 0.906, -0.108, -0.828, 0.548, -0.19, 0.194, 0.961, -0.075, -0.921, 0.379, -0.194, 0, 0.98, -0.038, 0.98, 0.196, -0.075, 0.922, 0.379, -0.038, -0.979, 0.196, -0.213, -0.828, 0.516, -0.147, -0.921, 0.357, -0.374, 0.194, 0.905, -0.382, 0, 0.923, -0.076, 0.98, 0.185, -0.147, 0.922, 0.357, -0.076, -0.979, 0.185, -0.374, -0.193, 0.905, -0.213, 0.829, 0.516, -0.353, -0.38, 0.853, -0.271, 0.704, 0.655, -0.318, -0.552, 0.769, -0.318, 0.553, 0.769, -0.271, -0.703, 0.655, -0.353, 0.381, 0.853, -0.462, -0.552, 0.692, -0.394, -0.703, 0.589, -0.462, 0.553, 0.692, -0.513, 0.381, 0.768, -0.31, -0.828, 0.464, -0.544, 0.194, 0.815, -0.214, -0.921, 0.321, -0.555, 0, 0.83, -0.111, 0.98, 0.166, -0.214, 0.922, 0.321, -0.111, -0.979, 0.166, -0.544, -0.193, 0.815, -0.31, 0.829, 0.464, -0.513, -0.38, 0.768, -0.394, 0.704, 0.589, -0.273, 0.922, 0.273, -0.395, 0.829, 0.395, -0.693, -0.193, 0.693, -0.653, -0.38, 0.653, -0.501, 0.704, 0.501, -0.588, -0.552, 0.588, -0.588, 0.553, 0.588, -0.501, -0.703, 0.501, -0.653, 0.381, 0.653, -0.395, -0.828, 0.395, -0.693, 0.194, 0.693, -0.273, -0.921, 0.273, -0.706, 0, 0.706, -0.141, 0.98, 0.141, -0.141, -0.979, 0.141, -0.768, 0.381, 0.513, -0.815, 0.194, 0.544, -0.464, -0.828, 0.31, -0.321, -0.921, 0.214, -0.83, 0, 0.555, -0.166, 0.98, 0.111, -0.321, 0.922, 0.214, -0.166, -0.979, 0.111, -0.815, -0.193, 0.544, -0.464, 0.829, 0.31, -0.768, -0.38, 0.513, -0.589, 0.704, 0.394, -0.692, -0.552, 0.462, -0.692, 0.553, 0.462, -0.589, -0.703, 0.394, -0.853, -0.38, 0.353, -0.769, -0.552, 0.318, -0.655, 0.704, 0.271, -0.769, 0.553, 0.318, -0.655, -0.703, 0.271, -0.853, 0.381, 0.353, -0.516, -0.828, 0.213, -0.905, 0.194, 0.374, -0.357, -0.921, 0.147, -0.923, 0, 0.382, -0.185, 0.98, 0.076, -0.357, 0.922, 0.147, -0.185, -0.979, 0.076, -0.905, -0.193, 0.374, -0.516, 0.829, 0.213, -0.379, -0.921, 0.075, -0.196, -0.979, 0.038, -0.98, 0, 0.194, -0.961, -0.193, 0.19, -0.379, 0.922, 0.075, -0.548, 0.829, 0.108, -0.906, -0.38, 0.179, -0.695, 0.704, 0.138, -0.816, -0.552, 0.162, -0.816, 0.553, 0.162, -0.695, -0.703, 0.138, -0.906, 0.381, 0.179, -0.548, -0.828, 0.108, -0.961, 0.194, 0.19, -0.196, 0.98, 0.038, 0, -0.999, -0, 0, 1, -0, -0.185, -0.979, -0.077, -0.166, -0.979, -0.112, -0.141, 0.98, -0.142, -0.141, -0.979, -0.142, -0.111, -0.979, -0.167, -0.111, 0.98, -0.167, -0.076, -0.979, -0.186, -0.076, 0.98, -0.186, -0.999, 0, -0, -0.999, 0, -0, -0.999, 0, -0, -0.999, 0, -0, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 1, 0, -0, 1, 0, -0, 1, 0, -0, 1, 0, -0, 0, 0, 0.999, 0, 0, 0.999, 0, 0, 0.999, 0, 0, 0.999, 0, -0.999, -0, 0, -0.999, -0, 0, -0.999, -0, 0, -0.999, -0, 0, 1, -0, 0, 1, -0, 0, 1, -0, 0, 1, -0 </vector3_array>
- <real_array len="2116"> -8.45635e-07, 6.55321e-11, 5.43309e-05, -1, -7.60958e-07, 8.21475e-11, 7.88761e-05, -1, -1.61343e-05, 0, 7.72122e-05, -1, -1.14287e-05, 0, 5.3122e-05, -1, 3.14458e-10, 2.35952e-11, 0.000141973, -1, 1.78795e-07, -7.46003e-11, 0.000139245, -1, -2.69904e-05, -8.18762e-11, 0.000136605, -1, -2.76976e-05, -4.18367e-11, 0.000139245, -1, 8.45595e-07, -3.60059e-11, 5.43309e-05, -1, 8.97648e-07, -1.31877e-11, 2.76977e-05, -1, -4.52315e-06, 1.32495e-11, 2.73406e-05, -1, -9.77004e-06, 7.11452e-11, 5.34519e-05, -1, -8.97644e-07, 1.77967e-11, 2.76975e-05, -1, 3.70824e-05, 0, -0.000115969, 1, -1.78314e-07, 1.18204e-10, 0.000139245, -1, -2.73406e-05, -2.54659e-11, 0.000136535, -1, 7.61095e-07, 7.35022e-12, 7.88759e-05, -1, -1.46417e-05, 2.91035e-11, 7.75091e-05, -1, -3.501e-07, 1.51469e-10, 0.000131166, -1, -2.59328e-05, 0, 0.000128578, -1, 6.47297e-07, -3.15704e-11, 0.00010039, -1, -1.89506e-05, -2.18279e-11, 9.85877e-05, -1, -5.08347e-07, 1.8673e-10, 0.000118047, -1, -2.35285e-05, 0, 0.000115679, -1, 5.08612e-07, -7.53002e-11, 0.000118046, -1, -2.25311e-05, 1.45519e-11, 0.000115877, -1, -6.47088e-07, 9.33417e-11, 0.00010039, -1, -2.022e-05, 0, 9.83353e-05, -1, 3.50432e-07, -3.63799e-12, 0.000131166, -1, -2.52458e-05, -3.27635e-11, 0.000128714, -1, -5.34519e-05, 0, 0.000128578, -1, -5.05187e-05, 0, 0.000121048, -1, -2.94817e-05, -5.06199e-11, 7.31634e-05, -1, -3.782e-05, -6.35165e-11, 9.29963e-05, -1, -4.56443e-05, 0, 0.000108866, -1, -4.47048e-05, -3.4561e-11, 0.000109255, -1, -3.90157e-05, 0, 9.25011e-05, -1, -4.98717e-05, -8.39094e-11, 0.000121316, -1, -3.08876e-05, 0, 7.25808e-05, -1, -5.3122e-05, -4.3656e-11, 0.000128714, -1, -2.15727e-05, 0, 4.98716e-05, -1, -5.43308e-05, 0, 0.000131166, -1, -9.77018e-06, 0, 2.59328e-05, -1, -2.00105e-05, -2.1516e-11, 5.05189e-05, -1, -7.8728e-06, 0, 1.66611e-05, -1, -4.4454e-05, 0, 6.51604e-05, -1, -3.08877e-05, 0, 4.47048e-05, -1, -7.7212e-05, 0, 0.000115877, -1, -7.8876e-05, -9.08977e-11, 0.000118046, -1, 8.01326e-05, 1.25499e-10, -9.19525e-05, 1, -2.94818e-05, -4.8265e-11, 4.56443e-05, -1, -1.0972e-05, 0, 1.4805e-05, -1, -7.75089e-05, -4.54747e-11, 0.000115679, -1, -4.31887e-05, -5.07835e-11, 6.6006e-05, -1, -7.31633e-05, 0, 0.000108866, -1, -5.5236e-05, -6.35165e-11, 8.38312e-05, -1, -6.6006e-05, 0, 9.78697e-05, -1, -6.51604e-05, -4.02535e-11, 9.84346e-05, -1, -5.63121e-05, 0, 8.31121e-05, -1, -7.2581e-05, -8.39094e-11, 0.000109256, -1, -8.38313e-05, -7.48144e-11, 8.31122e-05, -1, -7.14445e-05, -3.45609e-11, 7.05292e-05, -1, -8.3112e-05, 0, 8.3831e-05, -1, -9.25009e-05, 0, 9.29962e-05, -1, -5.63121e-05, 0, 5.52359e-05, -1, -9.83349e-05, -4.5423e-11, 9.85874e-05, -1, -3.90157e-05, 0, 3.78199e-05, -1, -0.00010039, -9.08977e-11, 0.00010039, -1, -1.23801e-05, -2.64371e-11, 1.36494e-05, -1, -3.782e-05, -3.50773e-11, 3.90156e-05, -1, -1.36494e-05, 0, 1.238e-05, -1, -9.85875e-05, 0, 9.83349e-05, -1, -5.52358e-05, 0, 5.63119e-05, -1, -9.29963e-05, 0, 9.25009e-05, -1, -7.05291e-05, 0, 7.14442e-05, -1, -0.000115877, -8.90787e-11, 7.7212e-05, -1, -0.000109255, -8.39093e-11, 7.25809e-05, -1, -6.51603e-05, 0, 4.44539e-05, -1, -8.3112e-05, 0, 5.63119e-05, -1, -9.84349e-05, -7.48144e-11, 6.51606e-05, -1, -9.78696e-05, 0, 6.60058e-05, -1, -8.38311e-05, 0, 5.52358e-05, -1, -0.000108866, 0, 7.31631e-05, -1, -6.60059e-05, 0, 4.31885e-05, -1, -0.000115679, 0, 7.75089e-05, -1, -4.56442e-05, 0, 2.94816e-05, -1, -0.000118046, 0, 7.8876e-05, -1, -1.4805e-05, 0, 1.09719e-05, -1, -4.47047e-05, 0, 3.08876e-05, -1, -1.58024e-05, 0, 9.47927e-06, -1, -7.31632e-05, 0, 2.94815e-05, -1, -5.05187e-05, 0, 2.00103e-05, -1, -0.000128578, 0, 5.34518e-05, -1, -0.000131166, -4.5423e-11, 5.43308e-05, -1, -1.6661e-05, 0, 7.87277e-06, -1, -4.98716e-05, 0, 2.15727e-05, -1, -1.73481e-05, 0, 6.21423e-06, -1, -0.000128714, -8.90787e-11, 5.31218e-05, -1, -7.25809e-05, 0, 3.08876e-05, -1, -0.000121316, 0, 4.98715e-05, -1, -9.25009e-05, 0, 3.90156e-05, -1, -0.000109255, 7.48142e-11, 4.47047e-05, -1, -0.000108866, 0, 4.56441e-05, -1, -9.29963e-05, 3.45608e-11, 3.78198e-05, -1, -0.000121048, 0, 5.05186e-05, -1, -5.42731e-05, 7.48142e-11, 1.64635e-05, -1, -4.51072e-05, 0, 1.36831e-05, -1, -5.92369e-05, 0, 1.79693e-05, -1, -6.47724e-05, 0, 1.96485e-05, -1, -3.42079e-05, 0, 1.03768e-05, -1, -6.78186e-05, 0, 2.05725e-05, -1, -2.19941e-05, 0, 6.67182e-06, -1, -6.82587e-05, 0, 2.0706e-05, -1, -1.32308e-05, 0, 4.0135e-06, -1, -3.02489e-05, 0, 9.17591e-06, -1, -4.4675e-06, 0, 1.35519e-06, -1, -6.60754e-05, 0, 2.00437e-05, -1, -4.16371e-05, 0, 1.26305e-05, -1, -6.13532e-05, 4.02534e-11, 1.86112e-05, -1, -5.14251e-05, 0, 1.55996e-05, -1, -6.73611e-05, 0, 6.63452e-06, -1, -7.05292e-05, 0, 6.94649e-06, -1, -0.000139245, 0, -1.7851e-07, -1, -0.000131166, -4.02536e-11, -3.5018e-07, -1, -4.69101e-05, 0, 4.62024e-06, -1, -3.55752e-05, 0, 3.50383e-06, -1, -7.88762e-05, -8.2452e-11, 7.60845e-07, -1, -0.00010039, -2.91038e-11, 6.47123e-07, -1, -6.16048e-05, -7.48146e-11, 6.06759e-06, -1, -0.000118047, -4.23273e-16, -5.08459e-07, -1, -5.64422e-05, 0, 5.55906e-06, -1, -0.000118047, 0, 5.08438e-07, -1, -5.34806e-05, -3.4561e-11, 5.26741e-06, -1, -0.00010039, 3.45608e-11, -6.47156e-07, -1, -6.38054e-05, 0, 6.28426e-06, -1, -0.000131166, 0, 3.50232e-07, -1, -4.33013e-05, 0, 4.2648e-06, -1, -7.88763e-05, 0, -7.60975e-07, -1, -6.87165e-05, 0, 6.76798e-06, -1, -0.000139246, 0, 1.78513e-07, -1, -3.14579e-05, 0, 3.09832e-06, -1, -5.4331e-05, 0, -8.45516e-07, -1, -7.09869e-05, 0, 6.99154e-06, -1, -0.000141973, 0, 1.50067e-11, -1, -2.28732e-05, 0, 2.2528e-06, -1, -1.37596e-05, 0, 2.27038e-06, -1, -2.76978e-05, 0, 8.97609e-07, -1, -5.4331e-05, -5.17065e-11, 8.45403e-07, -1, -2.28731e-05, 0, 3.168e-06, -1, -2.76977e-05, 0, -8.9759e-07, -1, -7.72121e-05, 0, -1.61343e-05, -1, -5.31219e-05, 0, -1.14287e-05, -1, -0.000136604, 0, -2.69903e-05, -1, -0.000139245, 0, -2.76976e-05, -1, -2.73406e-05, -1.98742e-11, -4.52323e-06, -1, -5.34519e-05, -7.32224e-11, -9.77032e-06, -1, -2.69903e-05, 0, -6.2839e-06, -1, -0.000136534, 0, -2.73405e-05, -1, -7.75088e-05, -5.06197e-11, -1.46417e-05, -1, -0.000128577, -4.34419e-11, -2.59327e-05, -1, -9.85873e-05, 0, -1.89505e-05, -1, -0.000115679, -4.00175e-11, -2.35284e-05, -1, -0.000115877, 0, -2.25311e-05, -1, -9.83351e-05, -3.45607e-11, -2.02199e-05, -1, -0.000128714, 0, -2.52457e-05, -1, -9.29959e-05, -6.3516e-11, -3.78198e-05, -1, -0.000109255, -3.45607e-11, -4.47046e-05, -1, -0.000108866, -7.48139e-11, -4.56441e-05, -1, -9.25007e-05, 0, -3.90155e-05, -1, -0.000121316, 0, -4.98715e-05, -1, -7.25808e-05, 0, -3.08876e-05, -1, -0.000128714, 0, -5.31218e-05, -1, -4.98716e-05, 0, -2.15727e-05, -1, -0.000131166, 0, -5.43308e-05, -1, -2.59328e-05, 0, -9.77019e-06, -1, -5.05187e-05, 0, -2.00104e-05, -1, -2.52458e-05, 0, -1.14287e-05, -1, -0.000128577, -4.36774e-11, -5.34518e-05, -1, -7.3163e-05, 0, -2.94815e-05, -1, -0.000121048, -1.23948e-10, -5.05186e-05, -1, -0.000118046, 0, -7.88761e-05, -1, -0.000115679, 0, -7.7509e-05, -1, -4.56442e-05, 0, -2.94816e-05, -1, -6.60057e-05, -5.42652e-11, -4.31885e-05, -1, -0.000108866, 0, -7.31632e-05, -1, -8.38307e-05, -7.80679e-11, -5.52358e-05, -1, -9.78695e-05, 0, -6.60058e-05, -1, -9.84342e-05, 0, -6.51602e-05, -1, -8.31119e-05, 0, -5.63119e-05, -1, -0.000109255, 0, -7.25808e-05, -1, -6.51604e-05, 0, -4.4454e-05, -1, -0.000115877, 0, -7.7212e-05, -1, -4.47046e-05, 3.47035e-11, -3.08877e-05, -1, -2.35285e-05, 0, -1.46417e-05, -1, -2.2531e-05, 1.31877e-11, -1.61344e-05, -1, -7.0529e-05, 0, -7.14442e-05, -1, -5.52356e-05, 2.15158e-11, -5.63118e-05, -1, -9.29961e-05, -4.00178e-11, -9.25008e-05, -1, -9.85875e-05, 0, -9.8335e-05, -1, -3.78197e-05, 3.47035e-11, -3.90156e-05, -1, -0.00010039, 0, -0.00010039, -1, -2.02199e-05, 0, -1.89505e-05, -1, -3.90156e-05, -1.07579e-11, -3.78199e-05, -1, -1.89505e-05, 0, -2.022e-05, -1, -9.8335e-05, 0, -9.85875e-05, -1, -5.63118e-05, -1.21431e-16, -5.52357e-05, -1, -9.25008e-05, 0, -9.29962e-05, -1, -7.1444e-05, 1.45518e-11, -7.05288e-05, -1, -8.31119e-05, 0, -8.3831e-05, -1, -8.38308e-05, -7.53002e-11, -8.31118e-05, -1, -7.25807e-05, 8.36951e-11, -0.000109255, -1, -6.51603e-05, 4.00178e-11, -9.84345e-05, -1, -5.63118e-05, 2.82338e-11, -8.31117e-05, -1, -6.60058e-05, -4.07394e-11, -9.78695e-05, -1, -5.52356e-05, 0, -8.38309e-05, -1, -7.31631e-05, 0, -0.000108866, -1, -4.31883e-05, 0, -6.60057e-05, -1, -7.75089e-05, 0, -0.000115679, -1, -2.94815e-05, 0, -4.56442e-05, -1, -7.88761e-05, 0, -0.000118046, -1, -1.61344e-05, 0, -2.25311e-05, -1, -3.08876e-05, 1.07579e-11, -4.47047e-05, -1, -1.46417e-05, 0, -2.35285e-05, -1, -7.7212e-05, 0, -0.000115877, -1, -4.44538e-05, 2.53097e-11, -6.51601e-05, -1, -2.00103e-05, 0, -5.05186e-05, -1, -9.77013e-06, 0, -2.59328e-05, -1, -5.43307e-05, 0, -0.000131166, -1, -5.31218e-05, 4.36774e-11, -0.000128714, -1, -2.15727e-05, 0, -4.98716e-05, -1, -3.08876e-05, 2.89554e-11, -7.25807e-05, -1, -4.98715e-05, 8.36951e-11, -0.000121316, -1, -3.90156e-05, 6.35162e-11, -9.25008e-05, -1, -4.47047e-05, 7.48142e-11, -0.000109255, -1, -4.56442e-05, 7.53001e-11, -0.000108866, -1, -3.78198e-05, 3.45608e-11, -9.29962e-05, -1, -5.05186e-05, 4.00177e-11, -0.000121048, -1, -2.94815e-05, 0, -7.3163e-05, -1, -5.34518e-05, 0, -0.000128578, -1, -1.14287e-05, 0, -2.52458e-05, -1, -1.89505e-05, 0, -9.85877e-05, -1, -1.46416e-05, 0, -7.75088e-05, -1, -2.59327e-05, 0, -0.000128578, -1, -2.73405e-05, 0, -0.000136535, -1, -9.77011e-06, 0, -5.34517e-05, -1, -2.76975e-05, 0, -0.000139245, -1, -6.2839e-06, 0, -2.69904e-05, -1, -1.14287e-05, 0, -5.3122e-05, -1, -4.52318e-06, 0, -2.73406e-05, -1, -2.69902e-05, 0, -0.000136604, -1, -1.61342e-05, 0, -7.72118e-05, -1, -2.52457e-05, 4.02534e-11, -0.000128714, -1, -2.02199e-05, 3.52824e-11, -9.83349e-05, -1, -2.2531e-05, 7.48142e-11, -0.000115878, -1, -2.35284e-05, 7.53001e-11, -0.000115679, -1, 3.50285e-07, 4.36557e-11, -0.000131166, -1, 5.0848e-07, 0, -0.000118047, -1, -6.47094e-07, 0, -0.00010039, -1, -5.08415e-07, 0, -0.000118046, -1, 6.47182e-07, 0, -0.00010039, -1, -3.50228e-07, 0, -0.000131166, -1, 7.60985e-07, 0, -7.8876e-05, -1, -1.78516e-07, 0, -0.000139245, -1, 8.45443e-07, -3.47036e-11, -5.43308e-05, -1, 1.45519e-11, 0, -0.000141973, -1, -8.97602e-07, 0, -2.76977e-05, -1, -8.45542e-07, 1.75386e-11, -5.43308e-05, -1, 8.97572e-07, -1.31877e-11, -2.76976e-05, -1, 1.78554e-07, 8.90786e-11, -0.000139245, -1, -7.60942e-07, 1.09139e-11, -7.88759e-05, -1, 1.14286e-05, -3.47036e-11, -5.3122e-05, -1, 6.2839e-06, 0, -2.69903e-05, -1, 2.76976e-05, 4.54229e-11, -0.000139245, -1, 2.73405e-05, 8.90786e-11, -0.000136534, -1, 9.77013e-06, 1.75386e-11, -5.34518e-05, -1, 1.46416e-05, 5.06196e-11, -7.75088e-05, -1, 2.59328e-05, 0, -0.000128578, -1, 1.89505e-05, 2.91038e-11, -9.85874e-05, -1, 2.35284e-05, 0, -0.000115679, -1, 2.2531e-05, 0, -0.000115877, -1, 2.02199e-05, 0, -9.83353e-05, -1, 2.52458e-05, 0, -0.000128714, -1, 1.61343e-05, -2.15159e-11, -7.72121e-05, -1, 2.69903e-05, 0, -0.000136605, -1, 4.52318e-06, 6.6247e-12, -2.73406e-05, -1, 3.90157e-05, 0, -9.2501e-05, -1, 3.08876e-05, 0, -7.25808e-05, -1, 4.98716e-05, 0, -0.000121316, -1, 5.31219e-05, 0, -0.000128714, -1, 2.15727e-05, 0, -4.98716e-05, -1, 5.43308e-05, 0, -0.000131166, -1, 9.77017e-06, 0, -2.59328e-05, -1, 2.00103e-05, 2.15158e-11, -5.05187e-05, -1, 1.14287e-05, 0, -2.52458e-05, -1, 5.34517e-05, 0, -0.000128577, -1, 2.94814e-05, 5.06196e-11, -7.3163e-05, -1, 5.05187e-05, 0, -0.000121048, -1, 3.78198e-05, 0, -9.29961e-05, -1, 4.56442e-05, 0, -0.000108866, -1, 4.47047e-05, 0, -0.000109255, -1, 4.31884e-05, 0, -6.60057e-05, -1, 5.52357e-05, 0, -8.38308e-05, -1, 7.31632e-05, 0, -0.000108866, -1, 6.6006e-05, 0, -9.78697e-05, -1, 6.51603e-05, 0, -9.84344e-05, -1, 5.6312e-05, 0, -8.3112e-05, -1, 7.25808e-05, 0, -0.000109255, -1, 4.44539e-05, 0, -6.51603e-05, -1, 7.72121e-05, 0, -0.000115877, -1, 3.08876e-05, 0, -4.47047e-05, -1, 7.8876e-05, 0, -0.000118046, -1, 1.46417e-05, 0, -2.35284e-05, -1, 2.94815e-05, 0, -4.56441e-05, -1, 1.61343e-05, 0, -2.2531e-05, -1, 7.75088e-05, 0, -0.000115679, -1, 9.8335e-05, 0, -9.85875e-05, -1, 0.00010039, 9.08975e-11, -0.00010039, -1, 1.89505e-05, 0, -2.02199e-05, -1, 3.78197e-05, 3.50772e-11, -3.90156e-05, -1, 3.90155e-05, 0, -3.78198e-05, -1, 2.02199e-05, 0, -1.89504e-05, -1, 9.85874e-05, 4.54746e-11, -9.83349e-05, -1, 5.52357e-05, 2.18278e-11, -5.63118e-05, -1, 9.29962e-05, 0, -9.25009e-05, -1, 7.0529e-05, 0, -7.14441e-05, -1, 8.38311e-05, 0, -8.3112e-05, -1, 8.31118e-05, 0, -8.38308e-05, -1, 7.14444e-05, 0, -7.05291e-05, -1, 9.25008e-05, 0, -9.2996e-05, -1, 5.63119e-05, 0, -5.52357e-05, -1, 9.84347e-05, 0, -6.51604e-05, -1, 8.38311e-05, 0, -5.52359e-05, -1, 9.78695e-05, 3.45608e-11, -6.60058e-05, -1, 0.000108866, 0, -7.31632e-05, -1, 6.60058e-05, 0, -4.31885e-05, -1, 0.000115679, 4.54229e-11, -7.75088e-05, -1, 4.56442e-05, 0, -2.94815e-05, -1, 0.000118046, 9.08975e-11, -7.88758e-05, -1, 2.2531e-05, 1.32494e-11, -1.61343e-05, -1, 4.47046e-05, 3.50772e-11, -3.08876e-05, -1, 2.35284e-05, 0, -1.46416e-05, -1, 0.000115877, 0, -7.7212e-05, -1, 6.51603e-05, 0, -4.44539e-05, -1, 0.000109255, 0, -7.25808e-05, -1, 8.31118e-05, 6.35162e-11, -5.63119e-05, -1, 0.000128714, 0, -5.31218e-05, -1, 0.000121316, 0, -4.98715e-05, -1, 7.25807e-05, 2.89554e-11, -3.08876e-05, -1, 9.25008e-05, 6.35162e-11, -3.90156e-05, -1, 0.000109255, 0, -4.47047e-05, -1, 0.000108866, 0, -4.56442e-05, -1, 9.29963e-05, 0, -3.78199e-05, -1, 0.000121048, 8.3909e-11, -5.05186e-05, -1, 7.31631e-05, 0, -2.94815e-05, -1, 0.000128577, 1.32808e-10, -5.34517e-05, -1, 5.05187e-05, 0, -2.00103e-05, -1, 0.000131166, 4.54746e-11, -5.43307e-05, -1, 2.52458e-05, 0, -1.14287e-05, -1, 4.98716e-05, 0, -2.15726e-05, -1, 2.59327e-05, 0, -9.77013e-06, -1, 7.75088e-05, 0, -1.46416e-05, -1, 5.34518e-05, 0, -9.77013e-06, -1, 0.000136535, 8.91521e-11, -2.73405e-05, -1, 0.000139245, 0, -2.76975e-05, -1, 2.69903e-05, 0, -6.28387e-06, -1, 5.31219e-05, 0, -1.14287e-05, -1, 2.73405e-05, 0, -4.52317e-06, -1, 0.000136605, 0, -2.69902e-05, -1, 7.72119e-05, 0, -1.61343e-05, -1, 0.000128714, 0, -2.52457e-05, -1, 9.8335e-05, 0, -2.02198e-05, -1, 0.000115877, 0, -2.25311e-05, -1, 0.000115679, 1.15553e-10, -2.35284e-05, -1, 9.85874e-05, 0, -1.89504e-05, -1, 0.000128577, 1.67604e-10, -2.59327e-05, -1, 0.000118047, -7.48146e-11, 5.08444e-07, -1, 0.00010039, -3.4561e-11, 6.47187e-07, -1, 0.000118046, 7.53001e-11, -5.08473e-07, -1, 0.000131166, 0, -3.50157e-07, -1, 7.88762e-05, 0, 7.60994e-07, -1, 0.000139245, 0, -1.78442e-07, -1, 5.43309e-05, 0, 8.45525e-07, -1, 0.000141973, 0, 8.73115e-11, -1, 2.76977e-05, 1.76615e-11, -8.97677e-07, -1, 5.43309e-05, 1.31877e-11, -8.4554e-07, -1, 2.76976e-05, 0, 8.97607e-07, -1, 0.000139245, 0, 1.7861e-07, -1, 7.88759e-05, 5.06197e-11, -7.60998e-07, -1, 0.000131166, 0, 3.50257e-07, -1, 0.00010039, 6.43862e-11, -6.47166e-07, -1, 0.000136535, 0, 2.73406e-05, -1, 0.000128578, -4.02536e-11, 2.59328e-05, -1, 7.75089e-05, 7.24475e-11, 1.46415e-05, -1, 9.85876e-05, 0, 1.89505e-05, -1, 0.000115679, -4.23273e-16, 2.35285e-05, -1, 0.000115877, 0, 2.25311e-05, -1, 9.83352e-05, 3.45608e-11, 2.022e-05, -1, 0.000128714, 0, 2.52458e-05, -1, 7.72121e-05, 0, 1.61343e-05, -1, 0.000136604, 0, 2.69904e-05, -1, 5.3122e-05, 0, 1.14287e-05, -1, 0.000139245, 0, 2.76976e-05, -1, 2.73406e-05, 1.76615e-11, 4.52311e-06, -1, 5.34518e-05, 5.65931e-11, 9.77003e-06, -1, 2.69903e-05, 0, 6.28388e-06, -1, 7.25808e-05, 0, 3.08876e-05, -1, 4.98716e-05, 0, 2.15727e-05, -1, 0.000128714, 0, 5.31219e-05, -1, 0.000131166, 0, 5.43308e-05, -1, 2.59328e-05, 1.32494e-11, 9.7701e-06, -1, 5.05187e-05, 3.50772e-11, 2.00102e-05, -1, 2.52458e-05, 0, 1.14287e-05, -1, 0.000128578, 0, 5.34518e-05, -1, 7.31632e-05, 0, 2.94816e-05, -1, 0.000121048, 4.02534e-11, 5.05188e-05, -1, 9.29961e-05, 0, 3.78198e-05, -1, 0.000108866, -1.42247e-16, 4.56443e-05, -1, 0.000109255, 0, 4.47047e-05, -1, 9.2501e-05, -3.45609e-11, 3.90156e-05, -1, 0.000121316, 0, 4.98716e-05, -1, 9.78698e-05, -7.48143e-11, 6.6006e-05, -1, 8.31119e-05, 0, 5.63119e-05, -1, 9.84346e-05, 0, 6.51605e-05, -1, 0.000109255, 0, 7.25809e-05, -1, 6.51603e-05, -5.07834e-11, 4.44539e-05, -1, 0.000115877, 0, 7.72121e-05, -1, 4.47047e-05, -2.18279e-11, 3.08876e-05, -1, 0.000118046, 0, 7.88761e-05, -1, 2.35284e-05, 0, 1.46416e-05, -1, 4.56441e-05, 0, 2.94815e-05, -1, 2.2531e-05, 0, 1.61343e-05, -1, 0.000115679, 0, 7.7509e-05, -1, 6.60058e-05, 0, 4.31885e-05, -1, 0.000108866, -4.02534e-11, 7.31633e-05, -1, 8.3831e-05, 0, 5.52358e-05, -1, 3.90156e-05, 0, 3.78199e-05, -1, 5.6312e-05, 0, 5.52359e-05, -1, 9.83349e-05, 0, 9.85875e-05, -1, 9.2501e-05, 0, 9.29963e-05, -1, 7.14443e-05, 0, 7.05292e-05, -1, 8.3112e-05, 0, 8.38311e-05, -1, 8.3831e-05, 0, 8.3112e-05, -1, 7.05291e-05, -2.89555e-11, 7.14443e-05, -1, 9.29961e-05, 0, 9.25008e-05, -1, 5.52359e-05, -5.07834e-11, 5.6312e-05, -1, 9.85874e-05, 0, 9.8335e-05, -1, 3.78198e-05, 0, 3.90155e-05, -1, 0.00010039, 0, 0.00010039, -1, 2.02199e-05, 0, 1.89505e-05, -1, 1.89504e-05, 0, 2.02198e-05, -1, 7.31632e-05, 2.00089e-11, 0.000108866, -1, 7.75089e-05, 0, 0.000115679, -1, 4.31886e-05, -2.91039e-11, 6.60059e-05, -1, 2.94816e-05, -5.22827e-11, 4.56441e-05, -1, 7.8876e-05, 0, 0.000118046, -1, 1.61343e-05, 0, 2.25311e-05, -1, 3.08876e-05, 0, 4.47048e-05, -1, 1.46418e-05, -3.78059e-11, 2.35285e-05, -1, 7.7212e-05, 0, 0.000115877, -1, 4.4454e-05, 0, 6.51604e-05, -1, 7.25809e-05, 0, 0.000109255, -1, 5.63119e-05, 0, 8.31119e-05, -1, 6.51605e-05, -7.48143e-11, 9.84347e-05, -1, 6.60058e-05, 3.76501e-11, 9.78695e-05, -1, 5.52359e-05, -9.89471e-11, 8.38311e-05, -1, 4.98717e-05, -1.67605e-10, 0.000121316, -1, 4.47049e-05, -1.50115e-10, 0.000109256, -1, 3.90155e-05, 5.03088e-11, 9.25007e-05, -1, 4.56441e-05, 1.81898e-11, 0.000108866, -1, 3.78199e-05, -6.43863e-11, 9.29962e-05, -1, 5.05186e-05, -2.00089e-11, 0.000121048, -1, 2.94815e-05, -3.22738e-11, 7.31632e-05, -1, 5.34517e-05, 0, 0.000128578, -1, 2.00105e-05, -6.55322e-11, 5.05187e-05, -1, 5.43307e-05, 0, 0.000131166, -1, 1.14287e-05, 0, 2.52458e-05, -1, 2.15727e-05, 0, 4.98716e-05, -1, 9.77026e-06, -1.7797e-11, 2.59328e-05, -1, 5.31219e-05, -8.90788e-11, 0.000128714, -1, 3.08876e-05, 0, 7.25808e-05, -1, 9.77007e-06, 7.3201e-11, 5.34518e-05, -1, 4.52308e-06, 3.78056e-11, 2.73403e-05, -1, 2.76979e-05, -2.72332e-11, 0.000139245, -1, 2.69906e-05, -3.65975e-12, 0.000136605, -1, 1.14287e-05, -3.50156e-11, 5.31219e-05, -1, 1.61343e-05, -8.70736e-11, 7.7212e-05, -1, 2.5246e-05, 5.63886e-11, 0.000128714, -1, 2.02199e-05, -6.1297e-11, 9.83349e-05, -1, 2.25312e-05, 1.91465e-10, 0.000115877, -1, 2.35286e-05, -1.45692e-10, 0.000115679, -1, 1.89505e-05, 1.35327e-10, 9.85875e-05, -1, 2.59329e-05, -4.72937e-11, 0.000128577, -1, 1.46417e-05, 7.89776e-11, 7.75089e-05, -1, 2.73407e-05, -2.18279e-11, 0.000136535, -1, 6.28395e-06, 0, 2.69903e-05, -1, 4.33663e-05, -2.34188e-16, -0.000142959, 1, 9.47743e-05, 1.43161e-10, -0.000115481, 1, 3.98104e-05, 0, -0.000134374, 1, -5.16238e-06, 0, 7.72604e-06, -1, 8.82039e-05, 1.38687e-10, -0.00010891, 1, -6.57047e-06, 0, 6.57046e-06, -1, -7.72605e-06, 0, 5.16238e-06, -1, -7.72607e-06, 0, 5.16239e-06, -1, -8.58472e-06, 0, 3.5559e-06, -1, -8.58475e-06, 0, 3.55591e-06, -1, 0, 4.76837e-07, 4, -1, 0, 2.38419e-07, 2, -1, 0, 4.76837e-07, 4, -1, 0, 2.38419e-07, 2, -1, -4, 4.76837e-07, 0, -1, -2, 2.38419e-07, 0, -1, -4, 4.76837e-07, 0, -1, -2, 2.38419e-07, 0, -1, 0, 4.76837e-07, -4, -1, 0, 2.38419e-07, -2, -1, 0, 4.76837e-07, -4, -1, 0, 2.38419e-07, -2, -1, 4, 4.76837e-07, 0, -1, 2, 2.38419e-07, 0, -1, 4, 4.76837e-07, 0, -1, 2, 2.38419e-07, 0, -1, -4.76837e-07, 0, 4, -1, -2.38418e-07, 0, 2, -1, -4.76837e-07, 0, 4, -1, -2.38419e-07, 0, 2, -1, 4.76837e-07, 0, 4, -1, 2.38418e-07, 0, 2, -1, 4.76837e-07, 0, 4, -1, 2.38419e-07, 0, 2, -1 </real_array>
- <nil> </nil>
- <vector3_array len="529"> 0.25, 0.875, 0, 0.25, 0.8125, 0, 0.21875, 0.8125, 0, 0.21875, 0.875, 0, 0.25, 0.5, 0, 0.25, 0.4375, 0, 0.21875, 0.4375, 0, 0.21875, 0.5, 0, 0.25, 0.125, 0, 0.25, 0.0624999, 0, 0.21875, 0.0624999, 0, 0.21875, 0.125, 0, 0.25, 0.9375, 0, 0.21875, 0.9375, 0, 0.25, 0.5625, 0, 0.21875, 0.5625, 0, 0.25, 0.1875, 0, 0.21875, 0.1875, 0, 0.25, 0.625, 0, 0.21875, 0.625, 0, 0.25, 0.25, 0, 0.21875, 0.25, 0, 0.25, 0.6875, 0, 0.21875, 0.6875, 0, 0.25, 0.3125, 0, 0.21875, 0.3125, 0, 0.25, 0.75, 0, 0.21875, 0.75, 0, 0.25, 0.375, 0, 0.21875, 0.375, 0, 0.1875, 0.5625, 0, 0.1875, 0.625, 0, 0.1875, 0.1875, 0, 0.1875, 0.25, 0, 0.1875, 0.6875, 0, 0.1875, 0.3125, 0, 0.1875, 0.75, 0, 0.1875, 0.375, 0, 0.1875, 0.8125, 0, 0.1875, 0.4375, 0, 0.1875, 0.875, 0, 0.1875, 0.5, 0, 0.1875, 0.0624999, 0, 0.1875, 0.125, 0, 0.1875, 0.9375, 0, 0.15625, 0.8125, 0, 0.15625, 0.875, 0, 0.15625, 0.4375, 0, 0.15625, 0.5, 0, 0.15625, 0.0624999, 0, 0.15625, 0.125, 0, 0.15625, 0.9375, 0, 0.15625, 0.5625, 0, 0.15625, 0.1875, 0, 0.15625, 0.625, 0, 0.15625, 0.25, 0, 0.15625, 0.6875, 0, 0.15625, 0.3125, 0, 0.15625, 0.75, 0, 0.15625, 0.375, 0, 0.125, 0.6875, 0, 0.125, 0.75, 0, 0.125, 0.3125, 0, 0.125, 0.375, 0, 0.125, 0.8125, 0, 0.125, 0.4375, 0, 0.125, 0.875, 0, 0.125, 0.5, 0, 0.125, 0.0625, 0, 0.125, 0.125, 0, 0.125, 0.9375, 0, 0.125, 0.5625, 0, 0.125, 0.1875, 0, 0.125, 0.625, 0, 0.125, 0.25, 0, 0.0937499, 0.5625, 0, 0.0937499, 0.625, 0, 0.0937499, 0.1875, 0, 0.0937499, 0.25, 0, 0.0937499, 0.6875, 0, 0.0937499, 0.3125, 0, 0.0937499, 0.75, 0, 0.0937499, 0.375, 0, 0.0937499, 0.8125, 0, 0.0937499, 0.4375, 0, 0.0937499, 0.875, 0, 0.0937499, 0.5, 0, 0.0937496, 0.0625, 0, 0.0937498, 0.125, 0, 0.0937499, 0.9375, 0, 0.0624999, 0.8125, 0, 0.0624999, 0.875, 0, 0.0624999, 0.4375, 0, 0.0624999, 0.5, 0, 0.0624996, 0.0625, 0, 0.0624998, 0.125, 0, 0.0624999, 0.9375, 0, 0.0624999, 0.5625, 0, 0.0624999, 0.1875, 0, 0.0624999, 0.625, 0, 0.0624999, 0.25, 0, 0.0624999, 0.6875, 0, 0.0624999, 0.3125, 0, 0.0624999, 0.75, 0, 0.0624999, 0.375, 0, 0.0312499, 0.6875, 0, 0.0312499, 0.75, 0, 0.0312499, 0.3125, 0, 0.0312499, 0.375, 0, 0.0312499, 0.8125, 0, 0.0312499, 0.4375, 0, 0.0312499, 0.875, 0, 0.0312499, 0.5, 0, 0.0312496, 0.0625, 0, 0.0312498, 0.125, 0, 0.0312498, 0.9375, 0, 0.0312499, 0.5625, 0, 0.0312499, 0.1875, 0, 0.0312499, 0.625, 0, 0.0312499, 0.25, 0, 1.03125, 0.625, 0, 1.03125, 0.5625, 0, 1, 0.5625, 0, 1, 0.625, 0, 1.03125, 0.25, 0, 1.03125, 0.1875, 0, 1, 0.1875, 0, 1, 0.25, 0, 1.03125, 0.6875, 0, 1, 0.6875, 0, 1.03125, 0.3125, 0, 1, 0.3125, 0, 1.03125, 0.75, 0, 1, 0.75, 0, 1.03125, 0.375, 0, 1, 0.375, 0, 1.03125, 0.8125, 0, 1, 0.8125, 0, 1.03125, 0.4375, 0, 1, 0.4375, 0, 1.03125, 0.875, 0, 1, 0.875, 0, 1.03125, 0.5, 0, 1, 0.5, 0, 1.03125, 0.125, 0, 1.03125, 0.0625, 0, 1, 0.0625, 0, 1, 0.125, 0, 1.03125, 0.9375, 0, 1, 0.9375, 0, 0.96875, 0.8125, 0, 0.96875, 0.875, 0, 0.96875, 0.4375, 0, 0.96875, 0.5, 0, 0.96875, 0.0625, 0, 0.96875, 0.125, 0, 0.96875, 0.9375, 0, 0.96875, 0.5625, 0, 0.96875, 0.1875, 0, 0.96875, 0.625, 0, 0.96875, 0.25, 0, 0.96875, 0.6875, 0, 0.96875, 0.3125, 0, 0.96875, 0.75, 0, 0.96875, 0.375, 0, 0.9375, 0.25, 0, 0.9375, 0.3125, 0, 0.9375, 0.6875, 0, 0.9375, 0.75, 0, 0.9375, 0.375, 0, 0.9375, 0.8125, 0, 0.9375, 0.4375, 0, 0.9375, 0.875, 0, 0.9375, 0.5, 0, 0.9375, 0.0625, 0, 0.9375, 0.125, 0, 0.9375, 0.9375, 0, 0.9375, 0.5625, 0, 0.9375, 0.1875, 0, 0.9375, 0.625, 0, 0.90625, 0.5, 0, 0.90625, 0.5625, 0, 0.90625, 0.125, 0, 0.90625, 0.1875, 0, 0.90625, 0.625, 0, 0.90625, 0.25, 0, 0.90625, 0.6875, 0, 0.90625, 0.3125, 0, 0.90625, 0.75, 0, 0.90625, 0.375, 0, 0.90625, 0.8125, 0, 0.90625, 0.4375, 0, 0.90625, 0.875, 0, 0.90625, 0.0625, 0, 0.90625, 0.9375, 0, 0.875, 0.75, 0, 0.875, 0.8125, 0, 0.875, 0.375, 0, 0.875, 0.4375, 0, 0.875, 0.875, 0, 0.875, 0.5, 0, 0.875, 0.0625, 0, 0.875, 0.125, 0, 0.875, 0.9375, 0, 0.875, 0.5625, 0, 0.875, 0.1875, 0, 0.875, 0.625, 0, 0.875, 0.25, 0, 0.875, 0.6875, 0, 0.875, 0.3125, 0, 0.84375, 0.625, 0, 0.84375, 0.6875, 0, 0.84375, 0.25, 0, 0.84375, 0.3125, 0, 0.84375, 0.75, 0, 0.84375, 0.375, 0, 0.84375, 0.8125, 0, 0.84375, 0.4375, 0, 0.84375, 0.875, 0, 0.84375, 0.5, 0, 0.84375, 0.0625, 0, 0.84375, 0.125, 0, 0.84375, 0.9375, 0, 0.84375, 0.5625, 0, 0.84375, 0.1875, 0, 0.8125, 0.875, 0, 0.8125, 0.9375, 0, 0.8125, 0.5, 0, 0.8125, 0.5625, 0, 0.8125, 0.125, 0, 0.8125, 0.1875, 0, 0.8125, 0.625, 0, 0.8125, 0.25, 0, 0.8125, 0.6875, 0, 0.8125, 0.3125, 0, 0.8125, 0.75, 0, 0.8125, 0.375, 0, 0.8125, 0.8125, 0, 0.8125, 0.4375, 0, 0.8125, 0.0625, 0, 0.78125, 0.75, 0, 0.78125, 0.8125, 0, 0.78125, 0.375, 0, 0.78125, 0.4375, 0, 0.78125, 0.875, 0, 0.78125, 0.5, 0, 0.78125, 0.0625, 0, 0.78125, 0.125, 0, 0.78125, 0.9375, 0, 0.78125, 0.5625, 0, 0.78125, 0.1875, 0, 0.78125, 0.625, 0, 0.78125, 0.25, 0, 0.78125, 0.6875, 0, 0.78125, 0.3125, 0, 0.75, 0.625, 0, 0.75, 0.6875, 0, 0.75, 0.25, 0, 0.75, 0.3125, 0, 0.75, 0.75, 0, 0.75, 0.375, 0, 0.75, 0.8125, 0, 0.75, 0.4375, 0, 0.75, 0.875, 0, 0.75, 0.5, 0, 0.75, 0.0625, 0, 0.75, 0.125, 0, 0.75, 0.9375, 0, 0.75, 0.5625, 0, 0.75, 0.1875, 0, 0.71875, 0.875, 0, 0.71875, 0.9375, 0, 0.71875, 0.5, 0, 0.71875, 0.5625, 0, 0.71875, 0.125, 0, 0.71875, 0.1875, 0, 0.71875, 0.625, 0, 0.71875, 0.25, 0, 0.71875, 0.6875, 0, 0.71875, 0.3125, 0, 0.71875, 0.75, 0, 0.71875, 0.375, 0, 0.71875, 0.8125, 0, 0.71875, 0.4375, 0, 0.71875, 0.0625, 0, 0.6875, 0.75, 0, 0.6875, 0.8125, 0, 0.6875, 0.375, 0, 0.6875, 0.4375, 0, 0.6875, 0.875, 0, 0.6875, 0.5, 0, 0.6875, 0.0625, 0, 0.6875, 0.125, 0, 0.6875, 0.9375, 0, 0.6875, 0.5625, 0, 0.6875, 0.1875, 0, 0.6875, 0.625, 0, 0.6875, 0.25, 0, 0.6875, 0.6875, 0, 0.6875, 0.3125, 0, 0.65625, 0.1875, 0, 0.65625, 0.25, 0, 0.65625, 0.625, 0, 0.65625, 0.6875, 0, 0.65625, 0.3125, 0, 0.65625, 0.75, 0, 0.65625, 0.375, 0, 0.65625, 0.8125, 0, 0.65625, 0.4375, 0, 0.65625, 0.875, 0, 0.65625, 0.5, 0, 0.65625, 0.0625, 0, 0.65625, 0.125, 0, 0.65625, 0.9375, 0, 0.65625, 0.5625, 0, 0.625, 0.4375, 0, 0.625, 0.5, 0, 0.625, 0.0625, 0, 0.625, 0.125, 0, 0.625, 0.875, 0, 0.625, 0.9375, 0, 0.625, 0.5625, 0, 0.625, 0.1875, 0, 0.625, 0.625, 0, 0.625, 0.25, 0, 0.625, 0.6875, 0, 0.625, 0.3125, 0, 0.625, 0.75, 0, 0.625, 0.375, 0, 0.625, 0.8125, 0, 0.59375, 0.6875, 0, 0.59375, 0.75, 0, 0.59375, 0.3125, 0, 0.59375, 0.375, 0, 0.59375, 0.8125, 0, 0.59375, 0.4375, 0, 0.59375, 0.875, 0, 0.59375, 0.5, 0, 0.59375, 0.0625, 0, 0.59375, 0.125, 0, 0.59375, 0.9375, 0, 0.59375, 0.5625, 0, 0.59375, 0.1875, 0, 0.59375, 0.625, 0, 0.59375, 0.25, 0, 0.5625, 0.5625, 0, 0.5625, 0.625, 0, 0.5625, 0.1875, 0, 0.5625, 0.25, 0, 0.5625, 0.6875, 0, 0.5625, 0.3125, 0, 0.5625, 0.75, 0, 0.5625, 0.375, 0, 0.5625, 0.8125, 0, 0.5625, 0.4375, 0, 0.5625, 0.875, 0, 0.5625, 0.5, 0, 0.5625, 0.0625, 0, 0.5625, 0.125, 0, 0.5625, 0.9375, 0, 0.53125, 0.8125, 0, 0.53125, 0.875, 0, 0.53125, 0.4375, 0, 0.53125, 0.5, 0, 0.53125, 0.0625, 0, 0.53125, 0.125, 0, 0.53125, 0.9375, 0, 0.53125, 0.5625, 0, 0.53125, 0.1875, 0, 0.53125, 0.625, 0, 0.53125, 0.25, 0, 0.53125, 0.6875, 0, 0.53125, 0.3125, 0, 0.53125, 0.75, 0, 0.53125, 0.375, 0, 0.5, 0.6875, 0, 0.5, 0.75, 0, 0.5, 0.3125, 0, 0.5, 0.375, 0, 0.5, 0.8125, 0, 0.5, 0.4375, 0, 0.5, 0.875, 0, 0.5, 0.5, 0, 0.5, 0.0625, 0, 0.5, 0.125, 0, 0.5, 0.9375, 0, 0.5, 0.5625, 0, 0.5, 0.1875, 0, 0.5, 0.625, 0, 0.5, 0.25, 0, 0.46875, 0.5625, 0, 0.46875, 0.625, 0, 0.46875, 0.1875, 0, 0.46875, 0.25, 0, 0.46875, 0.6875, 0, 0.46875, 0.3125, 0, 0.46875, 0.75, 0, 0.46875, 0.375, 0, 0.46875, 0.8125, 0, 0.46875, 0.4375, 0, 0.46875, 0.875, 0, 0.46875, 0.5, 0, 0.46875, 0.0624999, 0, 0.46875, 0.125, 0, 0.46875, 0.9375, 0, 0.4375, 0.8125, 0, 0.4375, 0.875, 0, 0.4375, 0.4375, 0, 0.4375, 0.5, 0, 0.4375, 0.0624999, 0, 0.4375, 0.125, 0, 0.4375, 0.9375, 0, 0.4375, 0.5625, 0, 0.4375, 0.1875, 0, 0.4375, 0.625, 0, 0.4375, 0.25, 0, 0.4375, 0.6875, 0, 0.4375, 0.3125, 0, 0.4375, 0.75, 0, 0.4375, 0.375, 0, 0.40625, 0.6875, 0, 0.40625, 0.75, 0, 0.40625, 0.3125, 0, 0.40625, 0.375, 0, 0.40625, 0.8125, 0, 0.40625, 0.4375, 0, 0.40625, 0.875, 0, 0.40625, 0.5, 0, 0.40625, 0.0624999, 0, 0.40625, 0.125, 0, 0.40625, 0.9375, 0, 0.40625, 0.5625, 0, 0.40625, 0.1875, 0, 0.40625, 0.625, 0, 0.40625, 0.25, 0, 0.375, 0.125, 0, 0.375, 0.1875, 0, 0.375, 0.5625, 0, 0.375, 0.625, 0, 0.375, 0.25, 0, 0.375, 0.6875, 0, 0.375, 0.3125, 0, 0.375, 0.75, 0, 0.375, 0.375, 0, 0.375, 0.8125, 0, 0.375, 0.4375, 0, 0.375, 0.875, 0, 0.375, 0.5, 0, 0.375, 0.0624999, 0, 0.375, 0.9375, 0, 0.34375, 0.375, 0, 0.34375, 0.4375, 0, 0.34375, 0.8125, 0, 0.34375, 0.875, 0, 0.34375, 0.5, 0, 0.34375, 0.0624999, 0, 0.34375, 0.125, 0, 0.34375, 0.9375, 0, 0.34375, 0.5625, 0, 0.34375, 0.1875, 0, 0.34375, 0.625, 0, 0.34375, 0.25, 0, 0.34375, 0.6875, 0, 0.34375, 0.3125, 0, 0.34375, 0.75, 0, 0.3125, 0.625, 0, 0.3125, 0.6875, 0, 0.3125, 0.25, 0, 0.3125, 0.3125, 0, 0.3125, 0.75, 0, 0.3125, 0.375, 0, 0.3125, 0.8125, 0, 0.3125, 0.4375, 0, 0.3125, 0.875, 0, 0.3125, 0.5, 0, 0.3125, 0.0624999, 0, 0.3125, 0.125, 0, 0.3125, 0.9375, 0, 0.3125, 0.5625, 0, 0.3125, 0.1875, 0, 0.28125, 0.875, 0, 0.28125, 0.9375, 0, 0.28125, 0.5, 0, 0.28125, 0.5625, 0, 0.28125, 0.125, 0, 0.28125, 0.1875, 0, 0.28125, 0.625, 0, 0.28125, 0.25, 0, 0.28125, 0.6875, 0, 0.28125, 0.3125, 0, 0.28125, 0.75, 0, 0.28125, 0.375, 0, 0.28125, 0.8125, 0, 0.28125, 0.4375, 0, 0.28125, 0.0624999, 0, 0.692175, 1, 0, 0.649736, 0, 0, 1.1875, 0.9375, 0, 1.15625, 0.9375, 0, 1.125, 0.0625, 0, 1.125, 0.9375, 0, 1.09375, 0.9375, 0, 1.09375, 0.0625, 0, 1.0625, 0.9375, 0, 1.0625, 0.0625, 0, 1, 1.19209e-07, 0, 1.19209e-07, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1.19209e-07, 0, 1.19209e-07, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1.19209e-07, 0, 1.19209e-07, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1.19209e-07, 0, 1.19209e-07, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1.19209e-07, 0, 1.19209e-07, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1.19209e-07, 0, 1.19209e-07, 0, 0, 0, 1, 0, 1, 1, 0 </vector3_array>
- <nil> </nil>
- <nil> </nil>
- <nil> </nil>
- <int_array len="2916"> 0, 2, 1, 0, 3, 2, 4, 6, 5, 4, 7, 6, 8, 10, 9, 8, 11, 10, 12, 3, 0, 12, 13, 3, 14, 7, 4, 14, 15, 7, 16, 11, 8, 16, 17, 11, 18, 15, 14, 18, 19, 15, 20, 17, 16, 20, 21, 17, 22, 19, 18, 22, 23, 19, 24, 21, 20, 24, 25, 21, 26, 23, 22, 26, 27, 23, 28, 25, 24, 28, 29, 25, 1, 27, 26, 1, 2, 27, 5, 29, 28, 5, 6, 29, 19, 30, 15, 19, 31, 30, 21, 32, 17, 21, 33, 32, 23, 31, 19, 23, 34, 31, 25, 33, 21, 25, 35, 33, 27, 34, 23, 27, 36, 34, 29, 35, 25, 29, 37, 35, 2, 36, 27, 2, 38, 36, 6, 37, 29, 6, 39, 37, 3, 38, 2, 3, 40, 38, 7, 39, 6, 7, 41, 39, 11, 42, 10, 11, 43, 42, 13, 40, 3, 13, 44, 40, 15, 41, 7, 15, 30, 41, 17, 43, 11, 17, 32, 43, 40, 45, 38, 40, 46, 45, 41, 47, 39, 41, 48, 47, 43, 49, 42, 43, 50, 49, 44, 46, 40, 44, 51, 46, 30, 48, 41, 30, 52, 48, 32, 50, 43, 32, 53, 50, 31, 52, 30, 31, 54, 52, 33, 53, 32, 33, 55, 53, 34, 54, 31, 34, 56, 54, 35, 55, 33, 35, 57, 55, 36, 56, 34, 36, 58, 56, 37, 57, 35, 37, 59, 57, 38, 58, 36, 38, 45, 58, 39, 59, 37, 39, 47, 59, 58, 60, 56, 58, 61, 60, 59, 62, 57, 59, 63, 62, 45, 61, 58, 45, 64, 61, 47, 63, 59, 47, 65, 63, 46, 64, 45, 46, 66, 64, 48, 65, 47, 48, 67, 65, 50, 68, 49, 50, 69, 68, 51, 66, 46, 51, 70, 66, 52, 67, 48, 52, 71, 67, 53, 69, 50, 53, 72, 69, 54, 71, 52, 54, 73, 71, 55, 72, 53, 55, 74, 72, 56, 73, 54, 56, 60, 73, 57, 74, 55, 57, 62, 74, 73, 75, 71, 73, 76, 75, 74, 77, 72, 74, 78, 77, 60, 76, 73, 60, 79, 76, 62, 78, 74, 62, 80, 78, 61, 79, 60, 61, 81, 79, 63, 80, 62, 63, 82, 80, 64, 81, 61, 64, 83, 81, 65, 82, 63, 65, 84, 82, 66, 83, 64, 66, 85, 83, 67, 84, 65, 67, 86, 84, 69, 87, 68, 69, 88, 87, 70, 85, 66, 70, 89, 85, 71, 86, 67, 71, 75, 86, 72, 88, 69, 72, 77, 88, 85, 90, 83, 85, 91, 90, 86, 92, 84, 86, 93, 92, 88, 94, 87, 88, 95, 94, 89, 91, 85, 89, 96, 91, 75, 93, 86, 75, 97, 93, 77, 95, 88, 77, 98, 95, 76, 97, 75, 76, 99, 97, 78, 98, 77, 78, 100, 98, 79, 99, 76, 79, 101, 99, 80, 100, 78, 80, 102, 100, 81, 101, 79, 81, 103, 101, 82, 102, 80, 82, 104, 102, 83, 103, 81, 83, 90, 103, 84, 104, 82, 84, 92, 104, 103, 105, 101, 103, 106, 105, 104, 107, 102, 104, 108, 107, 90, 106, 103, 90, 109, 106, 92, 108, 104, 92, 110, 108, 91, 109, 90, 91, 111, 109, 93, 110, 92, 93, 112, 110, 95, 113, 94, 95, 114, 113, 96, 111, 91, 96, 115, 111, 97, 112, 93, 97, 116, 112, 98, 114, 95, 98, 117, 114, 99, 116, 97, 99, 118, 116, 100, 117, 98, 100, 119, 117, 101, 118, 99, 101, 105, 118, 102, 119, 100, 102, 107, 119, 120, 122, 121, 120, 123, 122, 124, 126, 125, 124, 127, 126, 128, 123, 120, 128, 129, 123, 130, 127, 124, 130, 131, 127, 132, 129, 128, 132, 133, 129, 134, 131, 130, 134, 135, 131, 136, 133, 132, 136, 137, 133, 138, 135, 134, 138, 139, 135, 140, 137, 136, 140, 141, 137, 142, 139, 138, 142, 143, 139, 144, 146, 145, 144, 147, 146, 148, 141, 140, 148, 149, 141, 121, 143, 142, 121, 122, 143, 125, 147, 144, 125, 126, 147, 141, 150, 137, 141, 151, 150, 143, 152, 139, 143, 153, 152, 147, 154, 146, 147, 155, 154, 149, 151, 141, 149, 156, 151, 122, 153, 143, 122, 157, 153, 126, 155, 147, 126, 158, 155, 123, 157, 122, 123, 159, 157, 127, 158, 126, 127, 160, 158, 129, 159, 123, 129, 161, 159, 131, 160, 127, 131, 162, 160, 133, 161, 129, 133, 163, 161, 135, 162, 131, 135, 164, 162, 137, 163, 133, 137, 150, 163, 139, 164, 135, 139, 152, 164, 162, 165, 160, 162, 166, 165, 163, 167, 161, 163, 168, 167, 164, 166, 162, 164, 169, 166, 150, 168, 163, 150, 170, 168, 152, 169, 164, 152, 171, 169, 151, 170, 150, 151, 172, 170, 153, 171, 152, 153, 173, 171, 155, 174, 154, 155, 175, 174, 156, 172, 151, 156, 176, 172, 157, 173, 153, 157, 177, 173, 158, 175, 155, 158, 178, 175, 159, 177, 157, 159, 179, 177, 160, 178, 158, 160, 165, 178, 161, 179, 159, 161, 167, 179, 177, 180, 173, 177, 181, 180, 178, 182, 175, 178, 183, 182, 179, 181, 177, 179, 184, 181, 165, 183, 178, 165, 185, 183, 167, 184, 179, 167, 186, 184, 166, 185, 165, 166, 187, 185, 168, 186, 167, 168, 188, 186, 169, 187, 166, 169, 189, 187, 170, 188, 168, 170, 190, 188, 171, 189, 169, 171, 191, 189, 172, 190, 170, 172, 192, 190, 173, 191, 171, 173, 180, 191, 175, 193, 174, 175, 182, 193, 176, 192, 172, 176, 194, 192, 190, 195, 188, 190, 196, 195, 191, 197, 189, 191, 198, 197, 192, 196, 190, 192, 199, 196, 180, 198, 191, 180, 200, 198, 182, 201, 193, 182, 202, 201, 194, 199, 192, 194, 203, 199, 181, 200, 180, 181, 204, 200, 183, 202, 182, 183, 205, 202, 184, 204, 181, 184, 206, 204, 185, 205, 183, 185, 207, 205, 186, 206, 184, 186, 208, 206, 187, 207, 185, 187, 209, 207, 188, 208, 186, 188, 195, 208, 189, 209, 187, 189, 197, 209, 208, 210, 206, 208, 211, 210, 209, 212, 207, 209, 213, 212, 195, 211, 208, 195, 214, 211, 197, 213, 209, 197, 215, 213, 196, 214, 195, 196, 216, 214, 198, 215, 197, 198, 217, 215, 199, 216, 196, 199, 218, 216, 200, 217, 198, 200, 219, 217, 202, 220, 201, 202, 221, 220, 203, 218, 199, 203, 222, 218, 204, 219, 200, 204, 223, 219, 205, 221, 202, 205, 224, 221, 206, 223, 204, 206, 210, 223, 207, 224, 205, 207, 212, 224, 222, 225, 218, 222, 226, 225, 223, 227, 219, 223, 228, 227, 224, 229, 221, 224, 230, 229, 210, 228, 223, 210, 231, 228, 212, 230, 224, 212, 232, 230, 211, 231, 210, 211, 233, 231, 213, 232, 212, 213, 234, 232, 214, 233, 211, 214, 235, 233, 215, 234, 213, 215, 236, 234, 216, 235, 214, 216, 237, 235, 217, 236, 215, 217, 238, 236, 218, 237, 216, 218, 225, 237, 219, 238, 217, 219, 227, 238, 221, 239, 220, 221, 229, 239, 237, 240, 235, 237, 241, 240, 238, 242, 236, 238, 243, 242, 225, 241, 237, 225, 244, 241, 227, 243, 238, 227, 245, 243, 229, 246, 239, 229, 247, 246, 226, 244, 225, 226, 248, 244, 228, 245, 227, 228, 249, 245, 230, 247, 229, 230, 250, 247, 231, 249, 228, 231, 251, 249, 232, 250, 230, 232, 252, 250, 233, 251, 231, 233, 253, 251, 234, 252, 232, 234, 254, 252, 235, 253, 233, 235, 240, 253, 236, 254, 234, 236, 242, 254, 253, 255, 251, 253, 256, 255, 254, 257, 252, 254, 258, 257, 240, 256, 253, 240, 259, 256, 242, 258, 254, 242, 260, 258, 241, 259, 240, 241, 261, 259, 243, 260, 242, 243, 262, 260, 244, 261, 241, 244, 263, 261, 245, 262, 243, 245, 264, 262, 247, 265, 246, 247, 266, 265, 248, 263, 244, 248, 267, 263, 249, 264, 245, 249, 268, 264, 250, 266, 247, 250, 269, 266, 251, 268, 249, 251, 255, 268, 252, 269, 250, 252, 257, 269, 267, 270, 263, 267, 271, 270, 268, 272, 264, 268, 273, 272, 269, 274, 266, 269, 275, 274, 255, 273, 268, 255, 276, 273, 257, 275, 269, 257, 277, 275, 256, 276, 255, 256, 278, 276, 258, 277, 257, 258, 279, 277, 259, 278, 256, 259, 280, 278, 260, 279, 258, 260, 281, 279, 261, 280, 259, 261, 282, 280, 262, 281, 260, 262, 283, 281, 263, 282, 261, 263, 270, 282, 264, 283, 262, 264, 272, 283, 266, 284, 265, 266, 274, 284, 282, 285, 280, 282, 286, 285, 283, 287, 281, 283, 288, 287, 270, 286, 282, 270, 289, 286, 272, 288, 283, 272, 290, 288, 274, 291, 284, 274, 292, 291, 271, 289, 270, 271, 293, 289, 273, 290, 272, 273, 294, 290, 275, 292, 274, 275, 295, 292, 276, 294, 273, 276, 296, 294, 277, 295, 275, 277, 297, 295, 278, 296, 276, 278, 298, 296, 279, 297, 277, 279, 299, 297, 280, 298, 278, 280, 285, 298, 281, 299, 279, 281, 287, 299, 297, 300, 295, 297, 301, 300, 298, 302, 296, 298, 303, 302, 299, 301, 297, 299, 304, 301, 285, 303, 298, 285, 305, 303, 287, 304, 299, 287, 306, 304, 286, 305, 285, 286, 307, 305, 288, 306, 287, 288, 308, 306, 289, 307, 286, 289, 309, 307, 290, 308, 288, 290, 310, 308, 292, 311, 291, 292, 312, 311, 293, 309, 289, 293, 313, 309, 294, 310, 290, 294, 314, 310, 295, 312, 292, 295, 300, 312, 296, 314, 294, 296, 302, 314, 310, 315, 308, 310, 316, 315, 312, 317, 311, 312, 318, 317, 313, 319, 309, 313, 320, 319, 314, 316, 310, 314, 321, 316, 300, 318, 312, 300, 322, 318, 302, 321, 314, 302, 323, 321, 301, 322, 300, 301, 324, 322, 303, 323, 302, 303, 325, 323, 304, 324, 301, 304, 326, 324, 305, 325, 303, 305, 327, 325, 306, 326, 304, 306, 328, 326, 307, 327, 305, 307, 329, 327, 308, 328, 306, 308, 315, 328, 309, 329, 307, 309, 319, 329, 327, 330, 325, 327, 331, 330, 328, 332, 326, 328, 333, 332, 329, 331, 327, 329, 334, 331, 315, 333, 328, 315, 335, 333, 319, 334, 329, 319, 336, 334, 316, 335, 315, 316, 337, 335, 318, 338, 317, 318, 339, 338, 320, 336, 319, 320, 340, 336, 321, 337, 316, 321, 341, 337, 322, 339, 318, 322, 342, 339, 323, 341, 321, 323, 343, 341, 324, 342, 322, 324, 344, 342, 325, 343, 323, 325, 330, 343, 326, 344, 324, 326, 332, 344, 343, 345, 341, 343, 346, 345, 344, 347, 342, 344, 348, 347, 330, 346, 343, 330, 349, 346, 332, 348, 344, 332, 350, 348, 331, 349, 330, 331, 351, 349, 333, 350, 332, 333, 352, 350, 334, 351, 331, 334, 353, 351, 335, 352, 333, 335, 354, 352, 336, 353, 334, 336, 355, 353, 337, 354, 335, 337, 356, 354, 339, 357, 338, 339, 358, 357, 340, 355, 336, 340, 359, 355, 341, 356, 337, 341, 345, 356, 342, 358, 339, 342, 347, 358, 355, 360, 353, 355, 361, 360, 356, 362, 354, 356, 363, 362, 358, 364, 357, 358, 365, 364, 359, 361, 355, 359, 366, 361, 345, 363, 356, 345, 367, 363, 347, 365, 358, 347, 368, 365, 346, 367, 345, 346, 369, 367, 348, 368, 347, 348, 370, 368, 349, 369, 346, 349, 371, 369, 350, 370, 348, 350, 372, 370, 351, 371, 349, 351, 373, 371, 352, 372, 350, 352, 374, 372, 353, 373, 351, 353, 360, 373, 354, 374, 352, 354, 362, 374, 373, 375, 371, 373, 376, 375, 374, 377, 372, 374, 378, 377, 360, 376, 373, 360, 379, 376, 362, 378, 374, 362, 380, 378, 361, 379, 360, 361, 381, 379, 363, 380, 362, 363, 382, 380, 365, 383, 364, 365, 384, 383, 366, 381, 361, 366, 385, 381, 367, 382, 363, 367, 386, 382, 368, 384, 365, 368, 387, 384, 369, 386, 367, 369, 388, 386, 370, 387, 368, 370, 389, 387, 371, 388, 369, 371, 375, 388, 372, 389, 370, 372, 377, 389, 388, 390, 386, 388, 391, 390, 389, 392, 387, 389, 393, 392, 375, 391, 388, 375, 394, 391, 377, 393, 389, 377, 395, 393, 376, 394, 375, 376, 396, 394, 378, 395, 377, 378, 397, 395, 379, 396, 376, 379, 398, 396, 380, 397, 378, 380, 399, 397, 381, 398, 379, 381, 400, 398, 382, 399, 380, 382, 401, 399, 384, 402, 383, 384, 403, 402, 385, 400, 381, 385, 404, 400, 386, 401, 382, 386, 390, 401, 387, 403, 384, 387, 392, 403, 400, 405, 398, 400, 406, 405, 401, 407, 399, 401, 408, 407, 403, 409, 402, 403, 410, 409, 404, 406, 400, 404, 411, 406, 390, 408, 401, 390, 412, 408, 392, 410, 403, 392, 413, 410, 391, 412, 390, 391, 414, 412, 393, 413, 392, 393, 415, 413, 394, 414, 391, 394, 416, 414, 395, 415, 393, 395, 417, 415, 396, 416, 394, 396, 418, 416, 397, 417, 395, 397, 419, 417, 398, 418, 396, 398, 405, 418, 399, 419, 397, 399, 407, 419, 418, 420, 416, 418, 421, 420, 419, 422, 417, 419, 423, 422, 405, 421, 418, 405, 424, 421, 407, 423, 419, 407, 425, 423, 406, 424, 405, 406, 426, 424, 408, 425, 407, 408, 427, 425, 410, 428, 409, 410, 429, 428, 411, 426, 406, 411, 430, 426, 412, 427, 408, 412, 431, 427, 413, 429, 410, 413, 432, 429, 414, 431, 412, 414, 433, 431, 415, 432, 413, 415, 434, 432, 416, 433, 414, 416, 420, 433, 417, 434, 415, 417, 422, 434, 432, 435, 429, 432, 436, 435, 433, 437, 431, 433, 438, 437, 434, 436, 432, 434, 439, 436, 420, 438, 433, 420, 440, 438, 422, 439, 434, 422, 441, 439, 421, 440, 420, 421, 442, 440, 423, 441, 422, 423, 443, 441, 424, 442, 421, 424, 444, 442, 425, 443, 423, 425, 445, 443, 426, 444, 424, 426, 446, 444, 427, 445, 425, 427, 447, 445, 429, 448, 428, 429, 435, 448, 430, 446, 426, 430, 449, 446, 431, 447, 427, 431, 437, 447, 445, 450, 443, 445, 451, 450, 446, 452, 444, 446, 453, 452, 447, 451, 445, 447, 454, 451, 435, 455, 448, 435, 456, 455, 449, 453, 446, 449, 457, 453, 437, 454, 447, 437, 458, 454, 436, 456, 435, 436, 459, 456, 438, 458, 437, 438, 460, 458, 439, 459, 436, 439, 461, 459, 440, 460, 438, 440, 462, 460, 441, 461, 439, 441, 463, 461, 442, 462, 440, 442, 464, 462, 443, 463, 441, 443, 450, 463, 444, 464, 442, 444, 452, 464, 462, 465, 460, 462, 466, 465, 463, 467, 461, 463, 468, 467, 464, 466, 462, 464, 469, 466, 450, 468, 463, 450, 470, 468, 452, 469, 464, 452, 471, 469, 451, 470, 450, 451, 472, 470, 453, 471, 452, 453, 473, 471, 454, 472, 451, 454, 474, 472, 456, 475, 455, 456, 476, 475, 457, 473, 453, 457, 477, 473, 458, 474, 454, 458, 478, 474, 459, 476, 456, 459, 479, 476, 460, 478, 458, 460, 465, 478, 461, 479, 459, 461, 467, 479, 477, 480, 473, 477, 481, 480, 478, 482, 474, 478, 483, 482, 479, 484, 476, 479, 485, 484, 465, 483, 478, 465, 486, 483, 467, 485, 479, 467, 487, 485, 466, 486, 465, 466, 488, 486, 468, 487, 467, 468, 489, 487, 469, 488, 466, 469, 490, 488, 470, 489, 468, 470, 491, 489, 471, 490, 469, 471, 492, 490, 472, 491, 470, 472, 493, 491, 473, 492, 471, 473, 480, 492, 474, 493, 472, 474, 482, 493, 476, 494, 475, 476, 484, 494, 495, 13, 12, 9, 10, 496, 10, 42, 496, 495, 497, 13, 495, 498, 497, 42, 49, 496, 49, 499, 496, 495, 500, 498, 495, 501, 500, 499, 502, 496, 495, 503, 501, 502, 504, 496, 504, 145, 496, 495, 148, 503, 495, 149, 148, 145, 146, 496, 146, 154, 496, 495, 156, 149, 154, 174, 496, 495, 176, 156, 495, 194, 176, 174, 193, 496, 193, 201, 496, 495, 203, 194, 201, 220, 496, 495, 222, 203, 495, 226, 222, 220, 239, 496, 239, 246, 496, 495, 248, 226, 246, 265, 496, 495, 267, 248, 495, 271, 267, 265, 284, 496, 284, 291, 496, 495, 293, 271, 291, 311, 496, 495, 313, 293, 495, 320, 313, 311, 317, 496, 317, 338, 496, 495, 340, 320, 495, 359, 340, 338, 357, 496, 495, 366, 359, 357, 364, 496, 364, 383, 496, 495, 385, 366, 495, 404, 385, 383, 402, 496, 495, 411, 404, 402, 409, 496, 409, 428, 496, 495, 430, 411, 495, 449, 430, 428, 448, 496, 448, 455, 496, 495, 457, 449, 455, 475, 496, 495, 477, 457, 495, 481, 477, 475, 494, 496, 492, 26, 490, 492, 1, 26, 493, 28, 491, 493, 5, 28, 496, 494, 9, 480, 1, 492, 480, 0, 1, 482, 5, 493, 482, 4, 5, 9, 484, 8, 9, 494, 484, 481, 0, 480, 481, 12, 0, 483, 4, 482, 483, 14, 4, 485, 8, 484, 485, 16, 8, 495, 12, 481, 486, 14, 483, 486, 18, 14, 487, 16, 485, 487, 20, 16, 488, 18, 486, 488, 22, 18, 489, 20, 487, 489, 24, 20, 490, 22, 488, 490, 26, 22, 491, 24, 489, 491, 28, 24, 505, 507, 506, 505, 508, 507, 509, 511, 510, 509, 512, 511, 513, 515, 514, 513, 516, 515, 517, 519, 518, 517, 520, 519, 521, 523, 522, 521, 524, 523, 525, 527, 526, 525, 528, 527 </int_array>
- </array>
- </dictionary>
-
- </main_resource>
-</resource_file> \ No newline at end of file
diff --git a/demos/3d/fixed_materials/tournesol.png b/demos/3d/fixed_materials/tournesol.png
deleted file mode 100644
index 54b391fc36..0000000000
--- a/demos/3d/fixed_materials/tournesol.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/inverse_kinematics/engine.cfg b/demos/3d/inverse_kinematics/engine.cfg
deleted file mode 100644
index e69de29bb2..0000000000
--- a/demos/3d/inverse_kinematics/engine.cfg
+++ /dev/null
diff --git a/demos/3d/inverse_kinematics/main.scn b/demos/3d/inverse_kinematics/main.scn
deleted file mode 100644
index 918fd09a3a..0000000000
--- a/demos/3d/inverse_kinematics/main.scn
+++ /dev/null
Binary files differ
diff --git a/demos/3d/kinematic_char/cubelib.res b/demos/3d/kinematic_char/cubelib.res
deleted file mode 100644
index 130b9529fe..0000000000
--- a/demos/3d/kinematic_char/cubelib.res
+++ /dev/null
Binary files differ
diff --git a/demos/3d/kinematic_char/cubio.gd b/demos/3d/kinematic_char/cubio.gd
deleted file mode 100644
index 769ada3bca..0000000000
--- a/demos/3d/kinematic_char/cubio.gd
+++ /dev/null
@@ -1,86 +0,0 @@
-
-extends KinematicBody
-
-# Member variables
-var g = -9.8
-var vel = Vector3()
-const MAX_SPEED = 5
-const JUMP_SPEED = 7
-const ACCEL= 2
-const DEACCEL= 4
-const MAX_SLOPE_ANGLE = 30
-
-
-func _fixed_process(delta):
- var dir = Vector3() # Where does the player intend to walk to
- var cam_xform = get_node("target/camera").get_global_transform()
-
- if (Input.is_action_pressed("move_forward")):
- dir += -cam_xform.basis[2]
- if (Input.is_action_pressed("move_backwards")):
- dir += cam_xform.basis[2]
- if (Input.is_action_pressed("move_left")):
- dir += -cam_xform.basis[0]
- if (Input.is_action_pressed("move_right")):
- dir += cam_xform.basis[0]
-
- dir.y = 0
- dir = dir.normalized()
-
- vel.y += delta*g
-
- var hvel = vel
- hvel.y = 0
-
- var target = dir*MAX_SPEED
- var accel
- if (dir.dot(hvel) > 0):
- accel = ACCEL
- else:
- accel = DEACCEL
-
- hvel = hvel.linear_interpolate(target, accel*delta)
-
- vel.x = hvel.x
- vel.z = hvel.z
-
- var motion = move(vel*delta)
-
- var on_floor = false
- var original_vel = vel
- var floor_velocity = Vector3()
- var attempts = 4
-
- while(is_colliding() and attempts):
- var n = get_collision_normal()
-
- if (rad2deg(acos(n.dot(Vector3(0, 1, 0)))) < MAX_SLOPE_ANGLE):
- # If angle to the "up" vectors is < angle tolerance,
- # char is on floor
- floor_velocity = get_collider_velocity()
- on_floor = true
-
- motion = n.slide(motion)
- vel = n.slide(vel)
- if (original_vel.dot(vel) > 0):
- # Do not allow to slide towads the opposite direction we were coming from
- motion=move(motion)
- if (motion.length() < 0.001):
- break
- attempts -= 1
-
- if (on_floor and floor_velocity != Vector3()):
- move(floor_velocity*delta)
-
- if (on_floor and Input.is_action_pressed("jump")):
- vel.y = JUMP_SPEED
-
- var crid = get_node("../elevator1").get_rid()
-
-
-func _ready():
- set_fixed_process(true)
-
-
-func _on_tcube_body_enter(body):
- get_node("../ty").show()
diff --git a/demos/3d/kinematic_char/engine.cfg b/demos/3d/kinematic_char/engine.cfg
deleted file mode 100644
index b3060b65e0..0000000000
--- a/demos/3d/kinematic_char/engine.cfg
+++ /dev/null
@@ -1,17 +0,0 @@
-[application]
-
-name="Kinematic Character 3D"
-main_scene="res://level.scn"
-icon="res://kinebody3d.png"
-
-[input]
-
-move_forward=[key(Up)]
-move_left=[key(Left)]
-move_right=[key(Right)]
-move_backwards=[key(Down)]
-jump=[key(Space)]
-
-[rasterizer]
-
-shadow_filter=3
diff --git a/demos/3d/kinematic_char/follow_camera.gd b/demos/3d/kinematic_char/follow_camera.gd
deleted file mode 100644
index 37a1402053..0000000000
--- a/demos/3d/kinematic_char/follow_camera.gd
+++ /dev/null
@@ -1,57 +0,0 @@
-
-extends Camera
-
-# Member variables
-var collision_exception = []
-export var min_distance = 0.5
-export var max_distance = 4.0
-export var angle_v_adjust = 0.0
-export var autoturn_ray_aperture = 25
-export var autoturn_speed = 50
-var max_height = 2.0
-var min_height = 0
-
-
-func _fixed_process(dt):
- var target = get_parent().get_global_transform().origin
- var pos = get_global_transform().origin
- var up = Vector3(0, 1, 0)
-
- var delta = pos - target
-
- # Regular delta follow
-
- # Check ranges
- if (delta.length() < min_distance):
- delta = delta.normalized()*min_distance
- elif (delta.length() > max_distance):
- delta = delta.normalized()*max_distance
-
- # Check upper and lower height
- if (delta.y > max_height):
- delta.y = max_height
- if (delta.y < min_height):
- delta.y = min_height
-
- pos = target + delta
-
- look_at_from_pos(pos, target, up)
-
- # Turn a little up or down
- var t = get_transform()
- t.basis = Matrix3(t.basis[0], deg2rad(angle_v_adjust))*t.basis
- set_transform(t)
-
-
-func _ready():
- # Find collision exceptions for ray
- var node = self
- while(node):
- if (node extends RigidBody):
- collision_exception.append(node.get_rid())
- break
- else:
- node = node.get_parent()
- set_fixed_process(true)
- # This detaches the camera transform from the parent spatial node
- set_as_toplevel(true)
diff --git a/demos/3d/kinematic_char/kinebody3d.png b/demos/3d/kinematic_char/kinebody3d.png
deleted file mode 100644
index 41f0edb246..0000000000
--- a/demos/3d/kinematic_char/kinebody3d.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/kinematic_char/level.scn b/demos/3d/kinematic_char/level.scn
deleted file mode 100644
index 0082f55f43..0000000000
--- a/demos/3d/kinematic_char/level.scn
+++ /dev/null
Binary files differ
diff --git a/demos/3d/kinematic_char/purple_wood.tex b/demos/3d/kinematic_char/purple_wood.tex
deleted file mode 100644
index cdf0f810f1..0000000000
--- a/demos/3d/kinematic_char/purple_wood.tex
+++ /dev/null
Binary files differ
diff --git a/demos/3d/kinematic_char/purplecube.scn b/demos/3d/kinematic_char/purplecube.scn
deleted file mode 100644
index e3ed1bf84b..0000000000
--- a/demos/3d/kinematic_char/purplecube.scn
+++ /dev/null
Binary files differ
diff --git a/demos/3d/kinematic_char/twood.tex b/demos/3d/kinematic_char/twood.tex
deleted file mode 100644
index 65c1bd043c..0000000000
--- a/demos/3d/kinematic_char/twood.tex
+++ /dev/null
Binary files differ
diff --git a/demos/3d/kinematic_char/white_wood.tex b/demos/3d/kinematic_char/white_wood.tex
deleted file mode 100644
index e003442e70..0000000000
--- a/demos/3d/kinematic_char/white_wood.tex
+++ /dev/null
Binary files differ
diff --git a/demos/3d/mousepick_test/engine.cfg b/demos/3d/mousepick_test/engine.cfg
deleted file mode 100644
index 093999a87a..0000000000
--- a/demos/3d/mousepick_test/engine.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-[application]
-
-name="3D Mouse Picking Test"
-main_scene="res://mousepick.scn"
-icon="res://icon.png"
diff --git a/demos/3d/mousepick_test/icon.png b/demos/3d/mousepick_test/icon.png
deleted file mode 100644
index 264f991e15..0000000000
--- a/demos/3d/mousepick_test/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/mousepick_test/mousepick.gd b/demos/3d/mousepick_test/mousepick.gd
deleted file mode 100644
index 674ec7ff6f..0000000000
--- a/demos/3d/mousepick_test/mousepick.gd
+++ /dev/null
@@ -1,24 +0,0 @@
-
-extends RigidBody
-
-# Member variables
-var gray_mat = FixedMaterial.new()
-var selected = false
-
-
-func _input_event(camera, event, pos, normal, shape):
- if (event.type==InputEvent.MOUSE_BUTTON and event.pressed):
- if (not selected):
- get_node("mesh").set_material_override(gray_mat)
- else:
- get_node("mesh").set_material_override(null)
-
- selected = not selected
-
-
-func _mouse_enter():
- get_node("mesh").set_scale(Vector3(1.1, 1.1, 1.1))
-
-
-func _mouse_exit():
- get_node("mesh").set_scale(Vector3(1, 1, 1))
diff --git a/demos/3d/mousepick_test/mousepick.scn b/demos/3d/mousepick_test/mousepick.scn
deleted file mode 100644
index 0b6c33c119..0000000000
--- a/demos/3d/mousepick_test/mousepick.scn
+++ /dev/null
Binary files differ
diff --git a/demos/3d/navmesh/engine.cfg b/demos/3d/navmesh/engine.cfg
deleted file mode 100644
index 30af6ce5a5..0000000000
--- a/demos/3d/navmesh/engine.cfg
+++ /dev/null
@@ -1,9 +0,0 @@
-[application]
-
-name="Navmesh Demo"
-main_scene="res://navmesh.scn"
-icon="res://icon.png"
-
-[rasterizer]
-
-shadow_filter=3
diff --git a/demos/3d/navmesh/icon.png b/demos/3d/navmesh/icon.png
deleted file mode 100644
index 51fef7b2df..0000000000
--- a/demos/3d/navmesh/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/navmesh/navmesh.gd b/demos/3d/navmesh/navmesh.gd
deleted file mode 100644
index 30b8cfb32a..0000000000
--- a/demos/3d/navmesh/navmesh.gd
+++ /dev/null
@@ -1,95 +0,0 @@
-
-extends Navigation
-
-# Member variables
-const SPEED = 4.0
-
-var camrot = 0.0
-
-var begin = Vector3()
-var end = Vector3()
-var m = FixedMaterial.new()
-
-var path = []
-var draw_path = false
-
-
-func _process(delta):
- if (path.size() > 1):
- var to_walk = delta*SPEED
- var to_watch = Vector3(0, 1, 0)
- while(to_walk > 0 and path.size() >= 2):
- var pfrom = path[path.size() - 1]
- var pto = path[path.size() - 2]
- to_watch = (pto - pfrom).normalized()
- var d = pfrom.distance_to(pto)
- if (d <= to_walk):
- path.remove(path.size() - 1)
- to_walk -= d
- else:
- path[path.size() - 1] = pfrom.linear_interpolate(pto, to_walk/d)
- to_walk = 0
-
- var atpos = path[path.size() - 1]
- var atdir = to_watch
- atdir.y = 0
-
- var t = Transform()
- t.origin = atpos
- t=t.looking_at(atpos + atdir, Vector3(0, 1, 0))
- get_node("robot_base").set_transform(t)
-
- if (path.size() < 2):
- path = []
- set_process(false)
- else:
- set_process(false)
-
-
-func _update_path():
- var p = get_simple_path(begin, end, true)
- path = Array(p) # Vector3array too complex to use, convert to regular array
- path.invert()
- set_process(true)
-
- if (draw_path):
- var im = get_node("draw")
- im.set_material_override(m)
- im.clear()
- im.begin(Mesh.PRIMITIVE_POINTS, null)
- im.add_vertex(begin)
- im.add_vertex(end)
- im.end()
- im.begin(Mesh.PRIMITIVE_LINE_STRIP, null)
- for x in p:
- im.add_vertex(x)
- im.end()
-
-
-func _input(event):
- if (event.type == InputEvent.MOUSE_BUTTON and event.button_index == BUTTON_LEFT and event.pressed):
- var from = get_node("cambase/Camera").project_ray_origin(event.pos)
- var to = from + get_node("cambase/Camera").project_ray_normal(event.pos)*100
- var p = get_closest_point_to_segment(from, to)
-
- begin = get_closest_point(get_node("robot_base").get_translation())
- end = p
-
- _update_path()
-
- if (event.type == InputEvent.MOUSE_MOTION):
- if (event.button_mask&BUTTON_MASK_MIDDLE):
- camrot += event.relative_x*0.005
- get_node("cambase").set_rotation(Vector3(0, camrot, 0))
- print("camrot ", camrot)
-
-
-func _ready():
- set_process_input(true)
- m.set_line_width(3)
- m.set_point_size(3)
- m.set_fixed_flag(FixedMaterial.FLAG_USE_POINT_SIZE, true)
- m.set_flag(Material.FLAG_UNSHADED, true)
- #begin = get_closest_point(get_node("start").get_translation())
- #end = get_closest_point(get_node("end").get_translation())
- #call_deferred("_update_path")
diff --git a/demos/3d/navmesh/navmesh.scn b/demos/3d/navmesh/navmesh.scn
deleted file mode 100644
index 33183781ad..0000000000
--- a/demos/3d/navmesh/navmesh.scn
+++ /dev/null
Binary files differ
diff --git a/demos/3d/navmesh/particle.png b/demos/3d/navmesh/particle.png
deleted file mode 100644
index 18851c8c9d..0000000000
--- a/demos/3d/navmesh/particle.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/platformer/bullet.gd b/demos/3d/platformer/bullet.gd
deleted file mode 100644
index 29219403bd..0000000000
--- a/demos/3d/platformer/bullet.gd
+++ /dev/null
@@ -1,5 +0,0 @@
-
-extends RigidBody
-
-# Member variables
-var disabled = false
diff --git a/demos/3d/platformer/bullet.scn b/demos/3d/platformer/bullet.scn
deleted file mode 100644
index 54ceb50488..0000000000
--- a/demos/3d/platformer/bullet.scn
+++ /dev/null
Binary files differ
diff --git a/demos/3d/platformer/coin.gd b/demos/3d/platformer/coin.gd
deleted file mode 100644
index bd2eea81e2..0000000000
--- a/demos/3d/platformer/coin.gd
+++ /dev/null
@@ -1,11 +0,0 @@
-
-extends Area
-
-# Member variables
-var taken = false
-
-
-func _on_coin_body_enter(body):
- if (not taken and body extends preload("res://player.gd")):
- get_node("anim").play("take")
- taken = true
diff --git a/demos/3d/platformer/coin.scn b/demos/3d/platformer/coin.scn
deleted file mode 100644
index 238150788b..0000000000
--- a/demos/3d/platformer/coin.scn
+++ /dev/null
Binary files differ
diff --git a/demos/3d/platformer/cutout.png b/demos/3d/platformer/cutout.png
deleted file mode 100644
index f88a25cbc2..0000000000
--- a/demos/3d/platformer/cutout.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/platformer/enemy.gd b/demos/3d/platformer/enemy.gd
deleted file mode 100644
index 55c79e4858..0000000000
--- a/demos/3d/platformer/enemy.gd
+++ /dev/null
@@ -1,78 +0,0 @@
-
-extends RigidBody
-
-# Member variables
-const STATE_WALKING = 0
-const STATE_DYING = 1
-
-var prev_advance = false
-var deaccel = 20.0
-var accel = 5
-var max_speed = 2
-var rot_dir = 4
-var rot_speed = 1
-
-var dying = false
-
-
-func _integrate_forces(state):
- var delta = state.get_step()
- var lv = state.get_linear_velocity()
- var g = state.get_total_gravity()
-
- lv += g*delta # Apply gravity
- var up = -g.normalized()
-
- if (dying):
- state.set_linear_velocity(lv)
- return
-
- for i in range(state.get_contact_count()):
- var cc = state.get_contact_collider_object(i)
- var dp = state.get_contact_local_normal(i)
-
- if (cc):
- if (cc extends preload("res://bullet.gd") and not cc.disabled):
- set_mode(MODE_RIGID)
- dying = true
- #lv = s.get_contact_local_normal(i)*400
- state.set_angular_velocity(-dp.cross(up).normalized()*33.0)
- get_node("AnimationPlayer").play("impact")
- get_node("AnimationPlayer").queue("explode")
- set_friction(1)
- cc.disabled = true
- get_node("sound").play("hit")
- return
-
- var col_floor = get_node("Armature/ray_floor").is_colliding()
- var col_wall = get_node("Armature/ray_wall").is_colliding()
-
- var advance = not col_wall and col_floor
-
- var dir = get_node("Armature").get_transform().basis[2].normalized()
- var deaccel_dir = dir
-
- if (advance):
- if (dir.dot(lv) < max_speed):
- lv += dir*accel*delta
- deaccel_dir = dir.cross(g).normalized()
- else:
- if (prev_advance):
- rot_dir = 1 # randf()*2.0 - 1.0
-
- dir = Matrix3(up, rot_dir*rot_speed*delta).xform(dir)
- get_node("Armature").set_transform(Transform().looking_at(-dir, up))
-
- var dspeed = deaccel_dir.dot(lv)
- dspeed -= deaccel*delta
- if (dspeed < 0):
- dspeed = 0
-
- lv = lv - deaccel_dir*deaccel_dir.dot(lv) + deaccel_dir*dspeed
-
- state.set_linear_velocity(lv)
- prev_advance = advance
-
-
-func _die():
- queue_free()
diff --git a/demos/3d/platformer/enemy.scn b/demos/3d/platformer/enemy.scn
deleted file mode 100644
index dd62692b7f..0000000000
--- a/demos/3d/platformer/enemy.scn
+++ /dev/null
Binary files differ
diff --git a/demos/3d/platformer/engine.cfg b/demos/3d/platformer/engine.cfg
deleted file mode 100644
index 84a7e8f597..0000000000
--- a/demos/3d/platformer/engine.cfg
+++ /dev/null
@@ -1,28 +0,0 @@
-[application]
-
-name="Platformer 3D"
-main_scene="res://stage.scn"
-icon="res://icon.png"
-
-[display]
-
-height=720
-stretch_2d=true
-
-[input]
-
-move_forward=[key(Up)]
-move_backwards=[key(Down)]
-move_left=[key(Left)]
-move_right=[key(Right)]
-jump=[key(Space)]
-shoot=[key(Z)]
-
-[rasterizer]
-
-max_shadow_buffer_size=1024
-framebuffer_shrink=1
-shadow_filter=3
-debug_shadow_maps=false
-fp16_framebuffer=true
-debug_hdr=false
diff --git a/demos/3d/platformer/follow_camera.gd b/demos/3d/platformer/follow_camera.gd
deleted file mode 100644
index d0d531b9a5..0000000000
--- a/demos/3d/platformer/follow_camera.gd
+++ /dev/null
@@ -1,80 +0,0 @@
-
-extends Camera
-
-# Member variables
-var collision_exception = []
-export var min_distance = 0.5
-export var max_distance = 4.0
-export var angle_v_adjust = 0.0
-export var autoturn_ray_aperture = 25
-export var autoturn_speed = 50
-var max_height = 2.0
-var min_height = 0
-
-func _fixed_process(dt):
- var target = get_parent().get_global_transform().origin
- var pos = get_global_transform().origin
- var up = Vector3(0, 1, 0)
-
- var delta = pos - target
-
- # Regular delta follow
-
- # Check ranges
- if (delta.length() < min_distance):
- delta = delta.normalized()*min_distance
- elif (delta.length() > max_distance):
- delta = delta.normalized()*max_distance
-
- # Check upper and lower height
- if (delta.y > max_height):
- delta.y = max_height
- if (delta.y < min_height):
- delta.y = min_height
-
- # Check autoturn
- var ds = PhysicsServer.space_get_direct_state(get_world().get_space())
-
- var col_left = ds.intersect_ray(target, target + Matrix3(up, deg2rad(autoturn_ray_aperture)).xform(delta), collision_exception)
- var col = ds.intersect_ray(target, target + delta, collision_exception)
- var col_right = ds.intersect_ray(target, target + Matrix3(up, deg2rad(-autoturn_ray_aperture)).xform(delta), collision_exception)
-
- if (!col.empty()):
- # If main ray was occluded, get camera closer, this is the worst case scenario
- delta = col.position - target
- elif (!col_left.empty() and col_right.empty()):
- # If only left ray is occluded, turn the camera around to the right
- delta = Matrix3(up, deg2rad(-dt*autoturn_speed)).xform(delta)
- elif (col_left.empty() and !col_right.empty()):
- # If only right ray is occluded, turn the camera around to the left
- delta = Matrix3(up, deg2rad(dt*autoturn_speed)).xform(delta)
- else:
- # Do nothing otherwise, left and right are occluded but center is not, so do not autoturn
- pass
-
- # Apply lookat
- if (delta == Vector3()):
- delta = (pos - target).normalized()*0.0001
-
- pos = target + delta
-
- look_at_from_pos(pos, target, up)
-
- # Turn a little up or down
- var t = get_transform()
- t.basis = Matrix3(t.basis[0], deg2rad(angle_v_adjust))*t.basis
- set_transform(t)
-
-
-func _ready():
- # Find collision exceptions for ray
- var node = self
- while(node):
- if (node extends RigidBody):
- collision_exception.append(node.get_rid())
- break
- else:
- node = node.get_parent()
- set_fixed_process(true)
- # This detaches the camera transform from the parent spatial node
- set_as_toplevel(true)
diff --git a/demos/3d/platformer/icon.png b/demos/3d/platformer/icon.png
deleted file mode 100644
index b2206e4592..0000000000
--- a/demos/3d/platformer/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/platformer/osb_down.png b/demos/3d/platformer/osb_down.png
deleted file mode 100644
index 9666832863..0000000000
--- a/demos/3d/platformer/osb_down.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/platformer/osb_fire.png b/demos/3d/platformer/osb_fire.png
deleted file mode 100644
index 6f914cfe49..0000000000
--- a/demos/3d/platformer/osb_fire.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/platformer/osb_jump.png b/demos/3d/platformer/osb_jump.png
deleted file mode 100644
index 72ba032daa..0000000000
--- a/demos/3d/platformer/osb_jump.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/platformer/osb_left.png b/demos/3d/platformer/osb_left.png
deleted file mode 100644
index b8e08c2ce7..0000000000
--- a/demos/3d/platformer/osb_left.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/platformer/osb_right.png b/demos/3d/platformer/osb_right.png
deleted file mode 100644
index 0e5cbb0d54..0000000000
--- a/demos/3d/platformer/osb_right.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/platformer/osb_up.png b/demos/3d/platformer/osb_up.png
deleted file mode 100644
index 5c229d30ee..0000000000
--- a/demos/3d/platformer/osb_up.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/platformer/player.gd b/demos/3d/platformer/player.gd
deleted file mode 100644
index 7471460538..0000000000
--- a/demos/3d/platformer/player.gd
+++ /dev/null
@@ -1,211 +0,0 @@
-
-extends RigidBody
-
-# Member variables
-const ANIM_FLOOR = 0
-const ANIM_AIR_UP = 1
-const ANIM_AIR_DOWN = 2
-
-const SHOOT_TIME = 1.5
-const SHOOT_SCALE = 2
-
-const CHAR_SCALE = Vector3(0.3, 0.3, 0.3)
-
-var facing_dir = Vector3(1, 0, 0)
-var movement_dir = Vector3()
-
-var jumping = false
-
-var turn_speed = 40
-var keep_jump_inertia = true
-var air_idle_deaccel = false
-var accel = 19.0
-var deaccel = 14.0
-var sharp_turn_threshold = 140
-
-var max_speed = 3.1
-var on_floor = false
-
-var prev_shoot = false
-
-var last_floor_velocity = Vector3()
-
-var shoot_blend = 0
-
-
-func adjust_facing(p_facing, p_target, p_step, p_adjust_rate, current_gn):
- var n = p_target # Normal
- var t = n.cross(current_gn).normalized()
-
- var x = n.dot(p_facing)
- var y = t.dot(p_facing)
-
- var ang = atan2(y,x)
-
- if (abs(ang) < 0.001): # Too small
- return p_facing
-
- var s = sign(ang)
- ang = ang*s
- var turn = ang*p_adjust_rate*p_step
- var a
- if (ang < turn):
- a = ang
- else:
- a = turn
- ang = (ang - a)*s
-
- return (n*cos(ang) + t*sin(ang))*p_facing.length()
-
-
-func _integrate_forces(state):
- var lv = state.get_linear_velocity() # Linear velocity
- var g = state.get_total_gravity()
- var delta = state.get_step()
-# var d = 1.0 - delta*state.get_total_density()
-# if (d < 0):
-# d = 0
- lv += g*delta # Apply gravity
-
- var anim = ANIM_FLOOR
-
- var up = -g.normalized() # (up is against gravity)
- var vv = up.dot(lv) # Vertical velocity
- var hv = lv - up*vv # Horizontal velocity
-
- var hdir = hv.normalized() # Horizontal direction
- var hspeed = hv.length() # Horizontal speed
-
- var floor_velocity
- var onfloor = false
-
- if (state.get_contact_count() == 0):
- floor_velocity = last_floor_velocity
- else:
- for i in range(state.get_contact_count()):
- if (state.get_contact_local_shape(i) != 1):
- continue
-
- onfloor = true
- floor_velocity = state.get_contact_collider_velocity_at_pos(i)
- break
-
- var dir = Vector3() # Where does the player intend to walk to
- var cam_xform = get_node("target/camera").get_global_transform()
-
- if (Input.is_action_pressed("move_forward")):
- dir += -cam_xform.basis[2]
- if (Input.is_action_pressed("move_backwards")):
- dir += cam_xform.basis[2]
- if (Input.is_action_pressed("move_left")):
- dir += -cam_xform.basis[0]
- if (Input.is_action_pressed("move_right")):
- dir += cam_xform.basis[0]
-
- var jump_attempt = Input.is_action_pressed("jump")
- var shoot_attempt = Input.is_action_pressed("shoot")
-
- var target_dir = (dir - up*dir.dot(up)).normalized()
-
- if (onfloor):
- var sharp_turn = hspeed > 0.1 and rad2deg(acos(target_dir.dot(hdir))) > sharp_turn_threshold
-
- if (dir.length() > 0.1 and !sharp_turn):
- if (hspeed > 0.001):
- #linear_dir = linear_h_velocity/linear_vel
- #if (linear_vel > brake_velocity_limit and linear_dir.dot(ctarget_dir) < -cos(Math::deg2rad(brake_angular_limit)))
- # brake = true
- #else
- hdir = adjust_facing(hdir, target_dir, delta, 1.0/hspeed*turn_speed, up)
- facing_dir = hdir
- else:
- hdir = target_dir
-
- if (hspeed < max_speed):
- hspeed += accel*delta
- else:
- hspeed -= deaccel*delta
- if (hspeed < 0):
- hspeed = 0
-
- hv = hdir*hspeed
-
- var mesh_xform = get_node("Armature").get_transform()
- var facing_mesh = -mesh_xform.basis[0].normalized()
- facing_mesh = (facing_mesh - up*facing_mesh.dot(up)).normalized()
- facing_mesh = adjust_facing(facing_mesh, target_dir, delta, 1.0/hspeed*turn_speed, up)
- var m3 = Matrix3(-facing_mesh, up, -facing_mesh.cross(up).normalized()).scaled(CHAR_SCALE)
-
- get_node("Armature").set_transform(Transform(m3, mesh_xform.origin))
-
- if (not jumping and jump_attempt):
- vv = 7.0
- jumping = true
- get_node("sfx").play("jump")
- else:
- if (vv > 0):
- anim = ANIM_AIR_UP
- else:
- anim = ANIM_AIR_DOWN
-
- var hs
- if (dir.length() > 0.1):
- hv += target_dir*(accel*0.2)*delta
- if (hv.length() > max_speed):
- hv = hv.normalized()*max_speed
- else:
- if (air_idle_deaccel):
- hspeed = hspeed - (deaccel*0.2)*delta
- if (hspeed < 0):
- hspeed = 0
-
- hv = hdir*hspeed
-
- if (jumping and vv < 0):
- jumping = false
-
- lv = hv + up*vv
-
- if (onfloor):
- movement_dir = lv
- #lv += floor_velocity
- last_floor_velocity = floor_velocity
- else:
- if (on_floor):
- #if (keep_jump_inertia):
- # lv += last_floor_velocity
- pass
-
- last_floor_velocity = Vector3()
- movement_dir = lv
-
- on_floor = onfloor
-
- state.set_linear_velocity(lv)
-
- if (shoot_blend > 0):
- shoot_blend -= delta*SHOOT_SCALE
- if (shoot_blend < 0):
- shoot_blend = 0
-
- if (shoot_attempt and not prev_shoot):
- shoot_blend = SHOOT_TIME
- var bullet = preload("res://bullet.scn").instance()
- bullet.set_transform(get_node("Armature/bullet").get_global_transform().orthonormalized())
- get_parent().add_child(bullet)
- bullet.set_linear_velocity(get_node("Armature/bullet").get_global_transform().basis[2].normalized()*20)
- PS.body_add_collision_exception(bullet.get_rid(), get_rid()) # Add it to bullet
- get_node("sfx").play("shoot")
-
- prev_shoot = shoot_attempt
-
- if (onfloor):
- get_node("AnimationTreePlayer").blend2_node_set_amount("walk", hspeed/max_speed)
-
- get_node("AnimationTreePlayer").transition_node_set_current("state", anim)
- get_node("AnimationTreePlayer").blend2_node_set_amount("gun", min(shoot_blend, 1.0))
-# state.set_angular_velocity(Vector3())
-
-
-func _ready():
- get_node("AnimationTreePlayer").set_active(true)
diff --git a/demos/3d/platformer/player.scn b/demos/3d/platformer/player.scn
deleted file mode 100644
index 3b24da94ec..0000000000
--- a/demos/3d/platformer/player.scn
+++ /dev/null
Binary files differ
diff --git a/demos/3d/platformer/robotrigged.scn b/demos/3d/platformer/robotrigged.scn
deleted file mode 100644
index 68af0cfe47..0000000000
--- a/demos/3d/platformer/robotrigged.scn
+++ /dev/null
Binary files differ
diff --git a/demos/3d/platformer/sb.cube b/demos/3d/platformer/sb.cube
deleted file mode 100644
index c5e4acbcd4..0000000000
--- a/demos/3d/platformer/sb.cube
+++ /dev/null
@@ -1,7 +0,0 @@
-sb_left.png
-sb_right.png
-sb_bottom.png
-sb_top.png
-sb_back.png
-sb_front.png
-
diff --git a/demos/3d/platformer/sb_back.png b/demos/3d/platformer/sb_back.png
deleted file mode 100644
index 85ba234654..0000000000
--- a/demos/3d/platformer/sb_back.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/platformer/sb_bottom.png b/demos/3d/platformer/sb_bottom.png
deleted file mode 100644
index 46cb8fd765..0000000000
--- a/demos/3d/platformer/sb_bottom.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/platformer/sb_front.png b/demos/3d/platformer/sb_front.png
deleted file mode 100644
index 0ddaede187..0000000000
--- a/demos/3d/platformer/sb_front.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/platformer/sb_left.png b/demos/3d/platformer/sb_left.png
deleted file mode 100644
index a548d7ef13..0000000000
--- a/demos/3d/platformer/sb_left.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/platformer/sb_right.png b/demos/3d/platformer/sb_right.png
deleted file mode 100644
index 36ac03db3a..0000000000
--- a/demos/3d/platformer/sb_right.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/platformer/sb_top.png b/demos/3d/platformer/sb_top.png
deleted file mode 100644
index af7274447e..0000000000
--- a/demos/3d/platformer/sb_top.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/platformer/shine.png b/demos/3d/platformer/shine.png
deleted file mode 100644
index 5c722219ec..0000000000
--- a/demos/3d/platformer/shine.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/platformer/sound_coin.wav b/demos/3d/platformer/sound_coin.wav
deleted file mode 100644
index e78579f461..0000000000
--- a/demos/3d/platformer/sound_coin.wav
+++ /dev/null
Binary files differ
diff --git a/demos/3d/platformer/sound_explode.wav b/demos/3d/platformer/sound_explode.wav
deleted file mode 100644
index 229c85399c..0000000000
--- a/demos/3d/platformer/sound_explode.wav
+++ /dev/null
Binary files differ
diff --git a/demos/3d/platformer/sound_hit.wav b/demos/3d/platformer/sound_hit.wav
deleted file mode 100644
index 4fb3b13812..0000000000
--- a/demos/3d/platformer/sound_hit.wav
+++ /dev/null
Binary files differ
diff --git a/demos/3d/platformer/sound_jump.wav b/demos/3d/platformer/sound_jump.wav
deleted file mode 100644
index e9942e65e6..0000000000
--- a/demos/3d/platformer/sound_jump.wav
+++ /dev/null
Binary files differ
diff --git a/demos/3d/platformer/sound_shoot.wav b/demos/3d/platformer/sound_shoot.wav
deleted file mode 100644
index ad74f328cb..0000000000
--- a/demos/3d/platformer/sound_shoot.wav
+++ /dev/null
Binary files differ
diff --git a/demos/3d/platformer/stage.scn b/demos/3d/platformer/stage.scn
deleted file mode 100644
index 7eafda5888..0000000000
--- a/demos/3d/platformer/stage.scn
+++ /dev/null
Binary files differ
diff --git a/demos/3d/platformer/texture.tex b/demos/3d/platformer/texture.tex
deleted file mode 100644
index d9181b7ffa..0000000000
--- a/demos/3d/platformer/texture.tex
+++ /dev/null
Binary files differ
diff --git a/demos/3d/platformer/tiles.res b/demos/3d/platformer/tiles.res
deleted file mode 100644
index d4fb779ff1..0000000000
--- a/demos/3d/platformer/tiles.res
+++ /dev/null
Binary files differ
diff --git a/demos/3d/platformer/tiles.scn b/demos/3d/platformer/tiles.scn
deleted file mode 100644
index 4c3442dbeb..0000000000
--- a/demos/3d/platformer/tiles.scn
+++ /dev/null
Binary files differ
diff --git a/demos/3d/platformer/tiles.xcf b/demos/3d/platformer/tiles.xcf
deleted file mode 100644
index 1cf5197598..0000000000
--- a/demos/3d/platformer/tiles.xcf
+++ /dev/null
Binary files differ
diff --git a/demos/3d/sat_test/box.scn b/demos/3d/sat_test/box.scn
deleted file mode 100644
index f9c15839a2..0000000000
--- a/demos/3d/sat_test/box.scn
+++ /dev/null
Binary files differ
diff --git a/demos/3d/sat_test/capsule.scn b/demos/3d/sat_test/capsule.scn
deleted file mode 100644
index db8ff43116..0000000000
--- a/demos/3d/sat_test/capsule.scn
+++ /dev/null
Binary files differ
diff --git a/demos/3d/sat_test/convex.scn b/demos/3d/sat_test/convex.scn
deleted file mode 100644
index 93e05338eb..0000000000
--- a/demos/3d/sat_test/convex.scn
+++ /dev/null
Binary files differ
diff --git a/demos/3d/sat_test/engine.cfg b/demos/3d/sat_test/engine.cfg
deleted file mode 100644
index e21c9b1eff..0000000000
--- a/demos/3d/sat_test/engine.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-[application]
-
-name="SAT Collision Test"
-main_scene="res://sat_test.scn"
-icon="res://icon.png"
diff --git a/demos/3d/sat_test/icon.png b/demos/3d/sat_test/icon.png
deleted file mode 100644
index 194456e10f..0000000000
--- a/demos/3d/sat_test/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/sat_test/sat_test.scn b/demos/3d/sat_test/sat_test.scn
deleted file mode 100644
index 0b25431202..0000000000
--- a/demos/3d/sat_test/sat_test.scn
+++ /dev/null
Binary files differ
diff --git a/demos/3d/sat_test/shapes.dae b/demos/3d/sat_test/shapes.dae
deleted file mode 100644
index 534dd260c9..0000000000
--- a/demos/3d/sat_test/shapes.dae
+++ /dev/null
@@ -1,368 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1">
-<asset>
- <contributor>
- <author> Anonymous </author>
- <authoring_tool> Collada Exporter for Blender 2.6+, by Juan Linietsky (juan@codenix.com) </authoring_tool>
- </contributor>
- <created>2013-10-09T16:21:48Z </created>
- <modified>2013-10-09T16:21:48Z</modified>
- <unit meter="1.0" name="meter"/>
- <up_axis>Z_UP</up_axis>
-</asset>
-<library_images>
-</library_images>
-<library_effects>
- <effect id="id-fx-2" name="Material.004-fx">
- <profile_COMMON>
- <technique sid="common">
- <blinn>
- <emission>
- <color> 0.0 0.0 0.0 </color>
- </emission>
- <ambient>
- <color> 0.0 0.0 0.0 </color>
- </ambient>
- <diffuse>
- <color> 0.6400000190734865 0.6282253358993728 0.0809526872776849 </color>
- </diffuse>
- <specular>
- <color> 0.5 0.5 0.5 </color>
- </specular>
- <shininess>
- <float>50</float>
- </shininess>
- <reflective>
- <color> 1.0 1.0 1.0 </color>
- </reflective>
- <index_of_refraction>4.0</index_of_refraction>
- </blinn>
- <extra>
- <technique profile="FCOLLADA">
- </technique>
- </extra>
- </technique>
- </profile_COMMON>
- </effect>
- <effect id="id-fx-6" name="Material.003-fx">
- <profile_COMMON>
- <technique sid="common">
- <blinn>
- <emission>
- <color> 0.0 0.0 0.0 </color>
- </emission>
- <ambient>
- <color> 0.0 0.0 0.0 </color>
- </ambient>
- <diffuse>
- <color> 0.09727730299945625 0.49129052894250336 0.6400000190734865 </color>
- </diffuse>
- <specular>
- <color> 0.5 0.5 0.5 </color>
- </specular>
- <shininess>
- <float>50</float>
- </shininess>
- <reflective>
- <color> 1.0 1.0 1.0 </color>
- </reflective>
- <index_of_refraction>4.0</index_of_refraction>
- </blinn>
- <extra>
- <technique profile="FCOLLADA">
- </technique>
- </extra>
- </technique>
- </profile_COMMON>
- </effect>
- <effect id="id-fx-10" name="Material.002-fx">
- <profile_COMMON>
- <technique sid="common">
- <blinn>
- <emission>
- <color> 0.0 0.0 0.0 </color>
- </emission>
- <ambient>
- <color> 0.0 0.0 0.0 </color>
- </ambient>
- <diffuse>
- <color> 0.4359445636860215 0.13393665751720452 0.6400000190734865 </color>
- </diffuse>
- <specular>
- <color> 0.5 0.5 0.5 </color>
- </specular>
- <shininess>
- <float>50</float>
- </shininess>
- <reflective>
- <color> 1.0 1.0 1.0 </color>
- </reflective>
- <index_of_refraction>4.0</index_of_refraction>
- </blinn>
- <extra>
- <technique profile="FCOLLADA">
- </technique>
- </extra>
- </technique>
- </profile_COMMON>
- </effect>
- <effect id="id-fx-14" name="Material.001-fx">
- <profile_COMMON>
- <technique sid="common">
- <blinn>
- <emission>
- <color> 0.0 0.0 0.0 </color>
- </emission>
- <ambient>
- <color> 0.0 0.0 0.0 </color>
- </ambient>
- <diffuse>
- <color> 0.6400000190734865 0.09341678758586625 0.08526771791678245 </color>
- </diffuse>
- <specular>
- <color> 0.5 0.5 0.5 </color>
- </specular>
- <shininess>
- <float>50</float>
- </shininess>
- <reflective>
- <color> 1.0 1.0 1.0 </color>
- </reflective>
- <index_of_refraction>4.0</index_of_refraction>
- </blinn>
- <extra>
- <technique profile="FCOLLADA">
- </technique>
- </extra>
- </technique>
- </profile_COMMON>
- </effect>
-</library_effects>
-<library_materials>
- <material id="id-material-3" name="Material.004">
- <instance_effect url="#id-fx-2"/>
- </material>
- <material id="id-material-7" name="Material.003">
- <instance_effect url="#id-fx-6"/>
- </material>
- <material id="id-material-11" name="Material.002">
- <instance_effect url="#id-fx-10"/>
- </material>
- <material id="id-material-15" name="Material.001">
- <instance_effect url="#id-fx-14"/>
- </material>
-</library_materials>
-<library_geometries>
- <geometry id="id-mesh-4" name="Sphere.001">
- <mesh>
- <source id="id-mesh-4-positions">
- <float_array id="id-mesh-4-positions-array" count="1734"> -0.45056793093681335 -9.071602136145884e-09 1.1910476684570312 -0.3540089428424835 -9.071602136145884e-09 1.2702915668487549 -0.3472067713737488 0.06906376779079437 1.2702915668487549 -0.44191038608551025 0.08790150284767151 1.1910476684570312 -0.5298119187355042 -9.071602136145884e-09 1.0944886207580566 -0.5196316838264465 0.10336123406887054 1.0944886207580566 -0.5886954069137573 -9.071602136145884e-09 0.9843252897262573 -0.5773837566375732 0.11484882980585098 0.9843252897262573 -0.6249557137489319 -9.071602136145884e-09 0.8647910356521606 -0.6129473447799683 0.12192287296056747 0.8647910356521606 -0.637199342250824 -9.071602136145884e-09 0.7404797077178955 -0.6249557733535767 0.12431149184703827 0.7404797077178955 -0.24384558200836182 -9.071602136145884e-09 1.3291751146316528 -0.12431135028600693 -9.071602136145884e-09 1.3654354810714722 -0.12192273885011673 0.024251995608210564 1.3654354810714722 -0.23916013538837433 0.04757196456193924 1.3291751146316528 -0.5438835620880127 0.22528406977653503 0.9843252897262573 -0.5773836970329285 0.23916031420230865 0.8647910356521606 -0.5886954069137573 0.24384576082229614 0.7404797077178955 -0.11484867334365845 0.047572001814842224 1.3654354810714722 -0.2252839058637619 0.09331578016281128 1.3291751146316528 -0.32706156373023987 0.13547345995903015 1.2702915668487549 -0.4162704348564148 0.17242500185966492 1.1910476684570312 -0.4894823133945465 0.2027503401041031 1.0944886207580566 -0.2943475842475891 0.19667698442935944 1.2702915668487549 -0.3746334910392761 0.2503223121166229 1.1910476684570312 -0.44052237272262573 0.2943478524684906 1.0944886207580566 -0.48948225378990173 0.3270617723464966 0.9843252897262573 -0.519631564617157 0.3472069203853607 0.8647910356521606 -0.5298118591308594 0.35400915145874023 0.7404797077178955 -0.10336104035377502 0.06906384229660034 1.3654354810714722 -0.202750101685524 0.13547350466251373 1.3291751146316528 -0.4419102072715759 0.44191059470176697 0.8647910356521606 -0.4505678713321686 0.45056816935539246 0.7404797077178955 -0.0879012942314148 0.08790160715579987 1.3654354810714722 -0.17242473363876343 0.1724250763654709 1.3291751146316528 -0.25032198429107666 0.2503223121166229 1.2702915668487549 -0.3185994625091553 0.3185998201370239 1.1910476684570312 -0.37463340163230896 0.3746337294578552 1.0944886207580566 -0.41627037525177 0.4162706732749939 0.9843252897262573 -0.29434746503829956 0.44052261114120483 1.0944886207580566 -0.3270614743232727 0.4894825220108032 0.9843252897262573 -0.3472065329551697 0.5196318626403809 0.8647910356521606 -0.35400885343551636 0.5298121571540833 0.7404797077178955 -0.06906352192163467 0.1033613458275795 1.3654354810714722 -0.13547316193580627 0.20275041460990906 1.3291751146316528 -0.19667664170265198 0.2943479120731354 1.2702915668487549 -0.2503219246864319 0.3746337592601776 1.1910476684570312 -0.1354731321334839 0.32706183195114136 1.2702915668487549 -0.17242461442947388 0.4162707030773163 1.1910476684570312 -0.20274993777275085 0.48948246240615845 1.0944886207580566 -0.22528372704982758 0.5438838601112366 0.9843252897262573 -0.23915985226631165 0.5773839354515076 0.8647910356521606 -0.24384541809558868 0.5886956453323364 0.7404797077178955 -0.04757167771458626 0.11484897136688232 1.3654354810714722 -0.09331542998552322 0.2252841740846634 1.3291751146316528 -0.12192244082689285 0.6129475235939026 0.8647910356521606 -0.12431115657091141 0.6249560117721558 0.7404797077178955 -0.024251675233244896 0.12192301452159882 1.3654354810714722 -0.04757162556052208 0.23916038870811462 1.3291751146316528 -0.06906343251466751 0.3472069799900055 1.2702915668487549 -0.08790113776922226 0.44191062450408936 1.1910476684570312 -0.10336083918809891 0.5196318626403809 1.0944886207580566 -0.11484848707914352 0.5773839950561523 0.9843252897262573 3.7092044635755883e-07 0.5298119783401489 1.0944886207580566 3.424354133585439e-07 0.5886955857276917 0.9843252897262573 4.0890051877795486e-07 0.6249558329582214 0.8647910356521606 3.234453913592006e-07 0.6371995210647583 0.7404797077178955 3.258191441091185e-07 0.12431161850690842 1.3654354810714722 3.3768790785870806e-07 0.24384579062461853 1.3291751146316528 3.3768790785870806e-07 0.3540091812610626 1.2702915668487549 3.614254353578872e-07 0.45056813955307007 1.1910476684570312 0.06906411051750183 0.3472069799900055 1.2702915668487549 0.08790184557437897 0.44191059470176697 1.1910476684570312 0.10336155444383621 0.5196317434310913 1.0944886207580566 0.11484915018081665 0.5773839354515076 0.9843252897262573 0.12192323803901672 0.6129474639892578 0.8647910356521606 0.12431178987026215 0.6249558925628662 0.7404797077178955 0.02425231598317623 0.12192300707101822 1.3654354810714722 0.0475722961127758 0.23916037380695343 1.3291751146316528 0.23916064202785492 0.5773838758468628 0.8647910356521606 0.24384602904319763 0.5886955857276917 0.7404797077178955 0.04757232591509819 0.11484894156455994 1.3654354810714722 0.09331607818603516 0.22528411448001862 1.3291751146316528 0.1354738026857376 0.32706180214881897 1.2702915668487549 0.17242532968521118 0.4162706434726715 1.1910476684570312 0.20275062322616577 0.4894823431968689 1.0944886207580566 0.2252843976020813 0.5438838005065918 0.9843252897262573 0.2943480908870697 0.4405224621295929 1.0944886207580566 0.32706207036972046 0.48948240280151367 0.9843252897262573 0.3472072184085846 0.5196316838264465 0.8647910356521606 0.35400938987731934 0.5298119783401489 0.7404797077178955 0.06906415522098541 0.10336130857467651 1.3654354810714722 0.1354738026857376 0.2027503401041031 1.3291751146316528 0.1966773122549057 0.2943478524684906 1.2702915668487549 0.2503226101398468 0.37463366985321045 1.1910476684570312 0.17242534458637238 0.17242495715618134 1.3291751146316528 0.2503226399421692 0.25032225251197815 1.2702915668487549 0.3186001181602478 0.3185997009277344 1.1910476684570312 0.37463393807411194 0.3746335208415985 1.0944886207580566 0.4162709712982178 0.41627055406570435 0.9843252897262573 0.44191083312034607 0.44191038608551025 0.8647910356521606 0.45056837797164917 0.45056799054145813 0.7404797077178955 0.08790189027786255 0.08790156245231628 1.3654354810714722 0.4894828200340271 0.32706165313720703 0.9843252897262573 0.5196320414543152 0.3472067415714264 0.8647910356521606 0.5298123359680176 0.3540089428424835 0.7404797077178955 0.10336162149906158 0.06906379014253616 1.3654354810714722 0.20275068283081055 0.13547341525554657 1.3291751146316528 0.29434821009635925 0.19667690992355347 1.2702915668487549 0.3746339976787567 0.250322163105011 1.1910476684570312 0.44052284955978394 0.2943476736545563 1.0944886207580566 0.416270911693573 0.17242488265037537 1.1910476684570312 0.48948270082473755 0.20275016129016876 1.0944886207580566 0.5438840985298157 0.22528396546840668 0.9843252897262573 0.5773841738700867 0.23916012048721313 0.8647910356521606 0.5886958241462708 0.24384558200836182 0.7404797077178955 0.11484923958778381 0.047571953386068344 1.3654354810714722 0.22528444230556488 0.09331569820642471 1.3291751146316528 0.32706212997436523 0.13547340035438538 1.2702915668487549 0.2391606569290161 0.047571901232004166 1.3291751146316528 0.34720727801322937 0.0690637156367302 1.2702915668487549 0.44191083312034607 0.08790142834186554 1.1910476684570312 0.5196320414543152 0.1033611074090004 1.0944886207580566 0.5773842334747314 0.11484871804714203 0.9843252897262573 0.6129477024078369 0.12192273139953613 0.8647910356521606 0.6249560713768005 0.12431137263774872 0.7404797077178955 0.12192327529191971 0.02425196021795273 1.3654354810714722 0.5886958837509155 -1.0402172279100341e-07 0.9843252897262573 0.6249560713768005 -1.0402172279100341e-07 0.8647910356521606 0.6371996402740479 -7.553668268656111e-08 0.7404797077178955 0.12431187927722931 -3.0435380438120774e-08 1.3654354810714722 0.24384605884552002 -4.2304144187710335e-08 1.3291751146316528 0.3540094494819641 -5.1799155187381984e-08 1.2702915668487549 0.4505683481693268 -4.705164968754616e-08 1.1910476684570312 0.529812216758728 -7.553668268656111e-08 1.0944886207580566 0.4419108033180237 -0.0879015102982521 1.1910476684570312 0.5196319818496704 -0.10336124897003174 1.0944886207580566 0.5773842334747314 -0.11484890431165695 0.9843252897262573 0.6129477024078369 -0.12192291766405106 0.8647910356521606 0.6249560117721558 -0.12431149929761887 0.7404797077178955 0.12192326784133911 -0.024252014234662056 1.3654354810714722 0.23916064202785492 -0.04757199063897133 1.3291751146316528 0.347207248210907 -0.06906381249427795 1.2702915668487549 0.2252843976020813 -0.09331576526165009 1.3291751146316528 0.32706207036972046 -0.13547348976135254 1.2702915668487549 0.4162708520889282 -0.17242498695850372 1.1910476684570312 0.4894826412200928 -0.2027503103017807 1.0944886207580566 0.5438840389251709 -0.2252841293811798 0.9843252897262573 0.5773840546607971 -0.23916031420230865 0.8647910356521606 0.5886956453323364 -0.24384570121765137 0.7404797077178955 0.11484920978546143 -0.04757201671600342 1.3654354810714722 0.48948270082473755 -0.32706183195114136 0.9843252897262573 0.5196319222450256 -0.3472069501876831 0.8647910356521606 0.5298120975494385 -0.35400906205177307 0.7404797077178955 0.1033615842461586 -0.06906383484601974 1.3654354810714722 0.20275062322616577 -0.13547347486019135 1.3291751146316528 0.2943481206893921 -0.19667698442935944 1.2702915668487549 0.37463387846946716 -0.25032225251197815 1.1910476684570312 0.4405227303504944 -0.29434776306152344 1.0944886207580566 0.31859999895095825 -0.31859973073005676 1.1910476684570312 0.3746338188648224 -0.3746336102485657 1.0944886207580566 0.4162708520889282 -0.4162707030773163 0.9843252897262573 0.44191065430641174 -0.4419105350971222 0.8647910356521606 0.45056816935539246 -0.4505680203437805 0.7404797077178955 0.08790183812379837 -0.08790157735347748 1.3654354810714722 0.1724252700805664 -0.1724250167608261 1.3291751146316528 0.25032252073287964 -0.2503223121166229 1.2702915668487549 0.06906409561634064 -0.10336130112409592 1.3654354810714722 0.13547372817993164 -0.20275035500526428 1.3291751146316528 0.19667717814445496 -0.2943478524684906 1.2702915668487549 0.2503224313259125 -0.37463366985321045 1.1910476684570312 0.29434797167778015 -0.44052252173423767 1.0944886207580566 0.3270619511604309 -0.4894825220108032 0.9843252897262573 0.3472069799900055 -0.5196317434310913 0.8647910356521606 0.3540091812610626 -0.5298118591308594 0.7404797077178955 0.20275047421455383 -0.4894823729991913 1.0944886207580566 0.22528424859046936 -0.5438838005065918 0.9843252897262573 0.23916037380695343 -0.577383816242218 0.8647910356521606 0.24384582042694092 -0.5886953473091125 0.7404797077178955 0.047572266310453415 -0.11484891176223755 1.3654354810714722 0.09331599622964859 -0.22528411448001862 1.3291751146316528 0.13547366857528687 -0.32706180214881897 1.2702915668487549 0.17242518067359924 -0.4162706136703491 1.1910476684570312 0.06906399875879288 -0.3472069501876831 1.2702915668487549 0.08790171146392822 -0.4419105350971222 1.1910476684570312 0.10336141288280487 -0.5196316838264465 1.0944886207580566 0.11484900116920471 -0.5773838758468628 0.9843252897262573 0.12192297726869583 -0.6129473447799683 0.8647910356521606 0.12431161850690842 -0.6249556541442871 0.7404797077178955 0.024252261966466904 -0.12192294746637344 1.3654354810714722 0.047572217881679535 -0.23916032910346985 1.3291751146316528 1.7152520115359948e-07 -0.6249556541442871 0.8647910356521606 2.095052593631408e-07 -0.6371992230415344 0.7404797077178955 2.830915946105961e-07 -0.12431153655052185 1.3654354810714722 2.664753253611707e-07 -0.24384574592113495 1.3291751146316528 2.522328088616632e-07 -0.35400909185409546 1.2702915668487549 2.474853033618274e-07 -0.4505680501461029 1.1910476684570312 2.474853033618274e-07 -0.5298117995262146 1.0944886207580566 2.0001024836346915e-07 -0.5886954665184021 0.9843252897262573 -0.10336092114448547 -0.5196316242218018 1.0944886207580566 -0.11484859883785248 -0.577383816242218 0.9843252897262573 -0.12192263454198837 -0.6129472255706787 0.8647910356521606 -0.12431119382381439 -0.6249555349349976 0.7404797077178955 -0.024251695722341537 -0.12192291766405106 1.3654354810714722 -0.04757167026400566 -0.23916031420230865 1.3291751146316528 -0.06906349211931229 -0.34720689058303833 1.2702915668487549 -0.08790121227502823 -0.4419105052947998 1.1910476684570312 -0.13547314703464508 -0.3270617127418518 1.2702915668487549 -0.17242465913295746 -0.41627055406570435 1.1910476684570312 -0.20274993777275085 -0.4894822835922241 1.0944886207580566 -0.22528380155563354 -0.5438836216926575 0.9843252897262573 -0.2391599714756012 -0.5773836374282837 0.8647910356521606 -0.2438453584909439 -0.5886951684951782 0.7404797077178955 -0.04757167771458626 -0.11484886705875397 1.3654354810714722 -0.09331545233726501 -0.22528406977653503 1.3291751146316528 -0.3472065329551697 -0.5196315050125122 0.8647910356521606 -0.35400867462158203 -0.5298116207122803 0.7404797077178955 -0.06906349956989288 -0.10336124151945114 1.3654354810714722 -0.13547314703464508 -0.2027503103017807 1.3291751146316528 -0.19667662680149078 -0.29434773325920105 1.2702915668487549 -0.2503219246864319 -0.3746335804462433 1.1910476684570312 -0.2943473756313324 -0.4405224025249481 1.0944886207580566 -0.3270614743232727 -0.4894823133945465 0.9843252897262573 -0.37463322281837463 -0.37463346123695374 1.0944886207580566 -0.41627031564712524 -0.4162704646587372 0.9843252897262573 -0.44191011786460876 -0.4419102668762207 0.8647910356521606 -0.4505676031112671 -0.45056769251823425 0.7404797077178955 -0.08790123462677002 -0.08790150284767151 1.3654354810714722 -0.17242467403411865 -0.17242494225502014 1.3291751146316528 -0.2503219246864319 -0.250322163105011 1.2702915668487549 -0.3185994029045105 -0.3185996413230896 1.1910476684570312 -0.29434746503829956 -0.1966768354177475 1.2702915668487549 -0.3746333420276642 -0.2503221035003662 1.1910476684570312 -0.44052210450172424 -0.2943476140499115 1.0944886207580566 -0.4894821345806122 -0.32706156373023987 0.9843252897262573 -0.5196313261985779 -0.34720662236213684 0.8647910356521606 -0.529811441898346 -0.3540087044239044 0.7404797077178955 -0.10336095839738846 -0.06906376034021378 1.3654354810714722 -0.20275001227855682 -0.13547340035438538 1.3291751146316528 -0.5773833990097046 -0.23916003108024597 0.8647910356521606 -0.5886949300765991 -0.2438453584909439 0.7404797077178955 -0.1148485615849495 -0.04757193848490715 1.3654354810714722 -0.22528377175331116 -0.09331569075584412 1.3291751146316528 -0.32706141471862793 -0.1354733407497406 1.2702915668487549 -0.41627028584480286 -0.17242483794689178 1.1910476684570312 -0.48948192596435547 -0.20275011658668518 1.0944886207580566 -0.5438834428787231 -0.22528384625911713 0.9843252897262573 -0.44191017746925354 -0.08790136873722076 1.1910476684570312 -0.5196312665939331 -0.10336107760667801 1.0944886207580566 -0.5773835778236389 -0.11484860628843307 0.9843252897262573 -0.6129469275474548 -0.12192264944314957 0.8647910356521606 -0.6249551773071289 -0.1243111863732338 0.7404797077178955 -0.12192258983850479 -0.024251945316791534 1.3654354810714722 -0.2391599863767624 -0.04757191613316536 1.3291751146316528 -0.3472065329551697 -0.06906367093324661 1.2702915668487549 2.3449536001862725e-07 -2.0089281349555677e-07 1.3776791095733643 -0.5886954665184021 -1.989718327877199e-07 -0.9688882231712341 -0.6249557733535767 -1.989718327877199e-07 -0.849354088306427 -0.612947404384613 0.12192269414663315 -0.8493539094924927 -0.577383816242218 0.11484865099191666 -0.9688882231712341 -0.5298119187355042 -1.989718327877199e-07 -1.0790516138076782 -0.5196316838264465 0.10336104035377502 -1.0790516138076782 -0.45056793093681335 -1.989718327877199e-07 -1.1756107807159424 -0.44191038608551025 0.08790131658315659 -1.1756107807159424 -0.35400891304016113 -1.989718327877199e-07 -1.2548547983169556 -0.347206711769104 0.06906357407569885 -1.2548547983169556 -0.24384546279907227 -1.989718327877199e-07 -1.313738226890564 -0.23916004598140717 0.04757174849510193 -1.313738226890564 -0.12431119382381439 -1.989718327877199e-07 -1.3499984741210938 -0.1219225823879242 0.024251773953437805 -1.3499984741210938 -0.637199342250824 -1.989718327877199e-07 -0.7250426411628723 -0.6249557733535767 0.12431130558252335 -0.7250425219535828 -0.4162704348564148 0.1724248081445694 -1.1756107807159424 -0.3270615339279175 0.13547326624393463 -1.2548547983169556 -0.22528380155563354 0.09331554919481277 -1.313738226890564 -0.1148485466837883 0.04757174849510193 -1.3499984741210938 -0.5886954069137573 0.24384556710720062 -0.7250425219535828 -0.5773837566375732 0.23916012048721313 -0.8493539094924927 -0.5438836216926575 0.2252839058637619 -0.9688882231712341 -0.4894823133945465 0.20275014638900757 -1.0790516138076782 -0.4894823133945465 0.32706162333488464 -0.9688882231712341 -0.44052237272262573 0.2943476736545563 -1.0790516138076782 -0.3746334910392761 0.2503221035003662 -1.1756107807159424 -0.2943475544452667 0.19667677581310272 -1.2548547983169556 -0.20275002717971802 0.13547326624393463 -1.313738226890564 -0.10336092859506607 0.06906356662511826 -1.3499984741210938 -0.5298118591308594 0.3540089428424835 -0.7250425219535828 -0.519631564617157 0.3472067415714264 -0.8493539094924927 -0.17242467403411865 0.1724248081445694 -1.313738226890564 -0.08790119737386703 0.08790130168199539 -1.3499984741210938 -0.4505678713321686 0.45056799054145813 -0.7250425219535828 -0.4419102370738983 0.44191038608551025 -0.8493539094924927 -0.4162704050540924 0.41627052426338196 -0.9688882231712341 -0.37463340163230896 0.3746335208415985 -1.0790516138076782 -0.3185994625091553 0.3185996413230896 -1.1756107807159424 -0.2503219544887543 0.2503221035003662 -1.2548547983169556 -0.29434746503829956 0.4405224025249481 -1.0790516138076782 -0.2503219246864319 0.3746335506439209 -1.1756107807159424 -0.1966766119003296 0.2943476736545563 -1.2548547983169556 -0.1354731321334839 0.20275016129016876 -1.313738226890564 -0.0690634623169899 0.10336103290319443 -1.3499984741210938 -0.35400885343551636 0.5298119187355042 -0.7250425219535828 -0.3472065329551697 0.5196316838264465 -0.8493539094924927 -0.3270615041255951 0.4894823729991913 -0.9688882231712341 -0.23915985226631165 0.5773837566375732 -0.8493539094924927 -0.22528377175331116 0.5438836812973022 -0.9688882231712341 -0.20274993777275085 0.48948225378990173 -1.0790516138076782 -0.17242461442947388 0.41627052426338196 -1.1756107807159424 -0.1354730874300003 0.32706162333488464 -1.2548547983169556 -0.09331541508436203 0.2252839207649231 -1.313738226890564 -0.047571636736392975 0.11484864354133606 -1.3499984741210938 -0.24384541809558868 0.5886954665184021 -0.7250425219535828 -0.06906341016292572 0.3472067713737488 -1.2548547983169556 -0.047571614384651184 0.23916013538837433 -1.313738226890564 -0.02425166219472885 0.12192267179489136 -1.3499984741210938 -0.12431115657091141 0.6249557733535767 -0.7250425219535828 -0.12192244082689285 0.6129473447799683 -0.8493539094924927 -0.11484851688146591 0.5773838758468628 -0.9688882231712341 -0.10336083918809891 0.5196316838264465 -1.0790516138076782 -0.08790113776922226 0.44191044569015503 -1.1756107807159424 3.7092044635755883e-07 0.5298117995262146 -1.0790516138076782 3.614254353578872e-07 0.45056796073913574 -1.1756107807159424 3.5667792985805136e-07 0.35400891304016113 -1.2548547983169556 3.3294040235887223e-07 0.24384555220603943 -1.313738226890564 3.068291221097752e-07 0.12431128323078156 -1.3499984741210938 3.234453913592006e-07 0.637199342250824 -0.7250425219535828 4.0890051877795486e-07 0.6249556541442871 -0.8493539094924927 3.234453913592006e-07 0.5886954665184021 -0.9688882231712341 0.12192323803901672 0.6129472851753235 -0.8493539094924927 0.11484915018081665 0.5773838758468628 -0.9688882231712341 0.10336155444383621 0.519631564617157 -1.0790516138076782 0.08790184557437897 0.44191038608551025 -1.1756107807159424 0.06906411796808243 0.3472067415714264 -1.2548547983169556 0.04757228493690491 0.23916012048721313 -1.313738226890564 0.02425227127969265 0.12192267179489136 -1.3499984741210938 0.12431178987026215 0.6249557137489319 -0.7250425219535828 0.1354738026857376 0.3270615339279175 -1.2548547983169556 0.09331604838371277 0.22528387606143951 -1.313738226890564 0.04757225513458252 0.11484862864017487 -1.3499984741210938 0.24384602904319763 0.5886953473091125 -0.7250425219535828 0.23916064202785492 0.5773836374282837 -0.8493539094924927 0.2252843976020813 0.5438836812973022 -0.9688882231712341 0.20275062322616577 0.48948216438293457 -1.0790516138076782 0.17242532968521118 0.4162704348564148 -1.1756107807159424 0.2943480908870697 0.4405222535133362 -1.0790516138076782 0.2503226101398468 0.3746334910392761 -1.1756107807159424 0.1966772973537445 0.2943475842475891 -1.2548547983169556 0.13547375798225403 0.20275011658668518 -1.313738226890564 0.06906405836343765 0.10336101800203323 -1.3499984741210938 0.35400938987731934 0.5298117995262146 -0.7250425219535828 0.3472072184085846 0.5196315050125122 -0.8493539094924927 0.32706207036972046 0.4894823133945465 -0.9688882231712341 0.44191083312034607 0.4419102072715759 -0.8493539094924927 0.4162709712982178 0.4162704348564148 -0.9688882231712341 0.37463393807411194 0.3746333420276642 -1.0790516138076782 0.3186001181602478 0.31859952211380005 -1.1756107807159424 0.2503226101398468 0.25032201409339905 -1.2548547983169556 0.1724252849817276 0.17242474853992462 -1.313738226890564 0.08790178596973419 0.0879012867808342 -1.3499984741210938 0.45056837797164917 0.4505677819252014 -0.7250425219535828 0.2943481504917145 0.19667667150497437 -1.2548547983169556 0.20275062322616577 0.13547322154045105 -1.313738226890564 0.10336150974035263 0.06906355172395706 -1.3499984741210938 0.5298123359680176 0.3540087640285492 -0.7250425219535828 0.5196320414543152 0.3472065329551697 -0.8493539094924927 0.4894828200340271 0.3270615339279175 -0.9688882231712341 0.44052284955978394 0.29434749484062195 -1.0790516138076782 0.3746339976787567 0.25032198429107666 -1.1756107807159424 0.5438841581344604 0.22528384625911713 -0.9688882231712341 0.48948270082473755 0.20274998247623444 -1.0790516138076782 0.416270911693573 0.17242468893527985 -1.1756107807159424 0.32706207036972046 0.13547316193580627 -1.2548547983169556 0.2252843827009201 0.09331551194190979 -1.313738226890564 0.11484911292791367 0.047571733593940735 -1.3499984741210938 0.5886958241462708 0.2438454031944275 -0.7250425219535828 0.5773841738700867 0.23915992677211761 -0.8493539094924927 0.23916059732437134 0.04757172614336014 -1.313738226890564 0.12192314863204956 0.02425176464021206 -1.3499984741210938 0.6249560713768005 0.1243111789226532 -0.7250425219535828 0.6129477024078369 0.12192253768444061 -0.8493539094924927 0.5773842930793762 0.11484860628843307 -0.9688882231712341 0.5196320414543152 0.10336092114448547 -1.0790516138076782 0.44191083312034607 0.08790123462677002 -1.1756107807159424 0.3472072184085846 0.06906349211931229 -1.2548547983169556 0.4505683481693268 -2.369518767864065e-07 -1.1756107807159424 0.35400936007499695 -2.606894042855856e-07 -1.2548547983169556 0.24384602904319763 -2.1321434928722738e-07 -1.313738226890564 0.12431176006793976 -1.989718327877199e-07 -1.3499984741210938 0.6371996402740479 -2.6543690978542145e-07 -0.7250425219535828 0.6249560713768005 -2.939219427844364e-07 -0.8493539094924927 0.5886958837509155 -2.2745686578673485e-07 -0.9688882231712341 0.529812216758728 -2.6543690978542145e-07 -1.0790516138076782 0.5773842334747314 -0.1148490384221077 -0.9688882231712341 0.5196319818496704 -0.10336144268512726 -1.0790516138076782 0.4419108033180237 -0.08790169656276703 -1.1756107807159424 0.3472071588039398 -0.06906400620937347 -1.2548547983169556 0.23916059732437134 -0.04757215455174446 -1.313738226890564 0.12192314863204956 -0.024252157658338547 -1.3499984741210938 0.6249560117721558 -0.12431169301271439 -0.7250425219535828 0.6129477024078369 -0.12192310392856598 -0.8493539094924927 0.2252843827009201 -0.09331591427326202 -1.313738226890564 0.11484910547733307 -0.04757212847471237 -1.3499984741210938 0.5886956453323364 -0.2438458949327469 -0.7250425219535828 0.5773840546607971 -0.23916050791740417 -0.8493539094924927 0.5438840985298157 -0.22528427839279175 -0.9688882231712341 0.4894826412200928 -0.20275048911571503 -1.0790516138076782 0.4162708520889282 -0.17242516577243805 -1.1756107807159424 0.3270619809627533 -0.13547366857528687 -1.2548547983169556 0.37463387846946716 -0.2503224313259125 -1.1756107807159424 0.2943480312824249 -0.19667714834213257 -1.2548547983169556 0.20275060832500458 -0.13547362387180328 -1.313738226890564 0.10336148738861084 -0.0690639317035675 -1.3499984741210938 0.5298120975494385 -0.3540092408657074 -0.7250425219535828 0.5196319222450256 -0.34720712900161743 -0.8493539094924927 0.48948273062705994 -0.3270619809627533 -0.9688882231712341 0.4405227303504944 -0.29434797167778015 -1.0790516138076782 0.4162708818912506 -0.4162708818912506 -0.9688882231712341 0.3746338188648224 -0.3746338188648224 -1.0790516138076782 0.31859999895095825 -0.3185999393463135 -1.1756107807159424 0.25032246112823486 -0.2503224313259125 -1.2548547983169556 0.1724252551794052 -0.17242515087127686 -1.313738226890564 0.0879017561674118 -0.08790165185928345 -1.3499984741210938 0.45056816935539246 -0.45056819915771484 -0.7250425219535828 0.44191065430641174 -0.4419107139110565 -0.8493539094924927 0.13547372817993164 -0.20275048911571503 -1.313738226890564 0.06906404346227646 -0.10336137562990189 -1.3499984741210938 0.3540091812610626 -0.5298120379447937 -0.7250425219535828 0.3472069799900055 -0.5196319222450256 -0.8493539094924927 0.3270619809627533 -0.48948273062705994 -0.9688882231712341 0.29434797167778015 -0.440522700548172 -1.0790516138076782 0.2503224313259125 -0.3746338486671448 -1.1756107807159424 0.19667714834213257 -0.29434797167778015 -1.2548547983169556 0.17242518067359924 -0.41627082228660583 -1.1756107807159424 0.13547365367412567 -0.3270619511604309 -1.2548547983169556 0.09331601113080978 -0.22528424859046936 -1.313738226890564 0.04757223650813103 -0.11484897136688232 -1.3499984741210938 0.24384582042694092 -0.5886955857276917 -0.7250425219535828 0.23916037380695343 -0.5773839950561523 -0.8493539094924927 0.22528429329395294 -0.5438839793205261 -0.9688882231712341 0.20275047421455383 -0.4894825518131256 -1.0790516138076782 0.12192297726869583 -0.6129475235939026 -0.8493539094924927 0.1148490309715271 -0.5773841738700867 -0.9688882231712341 0.10336141288280487 -0.5196318626403809 -1.0790516138076782 0.08790171146392822 -0.4419107139110565 -1.1756107807159424 0.06906397640705109 -0.34720703959465027 -1.2548547983169556 0.047572243958711624 -0.2391604632139206 -1.313738226890564 0.024252260103821754 -0.12192299962043762 -1.3499984741210938 0.12431161850690842 -0.6249558329582214 -0.7250425219535828 2.4273779786199157e-07 -0.354009211063385 -1.2548547983169556 3.044553693598573e-07 -0.2438458949327469 -1.313738226890564 3.068291221097752e-07 -0.12431160360574722 -1.3499984741210938 2.095052593631408e-07 -0.6371994018554688 -0.7250425219535828 1.7152520115359948e-07 -0.6249558329582214 -0.8493539094924927 2.1900027036281244e-07 -0.588695764541626 -0.9688882231712341 2.474853033618274e-07 -0.5298120379447937 -1.0790516138076782 2.474853033618274e-07 -0.45056822896003723 -1.1756107807159424 -0.10336092114448547 -0.5196318030357361 -1.0790516138076782 -0.08790121227502823 -0.44191068410873413 -1.1756107807159424 -0.06906348466873169 -0.3472070097923279 -1.2548547983169556 -0.04757162928581238 -0.2391604632139206 -1.313738226890564 -0.024251649156212807 -0.12192299216985703 -1.3499984741210938 -0.12431119382381439 -0.6249557137489319 -0.7250425219535828 -0.12192263454198837 -0.612947404384613 -0.8493539094924927 -0.11484859138727188 -0.5773841142654419 -0.9688882231712341 -0.2391599714756012 -0.577383816242218 -0.8493539094924927 -0.22528380155563354 -0.5438839197158813 -0.9688882231712341 -0.20274993777275085 -0.48948246240615845 -1.0790516138076782 -0.17242465913295746 -0.41627073287963867 -1.1756107807159424 -0.1354731321334839 -0.32706183195114136 -1.2548547983169556 -0.09331540763378143 -0.22528424859046936 -1.313738226890564 -0.04757160320878029 -0.11484894901514053 -1.3499984741210938 -0.2438453584909439 -0.5886953473091125 -0.7250425219535828 -0.1966765820980072 -0.2943478524684906 -1.2548547983169556 -0.1354731023311615 -0.20275047421455383 -1.313738226890564 -0.06906340271234512 -0.1033613383769989 -1.3499984741210938 -0.35400867462158203 -0.5298117995262146 -0.7250425219535828 -0.3472065329551697 -0.5196316838264465 -0.8493539094924927 -0.3270615041255951 -0.4894826412200928 -0.9688882231712341 -0.2943473756313324 -0.44052258133888245 -1.0790516138076782 -0.2503219246864319 -0.3746337890625 -1.1756107807159424 -0.37463322281837463 -0.37463366985321045 -1.0790516138076782 -0.3185994029045105 -0.3185998499393463 -1.1756107807159424 -0.2503218948841095 -0.25032228231430054 -1.2548547983169556 -0.17242462933063507 -0.17242512106895447 -1.313738226890564 -0.08790112286806107 -0.08790161460638046 -1.3499984741210938 -0.4505676031112671 -0.45056790113449097 -0.7250425219535828 -0.44191011786460876 -0.44191044569015503 -0.8493539094924927 -0.41627037525177 -0.41627076268196106 -0.9688882231712341 -0.5196313261985779 -0.34720683097839355 -0.8493539094924927 -0.48948219418525696 -0.32706186175346375 -0.9688882231712341 -0.44052210450172424 -0.2943477928638458 -1.0790516138076782 -0.3746333420276642 -0.25032228231430054 -1.1756107807159424 -0.2943474352359772 -0.19667695462703705 -1.2548547983169556 -0.20274998247623444 -0.1354735940694809 -1.313738226890564 -0.10336083173751831 -0.06906390190124512 -1.3499984741210938 -0.529811441898346 -0.35400891304016113 -0.7250425219535828 -0.32706135511398315 -0.13547345995903015 -1.2548547983169556 -0.22528372704982758 -0.09331587702035904 -1.313738226890564 -0.11484842747449875 -0.04757210239768028 -1.3499984741210938 -0.5886949300765991 -0.24384555220603943 -0.7250425219535828 -0.5773833990097046 -0.2391602247953415 -0.8493539094924927 -0.5438835024833679 -0.2252841293811798 -0.9688882231712341 -0.48948192596435547 -0.2027503103017807 -1.0790516138076782 -0.41627028584480286 -0.1724250167608261 -1.1756107807159424 -0.5196312665939331 -0.10336127132177353 -1.0790516138076782 -0.44191017746925354 -0.08790155500173569 -1.1756107807159424 -0.3472064733505249 -0.06906381249427795 -1.2548547983169556 -0.2391599416732788 -0.04757210984826088 -1.313738226890564 -0.12192244827747345 -0.024252139031887054 -1.3499984741210938 -0.6249551773071289 -0.12431138008832932 -0.7250425219535828 -0.6129469275474548 -0.12192284315824509 -0.8493539094924927 -0.5773835778236389 -0.11484888195991516 -0.9688882231712341 3.1395038035952894e-07 -1.989718327877199e-07 -1.3622419834136963 -0.4505676031112671 -0.45056769251823425 0.7404797077178955 -0.529811441898346 -0.3540087044239044 0.7404797077178955 -0.529811441898346 -0.35400891304016113 -0.7250425219535828 -0.4505676031112671 -0.45056790113449097 -0.7250425219535828 0.12431178987026215 0.6249558925628662 0.7404797077178955 0.24384602904319763 0.5886955857276917 0.7404797077178955 0.24384602904319763 0.5886953473091125 -0.7250425219535828 0.12431178987026215 0.6249557137489319 -0.7250425219535828 0.5886958241462708 0.24384558200836182 0.7404797077178955 0.6249560713768005 0.12431137263774872 0.7404797077178955 0.6249560713768005 0.1243111789226532 -0.7250425219535828 0.5886958241462708 0.2438454031944275 -0.7250425219535828 -0.5886949300765991 -0.2438453584909439 0.7404797077178955 -0.5886949300765991 -0.24384555220603943 -0.7250425219535828 0.24384582042694092 -0.5886953473091125 0.7404797077178955 0.12431161850690842 -0.6249556541442871 0.7404797077178955 0.12431161850690842 -0.6249558329582214 -0.7250425219535828 0.24384582042694092 -0.5886955857276917 -0.7250425219535828 0.5298123359680176 0.3540089428424835 0.7404797077178955 0.5298123359680176 0.3540087640285492 -0.7250425219535828 -0.5298118591308594 0.35400915145874023 0.7404797077178955 -0.4505678713321686 0.45056816935539246 0.7404797077178955 -0.4505678713321686 0.45056799054145813 -0.7250425219535828 -0.5298118591308594 0.3540089428424835 -0.7250425219535828 -0.2438453584909439 -0.5886951684951782 0.7404797077178955 -0.35400867462158203 -0.5298116207122803 0.7404797077178955 -0.35400867462158203 -0.5298117995262146 -0.7250425219535828 -0.2438453584909439 -0.5886953473091125 -0.7250425219535828 -0.35400885343551636 0.5298121571540833 0.7404797077178955 -0.35400885343551636 0.5298119187355042 -0.7250425219535828 0.6249560117721558 -0.12431149929761887 0.7404797077178955 0.5886956453323364 -0.24384570121765137 0.7404797077178955 0.5886956453323364 -0.2438458949327469 -0.7250425219535828 0.6249560117721558 -0.12431169301271439 -0.7250425219535828 2.095052593631408e-07 -0.6371992230415344 0.7404797077178955 2.095052593631408e-07 -0.6371994018554688 -0.7250425219535828 0.6371996402740479 -7.553668268656111e-08 0.7404797077178955 0.6371996402740479 -2.6543690978542145e-07 -0.7250425219535828 -0.12431115657091141 0.6249560117721558 0.7404797077178955 3.234453913592006e-07 0.6371995210647583 0.7404797077178955 3.234453913592006e-07 0.637199342250824 -0.7250425219535828 -0.12431115657091141 0.6249557733535767 -0.7250425219535828 -0.6249551773071289 -0.1243111863732338 0.7404797077178955 -0.637199342250824 -9.071602136145884e-09 0.7404797077178955 -0.637199342250824 -1.989718327877199e-07 -0.7250426411628723 -0.6249551773071289 -0.12431138008832932 -0.7250425219535828 0.5298120975494385 -0.35400906205177307 0.7404797077178955 0.45056816935539246 -0.4505680203437805 0.7404797077178955 0.45056816935539246 -0.45056819915771484 -0.7250425219535828 0.5298120975494385 -0.3540092408657074 -0.7250425219535828 0.35400938987731934 0.5298119783401489 0.7404797077178955 0.35400938987731934 0.5298117995262146 -0.7250425219535828 -0.6249557733535767 0.12431149184703827 0.7404797077178955 -0.5886954069137573 0.24384576082229614 0.7404797077178955 -0.5886954069137573 0.24384556710720062 -0.7250425219535828 -0.6249557733535767 0.12431130558252335 -0.7250425219535828 -0.24384541809558868 0.5886956453323364 0.7404797077178955 -0.24384541809558868 0.5886954665184021 -0.7250425219535828 0.45056837797164917 0.45056799054145813 0.7404797077178955 0.45056837797164917 0.4505677819252014 -0.7250425219535828 -0.12431119382381439 -0.6249555349349976 0.7404797077178955 -0.12431119382381439 -0.6249557137489319 -0.7250425219535828 0.3540091812610626 -0.5298118591308594 0.7404797077178955 0.3540091812610626 -0.5298120379447937 -0.7250425219535828</float_array>
- <technique_common>
- <accessor source="#id-mesh-4-positions-array" count="578" stride="3">
- <param name="X" type="float"/>
- <param name="Y" type="float"/>
- <param name="Z" type="float"/>
- </accessor>
- </technique_common>
- </source>
- <source id="id-mesh-4-normals">
- <float_array id="id-mesh-4-normals-array" count="1734"> -0.7101352214813232 0.0 0.7040314674377441 -0.5597705245018005 0.0 0.8286385536193848 -0.5489974617958069 0.10919522494077682 0.8286385536193848 -0.6964934468269348 0.13852351903915405 0.7040314674377441 -0.8333384394645691 0.0 0.5527512431144714 -0.8173161745071411 0.16257210075855255 0.5527512431144714 -0.9247413277626038 0.0 0.3805353045463562 -0.9069795608520508 0.18039490282535553 0.3805353045463562 -0.9809869527816772 0.0 0.19391460716724396 -0.9621570706367493 0.191381573677063 0.19391460716724396 -0.9951781034469604 0.0 0.09799493104219437 -0.9760429859161377 0.19412824511528015 0.09799493104219437 -0.3878597319126129 0.0 0.921689510345459 -0.20096439123153687 0.0 0.9795831441879272 -0.19708853960037231 0.039185766130685806 0.9795831441879272 -0.3804132342338562 0.07565538585186005 0.921689510345459 -0.8543656468391418 0.35389262437820435 0.3805353045463562 -0.9063386917114258 0.3754081726074219 0.19391460716724396 -0.9194006323814392 0.3808404803276062 0.09799493104219437 -0.18564409017562866 0.07690664380788803 0.9795831441879272 -0.3583483397960663 0.14841151237487793 0.921689510345459 -0.5171361565589905 0.2142094224691391 0.8286385536193848 -0.6560564041137695 0.2717368006706238 0.7040314674377441 -0.7698904275894165 0.3188879191875458 0.5527512431144714 -0.46540728211402893 0.3109835982322693 0.8286385536193848 -0.5904415845870972 0.39451277256011963 0.7040314674377441 -0.6928922533988953 0.46296578645706177 0.5527512431144714 -0.7689138650894165 0.5137485861778259 0.3805353045463562 -0.8156682252883911 0.5449995398521423 0.19391460716724396 -0.8274483680725098 0.5528733134269714 0.09799493104219437 -0.1670888364315033 0.1116367056965828 0.9795831441879272 -0.32248908281326294 0.2154911905527115 0.921689510345459 -0.6936551928520203 0.6936551928520203 0.19391460716724396 -0.7036957740783691 0.7036957740783691 0.09799493104219437 -0.1420941799879074 0.1420941799879074 0.9795831441879272 -0.27426984906196594 0.27426984906196594 0.921689510345459 -0.395794540643692 0.395794540643692 0.8286385536193848 -0.5021210312843323 0.5021210312843323 0.7040314674377441 -0.5892513990402222 0.5892513990402222 0.5527512431144714 -0.6538895964622498 0.6538895964622498 0.3805353045463562 -0.46296578645706177 0.6928922533988953 0.5527512431144714 -0.5137485861778259 0.7689138650894165 0.3805353045463562 -0.5449995398521423 0.8156682252883911 0.19391460716724396 -0.5528733134269714 0.8274483680725098 0.09799493104219437 -0.1116367056965828 0.1670888364315033 0.9795831441879272 -0.2154911905527115 0.32248908281326294 0.921689510345459 -0.3109835982322693 0.46540728211402893 0.8286385536193848 -0.39451277256011963 0.5904415845870972 0.7040314674377441 -0.2142094224691391 0.5171361565589905 0.8286385536193848 -0.2717368006706238 0.6560564041137695 0.7040314674377441 -0.3188879191875458 0.7698904275894165 0.5527512431144714 -0.35386210680007935 0.8543656468391418 0.3805353045463562 -0.3754081726074219 0.9063386917114258 0.19391460716724396 -0.3808404803276062 0.9194006323814392 0.09799493104219437 -0.07690664380788803 0.18564409017562866 0.9795831441879272 -0.14841151237487793 0.3583483397960663 0.921689510345459 -0.191381573677063 0.9621570706367493 0.19391460716724396 -0.19412824511528015 0.9760429859161377 0.09799493104219437 -0.039185766130685806 0.19708853960037231 0.9795831441879272 -0.07565538585186005 0.3804132342338562 0.921689510345459 -0.10919522494077682 0.5489974617958069 0.8286385536193848 -0.13852351903915405 0.6964934468269348 0.7040314674377441 -0.16257210075855255 0.8173161745071411 0.5527512431144714 -0.18039490282535553 0.9069795608520508 0.3805353045463562 0.0 0.8333384394645691 0.5527512431144714 0.0 0.9247413277626038 0.3805353045463562 0.0 0.9809869527816772 0.19391460716724396 0.0 0.9951781034469604 0.09799493104219437 0.0 0.20096439123153687 0.9795831441879272 0.0 0.3878597319126129 0.921689510345459 0.0 0.5597705245018005 0.8286385536193848 0.0 0.7101352214813232 0.7040314674377441 0.10919522494077682 0.5489974617958069 0.8286385536193848 0.13852351903915405 0.6964934468269348 0.7040314674377441 0.16257210075855255 0.8173161745071411 0.5527512431144714 0.18039490282535553 0.9069795608520508 0.3805353045463562 0.191381573677063 0.9621570706367493 0.19391460716724396 0.19412824511528015 0.9760429859161377 0.09799493104219437 0.039185766130685806 0.19708853960037231 0.9795831441879272 0.07565538585186005 0.3804132342338562 0.921689510345459 0.3754081726074219 0.9063386917114258 0.19391460716724396 0.3808404803276062 0.9194006323814392 0.09799493104219437 0.07690664380788803 0.18564409017562866 0.9795831441879272 0.14841151237487793 0.3583483397960663 0.921689510345459 0.2142094224691391 0.5171361565589905 0.8286385536193848 0.2717368006706238 0.6560564041137695 0.7040314674377441 0.3188879191875458 0.7698904275894165 0.5527512431144714 0.35389262437820435 0.8543656468391418 0.3805353045463562 0.46296578645706177 0.6928922533988953 0.5527512431144714 0.5137485861778259 0.7689138650894165 0.3805353045463562 0.5449995398521423 0.8156682252883911 0.19391460716724396 0.5528733134269714 0.8274483680725098 0.09799493104219437 0.1116367056965828 0.1670888364315033 0.9795831441879272 0.2154911905527115 0.32248908281326294 0.921689510345459 0.3109835982322693 0.46540728211402893 0.8286385536193848 0.39451277256011963 0.5904415845870972 0.7040314674377441 0.27426984906196594 0.27426984906196594 0.921689510345459 0.395794540643692 0.395794540643692 0.8286385536193848 0.5021210312843323 0.5021210312843323 0.7040314674377441 0.5892513990402222 0.5892513990402222 0.5527512431144714 0.6538895964622498 0.6538895964622498 0.3805353045463562 0.6936551928520203 0.6936551928520203 0.19391460716724396 0.7036957740783691 0.7036957740783691 0.09799493104219437 0.1420941799879074 0.1420941799879074 0.9795831441879272 0.7689138650894165 0.5137485861778259 0.3805353045463562 0.8156682252883911 0.5449995398521423 0.19391460716724396 0.8274483680725098 0.5528733134269714 0.09799493104219437 0.1670888364315033 0.1116367056965828 0.9795831441879272 0.32248908281326294 0.2154911905527115 0.921689510345459 0.46540728211402893 0.3109835982322693 0.8286385536193848 0.5904415845870972 0.39451277256011963 0.7040314674377441 0.6928922533988953 0.46296578645706177 0.5527512431144714 0.6560564041137695 0.2717368006706238 0.7040314674377441 0.7698904275894165 0.3188879191875458 0.5527512431144714 0.8543656468391418 0.35386210680007935 0.3805353045463562 0.9063386917114258 0.3754081726074219 0.19391460716724396 0.9194006323814392 0.3808099627494812 0.09799493104219437 0.18564409017562866 0.07690664380788803 0.9795831441879272 0.3583483397960663 0.14841151237487793 0.921689510345459 0.5171361565589905 0.2142094224691391 0.8286385536193848 0.3804132342338562 0.07565538585186005 0.921689510345459 0.5489974617958069 0.10919522494077682 0.8286385536193848 0.6964934468269348 0.13852351903915405 0.7040314674377441 0.8173161745071411 0.16257210075855255 0.5527512431144714 0.9069795608520508 0.18039490282535553 0.3805353045463562 0.9621570706367493 0.191381573677063 0.19391460716724396 0.9760429859161377 0.19412824511528015 0.09799493104219437 0.19708853960037231 0.039185766130685806 0.9795831441879272 0.9247413277626038 0.0 0.3805353045463562 0.9809869527816772 0.0 0.19391460716724396 0.9951781034469604 0.0 0.09799493104219437 0.20096439123153687 0.0 0.9795831441879272 0.3878597319126129 0.0 0.921689510345459 0.5597705245018005 0.0 0.8286385536193848 0.7101352214813232 0.0 0.7040314674377441 0.8333384394645691 0.0 0.5527512431144714 0.6964934468269348 -0.13852351903915405 0.7040314674377441 0.8173161745071411 -0.16257210075855255 0.5527512431144714 0.9069795608520508 -0.18039490282535553 0.3805353045463562 0.9621570706367493 -0.191381573677063 0.19391460716724396 0.9760429859161377 -0.19412824511528015 0.09799493104219437 0.19708853960037231 -0.039185766130685806 0.9795831441879272 0.3804132342338562 -0.07565538585186005 0.921689510345459 0.5489974617958069 -0.10919522494077682 0.8286385536193848 0.3583483397960663 -0.14841151237487793 0.921689510345459 0.5171361565589905 -0.2142094224691391 0.8286385536193848 0.6560564041137695 -0.2717368006706238 0.7040314674377441 0.7698904275894165 -0.3188879191875458 0.5527512431144714 0.8543656468391418 -0.35389262437820435 0.3805353045463562 0.9063386917114258 -0.3754081726074219 0.19391460716724396 0.9194006323814392 -0.3808404803276062 0.09799493104219437 0.18564409017562866 -0.07690664380788803 0.9795831441879272 0.7689138650894165 -0.5137485861778259 0.3805353045463562 0.8156682252883911 -0.5449995398521423 0.19391460716724396 0.8274483680725098 -0.5528733134269714 0.09799493104219437 0.1670888364315033 -0.1116367056965828 0.9795831441879272 0.32248908281326294 -0.2154911905527115 0.921689510345459 0.46540728211402893 -0.3109835982322693 0.8286385536193848 0.5904415845870972 -0.39451277256011963 0.7040314674377441 0.6928922533988953 -0.46296578645706177 0.5527512431144714 0.5021210312843323 -0.5021210312843323 0.7040314674377441 0.5892513990402222 -0.5892513990402222 0.5527512431144714 0.6538895964622498 -0.6538895964622498 0.3805353045463562 0.6936551928520203 -0.6936551928520203 0.19391460716724396 0.7036957740783691 -0.7036957740783691 0.09799493104219437 0.1420941799879074 -0.1420941799879074 0.9795831441879272 0.27426984906196594 -0.27426984906196594 0.921689510345459 0.395794540643692 -0.395794540643692 0.8286385536193848 0.1116367056965828 -0.1670888364315033 0.9795831441879272 0.2154911905527115 -0.32248908281326294 0.921689510345459 0.3109835982322693 -0.46540728211402893 0.8286385536193848 0.39451277256011963 -0.5904415845870972 0.7040314674377441 0.46296578645706177 -0.6928922533988953 0.5527512431144714 0.5137485861778259 -0.7689138650894165 0.3805353045463562 0.5449995398521423 -0.8156682252883911 0.19391460716724396 0.5528733134269714 -0.8274483680725098 0.09799493104219437 0.3188879191875458 -0.7698904275894165 0.5527512431144714 0.35386210680007935 -0.8543656468391418 0.3805353045463562 0.3754081726074219 -0.9063386917114258 0.19391460716724396 0.3808404803276062 -0.9194006323814392 0.09799493104219437 0.07690664380788803 -0.18564409017562866 0.9795831441879272 0.14841151237487793 -0.3583483397960663 0.921689510345459 0.2142094224691391 -0.5171361565589905 0.8286385536193848 0.2717368006706238 -0.6560564041137695 0.7040314674377441 0.10919522494077682 -0.5489974617958069 0.8286385536193848 0.13852351903915405 -0.6964934468269348 0.7040314674377441 0.16257210075855255 -0.8173161745071411 0.5527512431144714 0.18039490282535553 -0.9069795608520508 0.3805353045463562 0.191381573677063 -0.9621570706367493 0.19391460716724396 0.19412824511528015 -0.9760429859161377 0.09799493104219437 0.039185766130685806 -0.19708853960037231 0.9795831441879272 0.07565538585186005 -0.3804132342338562 0.921689510345459 0.0 -0.9809869527816772 0.19391460716724396 0.0 -0.9951781034469604 0.09799493104219437 0.0 -0.20096439123153687 0.9795831441879272 0.0 -0.3878597319126129 0.921689510345459 0.0 -0.5597705245018005 0.8286385536193848 0.0 -0.7101352214813232 0.7040314674377441 0.0 -0.8333384394645691 0.5527512431144714 0.0 -0.9247413277626038 0.3805353045463562 -0.16257210075855255 -0.8173161745071411 0.5527512431144714 -0.18039490282535553 -0.9069795608520508 0.3805353045463562 -0.191381573677063 -0.9621570706367493 0.19391460716724396 -0.19412824511528015 -0.9760429859161377 0.09799493104219437 -0.039185766130685806 -0.19708853960037231 0.9795831441879272 -0.07565538585186005 -0.3804132342338562 0.921689510345459 -0.10919522494077682 -0.5489974617958069 0.8286385536193848 -0.13852351903915405 -0.6964934468269348 0.7040314674377441 -0.2142094224691391 -0.5171361565589905 0.8286385536193848 -0.2717368006706238 -0.6560564041137695 0.7040314674377441 -0.3188879191875458 -0.7698904275894165 0.5527512431144714 -0.35389262437820435 -0.8543656468391418 0.3805353045463562 -0.3754081726074219 -0.9063386917114258 0.19391460716724396 -0.3808404803276062 -0.9194006323814392 0.09799493104219437 -0.07690664380788803 -0.18564409017562866 0.9795831441879272 -0.14841151237487793 -0.3583483397960663 0.921689510345459 -0.5449995398521423 -0.8156682252883911 0.19391460716724396 -0.5528733134269714 -0.8274483680725098 0.09799493104219437 -0.1116367056965828 -0.1670888364315033 0.9795831441879272 -0.2154911905527115 -0.32248908281326294 0.921689510345459 -0.3109835982322693 -0.46540728211402893 0.8286385536193848 -0.39451277256011963 -0.5904415845870972 0.7040314674377441 -0.46296578645706177 -0.6928922533988953 0.5527512431144714 -0.5137485861778259 -0.7689138650894165 0.3805353045463562 -0.5892513990402222 -0.5892513990402222 0.5527512431144714 -0.6538895964622498 -0.6538895964622498 0.3805353045463562 -0.6936551928520203 -0.6936551928520203 0.19391460716724396 -0.7036957740783691 -0.7036957740783691 0.09799493104219437 -0.1420941799879074 -0.1420941799879074 0.9795831441879272 -0.27426984906196594 -0.27426984906196594 0.921689510345459 -0.395794540643692 -0.395794540643692 0.8286385536193848 -0.5021210312843323 -0.5021210312843323 0.7040314674377441 -0.46540728211402893 -0.3109835982322693 0.8286385536193848 -0.5904415845870972 -0.39451277256011963 0.7040314674377441 -0.6928922533988953 -0.46296578645706177 0.5527512431144714 -0.7689138650894165 -0.5137485861778259 0.3805353045463562 -0.8156682252883911 -0.5449995398521423 0.19391460716724396 -0.8274483680725098 -0.5528733134269714 0.09799493104219437 -0.1670888364315033 -0.1116367056965828 0.9795831441879272 -0.32248908281326294 -0.2154911905527115 0.921689510345459 -0.9063386917114258 -0.3754081726074219 0.19391460716724396 -0.9194006323814392 -0.3808099627494812 0.09799493104219437 -0.18564409017562866 -0.07690664380788803 0.9795831441879272 -0.3583483397960663 -0.14841151237487793 0.921689510345459 -0.5171361565589905 -0.2142094224691391 0.8286385536193848 -0.6560564041137695 -0.2717368006706238 0.7040314674377441 -0.7698904275894165 -0.3188879191875458 0.5527512431144714 -0.8543656468391418 -0.35386210680007935 0.3805353045463562 -0.6964934468269348 -0.13852351903915405 0.7040314674377441 -0.8173161745071411 -0.16257210075855255 0.5527512431144714 -0.9069795608520508 -0.18039490282535553 0.3805353045463562 -0.9621570706367493 -0.191381573677063 0.19391460716724396 -0.9760429859161377 -0.19412824511528015 0.09799493104219437 -0.19708853960037231 -0.039185766130685806 0.9795831441879272 -0.3804132342338562 -0.07565538585186005 0.921689510345459 -0.5489974617958069 -0.10919522494077682 0.8286385536193848 0.0 0.0 1.0 -0.9247413277626038 0.0 -0.3805353045463562 -0.9809869527816772 0.0 -0.19391460716724396 -0.9621570706367493 0.191381573677063 -0.19391460716724396 -0.9069795608520508 0.18039490282535553 -0.3805353045463562 -0.8333384394645691 0.0 -0.5527512431144714 -0.8173161745071411 0.16257210075855255 -0.5527512431144714 -0.7101352214813232 0.0 -0.7040314674377441 -0.6964934468269348 0.13852351903915405 -0.7040314674377441 -0.5597705245018005 0.0 -0.8286385536193848 -0.5489974617958069 0.10919522494077682 -0.8286385536193848 -0.3878597319126129 0.0 -0.921689510345459 -0.3804132342338562 0.07565538585186005 -0.921689510345459 -0.20096439123153687 0.0 -0.9795831441879272 -0.19708853960037231 0.039185766130685806 -0.9795831441879272 -0.9951781034469604 0.0 -0.09799493104219437 -0.9760429859161377 0.19412824511528015 -0.09799493104219437 -0.6560564041137695 0.2717368006706238 -0.7040314674377441 -0.5171361565589905 0.2142094224691391 -0.8286385536193848 -0.3583483397960663 0.14841151237487793 -0.921689510345459 -0.18564409017562866 0.07690664380788803 -0.9795831441879272 -0.9194006323814392 0.3808404803276062 -0.09799493104219437 -0.9063386917114258 0.3754081726074219 -0.19391460716724396 -0.8543656468391418 0.35389262437820435 -0.3805353045463562 -0.7698904275894165 0.3188879191875458 -0.5527512431144714 -0.7689138650894165 0.5137485861778259 -0.3805353045463562 -0.6928922533988953 0.46296578645706177 -0.5527512431144714 -0.5904415845870972 0.39451277256011963 -0.7040314674377441 -0.46540728211402893 0.3109835982322693 -0.8286385536193848 -0.32248908281326294 0.2154911905527115 -0.921689510345459 -0.1670888364315033 0.1116367056965828 -0.9795831441879272 -0.8274483680725098 0.5528733134269714 -0.09799493104219437 -0.8156682252883911 0.5449995398521423 -0.19391460716724396 -0.27426984906196594 0.27426984906196594 -0.921689510345459 -0.1420941799879074 0.1420941799879074 -0.9795831441879272 -0.7036957740783691 0.7036957740783691 -0.09799493104219437 -0.6936551928520203 0.6936551928520203 -0.19391460716724396 -0.6538895964622498 0.6538895964622498 -0.3805353045463562 -0.5892513990402222 0.5892513990402222 -0.5527512431144714 -0.5021210312843323 0.5021210312843323 -0.7040314674377441 -0.395794540643692 0.395794540643692 -0.8286385536193848 -0.46296578645706177 0.6928922533988953 -0.5527512431144714 -0.39451277256011963 0.5904415845870972 -0.7040314674377441 -0.3109835982322693 0.46540728211402893 -0.8286385536193848 -0.2154911905527115 0.32248908281326294 -0.921689510345459 -0.1116367056965828 0.1670888364315033 -0.9795831441879272 -0.5528733134269714 0.8274483680725098 -0.09799493104219437 -0.5449995398521423 0.8156682252883911 -0.19391460716724396 -0.5137485861778259 0.7689138650894165 -0.3805353045463562 -0.3754081726074219 0.9063386917114258 -0.19391460716724396 -0.35386210680007935 0.8543656468391418 -0.3805353045463562 -0.3188879191875458 0.7698904275894165 -0.5527512431144714 -0.2717368006706238 0.6560564041137695 -0.7040314674377441 -0.2142094224691391 0.5171361565589905 -0.8286385536193848 -0.14841151237487793 0.3583483397960663 -0.921689510345459 -0.07690664380788803 0.18564409017562866 -0.9795831441879272 -0.3808404803276062 0.9194006323814392 -0.09799493104219437 -0.10919522494077682 0.5489974617958069 -0.8286385536193848 -0.07565538585186005 0.3804132342338562 -0.921689510345459 -0.039185766130685806 0.19708853960037231 -0.9795831441879272 -0.19412824511528015 0.9760429859161377 -0.09799493104219437 -0.191381573677063 0.9621570706367493 -0.19391460716724396 -0.18039490282535553 0.9069795608520508 -0.3805353045463562 -0.16257210075855255 0.8173161745071411 -0.5527512431144714 -0.13852351903915405 0.6964934468269348 -0.7040314674377441 0.0 0.8333384394645691 -0.5527512431144714 0.0 0.7101352214813232 -0.7040314674377441 0.0 0.5597705245018005 -0.8286385536193848 0.0 0.3878597319126129 -0.921689510345459 0.0 0.20096439123153687 -0.9795831441879272 0.0 0.9951781034469604 -0.09799493104219437 0.0 0.9809869527816772 -0.19391460716724396 0.0 0.9247413277626038 -0.3805353045463562 0.191381573677063 0.9621570706367493 -0.19391460716724396 0.18039490282535553 0.9069795608520508 -0.3805353045463562 0.16257210075855255 0.8173161745071411 -0.5527512431144714 0.13852351903915405 0.6964934468269348 -0.7040314674377441 0.10919522494077682 0.5489974617958069 -0.8286385536193848 0.07565538585186005 0.3804132342338562 -0.921689510345459 0.039185766130685806 0.19708853960037231 -0.9795831441879272 0.19412824511528015 0.9760429859161377 -0.09799493104219437 0.2142094224691391 0.5171361565589905 -0.8286385536193848 0.14841151237487793 0.3583483397960663 -0.921689510345459 0.07690664380788803 0.18564409017562866 -0.9795831441879272 0.3808404803276062 0.9194006323814392 -0.09799493104219437 0.3754081726074219 0.9063386917114258 -0.19391460716724396 0.35389262437820435 0.8543656468391418 -0.3805353045463562 0.3188879191875458 0.7698904275894165 -0.5527512431144714 0.2717368006706238 0.6560564041137695 -0.7040314674377441 0.46296578645706177 0.6928922533988953 -0.5527512431144714 0.39451277256011963 0.5904415845870972 -0.7040314674377441 0.3109835982322693 0.46540728211402893 -0.8286385536193848 0.2154911905527115 0.32248908281326294 -0.921689510345459 0.1116367056965828 0.1670888364315033 -0.9795831441879272 0.5528733134269714 0.8274483680725098 -0.09799493104219437 0.5449995398521423 0.8156682252883911 -0.19391460716724396 0.5137485861778259 0.7689138650894165 -0.3805353045463562 0.6936551928520203 0.6936551928520203 -0.19391460716724396 0.6538895964622498 0.6538895964622498 -0.3805353045463562 0.5892513990402222 0.5892513990402222 -0.5527512431144714 0.5021210312843323 0.5021210312843323 -0.7040314674377441 0.395794540643692 0.395794540643692 -0.8286385536193848 0.27426984906196594 0.27426984906196594 -0.921689510345459 0.1420941799879074 0.1420941799879074 -0.9795831441879272 0.7036957740783691 0.7036957740783691 -0.09799493104219437 0.46540728211402893 0.3109835982322693 -0.8286385536193848 0.32248908281326294 0.2154911905527115 -0.921689510345459 0.1670888364315033 0.1116367056965828 -0.9795831441879272 0.8274483680725098 0.5528733134269714 -0.09799493104219437 0.8156682252883911 0.5449995398521423 -0.19391460716724396 0.7689138650894165 0.5137485861778259 -0.3805353045463562 0.6928922533988953 0.46296578645706177 -0.5527512431144714 0.5904415845870972 0.39451277256011963 -0.7040314674377441 0.8543656468391418 0.35386210680007935 -0.3805353045463562 0.7698904275894165 0.3188879191875458 -0.5527512431144714 0.6560564041137695 0.2717368006706238 -0.7040314674377441 0.5171361565589905 0.2142094224691391 -0.8286385536193848 0.3583483397960663 0.14841151237487793 -0.921689510345459 0.18564409017562866 0.07690664380788803 -0.9795831441879272 0.9194006323814392 0.3808099627494812 -0.09799493104219437 0.9063386917114258 0.3754081726074219 -0.19391460716724396 0.3804132342338562 0.07565538585186005 -0.921689510345459 0.19708853960037231 0.039185766130685806 -0.9795831441879272 0.9760429859161377 0.19412824511528015 -0.09799493104219437 0.9621570706367493 0.191381573677063 -0.19391460716724396 0.9069795608520508 0.18039490282535553 -0.3805353045463562 0.8173161745071411 0.16257210075855255 -0.5527512431144714 0.6964934468269348 0.13852351903915405 -0.7040314674377441 0.5489974617958069 0.10919522494077682 -0.8286385536193848 0.7101352214813232 0.0 -0.7040314674377441 0.5597705245018005 0.0 -0.8286385536193848 0.3878597319126129 0.0 -0.921689510345459 0.20096439123153687 0.0 -0.9795831441879272 0.9951781034469604 0.0 -0.09799493104219437 0.9809869527816772 0.0 -0.19391460716724396 0.9247413277626038 0.0 -0.3805353045463562 0.8333384394645691 0.0 -0.5527512431144714 0.9069795608520508 -0.18039490282535553 -0.3805353045463562 0.8173161745071411 -0.16257210075855255 -0.5527512431144714 0.6964934468269348 -0.13852351903915405 -0.7040314674377441 0.5489974617958069 -0.10919522494077682 -0.8286385536193848 0.3804132342338562 -0.07565538585186005 -0.921689510345459 0.19708853960037231 -0.039185766130685806 -0.9795831441879272 0.9760429859161377 -0.19412824511528015 -0.09799493104219437 0.9621570706367493 -0.191381573677063 -0.19391460716724396 0.3583483397960663 -0.14841151237487793 -0.921689510345459 0.18564409017562866 -0.07690664380788803 -0.9795831441879272 0.9194006323814392 -0.3808404803276062 -0.09799493104219437 0.9063386917114258 -0.3754081726074219 -0.19391460716724396 0.8543656468391418 -0.35386210680007935 -0.3805353045463562 0.7698904275894165 -0.3188879191875458 -0.5527512431144714 0.6560564041137695 -0.2717368006706238 -0.7040314674377441 0.5171361565589905 -0.2142094224691391 -0.8286385536193848 0.5904415845870972 -0.39451277256011963 -0.7040314674377441 0.46540728211402893 -0.3109835982322693 -0.8286385536193848 0.32248908281326294 -0.2154911905527115 -0.921689510345459 0.1670888364315033 -0.1116367056965828 -0.9795831441879272 0.8274483680725098 -0.5528733134269714 -0.09799493104219437 0.8156682252883911 -0.5449995398521423 -0.19391460716724396 0.7689138650894165 -0.5137485861778259 -0.3805353045463562 0.6928922533988953 -0.46296578645706177 -0.5527512431144714 0.6538895964622498 -0.6538895964622498 -0.3805353045463562 0.5892513990402222 -0.5892513990402222 -0.5527512431144714 0.5021210312843323 -0.5021210312843323 -0.7040314674377441 0.395794540643692 -0.395794540643692 -0.8286385536193848 0.27426984906196594 -0.27426984906196594 -0.921689510345459 0.1420941799879074 -0.1420941799879074 -0.9795831441879272 0.7036957740783691 -0.7036957740783691 -0.09799493104219437 0.6936551928520203 -0.6936551928520203 -0.19391460716724396 0.2154911905527115 -0.32248908281326294 -0.921689510345459 0.1116367056965828 -0.1670888364315033 -0.9795831441879272 0.5528733134269714 -0.8274483680725098 -0.09799493104219437 0.5449995398521423 -0.8156682252883911 -0.19391460716724396 0.5137485861778259 -0.7689138650894165 -0.3805353045463562 0.46296578645706177 -0.6928922533988953 -0.5527512431144714 0.39451277256011963 -0.5904415845870972 -0.7040314674377441 0.3109835982322693 -0.46540728211402893 -0.8286385536193848 0.2717368006706238 -0.6560564041137695 -0.7040314674377441 0.2142094224691391 -0.5171361565589905 -0.8286385536193848 0.14841151237487793 -0.3583483397960663 -0.921689510345459 0.07690664380788803 -0.18564409017562866 -0.9795831441879272 0.3808404803276062 -0.9194006323814392 -0.09799493104219437 0.3754081726074219 -0.9063386917114258 -0.19391460716724396 0.35386210680007935 -0.8543656468391418 -0.3805353045463562 0.3188879191875458 -0.7698904275894165 -0.5527512431144714 0.191381573677063 -0.9621570706367493 -0.19391460716724396 0.18039490282535553 -0.9069795608520508 -0.3805353045463562 0.16257210075855255 -0.8173161745071411 -0.5527512431144714 0.13852351903915405 -0.6964934468269348 -0.7040314674377441 0.10919522494077682 -0.5489974617958069 -0.8286385536193848 0.07565538585186005 -0.3804132342338562 -0.921689510345459 0.039185766130685806 -0.19708853960037231 -0.9795831441879272 0.19412824511528015 -0.9760429859161377 -0.09799493104219437 0.0 -0.5597705245018005 -0.8286385536193848 0.0 -0.3878597319126129 -0.921689510345459 0.0 -0.20096439123153687 -0.9795831441879272 0.0 -0.9951781034469604 -0.09799493104219437 0.0 -0.9809869527816772 -0.19391460716724396 0.0 -0.9247413277626038 -0.3805353045463562 0.0 -0.8333384394645691 -0.5527512431144714 0.0 -0.7101352214813232 -0.7040314674377441 -0.16257210075855255 -0.8173161745071411 -0.5527512431144714 -0.13852351903915405 -0.6964934468269348 -0.7040314674377441 -0.10919522494077682 -0.5489974617958069 -0.8286385536193848 -0.07565538585186005 -0.3804132342338562 -0.921689510345459 -0.039185766130685806 -0.19708853960037231 -0.9795831441879272 -0.19412824511528015 -0.9760429859161377 -0.09799493104219437 -0.191381573677063 -0.9621570706367493 -0.19391460716724396 -0.18039490282535553 -0.9069795608520508 -0.3805353045463562 -0.3754081726074219 -0.9063386917114258 -0.19391460716724396 -0.35389262437820435 -0.8543656468391418 -0.3805353045463562 -0.3188879191875458 -0.7698904275894165 -0.5527512431144714 -0.2717368006706238 -0.6560564041137695 -0.7040314674377441 -0.2142094224691391 -0.5171361565589905 -0.8286385536193848 -0.14841151237487793 -0.3583483397960663 -0.921689510345459 -0.07690664380788803 -0.18564409017562866 -0.9795831441879272 -0.3808404803276062 -0.9194006323814392 -0.09799493104219437 -0.3109835982322693 -0.46540728211402893 -0.8286385536193848 -0.2154911905527115 -0.32248908281326294 -0.921689510345459 -0.1116367056965828 -0.1670888364315033 -0.9795831441879272 -0.5528733134269714 -0.8274483680725098 -0.09799493104219437 -0.5449995398521423 -0.8156682252883911 -0.19391460716724396 -0.5137485861778259 -0.7689138650894165 -0.3805353045463562 -0.46296578645706177 -0.6928922533988953 -0.5527512431144714 -0.39451277256011963 -0.5904415845870972 -0.7040314674377441 -0.5892513990402222 -0.5892513990402222 -0.5527512431144714 -0.5021210312843323 -0.5021210312843323 -0.7040314674377441 -0.395794540643692 -0.395794540643692 -0.8286385536193848 -0.27426984906196594 -0.27426984906196594 -0.921689510345459 -0.1420941799879074 -0.1420941799879074 -0.9795831441879272 -0.7036957740783691 -0.7036957740783691 -0.09799493104219437 -0.6936551928520203 -0.6936551928520203 -0.19391460716724396 -0.6538895964622498 -0.6538895964622498 -0.3805353045463562 -0.8156682252883911 -0.5449995398521423 -0.19391460716724396 -0.7689138650894165 -0.5137485861778259 -0.3805353045463562 -0.6928922533988953 -0.46296578645706177 -0.5527512431144714 -0.5904415845870972 -0.39451277256011963 -0.7040314674377441 -0.46540728211402893 -0.3109835982322693 -0.8286385536193848 -0.32248908281326294 -0.2154911905527115 -0.921689510345459 -0.1670888364315033 -0.1116367056965828 -0.9795831441879272 -0.8274483680725098 -0.5528733134269714 -0.09799493104219437 -0.5171361565589905 -0.2142094224691391 -0.8286385536193848 -0.3583483397960663 -0.14841151237487793 -0.921689510345459 -0.18564409017562866 -0.07690664380788803 -0.9795831441879272 -0.9194006323814392 -0.3808099627494812 -0.09799493104219437 -0.9063386917114258 -0.3754081726074219 -0.19391460716724396 -0.8543656468391418 -0.35386210680007935 -0.3805353045463562 -0.7698904275894165 -0.3188879191875458 -0.5527512431144714 -0.6560564041137695 -0.2717368006706238 -0.7040314674377441 -0.8173161745071411 -0.16257210075855255 -0.5527512431144714 -0.6964934468269348 -0.13852351903915405 -0.7040314674377441 -0.5489974617958069 -0.10919522494077682 -0.8286385536193848 -0.3804132342338562 -0.07565538585186005 -0.921689510345459 -0.19708853960037231 -0.039185766130685806 -0.9795831441879272 -0.9760429859161377 -0.19412824511528015 -0.09799493104219437 -0.9621570706367493 -0.191381573677063 -0.19391460716724396 -0.9069795608520508 -0.18039490282535553 -0.3805353045463562 0.0 0.0 -0.999969482421875 -0.7070833444595337 -0.7070833444595337 0.0 -0.8314462900161743 -0.5555589199066162 0.0 -0.8314462900161743 -0.5555589199066162 0.0 -0.7070833444595337 -0.7070833444595337 0.0 0.19507431983947754 0.9807733297348022 0.0 0.382671594619751 0.9238563179969788 0.0 0.382671594619751 0.9238563179969788 0.0 0.19507431983947754 0.9807733297348022 0.0 0.9238563179969788 0.382671594619751 0.0 0.9807733297348022 0.19507431983947754 0.0 0.9807733297348022 0.19507431983947754 0.0 0.9238563179969788 0.382671594619751 0.0 -0.9238563179969788 -0.382671594619751 0.0 -0.9238563179969788 -0.382671594619751 0.0 0.382671594619751 -0.9238563179969788 0.0 0.19507431983947754 -0.9807733297348022 0.0 0.19507431983947754 -0.9807733297348022 0.0 0.382671594619751 -0.9238563179969788 0.0 0.8314462900161743 0.5555589199066162 0.0 0.8314462900161743 0.5555589199066162 0.0 -0.8314462900161743 0.5555589199066162 0.0 -0.7070833444595337 0.7070833444595337 0.0 -0.7070833444595337 0.7070833444595337 0.0 -0.8314462900161743 0.5555589199066162 0.0 -0.382671594619751 -0.9238563179969788 0.0 -0.5555589199066162 -0.8314462900161743 0.0 -0.5555589199066162 -0.8314462900161743 0.0 -0.382671594619751 -0.9238563179969788 0.0 -0.5555589199066162 0.8314462900161743 0.0 -0.5555589199066162 0.8314462900161743 0.0 0.9807733297348022 -0.19507431983947754 0.0 0.9238563179969788 -0.382671594619751 0.0 0.9238563179969788 -0.382671594619751 0.0 0.9807733297348022 -0.19507431983947754 0.0 0.0 -1.0 0.0 0.0 -1.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 -0.19507431983947754 0.9807733297348022 0.0 0.0 1.0 0.0 0.0 1.0 0.0 -0.19507431983947754 0.9807733297348022 0.0 -0.9807733297348022 -0.19507431983947754 0.0 -1.0 0.0 0.0 -1.0 0.0 0.0 -0.9807733297348022 -0.19507431983947754 0.0 0.8314462900161743 -0.5555589199066162 0.0 0.7070833444595337 -0.7070833444595337 0.0 0.7070833444595337 -0.7070833444595337 0.0 0.8314462900161743 -0.5555589199066162 0.0 0.5555589199066162 0.8314462900161743 0.0 0.5555589199066162 0.8314462900161743 0.0 -0.9807733297348022 0.19507431983947754 0.0 -0.9238563179969788 0.382671594619751 0.0 -0.9238563179969788 0.382671594619751 0.0 -0.9807733297348022 0.19507431983947754 0.0 -0.382671594619751 0.9238563179969788 0.0 -0.382671594619751 0.9238563179969788 0.0 0.7070833444595337 0.7070833444595337 0.0 0.7070833444595337 0.7070833444595337 0.0 -0.19507431983947754 -0.9807733297348022 0.0 -0.19507431983947754 -0.9807733297348022 0.0 0.5555589199066162 -0.8314462900161743 0.0 0.5555589199066162 -0.8314462900161743 0.0</float_array>
- <technique_common>
- <accessor source="#id-mesh-4-normals-array" count="578" stride="3">
- <param name="X" type="float"/>
- <param name="Y" type="float"/>
- <param name="Z" type="float"/>
- </accessor>
- </technique_common>
- </source>
- <vertices id="id-mesh-4-vertices">
- <input semantic="POSITION" source="#id-mesh-4-positions"/>
- </vertices>
- <triangles count="1024" material="id-trimat-5">
- <input semantic="VERTEX" source="#id-mesh-4-vertices" offset="0"/>
- <input semantic="NORMAL" source="#id-mesh-4-normals" offset="1"/>
- <p> 0 0 1 1 2 2 0 0 2 2 3 3 4 4 0 0 3 3 4 4 3 3 5 5 6 6 4 4 5 5 6 6 5 5 7 7 8 8 6 6 7 7 8 8 7 7 9 9 10 10 8 8 9 9 10 10 9 9 11 11 12 12 13 13 14 14 12 12 14 14 15 15 1 1 12 12 15 15 1 1 15 15 2 2 9 9 7 7 16 16 9 9 16 16 17 17 11 11 9 9 17 17 11 11 17 17 18 18 15 15 14 14 19 19 15 15 19 19 20 20 2 2 15 15 20 20 2 2 20 20 21 21 3 3 2 2 21 21 3 3 21 21 22 22 5 5 3 3 22 22 5 5 22 22 23 23 7 7 5 5 23 23 7 7 23 23 16 16 22 22 21 21 24 24 22 22 24 24 25 25 23 23 22 22 25 25 23 23 25 25 26 26 16 16 23 23 26 26 16 16 26 26 27 27 17 17 16 16 27 27 17 17 27 27 28 28 18 18 17 17 28 28 18 18 28 28 29 29 20 20 19 19 30 30 20 20 30 30 31 31 21 21 20 20 31 31 21 21 31 31 24 24 29 29 28 28 32 32 29 29 32 32 33 33 31 31 30 30 34 34 31 31 34 34 35 35 24 24 31 31 35 35 24 24 35 35 36 36 25 25 24 24 36 36 25 25 36 36 37 37 26 26 25 25 37 37 26 26 37 37 38 38 27 27 26 26 38 38 27 27 38 38 39 39 28 28 27 27 39 39 28 28 39 39 32 32 39 39 38 38 40 40 39 39 40 40 41 41 32 32 39 39 41 41 32 32 41 41 42 42 33 33 32 32 42 42 33 33 42 42 43 43 35 35 34 34 44 44 35 35 44 44 45 45 36 36 35 35 45 45 36 36 45 45 46 46 37 37 36 36 46 46 37 37 46 46 47 47 38 38 37 37 47 47 38 38 47 47 40 40 47 47 46 46 48 48 47 47 48 48 49 49 40 40 47 47 49 49 40 40 49 49 50 50 41 41 40 40 50 50 41 41 50 50 51 51 42 42 41 41 51 51 42 42 51 51 52 52 43 43 42 42 52 52 43 43 52 52 53 53 45 45 44 44 54 54 45 45 54 54 55 55 46 46 45 45 55 55 46 46 55 55 48 48 53 53 52 52 56 56 53 53 56 56 57 57 55 55 54 54 58 58 55 55 58 58 59 59 48 48 55 55 59 59 48 48 59 59 60 60 49 49 48 48 60 60 49 49 60 60 61 61 50 50 49 49 61 61 50 50 61 61 62 62 51 51 50 50 62 62 51 51 62 62 63 63 52 52 51 51 63 63 52 52 63 63 56 56 63 63 62 62 64 64 63 63 64 64 65 65 56 56 63 63 65 65 56 56 65 65 66 66 57 57 56 56 66 66 57 57 66 66 67 67 59 59 58 58 68 68 59 59 68 68 69 69 60 60 59 59 69 69 60 60 69 69 70 70 61 61 60 60 70 70 61 61 70 70 71 71 62 62 61 61 71 71 62 62 71 71 64 64 71 71 70 70 72 72 71 71 72 72 73 73 64 64 71 71 73 73 64 64 73 73 74 74 65 65 64 64 74 74 65 65 74 74 75 75 66 66 65 65 75 75 66 66 75 75 76 76 67 67 66 66 76 76 67 67 76 76 77 77 69 69 68 68 78 78 69 69 78 78 79 79 70 70 69 69 79 79 70 70 79 79 72 72 77 77 76 76 80 80 77 77 80 80 81 81 79 79 78 78 82 82 79 79 82 82 83 83 72 72 79 79 83 83 72 72 83 83 84 84 73 73 72 72 84 84 73 73 84 84 85 85 74 74 73 73 85 85 74 74 85 85 86 86 75 75 74 74 86 86 75 75 86 86 87 87 76 76 75 75 87 87 76 76 87 87 80 80 87 87 86 86 88 88 87 87 88 88 89 89 80 80 87 87 89 89 80 80 89 89 90 90 81 81 80 80 90 90 81 81 90 90 91 91 83 83 82 82 92 92 83 83 92 92 93 93 84 84 83 83 93 93 84 84 93 93 94 94 85 85 84 84 94 94 85 85 94 94 95 95 86 86 85 85 95 95 86 86 95 95 88 88 94 94 93 93 96 96 94 94 96 96 97 97 95 95 94 94 97 97 95 95 97 97 98 98 88 88 95 95 98 98 88 88 98 98 99 99 89 89 88 88 99 99 89 89 99 99 100 100 90 90 89 89 100 100 90 90 100 100 101 101 91 91 90 90 101 101 91 91 101 101 102 102 93 93 92 92 103 103 93 93 103 103 96 96 101 101 100 100 104 104 101 101 104 104 105 105 102 102 101 101 105 105 102 102 105 105 106 106 96 96 103 103 107 107 96 96 107 107 108 108 97 97 96 96 108 108 97 97 108 108 109 109 98 98 97 97 109 109 98 98 109 109 110 110 99 99 98 98 110 110 99 99 110 110 111 111 100 100 99 99 111 111 100 100 111 111 104 104 111 111 110 110 112 112 111 111 112 112 113 113 104 104 111 111 113 113 104 104 113 113 114 114 105 105 104 104 114 114 105 105 114 114 115 115 106 106 105 105 115 115 106 106 115 115 116 116 108 108 107 107 117 117 108 108 117 117 118 118 109 109 108 108 118 118 109 109 118 118 119 119 110 110 109 109 119 119 110 110 119 119 112 112 119 119 118 118 120 120 119 119 120 120 121 121 112 112 119 119 121 121 112 112 121 121 122 122 113 113 112 112 122 122 113 113 122 122 123 123 114 114 113 113 123 123 114 114 123 123 124 124 115 115 114 114 124 124 115 115 124 124 125 125 116 116 115 115 125 125 116 116 125 125 126 126 118 118 117 117 127 127 118 118 127 127 120 120 125 125 124 124 128 128 125 125 128 128 129 129 126 126 125 125 129 129 126 126 129 129 130 130 120 120 127 127 131 131 120 120 131 131 132 132 121 121 120 120 132 132 121 121 132 132 133 133 122 122 121 121 133 133 122 122 133 133 134 134 123 123 122 122 134 134 123 123 134 134 135 135 124 124 123 123 135 135 124 124 135 135 128 128 135 135 134 134 136 136 135 135 136 136 137 137 128 128 135 135 137 137 128 128 137 137 138 138 129 129 128 128 138 138 129 129 138 138 139 139 130 130 129 129 139 139 130 130 139 139 140 140 132 132 131 131 141 141 132 132 141 141 142 142 133 133 132 132 142 142 133 133 142 142 143 143 134 134 133 133 143 143 134 134 143 143 136 136 143 143 142 142 144 144 143 143 144 144 145 145 136 136 143 143 145 145 136 136 145 145 146 146 137 137 136 136 146 146 137 137 146 146 147 147 138 138 137 137 147 147 138 138 147 147 148 148 139 139 138 138 148 148 139 139 148 148 149 149 140 140 139 139 149 149 140 140 149 149 150 150 142 142 141 141 151 151 142 142 151 151 144 144 149 149 148 148 152 152 149 149 152 152 153 153 150 150 149 149 153 153 150 150 153 153 154 154 144 144 151 151 155 155 144 144 155 155 156 156 145 145 144 144 156 156 145 145 156 156 157 157 146 146 145 145 157 157 146 146 157 157 158 158 147 147 146 146 158 158 147 147 158 158 159 159 148 148 147 147 159 159 148 148 159 159 152 152 159 159 158 158 160 160 159 159 160 160 161 161 152 152 159 159 161 161 152 152 161 161 162 162 153 153 152 152 162 162 153 153 162 162 163 163 154 154 153 153 163 163 154 154 163 163 164 164 156 156 155 155 165 165 156 156 165 165 166 166 157 157 156 156 166 166 157 157 166 166 167 167 158 158 157 157 167 167 158 158 167 167 160 160 166 166 165 165 168 168 166 166 168 168 169 169 167 167 166 166 169 169 167 167 169 169 170 170 160 160 167 167 170 170 160 160 170 170 171 171 161 161 160 160 171 171 161 161 171 171 172 172 162 162 161 161 172 172 162 162 172 172 173 173 163 163 162 162 173 173 163 163 173 173 174 174 164 164 163 163 174 174 164 164 174 174 175 175 173 173 172 172 176 176 173 173 176 176 177 177 174 174 173 173 177 177 174 174 177 177 178 178 175 175 174 174 178 178 175 175 178 178 179 179 169 169 168 168 180 180 169 169 180 180 181 181 170 170 169 169 181 181 170 170 181 181 182 182 171 171 170 170 182 182 171 171 182 182 183 183 172 172 171 171 183 183 172 172 183 183 176 176 183 183 182 182 184 184 183 183 184 184 185 185 176 176 183 183 185 185 176 176 185 185 186 186 177 177 176 176 186 186 177 177 186 186 187 187 178 178 177 177 187 187 178 178 187 187 188 188 179 179 178 178 188 188 179 179 188 188 189 189 181 181 180 180 190 190 181 181 190 190 191 191 182 182 181 181 191 191 182 182 191 191 184 184 189 189 188 188 192 192 189 189 192 192 193 193 191 191 190 190 194 194 191 191 194 194 195 195 184 184 191 191 195 195 184 184 195 195 196 196 185 185 184 184 196 196 185 185 196 196 197 197 186 186 185 185 197 197 186 186 197 197 198 198 187 187 186 186 198 198 187 187 198 198 199 199 188 188 187 187 199 199 188 188 199 199 192 192 199 199 198 198 200 200 199 199 200 200 201 201 192 192 199 199 201 201 192 192 201 201 202 202 193 193 192 192 202 202 193 193 202 202 203 203 195 195 194 194 204 204 195 195 204 204 205 205 196 196 195 195 205 205 196 196 205 205 206 206 197 197 196 196 206 206 197 197 206 206 207 207 198 198 197 197 207 207 198 198 207 207 200 200 207 207 206 206 208 208 207 207 208 208 209 209 200 200 207 207 209 209 200 200 209 209 210 210 201 201 200 200 210 210 201 201 210 210 211 211 202 202 201 201 211 211 202 202 211 211 212 212 203 203 202 202 212 212 203 203 212 212 213 213 205 205 204 204 214 214 205 205 214 214 215 215 206 206 205 205 215 215 206 206 215 215 208 208 213 213 212 212 216 216 213 213 216 216 217 217 215 215 214 214 218 218 215 215 218 218 219 219 208 208 215 215 219 219 208 208 219 219 220 220 209 209 208 208 220 220 209 209 220 220 221 221 210 210 209 209 221 221 210 210 221 221 222 222 211 211 210 210 222 222 211 211 222 222 223 223 212 212 211 211 223 223 212 212 223 223 216 216 223 223 222 222 224 224 223 223 224 224 225 225 216 216 223 223 225 225 216 216 225 225 226 226 217 217 216 216 226 226 217 217 226 226 227 227 219 219 218 218 228 228 219 219 228 228 229 229 220 220 219 219 229 229 220 220 229 229 230 230 221 221 220 220 230 230 221 221 230 230 231 231 222 222 221 221 231 231 222 222 231 231 224 224 231 231 230 230 232 232 231 231 232 232 233 233 224 224 231 231 233 233 224 224 233 233 234 234 225 225 224 224 234 234 225 225 234 234 235 235 226 226 225 225 235 235 226 226 235 235 236 236 227 227 226 226 236 236 227 227 236 236 237 237 229 229 228 228 238 238 229 229 238 238 239 239 230 230 229 229 239 239 230 230 239 239 232 232 237 237 236 236 240 240 237 237 240 240 241 241 239 239 238 238 242 242 239 239 242 242 243 243 232 232 239 239 243 243 232 232 243 243 244 244 233 233 232 232 244 244 233 233 244 244 245 245 234 234 233 233 245 245 234 234 245 245 246 246 235 235 234 234 246 246 235 235 246 246 247 247 236 236 235 235 247 247 236 236 247 247 240 240 246 246 245 245 248 248 246 246 248 248 249 249 247 247 246 246 249 249 247 247 249 249 250 250 240 240 247 247 250 250 240 240 250 250 251 251 241 241 240 240 251 251 241 241 251 251 252 252 243 243 242 242 253 253 243 243 253 253 254 254 244 244 243 243 254 254 244 244 254 254 255 255 245 245 244 244 255 255 245 245 255 255 248 248 13 13 256 256 14 14 14 14 256 256 19 19 19 19 256 256 30 30 30 30 256 256 34 34 34 34 256 256 44 44 44 44 256 256 54 54 54 54 256 256 58 58 58 58 256 256 68 68 68 68 256 256 78 78 78 78 256 256 82 82 82 82 256 256 92 92 92 92 256 256 103 103 103 103 256 256 107 107 107 107 256 256 117 117 117 117 256 256 127 127 127 127 256 256 131 131 131 131 256 256 141 141 141 141 256 256 151 151 151 151 256 256 155 155 155 155 256 256 165 165 165 165 256 256 168 168 168 168 256 256 180 180 180 180 256 256 190 190 190 190 256 256 194 194 194 194 256 256 204 204 204 204 256 256 214 214 214 214 256 256 218 218 218 218 256 256 228 228 228 228 256 256 238 238 238 238 256 256 242 242 242 242 256 256 253 253 255 255 254 254 12 12 255 255 12 12 1 1 248 248 255 255 1 1 248 248 1 1 0 0 249 249 248 248 0 0 249 249 0 0 4 4 250 250 249 249 4 4 250 250 4 4 6 6 251 251 250 250 6 6 251 251 6 6 8 8 256 256 13 13 253 253 252 252 251 251 8 8 252 252 8 8 10 10 13 13 12 12 254 254 13 13 254 254 253 253 257 257 258 258 259 259 257 257 259 259 260 260 261 261 257 257 260 260 261 261 260 260 262 262 263 263 261 261 262 262 263 263 262 262 264 264 265 265 263 263 264 264 265 265 264 264 266 266 267 267 265 265 266 266 267 267 266 266 268 268 269 269 267 267 268 268 269 269 268 268 270 270 258 258 271 271 272 272 258 258 272 272 259 259 266 266 264 264 273 273 266 266 273 273 274 274 268 268 266 266 274 274 268 268 274 274 275 275 270 270 268 268 275 275 270 270 275 275 276 276 259 259 272 272 277 277 259 259 277 277 278 278 260 260 259 259 278 278 260 260 278 278 279 279 262 262 260 260 279 279 262 262 279 279 280 280 264 264 262 262 280 280 264 264 280 280 273 273 280 280 279 279 281 281 280 280 281 281 282 282 273 273 280 280 282 282 273 273 282 282 283 283 274 274 273 273 283 283 274 274 283 283 284 284 275 275 274 274 284 284 275 275 284 284 285 285 276 276 275 275 285 285 276 276 285 285 286 286 278 278 277 277 287 287 278 278 287 287 288 288 279 279 278 278 288 288 279 279 288 288 281 281 286 286 285 285 289 289 286 286 289 289 290 290 288 288 287 287 291 291 288 288 291 291 292 292 281 281 288 288 292 292 281 281 292 292 293 293 282 282 281 281 293 293 282 282 293 293 294 294 283 283 282 282 294 294 283 283 294 294 295 295 284 284 283 283 295 295 284 284 295 295 296 296 285 285 284 284 296 296 285 285 296 296 289 289 295 295 294 294 297 297 295 295 297 297 298 298 296 296 295 295 298 298 296 296 298 298 299 299 289 289 296 296 299 299 289 289 299 299 300 300 290 290 289 289 300 300 290 290 300 300 301 301 292 292 291 291 302 302 292 292 302 302 303 303 293 293 292 292 303 303 293 293 303 303 304 304 294 294 293 293 304 304 294 294 304 304 297 297 304 304 303 303 305 305 304 304 305 305 306 306 297 297 304 304 306 306 297 297 306 306 307 307 298 298 297 297 307 307 298 298 307 307 308 308 299 299 298 298 308 308 299 299 308 308 309 309 300 300 299 299 309 309 300 300 309 309 310 310 301 301 300 300 310 310 301 301 310 310 311 311 303 303 302 302 312 312 303 303 312 312 305 305 310 310 309 309 313 313 310 310 313 313 314 314 311 311 310 310 314 314 311 311 314 314 315 315 305 305 312 312 316 316 305 305 316 316 317 317 306 306 305 305 317 317 306 306 317 317 318 318 307 307 306 306 318 318 307 307 318 318 319 319 308 308 307 307 319 319 308 308 319 319 320 320 309 309 308 308 320 320 309 309 320 320 313 313 320 320 319 319 321 321 320 320 321 321 322 322 313 313 320 320 322 322 313 313 322 322 323 323 314 314 313 313 323 323 314 314 323 323 324 324 315 315 314 314 324 324 315 315 324 324 325 325 317 317 316 316 326 326 317 317 326 326 327 327 318 318 317 317 327 327 318 318 327 327 328 328 319 319 318 318 328 328 319 319 328 328 321 321 328 328 327 327 329 329 328 328 329 329 330 330 321 321 328 328 330 330 321 321 330 330 331 331 322 322 321 321 331 331 322 322 331 331 332 332 323 323 322 322 332 332 323 323 332 332 333 333 324 324 323 323 333 333 324 324 333 333 334 334 325 325 324 324 334 334 325 325 334 334 335 335 327 327 326 326 336 336 327 327 336 336 329 329 334 334 333 333 337 337 334 334 337 337 338 338 335 335 334 334 338 338 335 335 338 338 339 339 329 329 336 336 340 340 329 329 340 340 341 341 330 330 329 329 341 341 330 330 341 341 342 342 331 331 330 330 342 342 331 331 342 342 343 343 332 332 331 331 343 343 332 332 343 343 344 344 333 333 332 332 344 344 333 333 344 344 337 337 344 344 343 343 345 345 344 344 345 345 346 346 337 337 344 344 346 346 337 337 346 346 347 347 338 338 337 337 347 347 338 338 347 347 348 348 339 339 338 338 348 348 339 339 348 348 349 349 341 341 340 340 350 350 341 341 350 350 351 351 342 342 341 341 351 351 342 342 351 351 352 352 343 343 342 342 352 352 343 343 352 352 345 345 352 352 351 351 353 353 352 352 353 353 354 354 345 345 352 352 354 354 345 345 354 354 355 355 346 346 345 345 355 355 346 346 355 355 356 356 347 347 346 346 356 356 347 347 356 356 357 357 348 348 347 347 357 357 348 348 357 357 358 358 349 349 348 348 358 358 349 349 358 358 359 359 351 351 350 350 360 360 351 351 360 360 353 353 358 358 357 357 361 361 358 358 361 361 362 362 359 359 358 358 362 362 359 359 362 362 363 363 353 353 360 360 364 364 353 353 364 364 365 365 354 354 353 353 365 365 354 354 365 365 366 366 355 355 354 354 366 366 355 355 366 366 367 367 356 356 355 355 367 367 356 356 367 367 368 368 357 357 356 356 368 368 357 357 368 368 361 361 367 367 366 366 369 369 367 367 369 369 370 370 368 368 367 367 370 370 368 368 370 370 371 371 361 361 368 368 371 371 361 361 371 371 372 372 362 362 361 361 372 372 362 362 372 372 373 373 363 363 362 362 373 373 363 363 373 373 374 374 365 365 364 364 375 375 365 365 375 375 376 376 366 366 365 365 376 376 366 366 376 376 369 369 374 374 373 373 377 377 374 374 377 377 378 378 376 376 375 375 379 379 376 376 379 379 380 380 369 369 376 376 380 380 369 369 380 380 381 381 370 370 369 369 381 381 370 370 381 381 382 382 371 371 370 370 382 382 371 371 382 382 383 383 372 372 371 371 383 383 372 372 383 383 384 384 373 373 372 372 384 384 373 373 384 384 377 377 384 384 383 383 385 385 384 384 385 385 386 386 377 377 384 384 386 386 377 377 386 386 387 387 378 378 377 377 387 387 378 378 387 387 388 388 380 380 379 379 389 389 380 380 389 389 390 390 381 381 380 380 390 390 381 381 390 390 391 391 382 382 381 381 391 391 382 382 391 391 392 392 383 383 382 382 392 392 383 383 392 392 385 385 392 392 391 391 393 393 392 392 393 393 394 394 385 385 392 392 394 394 385 385 394 394 395 395 386 386 385 385 395 395 386 386 395 395 396 396 387 387 386 386 396 396 387 387 396 396 397 397 388 388 387 387 397 397 388 388 397 397 398 398 390 390 389 389 399 399 390 390 399 399 400 400 391 391 390 390 400 400 391 391 400 400 393 393 398 398 397 397 401 401 398 398 401 401 402 402 400 400 399 399 403 403 400 400 403 403 404 404 393 393 400 400 404 404 393 393 404 404 405 405 394 394 393 393 405 405 394 394 405 405 406 406 395 395 394 394 406 406 395 395 406 406 407 407 396 396 395 395 407 407 396 396 407 407 408 408 397 397 396 396 408 408 397 397 408 408 401 401 408 408 407 407 409 409 408 408 409 409 410 410 401 401 408 408 410 410 401 401 410 410 411 411 402 402 401 401 411 411 402 402 411 411 412 412 404 404 403 403 413 413 404 404 413 413 414 414 405 405 404 404 414 414 405 405 414 414 415 415 406 406 405 405 415 415 406 406 415 415 416 416 407 407 406 406 416 416 407 407 416 416 409 409 416 416 415 415 417 417 416 416 417 417 418 418 409 409 416 416 418 418 409 409 418 418 419 419 410 410 409 409 419 419 410 410 419 419 420 420 411 411 410 410 420 420 411 411 420 420 421 421 412 412 411 411 421 421 412 412 421 421 422 422 414 414 413 413 423 423 414 414 423 423 424 424 415 415 414 414 424 424 415 415 424 424 417 417 422 422 421 421 425 425 422 422 425 425 426 426 424 424 423 423 427 427 424 424 427 427 428 428 417 417 424 424 428 428 417 417 428 428 429 429 418 418 417 417 429 429 418 418 429 429 430 430 419 419 418 418 430 430 419 419 430 430 431 431 420 420 419 419 431 431 420 420 431 431 432 432 421 421 420 420 432 432 421 421 432 432 425 425 432 432 431 431 433 433 432 432 433 433 434 434 425 425 432 432 434 434 425 425 434 434 435 435 426 426 425 425 435 435 426 426 435 435 436 436 428 428 427 427 437 437 428 428 437 437 438 438 429 429 428 428 438 438 429 429 438 438 439 439 430 430 429 429 439 439 430 430 439 439 440 440 431 431 430 430 440 440 431 431 440 440 433 433 439 439 438 438 441 441 439 439 441 441 442 442 440 440 439 439 442 442 440 440 442 442 443 443 433 433 440 440 443 443 433 433 443 443 444 444 434 434 433 433 444 444 434 434 444 444 445 445 435 435 434 434 445 445 435 435 445 445 446 446 436 436 435 435 446 446 436 436 446 446 447 447 438 438 437 437 448 448 438 438 448 448 441 441 446 446 445 445 449 449 446 446 449 449 450 450 447 447 446 446 450 450 447 447 450 450 451 451 441 441 448 448 452 452 441 441 452 452 453 453 442 442 441 441 453 453 442 442 453 453 454 454 443 443 442 442 454 454 443 443 454 454 455 455 444 444 443 443 455 455 444 444 455 455 456 456 445 445 444 444 456 456 445 445 456 456 449 449 456 456 455 455 457 457 456 456 457 457 458 458 449 449 456 456 458 458 449 449 458 458 459 459 450 450 449 449 459 459 450 450 459 459 460 460 451 451 450 450 460 460 451 451 460 460 461 461 453 453 452 452 462 462 453 453 462 462 463 463 454 454 453 453 463 463 454 454 463 463 464 464 455 455 454 454 464 464 455 455 464 464 457 457 464 464 463 463 465 465 464 464 465 465 466 466 457 457 464 464 466 466 457 457 466 466 467 467 458 458 457 457 467 467 458 458 467 467 468 468 459 459 458 458 468 468 459 459 468 468 469 469 460 460 459 459 469 469 460 460 469 469 470 470 461 461 460 460 470 470 461 461 470 470 471 471 463 463 462 462 472 472 463 463 472 472 465 465 470 470 469 469 473 473 470 470 473 473 474 474 471 471 470 470 474 474 471 471 474 474 475 475 465 465 472 472 476 476 465 465 476 476 477 477 466 466 465 465 477 477 466 466 477 477 478 478 467 467 466 466 478 478 467 467 478 478 479 479 468 468 467 467 479 479 468 468 479 479 480 480 469 469 468 468 480 480 469 469 480 480 473 473 480 480 479 479 481 481 480 480 481 481 482 482 473 473 480 480 482 482 473 473 482 482 483 483 474 474 473 473 483 483 474 474 483 483 484 484 475 475 474 474 484 484 475 475 484 484 485 485 477 477 476 476 486 486 477 477 486 486 487 487 478 478 477 477 487 487 478 478 487 487 488 488 479 479 478 478 488 488 479 479 488 488 481 481 488 488 487 487 489 489 488 488 489 489 490 490 481 481 488 488 490 490 481 481 490 490 491 491 482 482 481 481 491 491 482 482 491 491 492 492 483 483 482 482 492 492 483 483 492 492 493 493 484 484 483 483 493 493 484 484 493 493 494 494 485 485 484 484 494 494 485 485 494 494 495 495 487 487 486 486 496 496 487 487 496 496 489 489 494 494 493 493 497 497 494 494 497 497 498 498 495 495 494 494 498 498 495 495 498 498 499 499 489 489 496 496 500 500 489 489 500 500 501 501 490 490 489 489 501 501 490 490 501 501 502 502 491 491 490 490 502 502 491 491 502 502 503 503 492 492 491 491 503 503 492 492 503 503 504 504 493 493 492 492 504 504 493 493 504 504 497 497 504 504 503 503 505 505 504 504 505 505 506 506 497 497 504 504 506 506 497 497 506 506 507 507 498 498 497 497 507 507 498 498 507 507 508 508 499 499 498 498 508 508 499 499 508 508 509 509 501 501 500 500 510 510 501 501 510 510 511 511 502 502 501 501 511 511 502 502 511 511 512 512 503 503 502 502 512 512 503 503 512 512 505 505 513 513 269 269 270 270 513 513 270 270 276 276 513 513 276 276 286 286 513 513 286 286 290 290 513 513 290 290 301 301 513 513 301 301 311 311 513 513 311 311 315 315 513 513 315 315 325 325 513 513 325 325 335 335 513 513 335 335 339 339 513 513 339 339 349 349 513 513 349 349 359 359 513 513 359 359 363 363 513 513 363 363 374 374 513 513 374 374 378 378 513 513 378 378 388 388 513 513 388 388 398 398 513 513 398 398 402 402 513 513 402 402 412 412 513 513 412 412 422 422 513 513 422 422 426 426 513 513 426 426 436 436 513 513 436 436 447 447 513 513 447 447 451 451 513 513 451 451 461 461 513 513 461 461 471 471 513 513 471 471 475 475 513 513 475 475 485 485 513 513 485 485 495 495 513 513 495 495 499 499 513 513 499 499 509 509 511 511 510 510 271 271 511 511 271 271 258 258 513 513 509 509 269 269 512 512 511 511 258 258 512 512 258 258 257 257 505 505 512 512 257 257 505 505 257 257 261 261 506 506 505 505 261 261 506 506 261 261 263 263 507 507 506 506 263 263 507 507 263 263 265 265 508 508 507 507 265 265 508 508 265 265 267 267 509 509 508 508 267 267 509 509 267 267 269 269 514 514 515 515 516 516 514 514 516 516 517 517 518 518 519 519 520 520 518 518 520 520 521 521 522 522 523 523 524 524 522 522 524 524 525 525 515 515 526 526 527 527 515 515 527 527 516 516 528 528 529 529 530 530 528 528 530 530 531 531 532 532 522 522 525 525 532 532 525 525 533 533 534 534 535 535 536 536 534 534 536 536 537 537 538 538 539 539 540 540 538 538 540 540 541 541 535 535 542 542 543 543 535 535 543 543 536 536 544 544 545 545 546 546 544 544 546 546 547 547 529 529 548 548 549 549 529 529 549 549 530 530 550 550 544 544 547 547 550 550 547 547 551 551 552 552 553 553 554 554 552 552 554 554 555 555 556 556 557 557 558 558 556 556 558 558 559 559 560 560 561 561 562 562 560 560 562 562 563 563 519 519 564 564 565 565 519 519 565 565 520 520 566 566 567 567 568 568 566 566 568 568 569 569 526 526 556 556 559 559 526 526 559 559 527 527 539 539 514 514 517 517 539 539 517 517 540 540 542 542 570 570 571 571 542 542 571 571 543 543 564 564 572 572 573 573 564 564 573 573 565 565 548 548 574 574 575 575 548 548 575 575 549 549 523 523 550 550 551 551 523 523 551 551 524 524 553 553 518 518 521 521 553 553 521 521 554 554 557 557 566 566 569 569 557 557 569 569 558 558 576 576 528 528 531 531 576 576 531 531 577 577 572 572 532 532 533 533 572 572 533 533 573 573 545 545 560 560 563 563 545 545 563 563 546 546 567 567 534 534 537 537 567 567 537 537 568 568 574 574 538 538 541 541 574 574 541 541 575 575 570 570 552 552 555 555 570 570 555 555 571 571 561 561 576 576 577 577 561 561 577 577 562 562</p>
- </triangles>
- </mesh>
- </geometry>
- <geometry id="id-mesh-8" name="Sphere">
- <mesh>
- <source id="id-mesh-8-positions">
- <float_array id="id-mesh-8-positions-array" count="1446"> -0.9238795638084412 0.0 -0.38268327713012695 -0.9807853102684021 0.0 -0.19509020447731018 -0.9619397521018982 0.19134178757667542 -0.1950901746749878 -0.9061274528503418 0.18024002015590668 -0.38268327713012695 -0.7071067690849304 0.0 0.7071067690849304 -0.5555702447891235 0.0 0.8314695954322815 -0.5448951125144958 0.10838643461465836 0.8314695358276367 -0.6935198903083801 0.13794974982738495 0.7071068286895752 -0.8314696550369263 0.0 -0.5555701851844788 -0.8154931664466858 0.16221174597740173 -0.5555701851844788 -0.8314696550369263 0.0 0.5555701851844788 -0.8154931664466858 0.16221174597740173 0.555570125579834 -0.7071067690849304 0.0 -0.7071067690849304 -0.6935198903083801 0.13794974982738495 -0.7071067690849304 -0.9238795042037964 0.0 0.3826834261417389 -0.906127393245697 0.18024000525474548 0.3826833963394165 -0.5555701851844788 0.0 -0.8314696550369263 -0.5448950529098511 0.10838642716407776 -0.8314696550369263 -0.9807852506637573 0.0 0.19509035348892212 -0.9619396924972534 0.19134177267551422 0.19509029388427734 -0.38268327713012695 0.0 -0.9238796234130859 -0.3753301203250885 0.0746578648686409 -0.9238796234130859 -1.0 0.0 7.549790126404332e-08 -0.9807853102684021 0.1950903981924057 1.1920928955078125e-07 -0.3826834559440613 0.0 0.9238795042037964 -0.19509032368659973 0.0 0.9807852506637573 -0.19134171307086945 0.038060300052165985 0.9807852506637573 -0.37533026933670044 0.07465790212154388 0.9238795042037964 -0.19509008526802063 0.0 -0.9807853102684021 -0.19134147465229034 0.038060251623392105 -0.9807853102684021 -0.6532813906669617 0.2705981731414795 -0.7071067690849304 -0.5132798552513123 0.21260762214660645 -0.8314696550369263 -0.853553295135498 0.3535534739494324 0.3826833963394165 -0.9061272740364075 0.37533038854599 0.19509029388427734 -0.3535532057285309 0.14644667506217957 -0.9238796234130859 -0.9238795042037964 0.38268357515335083 1.1920928955078125e-07 -0.18023991584777832 0.07465796172618866 0.9807852506637573 -0.3535533547401428 0.14644673466682434 0.9238795042037964 -0.1802397072315216 0.0746578648686409 -0.9807853102684021 -0.9061273336410522 0.37533038854599 -0.1950901746749878 -0.513279914855957 0.21260763704776764 0.8314695358276367 -0.8535533547401428 0.35355350375175476 -0.38268327713012695 -0.6532813906669617 0.2705981731414795 0.7071068286895752 -0.7681776881217957 0.3181897699832916 -0.5555701851844788 -0.7681776881217957 0.3181897699832916 0.555570125579834 -0.46193966269493103 0.3086584508419037 0.8314695358276367 -0.5879377126693726 0.3928476572036743 0.7071068286895752 -0.7681776881217957 0.5132801532745361 -0.38268327713012695 -0.6913415789604187 0.4619399309158325 -0.5555701851844788 -0.6913415789604187 0.4619399309158325 0.555570125579834 -0.5879377126693726 0.3928476572036743 -0.7071067690849304 -0.7681776285171509 0.5132800936698914 0.3826833963394165 -0.46193960309028625 0.3086584210395813 -0.8314696550369263 -0.8154929280281067 0.5448952317237854 0.19509029388427734 -0.31818944215774536 0.21260762214660645 -0.9238796234130859 -0.8314695358276367 0.5555704236030579 1.1920928955078125e-07 -0.1622115969657898 0.1083865538239479 0.9807852506637573 -0.3181895613670349 0.2126077115535736 0.9238795042037964 -0.16221141815185547 0.10838641226291656 -0.9807853102684021 -0.8154929876327515 0.5448952317237854 -0.1950901746749878 -0.6935195922851562 0.6935200691223145 0.19509029388427734 -0.7071066498756409 0.7071070075035095 1.1920928955078125e-07 -0.13794957101345062 0.13794991374015808 0.9807852506637573 -0.270597904920578 0.27059829235076904 0.9238795042037964 -0.27059781551361084 0.2705981731414795 -0.9238796234130859 -0.13794942200183868 0.13794973492622375 -0.9807853102684021 -0.693519651889801 0.6935200691223145 -0.1950901746749878 -0.39284732937812805 0.3928476870059967 0.8314695358276367 -0.6532813310623169 0.6532816886901855 -0.38268327713012695 -0.4999997913837433 0.5000001788139343 0.7071068286895752 -0.587937593460083 0.5879379510879517 -0.5555701851844788 -0.587937593460083 0.5879379510879517 0.555570125579834 -0.4999997913837433 0.5000001788139343 -0.7071067690849304 -0.6532812714576721 0.6532816290855408 0.3826833963394165 -0.3928472697734833 0.3928476572036743 -0.8314696550369263 -0.4619394540786743 0.6913418173789978 -0.5555701851844788 -0.3928472101688385 0.5879380106925964 -0.7071067690849304 -0.4619394540786743 0.6913418173789978 0.555570125579834 -0.5132797360420227 0.7681779265403748 0.3826833963394165 -0.30865800380706787 0.4619399309158325 -0.8314696550369263 -0.5448947548866272 0.8154932856559753 0.19509029388427734 -0.2126072645187378 0.318189799785614 -0.9238796234130859 -0.5555700659751892 0.8314698338508606 1.1920928955078125e-07 -0.10838620364665985 0.16221192479133606 0.9807852506637573 -0.21260730922222137 0.3181898891925812 0.9238795042037964 -0.1083860993385315 0.16221173107624054 -0.9807853102684021 -0.5448947548866272 0.8154932856559753 -0.1950901746749878 -0.30865806341171265 0.4619399905204773 0.8314695358276367 -0.5132797956466675 0.7681779861450195 -0.38268327713012695 -0.3928472101688385 0.5879380106925964 0.7071068286895752 -0.3753298223018646 0.9061275124549866 -0.1950901746749878 -0.3535531461238861 0.8535535931587219 -0.38268327713012695 -0.2126072645187378 0.5132802128791809 0.8314695358276367 -0.2705977261066437 0.6532816886901855 0.7071068286895752 -0.3181892931461334 0.7681778073310852 -0.5555701851844788 -0.3181892931461334 0.7681778073310852 0.555570125579834 -0.2705977261066437 0.6532816886901855 -0.7071067690849304 -0.35355308651924133 0.8535535335540771 0.3826833963394165 -0.21260720491409302 0.5132801532745361 -0.8314696550369263 -0.3753298223018646 0.9061275124549866 0.19509029388427734 -0.1464463174343109 0.35355353355407715 -0.9238796234130859 -0.3826831877231598 0.9238797426223755 1.1920928955078125e-07 -0.07465760409832001 0.1802402287721634 0.9807852506637573 -0.1464463472366333 0.3535536229610443 0.9238795042037964 -0.07465754449367523 0.18024000525474548 -0.9807853102684021 -0.10838601738214493 0.5448952913284302 -0.8314696550369263 -0.07465750724077225 0.3753304183483124 -0.9238796234130859 -0.19134125113487244 0.961939811706543 0.19509029388427734 -0.19509002566337585 0.9807854890823364 1.1920928955078125e-07 -0.03805994987487793 0.19134199619293213 0.9807852506637573 -0.07465752214193344 0.37533050775527954 0.9238795042037964 -0.03805993124842644 0.19134175777435303 -0.9807853102684021 -0.19134125113487244 0.961939811706543 -0.1950901746749878 -0.10838606208562851 0.544895350933075 0.8314695358276367 -0.18023966252803802 0.9061276316642761 -0.38268327713012695 -0.13794933259487152 0.6935201287269592 0.7071068286895752 -0.16221128404140472 0.8154932260513306 -0.5555701851844788 -0.16221128404140472 0.8154932260513306 0.555570125579834 -0.13794933259487152 0.6935201287269592 -0.7071067690849304 -0.18023961782455444 0.9061275720596313 0.3826833963394165 4.15248337048979e-07 0.8314695954322815 -0.5555701851844788 4.0034717585513135e-07 0.7071069478988647 -0.7071067690849304 4.15248337048979e-07 0.8314695954322815 0.555570125579834 3.7054485346743604e-07 0.9238796234130859 0.3826833963394165 3.928965952582075e-07 0.5555703639984131 -0.8314696550369263 4.7485298182436964e-07 0.9807852506637573 0.19509029388427734 3.556436922735884e-07 0.38268354535102844 -0.9238796234130859 3.4074253107974073e-07 1.0000001192092896 1.1920928955078125e-07 3.4446782137820264e-07 0.19509059190750122 0.9807852506637573 3.630942728705122e-07 0.3826836347579956 0.9238795042037964 3.1466549899050733e-07 0.1950903683900833 -0.9807853102684021 4.7485298182436964e-07 0.9807852506637573 -0.1950901746749878 3.630942728705122e-07 0.5555704832077026 0.8314695358276367 3.4074253107974073e-07 0.9238797426223755 -0.38268327713012695 4.0034717585513135e-07 0.7071069478988647 0.7071068286895752 0.19134218990802765 0.9619396924972534 -0.1950901746749878 0.18024034798145294 0.9061276316642761 -0.38268327713012695 0.10838679224252701 0.544895350933075 0.8314695358276367 0.1379501223564148 0.6935200691223145 0.7071068286895752 0.1622120887041092 0.815493106842041 -0.5555701851844788 0.1622120887041092 0.815493106842041 0.555570125579834 0.1379501223564148 0.6935200691223145 -0.7071067690849304 0.18024034798145294 0.9061275124549866 0.3826833963394165 0.1083867996931076 0.5448952317237854 -0.8314696550369263 0.19134218990802765 0.9619396924972534 0.19509029388427734 0.07465821504592896 0.37533038854599 -0.9238796234130859 0.19509069621562958 0.9807853698730469 1.1920928955078125e-07 0.03806062787771225 0.19134198129177094 0.9807852506637573 0.07465823739767075 0.37533047795295715 0.9238795042037964 0.03806055709719658 0.19134175777435303 -0.9807853102684021 0.2126079797744751 0.5132800340652466 -0.8314696550369263 0.14644700288772583 0.3535534739494324 -0.9238796234130859 0.37533071637153625 0.9061273336410522 0.19509029388427734 0.38268381357192993 0.9238795638084412 1.1920928955078125e-07 0.07465828210115433 0.1802401840686798 0.9807852506637573 0.1464470475912094 0.35355353355407715 0.9238795042037964 0.07465817034244537 0.1802399903535843 -0.9807853102684021 0.37533071637153625 0.9061273336410522 -0.1950901746749878 0.2126079797744751 0.5132801532745361 0.8314695358276367 0.35355380177497864 0.8535535335540771 -0.38268327713012695 0.27059850096702576 0.653281569480896 0.7071068286895752 0.3181900382041931 0.7681776285171509 -0.5555701851844788 0.3181900382041931 0.7681776285171509 0.555570125579834 0.27059850096702576 0.653281569480896 -0.7071067690849304 0.35355380177497864 0.8535534143447876 0.3826833963394165 0.46194010972976685 0.6913415789604187 -0.5555701851844788 0.3928479552268982 0.5879378914833069 -0.7071067690849304 0.46194010972976685 0.6913415789604187 0.555570125579834 0.5132803320884705 0.7681777477264404 0.3826833963394165 0.30865874886512756 0.46193981170654297 -0.8314696550369263 0.5448954701423645 0.8154929876327515 0.19509029388427734 0.21260792016983032 0.31818971037864685 -0.9238796234130859 0.5555706024169922 0.8314695954322815 1.1920928955078125e-07 0.10838685929775238 0.16221186518669128 0.9807852506637573 0.2126079797744751 0.3181897699832916 0.9238795042037964 0.10838671028614044 0.16221170127391815 -0.9807853102684021 0.5448954701423645 0.8154929876327515 -0.1950901746749878 0.30865877866744995 0.4619399309158325 0.8314695358276367 0.5132803320884705 0.76817786693573 -0.38268327713012695 0.3928479552268982 0.5879378914833069 0.7071068286895752 0.27059853076934814 0.2705981135368347 0.9238795042037964 0.39284801483154297 0.39284759759902954 0.8314695358276367 0.6935202479362488 0.6935197710990906 -0.1950901746749878 0.6532818675041199 0.653281569480896 -0.38268327713012695 0.5000004172325134 0.5 0.7071068286895752 0.5879380702972412 0.5879376530647278 -0.5555701851844788 0.5879380702972412 0.5879376530647278 0.555570125579834 0.5000004172325134 0.5 -0.7071067690849304 0.6532818675041199 0.6532814502716064 0.3826833963394165 0.3928479552268982 0.39284747838974 -0.8314696550369263 0.6935202479362488 0.6935197710990906 0.19509029388427734 0.270598441362381 0.27059808373451233 -0.9238796234130859 0.7071071267127991 0.7071067094802856 1.1920928955078125e-07 0.13795019686222076 0.1379498392343521 0.9807852506637573 0.13795003294944763 0.13794970512390137 -0.9807853102684021 0.7681781649589539 0.513279914855957 0.3826833963394165 0.8154934048652649 0.5448949337005615 0.19509029388427734 0.461940199136734 0.308658242225647 -0.8314696550369263 0.3181900382041931 0.21260754764080048 -0.9238796234130859 0.8314699530601501 0.555570125579834 1.1920928955078125e-07 0.16221219301223755 0.10838647186756134 0.9807852506637573 0.3181901276111603 0.21260756254196167 0.9238795042037964 0.16221201419830322 0.10838638991117477 -0.9807853102684021 0.8154934048652649 0.5448949337005615 -0.1950901746749878 0.46194028854370117 0.30865833163261414 0.8314695358276367 0.7681781649589539 0.5132800340652466 -0.38268327713012695 0.5879381895065308 0.3928474485874176 0.7071068286895752 0.6913419961929321 0.46193963289260864 -0.5555701851844788 0.6913419961929321 0.46193963289260864 0.555570125579834 0.5879381895065308 0.3928474485874176 -0.7071067690849304 0.853553831577301 0.3535534143447876 -0.38268327713012695 0.7681779861450195 0.31818950176239014 -0.5555701851844788 0.6532818078994751 0.27059799432754517 0.7071068286895752 0.7681779861450195 0.31818950176239014 0.555570125579834 0.6532818078994751 0.27059799432754517 -0.7071067690849304 0.8535537719726562 0.35355329513549805 0.3826833963394165 0.5132803320884705 0.2126074582338333 -0.8314696550369263 0.9061276316642761 0.3753300905227661 0.19509029388427734 0.35355377197265625 0.1464466154575348 -0.9238796234130859 0.9238798022270203 0.38268330693244934 1.1920928955078125e-07 0.1802404820919037 0.07465788722038269 0.9807852506637573 0.3535538613796234 0.1464466154575348 0.9238795042037964 0.18024028837680817 0.07465784251689911 -0.9807853102684021 0.9061276316642761 0.3753300905227661 -0.1950901746749878 0.51328045129776 0.21260753273963928 0.8314695358276367 0.3753306567668915 0.07465782761573792 -0.9238796234130859 0.1913420408964157 0.03806023672223091 -0.9807853102684021 0.9807854890823364 0.19509020447731018 1.1920928955078125e-07 0.9619399309158325 0.1913415491580963 -0.1950901746749878 0.37533074617385864 0.07465780526399612 0.9238795042037964 0.544895589351654 0.10838634520769119 0.8314695358276367 0.9061278700828552 0.1802399456501007 -0.38268327713012695 0.6935202479362488 0.1379496306180954 0.7071068286895752 0.8154933452606201 0.1622115522623062 -0.5555701851844788 0.8154933452606201 0.1622115522623062 0.555570125579834 0.6935202479362488 0.1379496306180954 -0.7071067690849304 0.9061278104782104 0.18023982644081116 0.3826833963394165 0.5448954701423645 0.10838629305362701 -0.8314696550369263 0.9619399309158325 0.1913415491580963 0.19509029388427734 0.19134224951267242 0.03806024417281151 0.9807852506637573 0.7071070671081543 -5.960464477539063e-08 -0.7071067690849304 0.5555705428123474 -9.685754776000977e-08 -0.8314696550369263 0.923879861831665 -1.4901161193847656e-07 0.3826833963394165 0.9807854294776917 -1.4901161193847656e-07 0.19509029388427734 0.38268381357192993 -2.2351741790771484e-08 -0.9238796234130859 1.0000001192092896 -1.043081283569336e-07 1.1920928955078125e-07 0.19509084522724152 -3.3527612686157227e-08 0.9807852506637573 0.3826838731765747 -5.21540641784668e-08 0.9238795042037964 0.195090651512146 0.0 -0.9807853102684021 0.9807854294776917 -1.4901161193847656e-07 -0.1950901746749878 0.555570662021637 -6.705522537231445e-08 0.8314695358276367 0.9238799214363098 -4.470348358154297e-08 -0.38268327713012695 0.7071070671081543 -5.960464477539063e-08 0.7071068286895752 0.8314697742462158 -1.043081283569336e-07 -0.5555701851844788 0.8314697742462158 -1.043081283569336e-07 0.555570125579834 0.9061278104782104 -0.18024002015590668 -0.38268327713012695 0.8154932856559753 -0.16221176087856293 -0.5555701851844788 0.693520188331604 -0.13794974982738495 0.7071068286895752 0.8154932856559753 -0.16221176087856293 0.555570125579834 0.693520188331604 -0.13794974982738495 -0.7071067690849304 0.9061277508735657 -0.18024010956287384 0.3826833963394165 0.5448954105377197 -0.10838647931814194 -0.8314696550369263 0.9619398713111877 -0.191341832280159 0.19509029388427734 0.3753306567668915 -0.0746578648686409 -0.9238796234130859 0.9807853698730469 -0.1950903981924057 1.1920928955078125e-07 0.19134223461151123 -0.03806030750274658 0.9807852506637573 0.37533071637153625 -0.07465790957212448 0.9238795042037964 0.1913420408964157 -0.03806023299694061 -0.9807853102684021 0.9619398713111877 -0.191341832280159 -0.1950901746749878 0.5448955297470093 -0.10838647186756134 0.8314695358276367 0.35355377197265625 -0.14644664525985718 -0.9238796234130859 0.18024027347564697 -0.07465782761573792 -0.9807853102684021 0.9238795638084412 -0.3826834559440613 1.1920928955078125e-07 0.9061275124549866 -0.3753303587436676 -0.1950901746749878 0.35355380177497864 -0.14644670486450195 0.9238795042037964 0.5132803320884705 -0.21260765194892883 0.8314695358276367 0.8535537123680115 -0.3535534739494324 -0.38268327713012695 0.6532816886901855 -0.2705981135368347 0.7071068286895752 0.76817786693573 -0.31818968057632446 -0.5555701851844788 0.76817786693573 -0.31818968057632446 0.555570125579834 0.6532816886901855 -0.2705981135368347 -0.7071067690849304 0.8535536527633667 -0.35355353355407715 0.3826833963394165 0.5132802128791809 -0.21260762214660645 -0.8314696550369263 0.9061275124549866 -0.3753303587436676 0.19509029388427734 0.1802404373884201 -0.07465794682502747 0.9807852506637573 0.5879380106925964 -0.39284753799438477 -0.7071067690849304 0.4619400203227997 -0.3086583614349365 -0.8314696550369263 0.7681779861450195 -0.5132800936698914 0.3826833963394165 0.8154931664466858 -0.5448951721191406 0.19509029388427734 0.3181900084018707 -0.21260756254196167 -0.9238796234130859 0.8314695954322815 -0.5555701851844788 1.1920928955078125e-07 0.16221213340759277 -0.10838651657104492 0.9807852506637573 0.3181900382041931 -0.21260762214660645 0.9238795042037964 0.16221198439598083 -0.10838636755943298 -0.9807853102684021 0.8154931664466858 -0.5448951721191406 -0.1950901746749878 0.46194013953208923 -0.3086584210395813 0.8314695358276367 0.7681780457496643 -0.5132800340652466 -0.38268327713012695 0.5879380106925964 -0.39284753799438477 0.7071068286895752 0.6913418173789978 -0.4619397521018982 -0.5555701851844788 0.6913418173789978 -0.4619397521018982 0.555570125579834 0.6532817482948303 -0.653281569480896 -0.38268327713012695 0.5879378914833069 -0.5879377126693726 -0.5555701851844788 0.5000002384185791 -0.5 0.7071068286895752 0.5879378914833069 -0.5879377126693726 0.555570125579834 0.5000002384185791 -0.5 -0.7071067690849304 0.6532816886901855 -0.653281569480896 0.3826833963394165 0.3928477168083191 -0.39284753799438477 -0.8314696550369263 0.6935199499130249 -0.6935198903083801 0.19509029388427734 0.2705983817577362 -0.27059808373451233 -0.9238796234130859 0.7071067690849304 -0.7071066498756409 1.1920928955078125e-07 0.1379501074552536 -0.1379498541355133 0.9807852506637573 0.2705984115600586 -0.2705981731414795 0.9238795042037964 0.13794998824596405 -0.13794967532157898 -0.9807853102684021 0.6935199499130249 -0.6935198903083801 -0.1950901746749878 0.39284780621528625 -0.39284762740135193 0.8314695358276367 0.10838676244020462 -0.1622118353843689 0.9807852506637573 0.21260786056518555 -0.3181897699832916 0.9238795042037964 0.21260786056518555 -0.31818968057632446 -0.9238796234130859 0.10838668048381805 -0.16221165657043457 -0.9807853102684021 0.5555702447891235 -0.8314694166183472 1.1920928955078125e-07 0.5448951125144958 -0.8154930472373962 -0.1950901746749878 0.30865857005119324 -0.46193987131118774 0.8314695358276367 0.5132802128791809 -0.76817786693573 -0.38268327713012695 0.3928476870059967 -0.5879377722740173 0.7071068286895752 0.46193990111351013 -0.6913415789604187 -0.5555701851844788 0.46193990111351013 -0.6913415789604187 0.555570125579834 0.3928476870059967 -0.5879377722740173 -0.7071067690849304 0.5132801532745361 -0.7681778073310852 0.3826833963394165 0.30865851044654846 -0.4619397819042206 -0.8314696550369263 0.5448951125144958 -0.8154930472373962 0.19509029388427734 0.318189799785614 -0.7681775689125061 0.555570125579834 0.35355356335639954 -0.8535534143447876 0.3826833963394165 0.27059826254844666 -0.6532814502716064 -0.7071067690849304 0.212607741355896 -0.5132799744606018 -0.8314696550369263 0.3753302991390228 -0.9061272740364075 0.19509029388427734 0.14644694328308105 -0.3535534143447876 -0.9238796234130859 0.38268348574638367 -0.9238792657852173 1.1920928955078125e-07 0.07465818524360657 -0.18024012446403503 0.9807852506637573 0.14644691348075867 -0.35355350375175476 0.9238795042037964 0.07465814054012299 -0.18023991584777832 -0.9807853102684021 0.3753302991390228 -0.9061272740364075 -0.1950901746749878 0.21260778605937958 -0.5132800340652466 0.8314695358276367 0.3535536229610443 -0.8535534739494324 -0.38268327713012695 0.27059826254844666 -0.6532814502716064 0.7071068286895752 0.318189799785614 -0.7681775689125061 -0.5555701851844788 0.19134177267551422 -0.9619395136833191 -0.1950901746749878 0.18024015426635742 -0.9061275124549866 -0.38268327713012695 0.10838662087917328 -0.5448951721191406 0.8314695358276367 0.13794991374015808 -0.6935198903083801 0.7071068286895752 0.16221186518669128 -0.8154929280281067 -0.5555701851844788 0.16221186518669128 -0.8154929280281067 0.555570125579834 0.13794991374015808 -0.6935198903083801 -0.7071067690849304 0.18024010956287384 -0.906127393245697 0.3826833963394165 0.1083865836262703 -0.5448950529098511 -0.8314696550369263 0.19134177267551422 -0.9619395136833191 0.19509029388427734 0.07465815544128418 -0.3753302991390228 -0.9238796234130859 0.1950904279947281 -0.9807849526405334 1.1920928955078125e-07 0.038060542196035385 -0.19134187698364258 0.9807852506637573 0.0746581107378006 -0.37533038854599 0.9238795042037964 0.03806053847074509 -0.19134166836738586 -0.9807853102684021 2.1408266093203565e-07 -0.555570125579834 -0.8314696550369263 3.109402086920454e-07 -0.3826834559440613 -0.9238796234130859 1.0232395197817823e-07 -0.9807849526405334 0.19509029388427734 1.6192859675356885e-07 -0.9999995827674866 1.1920928955078125e-07 2.774125960058882e-07 -0.19509045779705048 0.9807852506637573 2.513355639166548e-07 -0.38268351554870605 0.9238795042037964 3.1466549899050733e-07 -0.19509026408195496 -0.9807853102684021 1.0232395197817823e-07 -0.9807849526405334 -0.1950901746749878 2.289838221258833e-07 -0.5555702447891235 0.8314695358276367 1.768297579474165e-07 -0.9238795638084412 -0.38268327713012695 2.2153324152895948e-07 -0.7071067094802856 0.7071068286895752 2.2153324152895948e-07 -0.8314693570137024 -0.5555701851844788 2.2153324152895948e-07 -0.8314693570137024 0.555570125579834 2.2153324152895948e-07 -0.7071067094802856 -0.7071067690849304 1.470274355597212e-07 -0.9238794445991516 0.3826833963394165 -0.16221140325069427 -0.8154928684234619 -0.5555701851844788 -0.13794945180416107 -0.6935198307037354 -0.7071067690849304 -0.16221140325069427 -0.8154928684234619 0.555570125579834 -0.18023979663848877 -0.9061272740364075 0.3826833963394165 -0.10838613659143448 -0.5448949933052063 -0.8314696550369263 -0.1913415491580963 -0.9619393348693848 0.19509029388427734 -0.07465752959251404 -0.3753302991390228 -0.9238796234130859 -0.19509008526802063 -0.9807847738265991 1.1920928955078125e-07 -0.038059983402490616 -0.191341832280159 0.9807852506637573 -0.07465759664773941 -0.3753303587436676 0.9238795042037964 -0.03805990889668465 -0.19134165346622467 -0.9807853102684021 -0.1913415491580963 -0.9619393348693848 -0.1950901746749878 -0.10838615149259567 -0.5448951125144958 0.8314695358276367 -0.18023978173732758 -0.9061274528503418 -0.38268327713012695 -0.13794945180416107 -0.6935198307037354 0.7071068286895752 -0.37533000111579895 -0.9061269760131836 -0.1950901746749878 -0.3535532057285309 -0.8535533547401428 -0.38268327713012695 -0.21260729432106018 -0.513279914855957 0.8314695358276367 -0.27059778571128845 -0.6532813310623169 0.7071068286895752 -0.3181892931461334 -0.7681774497032166 -0.5555701851844788 -0.3181892931461334 -0.7681774497032166 0.555570125579834 -0.27059778571128845 -0.6532813310623169 -0.7071067690849304 -0.3535532057285309 -0.8535531759262085 0.3826833963394165 -0.2126072645187378 -0.5132797956466675 -0.8314696550369263 -0.37533000111579895 -0.9061269760131836 0.19509029388427734 -0.14644630253314972 -0.3535534143447876 -0.9238796234130859 -0.3826830983161926 -0.9238789677619934 1.1920928955078125e-07 -0.07465760409832001 -0.18024004995822906 0.9807852506637573 -0.1464463770389557 -0.35355344414711 0.9238795042037964 -0.07465749233961105 -0.18023988604545593 -0.9807853102684021 -0.3086579740047455 -0.46193957328796387 -0.8314696550369263 -0.2126072198152542 -0.3181896507740021 -0.9238796234130859 -0.5448947548866272 -0.8154926896095276 0.19509029388427734 -0.5555698275566101 -0.8314689993858337 1.1920928955078125e-07 -0.10838615894317627 -0.16221174597740173 0.9807852506637573 -0.21260729432106018 -0.31818968057632446 0.9238795042037964 -0.10838600993156433 -0.1622115969657898 -0.9807853102684021 -0.5448947548866272 -0.8154926896095276 -0.1950901746749878 -0.30865803360939026 -0.4619396924972534 0.8314695358276367 -0.5132797956466675 -0.7681776881217957 -0.38268327713012695 -0.3928472101688385 -0.5879376530647278 0.7071068286895752 -0.46193933486938477 -0.6913414001464844 -0.5555701851844788 -0.46193933486938477 -0.6913414001464844 0.555570125579834 -0.3928472101688385 -0.5879376530647278 -0.7071067690849304 -0.5132797360420227 -0.7681775093078613 0.3826833963394165 -0.5879372954368591 -0.5879374742507935 -0.5555701851844788 -0.49999967217445374 -0.49999985098838806 -0.7071067690849304 -0.5879372954368591 -0.5879374742507935 0.555570125579834 -0.6532812118530273 -0.6532812118530273 0.3826833963394165 -0.3928471505641937 -0.3928472697734833 -0.8314696550369263 -0.6935194730758667 -0.6935194730758667 0.19509029388427734 -0.27059775590896606 -0.27059802412986755 -0.9238796234130859 -0.7071062326431274 -0.7071061730384827 1.1920928955078125e-07 -0.13794948160648346 -0.13794973492622375 0.9807852506637573 -0.27059781551361084 -0.27059805393218994 0.9238795042037964 -0.13794930279254913 -0.1379496157169342 -0.9807853102684021 -0.6935194730758667 -0.6935194730758667 -0.1950901746749878 -0.3928472101688385 -0.3928473889827728 0.8314695358276367 -0.6532812714576721 -0.6532813906669617 -0.38268327713012695 -0.49999967217445374 -0.49999985098838806 0.7071068286895752 -0.815492570400238 -0.5448946952819824 -0.1950901746749878 -0.7681775093078613 -0.5132798552513123 -0.38268327713012695 -0.4619394540786743 -0.3086581826210022 0.8314695358276367 -0.5879374742507935 -0.39284729957580566 0.7071068286895752 -0.6913411617279053 -0.4619394838809967 -0.5555701851844788 -0.6913411617279053 -0.4619394838809967 0.555570125579834 -0.5879374742507935 -0.39284729957580566 -0.7071067690849304 -0.7681774497032166 -0.5132796764373779 0.3826833963394165 -0.46193939447402954 -0.30865806341171265 -0.8314696550369263 -0.815492570400238 -0.5448946952819824 0.19509029388427734 -0.3181893527507782 -0.2126075029373169 -0.9238796234130859 -0.831468939781189 -0.5555696487426758 1.1920928955078125e-07 -0.16221146285533905 -0.10838639736175537 0.9807852506637573 -0.318189412355423 -0.2126075178384781 0.9238795042037964 -0.16221126914024353 -0.1083863154053688 -0.9807853102684021 -0.5132795572280884 -0.21260730922222137 -0.8314696550369263 -0.35355308651924133 -0.1464465856552124 -0.9238796234130859 -0.9061267971992493 -0.3753299117088318 0.19509029388427734 -0.9238787293434143 -0.3826829195022583 1.1920928955078125e-07 -0.180239737033844 -0.07465782761573792 0.9807852506637573 -0.3535531461238861 -0.1464465856552124 0.9238795042037964 -0.18023952841758728 -0.07465778291225433 -0.9807853102684021 -0.9061267971992493 -0.3753299117088318 -0.1950901746749878 -0.5132796764373779 -0.21260741353034973 0.8314695358276367 -0.8535531163215637 -0.35355323553085327 -0.38268327713012695 -0.6532811522483826 -0.2705978751182556 0.7071068286895752 -0.7681770920753479 -0.3181893825531006 -0.5555701851844788 -0.7681770920753479 -0.3181893825531006 0.555570125579834 -0.6532811522483826 -0.2705978751182556 -0.7071067690849304 -0.853553056716919 -0.35355308651924133 0.3826833963394165 -0.6935195326805115 -0.13794952630996704 0.7071068286895752 -0.8154924511909485 -0.16221149265766144 0.555570125579834 -0.8154924511909485 -0.16221149265766144 -0.5555701851844788 -0.6935195326805115 -0.13794952630996704 -0.7071067690849304 -0.9061270356178284 -0.18023964762687683 0.3826833963394165 -0.5448946356773376 -0.10838618129491806 -0.8314696550369263 -0.9619390368461609 -0.19134141504764557 0.19509029388427734 -0.37532997131347656 -0.07465779781341553 -0.9238796234130859 -0.9807843565940857 -0.1950899064540863 1.1920928955078125e-07 -0.19134148955345154 -0.03806019946932793 0.9807852506637573 -0.37533003091812134 -0.07465779036283493 0.9238795042037964 -0.19134126603603363 -0.038060203194618225 -0.9807853102684021 -0.9619390368461609 -0.19134141504764557 -0.1950901746749878 -0.5448947548866272 -0.10838625580072403 0.8314695358276367 -0.9061270952224731 -0.18023978173732758 -0.38268327713012695 3.2584136988589307e-07 0.0 -1.0 2.0114725884923246e-07 -3.010379145962361e-07 1.0</float_array>
- <technique_common>
- <accessor source="#id-mesh-8-positions-array" count="482" stride="3">
- <param name="X" type="float"/>
- <param name="Y" type="float"/>
- <param name="Z" type="float"/>
- </accessor>
- </technique_common>
- </source>
- <source id="id-mesh-8-normals">
- <float_array id="id-mesh-8-normals-array" count="1446"> -0.9247413277626038 0.0 -0.3805353045463562 -0.9809869527816772 0.0 -0.19391460716724396 -0.9621570706367493 0.191381573677063 -0.19391460716724396 -0.9069795608520508 0.18039490282535553 -0.3805353045463562 -0.7101352214813232 0.0 0.7040314674377441 -0.5597705245018005 0.0 0.8286385536193848 -0.5489974617958069 0.10919522494077682 0.8286385536193848 -0.6964934468269348 0.13852351903915405 0.7040314674377441 -0.8333384394645691 0.0 -0.5527512431144714 -0.8173161745071411 0.16257210075855255 -0.5527512431144714 -0.8333384394645691 0.0 0.5527512431144714 -0.8173161745071411 0.16257210075855255 0.5527512431144714 -0.7101352214813232 0.0 -0.7040314674377441 -0.6964934468269348 0.13852351903915405 -0.7040314674377441 -0.9247413277626038 0.0 0.3805353045463562 -0.9069795608520508 0.18039490282535553 0.3805353045463562 -0.5597705245018005 0.0 -0.8286385536193848 -0.5489974617958069 0.10919522494077682 -0.8286385536193848 -0.9809869527816772 0.0 0.19391460716724396 -0.9621570706367493 0.191381573677063 0.19391460716724396 -0.3878597319126129 0.0 -0.921689510345459 -0.3804132342338562 0.07565538585186005 -0.921689510345459 -1.0 0.0 0.0 -0.9807733297348022 0.19507431983947754 0.0 -0.3878597319126129 0.0 0.921689510345459 -0.20096439123153687 0.0 0.9795831441879272 -0.19708853960037231 0.039185766130685806 0.9795831441879272 -0.3804132342338562 0.07565538585186005 0.921689510345459 -0.20096439123153687 0.0 -0.9795831441879272 -0.19708853960037231 0.039185766130685806 -0.9795831441879272 -0.6560564041137695 0.2717368006706238 -0.7040314674377441 -0.5171361565589905 0.2142094224691391 -0.8286385536193848 -0.8543656468391418 0.35389262437820435 0.3805353045463562 -0.9063386917114258 0.3754081726074219 0.19391460716724396 -0.3583483397960663 0.14841151237487793 -0.921689510345459 -0.9238563179969788 0.382671594619751 0.0 -0.18564409017562866 0.07690664380788803 0.9795831441879272 -0.3583483397960663 0.14841151237487793 0.921689510345459 -0.18564409017562866 0.07690664380788803 -0.9795831441879272 -0.9063386917114258 0.3754081726074219 -0.19391460716724396 -0.5171361565589905 0.2142094224691391 0.8286385536193848 -0.8543656468391418 0.35389262437820435 -0.3805353045463562 -0.6560564041137695 0.2717368006706238 0.7040314674377441 -0.7698904275894165 0.3188879191875458 -0.5527512431144714 -0.7698904275894165 0.3188879191875458 0.5527512431144714 -0.46540728211402893 0.3109835982322693 0.8286385536193848 -0.5904415845870972 0.39451277256011963 0.7040314674377441 -0.7689138650894165 0.5137485861778259 -0.3805353045463562 -0.6928922533988953 0.46296578645706177 -0.5527512431144714 -0.6928922533988953 0.46296578645706177 0.5527512431144714 -0.5904415845870972 0.39451277256011963 -0.7040314674377441 -0.7689138650894165 0.5137485861778259 0.3805353045463562 -0.46540728211402893 0.3109835982322693 -0.8286385536193848 -0.8156682252883911 0.5449995398521423 0.19391460716724396 -0.32248908281326294 0.2154911905527115 -0.921689510345459 -0.8314462900161743 0.5555589199066162 0.0 -0.1670888364315033 0.1116367056965828 0.9795831441879272 -0.32248908281326294 0.2154911905527115 0.921689510345459 -0.1670888364315033 0.1116367056965828 -0.9795831441879272 -0.8156682252883911 0.5449995398521423 -0.19391460716724396 -0.6936551928520203 0.6936551928520203 0.19391460716724396 -0.7070833444595337 0.7070833444595337 0.0 -0.1420941799879074 0.1420941799879074 0.9795831441879272 -0.27426984906196594 0.27426984906196594 0.921689510345459 -0.27426984906196594 0.27426984906196594 -0.921689510345459 -0.1420941799879074 0.1420941799879074 -0.9795831441879272 -0.6936551928520203 0.6936551928520203 -0.19391460716724396 -0.395794540643692 0.395794540643692 0.8286385536193848 -0.6538895964622498 0.6538895964622498 -0.3805353045463562 -0.5021210312843323 0.5021210312843323 0.7040314674377441 -0.5892513990402222 0.5892513990402222 -0.5527512431144714 -0.5892513990402222 0.5892513990402222 0.5527512431144714 -0.5021210312843323 0.5021210312843323 -0.7040314674377441 -0.6538895964622498 0.6538895964622498 0.3805353045463562 -0.395794540643692 0.395794540643692 -0.8286385536193848 -0.46296578645706177 0.6928922533988953 -0.5527512431144714 -0.39451277256011963 0.5904415845870972 -0.7040314674377441 -0.46296578645706177 0.6928922533988953 0.5527512431144714 -0.5137485861778259 0.7689138650894165 0.3805353045463562 -0.3109835982322693 0.46540728211402893 -0.8286385536193848 -0.5449995398521423 0.8156682252883911 0.19391460716724396 -0.2154911905527115 0.32248908281326294 -0.921689510345459 -0.5555589199066162 0.8314462900161743 0.0 -0.1116367056965828 0.1670888364315033 0.9795831441879272 -0.2154911905527115 0.32248908281326294 0.921689510345459 -0.1116367056965828 0.1670888364315033 -0.9795831441879272 -0.5449995398521423 0.8156682252883911 -0.19391460716724396 -0.3109835982322693 0.46540728211402893 0.8286385536193848 -0.5137485861778259 0.7689138650894165 -0.3805353045463562 -0.39451277256011963 0.5904415845870972 0.7040314674377441 -0.3754081726074219 0.9063386917114258 -0.19391460716724396 -0.35386210680007935 0.8543656468391418 -0.3805353045463562 -0.2142094224691391 0.5171361565589905 0.8286385536193848 -0.2717368006706238 0.6560564041137695 0.7040314674377441 -0.3188879191875458 0.7698904275894165 -0.5527512431144714 -0.3188879191875458 0.7698904275894165 0.5527512431144714 -0.2717368006706238 0.6560564041137695 -0.7040314674377441 -0.35386210680007935 0.8543656468391418 0.3805353045463562 -0.2142094224691391 0.5171361565589905 -0.8286385536193848 -0.3754081726074219 0.9063386917114258 0.19391460716724396 -0.14841151237487793 0.3583483397960663 -0.921689510345459 -0.382671594619751 0.9238563179969788 0.0 -0.07690664380788803 0.18564409017562866 0.9795831441879272 -0.14841151237487793 0.3583483397960663 0.921689510345459 -0.07690664380788803 0.18564409017562866 -0.9795831441879272 -0.10919522494077682 0.5489974617958069 -0.8286385536193848 -0.07565538585186005 0.3804132342338562 -0.921689510345459 -0.191381573677063 0.9621570706367493 0.19391460716724396 -0.19507431983947754 0.9807733297348022 0.0 -0.039185766130685806 0.19708853960037231 0.9795831441879272 -0.07565538585186005 0.3804132342338562 0.921689510345459 -0.039185766130685806 0.19708853960037231 -0.9795831441879272 -0.191381573677063 0.9621570706367493 -0.19391460716724396 -0.10919522494077682 0.5489974617958069 0.8286385536193848 -0.18039490282535553 0.9069795608520508 -0.3805353045463562 -0.13852351903915405 0.6964934468269348 0.7040314674377441 -0.16257210075855255 0.8173161745071411 -0.5527512431144714 -0.16257210075855255 0.8173161745071411 0.5527512431144714 -0.13852351903915405 0.6964934468269348 -0.7040314674377441 -0.18039490282535553 0.9069795608520508 0.3805353045463562 0.0 0.8333384394645691 -0.5527512431144714 0.0 0.7101352214813232 -0.7040314674377441 0.0 0.8333384394645691 0.5527512431144714 0.0 0.9247413277626038 0.3805353045463562 0.0 0.5597705245018005 -0.8286385536193848 0.0 0.9809869527816772 0.19391460716724396 0.0 0.3878597319126129 -0.921689510345459 0.0 1.0 0.0 0.0 0.20096439123153687 0.9795831441879272 0.0 0.3878597319126129 0.921689510345459 0.0 0.20096439123153687 -0.9795831441879272 0.0 0.9809869527816772 -0.19391460716724396 0.0 0.5597705245018005 0.8286385536193848 0.0 0.9247413277626038 -0.3805353045463562 0.0 0.7101352214813232 0.7040314674377441 0.191381573677063 0.9621570706367493 -0.19391460716724396 0.18039490282535553 0.9069795608520508 -0.3805353045463562 0.10919522494077682 0.5489974617958069 0.8286385536193848 0.13852351903915405 0.6964934468269348 0.7040314674377441 0.16257210075855255 0.8173161745071411 -0.5527512431144714 0.16257210075855255 0.8173161745071411 0.5527512431144714 0.13852351903915405 0.6964934468269348 -0.7040314674377441 0.18039490282535553 0.9069795608520508 0.3805353045463562 0.10919522494077682 0.5489974617958069 -0.8286385536193848 0.191381573677063 0.9621570706367493 0.19391460716724396 0.07565538585186005 0.3804132342338562 -0.921689510345459 0.19507431983947754 0.9807733297348022 0.0 0.039185766130685806 0.19708853960037231 0.9795831441879272 0.07565538585186005 0.3804132342338562 0.921689510345459 0.039185766130685806 0.19708853960037231 -0.9795831441879272 0.2142094224691391 0.5171361565589905 -0.8286385536193848 0.14841151237487793 0.3583483397960663 -0.921689510345459 0.3754081726074219 0.9063386917114258 0.19391460716724396 0.382671594619751 0.9238563179969788 0.0 0.07690664380788803 0.18564409017562866 0.9795831441879272 0.14841151237487793 0.3583483397960663 0.921689510345459 0.07690664380788803 0.18564409017562866 -0.9795831441879272 0.3754081726074219 0.9063386917114258 -0.19391460716724396 0.2142094224691391 0.5171361565589905 0.8286385536193848 0.35389262437820435 0.8543656468391418 -0.3805353045463562 0.2717368006706238 0.6560564041137695 0.7040314674377441 0.3188879191875458 0.7698904275894165 -0.5527512431144714 0.3188879191875458 0.7698904275894165 0.5527512431144714 0.2717368006706238 0.6560564041137695 -0.7040314674377441 0.35389262437820435 0.8543656468391418 0.3805353045463562 0.46296578645706177 0.6928922533988953 -0.5527512431144714 0.39451277256011963 0.5904415845870972 -0.7040314674377441 0.46296578645706177 0.6928922533988953 0.5527512431144714 0.5137485861778259 0.7689138650894165 0.3805353045463562 0.3109835982322693 0.46540728211402893 -0.8286385536193848 0.5449995398521423 0.8156682252883911 0.19391460716724396 0.2154911905527115 0.32248908281326294 -0.921689510345459 0.5555589199066162 0.8314462900161743 0.0 0.1116367056965828 0.1670888364315033 0.9795831441879272 0.2154911905527115 0.32248908281326294 0.921689510345459 0.1116367056965828 0.1670888364315033 -0.9795831441879272 0.5449995398521423 0.8156682252883911 -0.19391460716724396 0.3109835982322693 0.46540728211402893 0.8286385536193848 0.5137485861778259 0.7689138650894165 -0.3805353045463562 0.39451277256011963 0.5904415845870972 0.7040314674377441 0.27426984906196594 0.27426984906196594 0.921689510345459 0.395794540643692 0.395794540643692 0.8286385536193848 0.6936551928520203 0.6936551928520203 -0.19391460716724396 0.6538895964622498 0.6538895964622498 -0.3805353045463562 0.5021210312843323 0.5021210312843323 0.7040314674377441 0.5892513990402222 0.5892513990402222 -0.5527512431144714 0.5892513990402222 0.5892513990402222 0.5527512431144714 0.5021210312843323 0.5021210312843323 -0.7040314674377441 0.6538895964622498 0.6538895964622498 0.3805353045463562 0.395794540643692 0.395794540643692 -0.8286385536193848 0.6936551928520203 0.6936551928520203 0.19391460716724396 0.27426984906196594 0.27426984906196594 -0.921689510345459 0.7070833444595337 0.7070833444595337 0.0 0.1420941799879074 0.1420941799879074 0.9795831441879272 0.1420941799879074 0.1420941799879074 -0.9795831441879272 0.7689138650894165 0.5137485861778259 0.3805353045463562 0.8156682252883911 0.5449995398521423 0.19391460716724396 0.46540728211402893 0.3109835982322693 -0.8286385536193848 0.32248908281326294 0.2154911905527115 -0.921689510345459 0.8314462900161743 0.5555589199066162 0.0 0.1670888364315033 0.1116367056965828 0.9795831441879272 0.32248908281326294 0.2154911905527115 0.921689510345459 0.1670888364315033 0.1116367056965828 -0.9795831441879272 0.8156682252883911 0.5449995398521423 -0.19391460716724396 0.46540728211402893 0.3109835982322693 0.8286385536193848 0.7689138650894165 0.5137485861778259 -0.3805353045463562 0.5904415845870972 0.39451277256011963 0.7040314674377441 0.6928922533988953 0.46296578645706177 -0.5527512431144714 0.6928922533988953 0.46296578645706177 0.5527512431144714 0.5904415845870972 0.39451277256011963 -0.7040314674377441 0.8543656468391418 0.35386210680007935 -0.3805353045463562 0.7698904275894165 0.3188879191875458 -0.5527512431144714 0.6560564041137695 0.2717368006706238 0.7040314674377441 0.7698904275894165 0.3188879191875458 0.5527512431144714 0.6560564041137695 0.2717368006706238 -0.7040314674377441 0.8543656468391418 0.35386210680007935 0.3805353045463562 0.5171361565589905 0.2142094224691391 -0.8286385536193848 0.9063386917114258 0.3754081726074219 0.19391460716724396 0.3583483397960663 0.14841151237487793 -0.921689510345459 0.9238563179969788 0.382671594619751 0.0 0.18564409017562866 0.07690664380788803 0.9795831441879272 0.3583483397960663 0.14841151237487793 0.921689510345459 0.18564409017562866 0.07690664380788803 -0.9795831441879272 0.9063386917114258 0.3754081726074219 -0.19391460716724396 0.5171361565589905 0.2142094224691391 0.8286385536193848 0.3804132342338562 0.07565538585186005 -0.921689510345459 0.19708853960037231 0.039185766130685806 -0.9795831441879272 0.9807733297348022 0.19507431983947754 0.0 0.9621570706367493 0.191381573677063 -0.19391460716724396 0.3804132342338562 0.07565538585186005 0.921689510345459 0.5489974617958069 0.10919522494077682 0.8286385536193848 0.9069795608520508 0.18039490282535553 -0.3805353045463562 0.6964934468269348 0.13852351903915405 0.7040314674377441 0.8173161745071411 0.16257210075855255 -0.5527512431144714 0.8173161745071411 0.16257210075855255 0.5527512431144714 0.6964934468269348 0.13852351903915405 -0.7040314674377441 0.9069795608520508 0.18039490282535553 0.3805353045463562 0.5489974617958069 0.10919522494077682 -0.8286385536193848 0.9621570706367493 0.191381573677063 0.19391460716724396 0.19708853960037231 0.039185766130685806 0.9795831441879272 0.7101352214813232 0.0 -0.7040314674377441 0.5597705245018005 0.0 -0.8286385536193848 0.9247413277626038 0.0 0.3805353045463562 0.9809869527816772 0.0 0.19391460716724396 0.3878597319126129 0.0 -0.921689510345459 1.0 0.0 0.0 0.20096439123153687 0.0 0.9795831441879272 0.3878597319126129 0.0 0.921689510345459 0.20096439123153687 0.0 -0.9795831441879272 0.9809869527816772 0.0 -0.19391460716724396 0.5597705245018005 0.0 0.8286385536193848 0.9247413277626038 0.0 -0.3805353045463562 0.7101352214813232 0.0 0.7040314674377441 0.8333384394645691 0.0 -0.5527512431144714 0.8333384394645691 0.0 0.5527512431144714 0.9069795608520508 -0.18039490282535553 -0.3805353045463562 0.8173161745071411 -0.16257210075855255 -0.5527512431144714 0.6964934468269348 -0.13852351903915405 0.7040314674377441 0.8173161745071411 -0.16257210075855255 0.5527512431144714 0.6964934468269348 -0.13852351903915405 -0.7040314674377441 0.9069795608520508 -0.18039490282535553 0.3805353045463562 0.5489974617958069 -0.10919522494077682 -0.8286385536193848 0.9621570706367493 -0.191381573677063 0.19391460716724396 0.3804132342338562 -0.07565538585186005 -0.921689510345459 0.9807733297348022 -0.19507431983947754 0.0 0.19708853960037231 -0.039185766130685806 0.9795831441879272 0.3804132342338562 -0.07565538585186005 0.921689510345459 0.19708853960037231 -0.039185766130685806 -0.9795831441879272 0.9621570706367493 -0.191381573677063 -0.19391460716724396 0.5489974617958069 -0.10919522494077682 0.8286385536193848 0.3583483397960663 -0.14841151237487793 -0.921689510345459 0.18564409017562866 -0.07690664380788803 -0.9795831441879272 0.9238563179969788 -0.382671594619751 0.0 0.9063386917114258 -0.3754081726074219 -0.19391460716724396 0.3583483397960663 -0.14841151237487793 0.921689510345459 0.5171361565589905 -0.2142094224691391 0.8286385536193848 0.8543656468391418 -0.35389262437820435 -0.3805353045463562 0.6560564041137695 -0.2717368006706238 0.7040314674377441 0.7698904275894165 -0.3188879191875458 -0.5527512431144714 0.7698904275894165 -0.3188879191875458 0.5527512431144714 0.6560564041137695 -0.2717368006706238 -0.7040314674377441 0.8543656468391418 -0.35389262437820435 0.3805353045463562 0.5171361565589905 -0.2142094224691391 -0.8286385536193848 0.9063386917114258 -0.3754081726074219 0.19391460716724396 0.18564409017562866 -0.07690664380788803 0.9795831441879272 0.5904415845870972 -0.39451277256011963 -0.7040314674377441 0.46540728211402893 -0.3109835982322693 -0.8286385536193848 0.7689138650894165 -0.5137485861778259 0.3805353045463562 0.8156682252883911 -0.5449995398521423 0.19391460716724396 0.32248908281326294 -0.2154911905527115 -0.921689510345459 0.8314462900161743 -0.5555589199066162 0.0 0.1670888364315033 -0.1116367056965828 0.9795831441879272 0.32248908281326294 -0.2154911905527115 0.921689510345459 0.1670888364315033 -0.1116367056965828 -0.9795831441879272 0.8156682252883911 -0.5449995398521423 -0.19391460716724396 0.46540728211402893 -0.3109835982322693 0.8286385536193848 0.7689138650894165 -0.5137485861778259 -0.3805353045463562 0.5904415845870972 -0.39451277256011963 0.7040314674377441 0.6928922533988953 -0.46296578645706177 -0.5527512431144714 0.6928922533988953 -0.46296578645706177 0.5527512431144714 0.6538895964622498 -0.6538895964622498 -0.3805353045463562 0.5892513990402222 -0.5892513990402222 -0.5527512431144714 0.5021210312843323 -0.5021210312843323 0.7040314674377441 0.5892513990402222 -0.5892513990402222 0.5527512431144714 0.5021210312843323 -0.5021210312843323 -0.7040314674377441 0.6538895964622498 -0.6538895964622498 0.3805353045463562 0.395794540643692 -0.395794540643692 -0.8286385536193848 0.6936551928520203 -0.6936551928520203 0.19391460716724396 0.27426984906196594 -0.27426984906196594 -0.921689510345459 0.7070833444595337 -0.7070833444595337 0.0 0.1420941799879074 -0.1420941799879074 0.9795831441879272 0.27426984906196594 -0.27426984906196594 0.921689510345459 0.1420941799879074 -0.1420941799879074 -0.9795831441879272 0.6936551928520203 -0.6936551928520203 -0.19391460716724396 0.395794540643692 -0.395794540643692 0.8286385536193848 0.1116367056965828 -0.1670888364315033 0.9795831441879272 0.2154911905527115 -0.32248908281326294 0.921689510345459 0.2154911905527115 -0.32248908281326294 -0.921689510345459 0.1116367056965828 -0.1670888364315033 -0.9795831441879272 0.5555589199066162 -0.8314462900161743 0.0 0.5449995398521423 -0.8156682252883911 -0.19391460716724396 0.3109835982322693 -0.46540728211402893 0.8286385536193848 0.5137485861778259 -0.7689138650894165 -0.3805353045463562 0.39451277256011963 -0.5904415845870972 0.7040314674377441 0.46296578645706177 -0.6928922533988953 -0.5527512431144714 0.46296578645706177 -0.6928922533988953 0.5527512431144714 0.39451277256011963 -0.5904415845870972 -0.7040314674377441 0.5137485861778259 -0.7689138650894165 0.3805353045463562 0.3109835982322693 -0.46540728211402893 -0.8286385536193848 0.5449995398521423 -0.8156682252883911 0.19391460716724396 0.3188879191875458 -0.7698904275894165 0.5527512431144714 0.35386210680007935 -0.8543656468391418 0.3805353045463562 0.2717368006706238 -0.6560564041137695 -0.7040314674377441 0.2142094224691391 -0.5171361565589905 -0.8286385536193848 0.3754081726074219 -0.9063386917114258 0.19391460716724396 0.14841151237487793 -0.3583483397960663 -0.921689510345459 0.382671594619751 -0.9238563179969788 0.0 0.07690664380788803 -0.18564409017562866 0.9795831441879272 0.14841151237487793 -0.3583483397960663 0.921689510345459 0.07690664380788803 -0.18564409017562866 -0.9795831441879272 0.3754081726074219 -0.9063386917114258 -0.19391460716724396 0.2142094224691391 -0.5171361565589905 0.8286385536193848 0.35386210680007935 -0.8543656468391418 -0.3805353045463562 0.2717368006706238 -0.6560564041137695 0.7040314674377441 0.3188879191875458 -0.7698904275894165 -0.5527512431144714 0.191381573677063 -0.9621570706367493 -0.19391460716724396 0.18039490282535553 -0.9069795608520508 -0.3805353045463562 0.10919522494077682 -0.5489974617958069 0.8286385536193848 0.13852351903915405 -0.6964934468269348 0.7040314674377441 0.16257210075855255 -0.8173161745071411 -0.5527512431144714 0.16257210075855255 -0.8173161745071411 0.5527512431144714 0.13852351903915405 -0.6964934468269348 -0.7040314674377441 0.18039490282535553 -0.9069795608520508 0.3805353045463562 0.10919522494077682 -0.5489974617958069 -0.8286385536193848 0.191381573677063 -0.9621570706367493 0.19391460716724396 0.07565538585186005 -0.3804132342338562 -0.921689510345459 0.19507431983947754 -0.9807733297348022 0.0 0.039185766130685806 -0.19708853960037231 0.9795831441879272 0.07565538585186005 -0.3804132342338562 0.921689510345459 0.039185766130685806 -0.19708853960037231 -0.9795831441879272 0.0 -0.5597705245018005 -0.8286385536193848 0.0 -0.3878597319126129 -0.921689510345459 0.0 -0.9809869527816772 0.19391460716724396 0.0 -1.0 0.0 0.0 -0.20096439123153687 0.9795831441879272 0.0 -0.3878597319126129 0.921689510345459 0.0 -0.20096439123153687 -0.9795831441879272 0.0 -0.9809869527816772 -0.19391460716724396 0.0 -0.5597705245018005 0.8286385536193848 0.0 -0.9247413277626038 -0.3805353045463562 0.0 -0.7101352214813232 0.7040314674377441 0.0 -0.8333384394645691 -0.5527512431144714 0.0 -0.8333384394645691 0.5527512431144714 0.0 -0.7101352214813232 -0.7040314674377441 0.0 -0.9247413277626038 0.3805353045463562 -0.16257210075855255 -0.8173161745071411 -0.5527512431144714 -0.13852351903915405 -0.6964934468269348 -0.7040314674377441 -0.16257210075855255 -0.8173161745071411 0.5527512431144714 -0.18039490282535553 -0.9069795608520508 0.3805353045463562 -0.10919522494077682 -0.5489974617958069 -0.8286385536193848 -0.191381573677063 -0.9621570706367493 0.19391460716724396 -0.07565538585186005 -0.3804132342338562 -0.921689510345459 -0.19507431983947754 -0.9807733297348022 0.0 -0.039185766130685806 -0.19708853960037231 0.9795831441879272 -0.07565538585186005 -0.3804132342338562 0.921689510345459 -0.039185766130685806 -0.19708853960037231 -0.9795831441879272 -0.191381573677063 -0.9621570706367493 -0.19391460716724396 -0.10919522494077682 -0.5489974617958069 0.8286385536193848 -0.18039490282535553 -0.9069795608520508 -0.3805353045463562 -0.13852351903915405 -0.6964934468269348 0.7040314674377441 -0.3754081726074219 -0.9063386917114258 -0.19391460716724396 -0.35389262437820435 -0.8543656468391418 -0.3805353045463562 -0.2142094224691391 -0.5171361565589905 0.8286385536193848 -0.2717368006706238 -0.6560564041137695 0.7040314674377441 -0.3188879191875458 -0.7698904275894165 -0.5527512431144714 -0.3188879191875458 -0.7698904275894165 0.5527512431144714 -0.2717368006706238 -0.6560564041137695 -0.7040314674377441 -0.35389262437820435 -0.8543656468391418 0.3805353045463562 -0.2142094224691391 -0.5171361565589905 -0.8286385536193848 -0.3754081726074219 -0.9063386917114258 0.19391460716724396 -0.14841151237487793 -0.3583483397960663 -0.921689510345459 -0.382671594619751 -0.9238563179969788 0.0 -0.07690664380788803 -0.18564409017562866 0.9795831441879272 -0.14841151237487793 -0.3583483397960663 0.921689510345459 -0.07690664380788803 -0.18564409017562866 -0.9795831441879272 -0.3109835982322693 -0.46540728211402893 -0.8286385536193848 -0.2154911905527115 -0.32248908281326294 -0.921689510345459 -0.5449995398521423 -0.8156682252883911 0.19391460716724396 -0.5555589199066162 -0.8314462900161743 0.0 -0.1116367056965828 -0.1670888364315033 0.9795831441879272 -0.2154911905527115 -0.32248908281326294 0.921689510345459 -0.1116367056965828 -0.1670888364315033 -0.9795831441879272 -0.5449995398521423 -0.8156682252883911 -0.19391460716724396 -0.3109835982322693 -0.46540728211402893 0.8286385536193848 -0.5137485861778259 -0.7689138650894165 -0.3805353045463562 -0.39451277256011963 -0.5904415845870972 0.7040314674377441 -0.46296578645706177 -0.6928922533988953 -0.5527512431144714 -0.46296578645706177 -0.6928922533988953 0.5527512431144714 -0.39451277256011963 -0.5904415845870972 -0.7040314674377441 -0.5137485861778259 -0.7689138650894165 0.3805353045463562 -0.5892513990402222 -0.5892513990402222 -0.5527512431144714 -0.5021210312843323 -0.5021210312843323 -0.7040314674377441 -0.5892513990402222 -0.5892513990402222 0.5527512431144714 -0.6538895964622498 -0.6538895964622498 0.3805353045463562 -0.395794540643692 -0.395794540643692 -0.8286385536193848 -0.6936551928520203 -0.6936551928520203 0.19391460716724396 -0.27426984906196594 -0.27426984906196594 -0.921689510345459 -0.7070833444595337 -0.7070833444595337 0.0 -0.1420941799879074 -0.1420941799879074 0.9795831441879272 -0.27426984906196594 -0.27426984906196594 0.921689510345459 -0.1420941799879074 -0.1420941799879074 -0.9795831441879272 -0.6936551928520203 -0.6936551928520203 -0.19391460716724396 -0.395794540643692 -0.395794540643692 0.8286385536193848 -0.6538895964622498 -0.6538895964622498 -0.3805353045463562 -0.5021210312843323 -0.5021210312843323 0.7040314674377441 -0.8156682252883911 -0.5449995398521423 -0.19391460716724396 -0.7689138650894165 -0.5137485861778259 -0.3805353045463562 -0.46540728211402893 -0.3109835982322693 0.8286385536193848 -0.5904415845870972 -0.39451277256011963 0.7040314674377441 -0.6928922533988953 -0.46296578645706177 -0.5527512431144714 -0.6928922533988953 -0.46296578645706177 0.5527512431144714 -0.5904415845870972 -0.39451277256011963 -0.7040314674377441 -0.7689138650894165 -0.5137485861778259 0.3805353045463562 -0.46540728211402893 -0.3109835982322693 -0.8286385536193848 -0.8156682252883911 -0.5449995398521423 0.19391460716724396 -0.32248908281326294 -0.2154911905527115 -0.921689510345459 -0.8314462900161743 -0.5555589199066162 0.0 -0.1670888364315033 -0.1116367056965828 0.9795831441879272 -0.32248908281326294 -0.2154911905527115 0.921689510345459 -0.1670888364315033 -0.1116367056965828 -0.9795831441879272 -0.5171361565589905 -0.2142094224691391 -0.8286385536193848 -0.3583483397960663 -0.14841151237487793 -0.921689510345459 -0.9063386917114258 -0.3754081726074219 0.19391460716724396 -0.9238563179969788 -0.382671594619751 0.0 -0.18564409017562866 -0.07690664380788803 0.9795831441879272 -0.3583483397960663 -0.14841151237487793 0.921689510345459 -0.18564409017562866 -0.07690664380788803 -0.9795831441879272 -0.9063386917114258 -0.3754081726074219 -0.19391460716724396 -0.5171361565589905 -0.2142094224691391 0.8286385536193848 -0.8543656468391418 -0.35386210680007935 -0.3805353045463562 -0.6560564041137695 -0.2717368006706238 0.7040314674377441 -0.7698904275894165 -0.3188879191875458 -0.5527512431144714 -0.7698904275894165 -0.3188879191875458 0.5527512431144714 -0.6560564041137695 -0.2717368006706238 -0.7040314674377441 -0.8543656468391418 -0.35386210680007935 0.3805353045463562 -0.6964934468269348 -0.13852351903915405 0.7040314674377441 -0.8173161745071411 -0.16257210075855255 0.5527512431144714 -0.8173161745071411 -0.16257210075855255 -0.5527512431144714 -0.6964934468269348 -0.13852351903915405 -0.7040314674377441 -0.9069795608520508 -0.18039490282535553 0.3805353045463562 -0.5489974617958069 -0.10919522494077682 -0.8286385536193848 -0.9621570706367493 -0.191381573677063 0.19391460716724396 -0.3804132342338562 -0.07565538585186005 -0.921689510345459 -0.9807733297348022 -0.19507431983947754 0.0 -0.19708853960037231 -0.039185766130685806 0.9795831441879272 -0.3804132342338562 -0.07565538585186005 0.921689510345459 -0.19708853960037231 -0.039185766130685806 -0.9795831441879272 -0.9621570706367493 -0.191381573677063 -0.19391460716724396 -0.5489974617958069 -0.10919522494077682 0.8286385536193848 -0.9069795608520508 -0.18039490282535553 -0.3805353045463562 0.0 0.0 -1.0 0.0 0.0 1.0</float_array>
- <technique_common>
- <accessor source="#id-mesh-8-normals-array" count="482" stride="3">
- <param name="X" type="float"/>
- <param name="Y" type="float"/>
- <param name="Z" type="float"/>
- </accessor>
- </technique_common>
- </source>
- <vertices id="id-mesh-8-vertices">
- <input semantic="POSITION" source="#id-mesh-8-positions"/>
- </vertices>
- <triangles count="960" material="id-trimat-9">
- <input semantic="VERTEX" source="#id-mesh-8-vertices" offset="0"/>
- <input semantic="NORMAL" source="#id-mesh-8-normals" offset="1"/>
- <p> 0 0 1 1 2 2 0 0 2 2 3 3 4 4 5 5 6 6 4 4 6 6 7 7 8 8 0 0 3 3 8 8 3 3 9 9 10 10 4 4 7 7 10 10 7 7 11 11 12 12 8 8 9 9 12 12 9 9 13 13 14 14 10 10 11 11 14 14 11 11 15 15 16 16 12 12 13 13 16 16 13 13 17 17 18 18 14 14 15 15 18 18 15 15 19 19 20 20 16 16 17 17 20 20 17 17 21 21 22 22 18 18 19 19 22 22 19 19 23 23 24 24 25 25 26 26 24 24 26 26 27 27 28 28 20 20 21 21 28 28 21 21 29 29 1 1 22 22 23 23 1 1 23 23 2 2 5 5 24 24 27 27 5 5 27 27 6 6 17 17 13 13 30 30 17 17 30 30 31 31 19 19 15 15 32 32 19 19 32 32 33 33 21 21 17 17 31 31 21 21 31 31 34 34 23 23 19 19 33 33 23 23 33 33 35 35 27 27 26 26 36 36 27 27 36 36 37 37 29 29 21 21 34 34 29 29 34 34 38 38 2 2 23 23 35 35 2 2 35 35 39 39 6 6 27 27 37 37 6 6 37 37 40 40 3 3 2 2 39 39 3 3 39 39 41 41 7 7 6 6 40 40 7 7 40 40 42 42 9 9 3 3 41 41 9 9 41 41 43 43 11 11 7 7 42 42 11 11 42 42 44 44 13 13 9 9 43 43 13 13 43 43 30 30 15 15 11 11 44 44 15 15 44 44 32 32 42 42 40 40 45 45 42 42 45 45 46 46 43 43 41 41 47 47 43 43 47 47 48 48 44 44 42 42 46 46 44 44 46 46 49 49 30 30 43 43 48 48 30 30 48 48 50 50 32 32 44 44 49 49 32 32 49 49 51 51 31 31 30 30 50 50 31 31 50 50 52 52 33 33 32 32 51 51 33 33 51 51 53 53 34 34 31 31 52 52 34 34 52 52 54 54 35 35 33 33 53 53 35 35 53 53 55 55 37 37 36 36 56 56 37 37 56 56 57 57 38 38 34 34 54 54 38 38 54 54 58 58 39 39 35 35 55 55 39 39 55 55 59 59 40 40 37 37 57 57 40 40 57 57 45 45 41 41 39 39 59 59 41 41 59 59 47 47 55 55 53 53 60 60 55 55 60 60 61 61 57 57 56 56 62 62 57 57 62 62 63 63 58 58 54 54 64 64 58 58 64 64 65 65 59 59 55 55 61 61 59 59 61 61 66 66 45 45 57 57 63 63 45 45 63 63 67 67 47 47 59 59 66 66 47 47 66 66 68 68 46 46 45 45 67 67 46 46 67 67 69 69 48 48 47 47 68 68 48 48 68 68 70 70 49 49 46 46 69 69 49 49 69 69 71 71 50 50 48 48 70 70 50 50 70 70 72 72 51 51 49 49 71 71 51 51 71 71 73 73 52 52 50 50 72 72 52 52 72 72 74 74 53 53 51 51 73 73 53 53 73 73 60 60 54 54 52 52 74 74 54 54 74 74 64 64 72 72 70 70 75 75 72 72 75 75 76 76 73 73 71 71 77 77 73 73 77 77 78 78 74 74 72 72 76 76 74 74 76 76 79 79 60 60 73 73 78 78 60 60 78 78 80 80 64 64 74 74 79 79 64 64 79 79 81 81 61 61 60 60 80 80 61 61 80 80 82 82 63 63 62 62 83 83 63 63 83 83 84 84 65 65 64 64 81 81 65 65 81 81 85 85 66 66 61 61 82 82 66 66 82 82 86 86 67 67 63 63 84 84 67 67 84 84 87 87 68 68 66 66 86 86 68 68 86 86 88 88 69 69 67 67 87 87 69 69 87 87 89 89 70 70 68 68 88 88 70 70 88 88 75 75 71 71 69 69 89 89 71 71 89 89 77 77 88 88 86 86 90 90 88 88 90 90 91 91 89 89 87 87 92 92 89 89 92 92 93 93 75 75 88 88 91 91 75 75 91 91 94 94 77 77 89 89 93 93 77 77 93 93 95 95 76 76 75 75 94 94 76 76 94 94 96 96 78 78 77 77 95 95 78 78 95 95 97 97 79 79 76 76 96 96 79 79 96 96 98 98 80 80 78 78 97 97 80 80 97 97 99 99 81 81 79 79 98 98 81 81 98 98 100 100 82 82 80 80 99 99 82 82 99 99 101 101 84 84 83 83 102 102 84 84 102 102 103 103 85 85 81 81 100 100 85 85 100 100 104 104 86 86 82 82 101 101 86 86 101 101 90 90 87 87 84 84 103 103 87 87 103 103 92 92 100 100 98 98 105 105 100 100 105 105 106 106 101 101 99 99 107 107 101 101 107 107 108 108 103 103 102 102 109 109 103 103 109 109 110 110 104 104 100 100 106 106 104 104 106 106 111 111 90 90 101 101 108 108 90 90 108 108 112 112 92 92 103 103 110 110 92 92 110 110 113 113 91 91 90 90 112 112 91 91 112 112 114 114 93 93 92 92 113 113 93 93 113 113 115 115 94 94 91 91 114 114 94 94 114 114 116 116 95 95 93 93 115 115 95 95 115 115 117 117 96 96 94 94 116 116 96 96 116 116 118 118 97 97 95 95 117 117 97 97 117 117 119 119 98 98 96 96 118 118 98 98 118 118 105 105 99 99 97 97 119 119 99 99 119 119 107 107 118 118 116 116 120 120 118 118 120 120 121 121 119 119 117 117 122 122 119 119 122 122 123 123 105 105 118 118 121 121 105 105 121 121 124 124 107 107 119 119 123 123 107 107 123 123 125 125 106 106 105 105 124 124 106 106 124 124 126 126 108 108 107 107 125 125 108 108 125 125 127 127 110 110 109 109 128 128 110 110 128 128 129 129 111 111 106 106 126 126 111 111 126 126 130 130 112 112 108 108 127 127 112 112 127 127 131 131 113 113 110 110 129 129 113 113 129 129 132 132 114 114 112 112 131 131 114 114 131 131 133 133 115 115 113 113 132 132 115 115 132 132 134 134 116 116 114 114 133 133 116 116 133 133 120 120 117 117 115 115 134 134 117 117 134 134 122 122 133 133 131 131 135 135 133 133 135 135 136 136 134 134 132 132 137 137 134 134 137 137 138 138 120 120 133 133 136 136 120 120 136 136 139 139 122 122 134 134 138 138 122 122 138 138 140 140 121 121 120 120 139 139 121 121 139 139 141 141 123 123 122 122 140 140 123 123 140 140 142 142 124 124 121 121 141 141 124 124 141 141 143 143 125 125 123 123 142 142 125 125 142 142 144 144 126 126 124 124 143 143 126 126 143 143 145 145 127 127 125 125 144 144 127 127 144 144 146 146 129 129 128 128 147 147 129 129 147 147 148 148 130 130 126 126 145 145 130 130 145 145 149 149 131 131 127 127 146 146 131 131 146 146 135 135 132 132 129 129 148 148 132 132 148 148 137 137 145 145 143 143 150 150 145 145 150 150 151 151 146 146 144 144 152 152 146 146 152 152 153 153 148 148 147 147 154 154 148 148 154 154 155 155 149 149 145 145 151 151 149 149 151 151 156 156 135 135 146 146 153 153 135 135 153 153 157 157 137 137 148 148 155 155 137 137 155 155 158 158 136 136 135 135 157 157 136 136 157 157 159 159 138 138 137 137 158 158 138 138 158 158 160 160 139 139 136 136 159 159 139 139 159 159 161 161 140 140 138 138 160 160 140 140 160 160 162 162 141 141 139 139 161 161 141 141 161 161 163 163 142 142 140 140 162 162 142 142 162 162 164 164 143 143 141 141 163 163 143 143 163 163 150 150 144 144 142 142 164 164 144 144 164 164 152 152 163 163 161 161 165 165 163 163 165 165 166 166 164 164 162 162 167 167 164 164 167 167 168 168 150 150 163 163 166 166 150 150 166 166 169 169 152 152 164 164 168 168 152 152 168 168 170 170 151 151 150 150 169 169 151 151 169 169 171 171 153 153 152 152 170 170 153 153 170 170 172 172 155 155 154 154 173 173 155 155 173 173 174 174 156 156 151 151 171 171 156 156 171 171 175 175 157 157 153 153 172 172 157 157 172 172 176 176 158 158 155 155 174 174 158 158 174 174 177 177 159 159 157 157 176 176 159 159 176 176 178 178 160 160 158 158 177 177 160 160 177 177 179 179 161 161 159 159 178 178 161 161 178 178 165 165 162 162 160 160 179 179 162 162 179 179 167 167 177 177 174 174 180 180 177 177 180 180 181 181 178 178 176 176 182 182 178 178 182 182 183 183 179 179 177 177 181 181 179 179 181 181 184 184 165 165 178 178 183 183 165 165 183 183 185 185 167 167 179 179 184 184 167 167 184 184 186 186 166 166 165 165 185 185 166 166 185 185 187 187 168 168 167 167 186 186 168 168 186 186 188 188 169 169 166 166 187 187 169 169 187 187 189 189 170 170 168 168 188 188 170 170 188 188 190 190 171 171 169 169 189 189 171 171 189 189 191 191 172 172 170 170 190 190 172 172 190 190 192 192 174 174 173 173 193 193 174 174 193 193 180 180 175 175 171 171 191 191 175 175 191 191 194 194 176 176 172 172 192 192 176 176 192 192 182 182 190 190 188 188 195 195 190 190 195 195 196 196 191 191 189 189 197 197 191 191 197 197 198 198 192 192 190 190 196 196 192 192 196 196 199 199 180 180 193 193 200 200 180 180 200 200 201 201 194 194 191 191 198 198 194 194 198 198 202 202 182 182 192 192 199 199 182 182 199 199 203 203 181 181 180 180 201 201 181 181 201 201 204 204 183 183 182 182 203 203 183 183 203 203 205 205 184 184 181 181 204 204 184 184 204 204 206 206 185 185 183 183 205 205 185 185 205 205 207 207 186 186 184 184 206 206 186 186 206 206 208 208 187 187 185 185 207 207 187 187 207 207 209 209 188 188 186 186 208 208 188 188 208 208 195 195 189 189 187 187 209 209 189 189 209 209 197 197 207 207 205 205 210 210 207 207 210 210 211 211 208 208 206 206 212 212 208 208 212 212 213 213 209 209 207 207 211 211 209 209 211 211 214 214 195 195 208 208 213 213 195 195 213 213 215 215 197 197 209 209 214 214 197 197 214 214 216 216 196 196 195 195 215 215 196 196 215 215 217 217 198 198 197 197 216 216 198 198 216 216 218 218 199 199 196 196 217 217 199 199 217 217 219 219 201 201 200 200 220 220 201 201 220 220 221 221 202 202 198 198 218 218 202 202 218 218 222 222 203 203 199 199 219 219 203 203 219 219 223 223 204 204 201 201 221 221 204 204 221 221 224 224 205 205 203 203 223 223 205 205 223 223 210 210 206 206 204 204 224 224 206 206 224 224 212 212 222 222 218 218 225 225 222 222 225 225 226 226 223 223 219 219 227 227 223 223 227 227 228 228 224 224 221 221 229 229 224 224 229 229 230 230 210 210 223 223 228 228 210 210 228 228 231 231 212 212 224 224 230 230 212 212 230 230 232 232 211 211 210 210 231 231 211 211 231 231 233 233 213 213 212 212 232 232 213 213 232 232 234 234 214 214 211 211 233 233 214 214 233 233 235 235 215 215 213 213 234 234 215 215 234 234 236 236 216 216 214 214 235 235 216 216 235 235 237 237 217 217 215 215 236 236 217 217 236 236 238 238 218 218 216 216 237 237 218 218 237 237 225 225 219 219 217 217 238 238 219 219 238 238 227 227 221 221 220 220 239 239 221 221 239 239 229 229 237 237 235 235 240 240 237 237 240 240 241 241 238 238 236 236 242 242 238 238 242 242 243 243 225 225 237 237 241 241 225 225 241 241 244 244 227 227 238 238 243 243 227 227 243 243 245 245 229 229 239 239 246 246 229 229 246 246 247 247 226 226 225 225 244 244 226 226 244 244 248 248 228 228 227 227 245 245 228 228 245 245 249 249 230 230 229 229 247 247 230 230 247 247 250 250 231 231 228 228 249 249 231 231 249 249 251 251 232 232 230 230 250 250 232 232 250 250 252 252 233 233 231 231 251 251 233 233 251 251 253 253 234 234 232 232 252 252 234 234 252 252 254 254 235 235 233 233 253 253 235 235 253 253 240 240 236 236 234 234 254 254 236 236 254 254 242 242 253 253 251 251 255 255 253 253 255 255 256 256 254 254 252 252 257 257 254 254 257 257 258 258 240 240 253 253 256 256 240 240 256 256 259 259 242 242 254 254 258 258 242 242 258 258 260 260 241 241 240 240 259 259 241 241 259 259 261 261 243 243 242 242 260 260 243 243 260 260 262 262 244 244 241 241 261 261 244 244 261 261 263 263 245 245 243 243 262 262 245 245 262 262 264 264 247 247 246 246 265 265 247 247 265 265 266 266 248 248 244 244 263 263 248 248 263 263 267 267 249 249 245 245 264 264 249 249 264 264 268 268 250 250 247 247 266 266 250 250 266 266 269 269 251 251 249 249 268 268 251 251 268 268 255 255 252 252 250 250 269 269 252 252 269 269 257 257 267 267 263 263 270 270 267 267 270 270 271 271 268 268 264 264 272 272 268 268 272 272 273 273 269 269 266 266 274 274 269 269 274 274 275 275 255 255 268 268 273 273 255 255 273 273 276 276 257 257 269 269 275 275 257 257 275 275 277 277 256 256 255 255 276 276 256 256 276 276 278 278 258 258 257 257 277 277 258 258 277 277 279 279 259 259 256 256 278 278 259 259 278 278 280 280 260 260 258 258 279 279 260 260 279 279 281 281 261 261 259 259 280 280 261 261 280 280 282 282 262 262 260 260 281 281 262 262 281 281 283 283 263 263 261 261 282 282 263 263 282 282 270 270 264 264 262 262 283 283 264 264 283 283 272 272 266 266 265 265 284 284 266 266 284 284 274 274 282 282 280 280 285 285 282 282 285 285 286 286 283 283 281 281 287 287 283 283 287 287 288 288 270 270 282 282 286 286 270 270 286 286 289 289 272 272 283 283 288 288 272 272 288 288 290 290 274 274 284 284 291 291 274 274 291 291 292 292 271 271 270 270 289 289 271 271 289 289 293 293 273 273 272 272 290 290 273 273 290 290 294 294 275 275 274 274 292 292 275 275 292 292 295 295 276 276 273 273 294 294 276 276 294 294 296 296 277 277 275 275 295 295 277 277 295 295 297 297 278 278 276 276 296 296 278 278 296 296 298 298 279 279 277 277 297 297 279 279 297 297 299 299 280 280 278 278 298 298 280 280 298 298 285 285 281 281 279 279 299 299 281 281 299 299 287 287 298 298 296 296 300 300 298 298 300 300 301 301 299 299 297 297 302 302 299 299 302 302 303 303 285 285 298 298 301 301 285 285 301 301 304 304 287 287 299 299 303 303 287 287 303 303 305 305 286 286 285 285 304 304 286 286 304 304 306 306 288 288 287 287 305 305 288 288 305 305 307 307 289 289 286 286 306 306 289 289 306 306 308 308 290 290 288 288 307 307 290 290 307 307 309 309 292 292 291 291 310 310 292 292 310 310 311 311 293 293 289 289 308 308 293 293 308 308 312 312 294 294 290 290 309 309 294 294 309 309 313 313 295 295 292 292 311 311 295 295 311 311 314 314 296 296 294 294 313 313 296 296 313 313 300 300 297 297 295 295 314 314 297 297 314 314 302 302 311 311 310 310 315 315 311 311 315 315 316 316 312 312 308 308 317 317 312 312 317 317 318 318 313 313 309 309 319 319 313 313 319 319 320 320 314 314 311 311 316 316 314 314 316 316 321 321 300 300 313 313 320 320 300 300 320 320 322 322 302 302 314 314 321 321 302 302 321 321 323 323 301 301 300 300 322 322 301 301 322 322 324 324 303 303 302 302 323 323 303 303 323 323 325 325 304 304 301 301 324 324 304 304 324 324 326 326 305 305 303 303 325 325 305 305 325 325 327 327 306 306 304 304 326 326 306 306 326 326 328 328 307 307 305 305 327 327 307 307 327 327 329 329 308 308 306 306 328 328 308 308 328 328 317 317 309 309 307 307 329 329 309 309 329 329 319 319 327 327 325 325 330 330 327 327 330 330 331 331 328 328 326 326 332 332 328 328 332 332 333 333 329 329 327 327 331 331 329 329 331 331 334 334 317 317 328 328 333 333 317 317 333 333 335 335 319 319 329 329 334 334 319 319 334 334 336 336 316 316 315 315 337 337 316 316 337 337 338 338 318 318 317 317 335 335 318 318 335 335 339 339 320 320 319 319 336 336 320 320 336 336 340 340 321 321 316 316 338 338 321 321 338 338 341 341 322 322 320 320 340 340 322 322 340 340 342 342 323 323 321 321 341 341 323 323 341 341 343 343 324 324 322 322 342 342 324 324 342 342 344 344 325 325 323 323 343 343 325 325 343 343 330 330 326 326 324 324 344 344 326 326 344 344 332 332 342 342 340 340 345 345 342 342 345 345 346 346 343 343 341 341 347 347 343 343 347 347 348 348 344 344 342 342 346 346 344 344 346 346 349 349 330 330 343 343 348 348 330 330 348 348 350 350 332 332 344 344 349 349 332 332 349 349 351 351 331 331 330 330 350 350 331 331 350 350 352 352 333 333 332 332 351 351 333 333 351 351 353 353 334 334 331 331 352 352 334 334 352 352 354 354 335 335 333 333 353 353 335 335 353 353 355 355 336 336 334 334 354 354 336 336 354 354 356 356 338 338 337 337 357 357 338 338 357 357 358 358 339 339 335 335 355 355 339 339 355 355 359 359 340 340 336 336 356 356 340 340 356 356 345 345 341 341 338 338 358 358 341 341 358 358 347 347 355 355 353 353 360 360 355 355 360 360 361 361 356 356 354 354 362 362 356 356 362 362 363 363 358 358 357 357 364 364 358 358 364 364 365 365 359 359 355 355 361 361 359 359 361 361 366 366 345 345 356 356 363 363 345 345 363 363 367 367 347 347 358 358 365 365 347 347 365 365 368 368 346 346 345 345 367 367 346 346 367 367 369 369 348 348 347 347 368 368 348 348 368 368 370 370 349 349 346 346 369 369 349 349 369 369 371 371 350 350 348 348 370 370 350 350 370 370 372 372 351 351 349 349 371 371 351 351 371 371 373 373 352 352 350 350 372 372 352 352 372 372 374 374 353 353 351 351 373 373 353 353 373 373 360 360 354 354 352 352 374 374 354 354 374 374 362 362 373 373 371 371 375 375 373 373 375 375 376 376 374 374 372 372 377 377 374 374 377 377 378 378 360 360 373 373 376 376 360 360 376 376 379 379 362 362 374 374 378 378 362 362 378 378 380 380 361 361 360 360 379 379 361 361 379 379 381 381 363 363 362 362 380 380 363 363 380 380 382 382 365 365 364 364 383 383 365 365 383 383 384 384 366 366 361 361 381 381 366 366 381 381 385 385 367 367 363 363 382 382 367 367 382 382 386 386 368 368 365 365 384 384 368 368 384 384 387 387 369 369 367 367 386 386 369 369 386 386 388 388 370 370 368 368 387 387 370 370 387 387 389 389 371 371 369 369 388 388 371 371 388 388 375 375 372 372 370 370 389 389 372 372 389 389 377 377 388 388 386 386 390 390 388 388 390 390 391 391 389 389 387 387 392 392 389 389 392 392 393 393 375 375 388 388 391 391 375 375 391 391 394 394 377 377 389 389 393 393 377 377 393 393 395 395 376 376 375 375 394 394 376 376 394 394 396 396 378 378 377 377 395 395 378 378 395 395 397 397 379 379 376 376 396 396 379 379 396 396 398 398 380 380 378 378 397 397 380 380 397 397 399 399 381 381 379 379 398 398 381 381 398 398 400 400 382 382 380 380 399 399 382 382 399 399 401 401 384 384 383 383 402 402 384 384 402 402 403 403 385 385 381 381 400 400 385 385 400 400 404 404 386 386 382 382 401 401 386 386 401 401 390 390 387 387 384 384 403 403 387 387 403 403 392 392 400 400 398 398 405 405 400 400 405 405 406 406 401 401 399 399 407 407 401 401 407 407 408 408 403 403 402 402 409 409 403 403 409 409 410 410 404 404 400 400 406 406 404 404 406 406 411 411 390 390 401 401 408 408 390 390 408 408 412 412 392 392 403 403 410 410 392 392 410 410 413 413 391 391 390 390 412 412 391 391 412 412 414 414 393 393 392 392 413 413 393 393 413 413 415 415 394 394 391 391 414 414 394 394 414 414 416 416 395 395 393 393 415 415 395 395 415 415 417 417 396 396 394 394 416 416 396 396 416 416 418 418 397 397 395 395 417 417 397 397 417 417 419 419 398 398 396 396 418 418 398 398 418 418 405 405 399 399 397 397 419 419 399 399 419 419 407 407 418 418 416 416 420 420 418 418 420 420 421 421 419 419 417 417 422 422 419 419 422 422 423 423 405 405 418 418 421 421 405 405 421 421 424 424 407 407 419 419 423 423 407 407 423 423 425 425 406 406 405 405 424 424 406 406 424 424 426 426 408 408 407 407 425 425 408 408 425 425 427 427 410 410 409 409 428 428 410 410 428 428 429 429 411 411 406 406 426 426 411 411 426 426 430 430 412 412 408 408 427 427 412 412 427 427 431 431 413 413 410 410 429 429 413 413 429 429 432 432 414 414 412 412 431 431 414 414 431 431 433 433 415 415 413 413 432 432 415 415 432 432 434 434 416 416 414 414 433 433 416 416 433 433 420 420 417 417 415 415 434 434 417 417 434 434 422 422 433 433 431 431 435 435 433 433 435 435 436 436 434 434 432 432 437 437 434 434 437 437 438 438 420 420 433 433 436 436 420 420 436 436 439 439 422 422 434 434 438 438 422 422 438 438 440 440 421 421 420 420 439 439 421 421 439 439 441 441 423 423 422 422 440 440 423 423 440 440 442 442 424 424 421 421 441 441 424 424 441 441 443 443 425 425 423 423 442 442 425 425 442 442 444 444 426 426 424 424 443 443 426 426 443 443 445 445 427 427 425 425 444 444 427 427 444 444 446 446 429 429 428 428 447 447 429 429 447 447 448 448 430 430 426 426 445 445 430 430 445 445 449 449 431 431 427 427 446 446 431 431 446 446 435 435 432 432 429 429 448 448 432 432 448 448 437 437 445 445 443 443 450 450 445 445 450 450 451 451 446 446 444 444 452 452 446 446 452 452 453 453 448 448 447 447 454 454 448 448 454 454 455 455 449 449 445 445 451 451 449 449 451 451 456 456 435 435 446 446 453 453 435 435 453 453 457 457 437 437 448 448 455 455 437 437 455 455 458 458 436 436 435 435 457 457 436 436 457 457 459 459 438 438 437 437 458 458 438 438 458 458 460 460 439 439 436 436 459 459 439 439 459 459 461 461 440 440 438 438 460 460 440 440 460 460 462 462 441 441 439 439 461 461 441 441 461 461 463 463 442 442 440 440 462 462 442 442 462 462 464 464 443 443 441 441 463 463 443 443 463 463 450 450 444 444 442 442 464 464 444 444 464 464 452 452 462 462 460 460 465 465 462 462 465 465 466 466 463 463 461 461 467 467 463 463 467 467 468 468 464 464 462 462 466 466 464 464 466 466 469 469 450 450 463 463 468 468 450 450 468 468 470 470 452 452 464 464 469 469 452 452 469 469 471 471 451 451 450 450 470 470 451 451 470 470 472 472 453 453 452 452 471 471 453 453 471 471 473 473 455 455 454 454 474 474 455 455 474 474 475 475 456 456 451 451 472 472 456 456 472 472 476 476 457 457 453 453 473 473 457 457 473 473 477 477 458 458 455 455 475 475 458 458 475 475 478 478 459 459 457 457 477 477 459 459 477 477 479 479 460 460 458 458 478 478 460 460 478 478 465 465 461 461 459 459 479 479 461 461 479 479 467 467 480 480 28 28 29 29 25 25 481 481 26 26 26 26 481 481 36 36 480 480 29 29 38 38 36 36 481 481 56 56 480 480 38 38 58 58 480 480 58 58 65 65 56 56 481 481 62 62 62 62 481 481 83 83 480 480 65 65 85 85 480 480 85 85 104 104 83 83 481 481 102 102 480 480 104 104 111 111 102 102 481 481 109 109 109 109 481 481 128 128 480 480 111 111 130 130 480 480 130 130 149 149 128 128 481 481 147 147 480 480 149 149 156 156 147 147 481 481 154 154 154 154 481 481 173 173 480 480 156 156 175 175 480 480 175 175 194 194 173 173 481 481 193 193 193 193 481 481 200 200 480 480 194 194 202 202 200 200 481 481 220 220 480 480 202 202 222 222 480 480 222 222 226 226 220 220 481 481 239 239 239 239 481 481 246 246 480 480 226 226 248 248 246 246 481 481 265 265 480 480 248 248 267 267 480 480 267 267 271 271 265 265 481 481 284 284 284 284 481 481 291 291 480 480 271 271 293 293 291 291 481 481 310 310 480 480 293 293 312 312 480 480 312 312 318 318 310 310 481 481 315 315 315 315 481 481 337 337 480 480 318 318 339 339 337 337 481 481 357 357 480 480 339 339 359 359 480 480 359 359 366 366 357 357 481 481 364 364 364 364 481 481 383 383 480 480 366 366 385 385 480 480 385 385 404 404 383 383 481 481 402 402 480 480 404 404 411 411 402 402 481 481 409 409 409 409 481 481 428 428 480 480 411 411 430 430 480 480 430 430 449 449 428 428 481 481 447 447 447 447 481 481 454 454 480 480 449 449 456 456 454 454 481 481 474 474 480 480 456 456 476 476 477 477 473 473 22 22 477 477 22 22 1 1 478 478 475 475 24 24 478 478 24 24 5 5 480 480 476 476 28 28 479 479 477 477 1 1 479 479 1 1 0 0 465 465 478 478 5 5 465 465 5 5 4 4 467 467 479 479 0 0 467 467 0 0 8 8 466 466 465 465 4 4 466 466 4 4 10 10 468 468 467 467 8 8 468 468 8 8 12 12 469 469 466 466 10 10 469 469 10 10 14 14 470 470 468 468 12 12 470 470 12 12 16 16 471 471 469 469 14 14 471 471 14 14 18 18 481 481 25 25 474 474 472 472 470 470 16 16 472 472 16 16 20 20 473 473 471 471 18 18 473 473 18 18 22 22 25 25 24 24 475 475 25 25 475 475 474 474 476 476 472 472 20 20 476 476 20 20 28 28</p>
- </triangles>
- </mesh>
- </geometry>
- <geometry id="id-mesh-12" name="Cube.001">
- <mesh>
- <source id="id-mesh-12-positions">
- <float_array id="id-mesh-12-positions-array" count="114"> 0.6932526230812073 0.6167106628417969 -1.0 0.6932526230812073 -0.6167107224464417 -1.0 -0.6932527422904968 -0.6167106628417969 -1.0 -0.6932523846626282 0.6167109608650208 -1.0 2.384185791015625e-07 0.6167105436325073 1.2778520584106445 -1.1658495664596558 0.6167107224464417 0.3362422585487366 -1.165850043296814 -0.6167105436325073 0.3362422585487366 -5.364418029785156e-07 -0.6167107820510864 1.2778520584106445 0.6932526230812073 0.6167106628417969 -1.0 1.165850281715393 0.616710364818573 0.3362422585487366 1.165848970413208 -0.6167111396789551 0.3362422585487366 0.6932526230812073 -0.6167107224464417 -1.0 1.165848970413208 -0.6167111396789551 0.3362422585487366 -5.364418029785156e-07 -0.6167107820510864 1.2778520584106445 -1.165850043296814 -0.6167105436325073 0.3362422585487366 1.165848970413208 -0.6167111396789551 0.3362422585487366 -1.165850043296814 -0.6167105436325073 0.3362422585487366 -0.6932527422904968 -0.6167106628417969 -1.0 0.6932526230812073 -0.6167107224464417 -1.0 1.165848970413208 -0.6167111396789551 0.3362422585487366 -0.6932527422904968 -0.6167106628417969 -1.0 -0.6932527422904968 -0.6167106628417969 -1.0 -1.165850043296814 -0.6167105436325073 0.3362422585487366 -1.1658495664596558 0.6167107224464417 0.3362422585487366 -0.6932523846626282 0.6167109608650208 -1.0 1.165850281715393 0.616710364818573 0.3362422585487366 -1.1658495664596558 0.6167107224464417 0.3362422585487366 2.384185791015625e-07 0.6167105436325073 1.2778520584106445 1.165850281715393 0.616710364818573 0.3362422585487366 -0.6932523846626282 0.6167109608650208 -1.0 -1.1658495664596558 0.6167107224464417 0.3362422585487366 1.165850281715393 0.616710364818573 0.3362422585487366 0.6932526230812073 0.6167106628417969 -1.0 -0.6932523846626282 0.6167109608650208 -1.0 1.165850281715393 0.616710364818573 0.3362422585487366 2.384185791015625e-07 0.6167105436325073 1.2778520584106445 -5.364418029785156e-07 -0.6167107820510864 1.2778520584106445 1.165848970413208 -0.6167111396789551 0.3362422585487366</float_array>
- <technique_common>
- <accessor source="#id-mesh-12-positions-array" count="38" stride="3">
- <param name="X" type="float"/>
- <param name="Y" type="float"/>
- <param name="Z" type="float"/>
- </accessor>
- </technique_common>
- </source>
- <source id="id-mesh-12-normals">
- <float_array id="id-mesh-12-normals-array" count="114"> 0.0 0.0 -1.0 0.0 0.0 -1.0 0.0 0.0 -1.0 0.0 0.0 -1.0 -0.6283218264579773 3.224629381293198e-07 0.777953565120697 -0.6283218264579773 3.224629381293198e-07 0.777953565120697 -0.6283218264579773 3.224629381293198e-07 0.777953565120697 -0.6283218264579773 3.224629381293198e-07 0.777953565120697 0.942772626876831 -5.114246732773609e-07 -0.33343619108200073 0.942772626876831 -5.114246732773609e-07 -0.33343619108200073 0.942772626876831 -5.114246732773609e-07 -0.33343619108200073 0.942772626876831 -5.114246732773609e-07 -0.33343619108200073 -2.5562755467944953e-07 -1.0 6.330079571625902e-08 -2.5562755467944953e-07 -1.0 6.330079571625902e-08 -2.5562755467944953e-07 -1.0 6.330079571625902e-08 -2.556275262577401e-07 -1.0 -1.1970868740718288e-09 -2.556275262577401e-07 -1.0 -1.1970868740718288e-09 -2.556275262577401e-07 -1.0 -1.1970868740718288e-09 -4.2989128701265145e-08 -1.0 -2.9703892323595937e-07 -4.2989128701265145e-08 -1.0 -2.9703892323595937e-07 -4.2989128701265145e-08 -1.0 -2.9703892323595937e-07 -0.942772626876831 3.2390229876000376e-07 -0.33343639969825745 -0.942772626876831 3.2390229876000376e-07 -0.33343639969825745 -0.942772626876831 3.2390229876000376e-07 -0.33343639969825745 -0.942772626876831 3.2390229876000376e-07 -0.33343639969825745 1.5337646175339614e-07 1.0 1.2945135076185797e-14 1.5337646175339614e-07 1.0 1.2945135076185797e-14 1.5337646175339614e-07 1.0 1.2945135076185797e-14 1.5337646175339614e-07 1.0 2.326702883692633e-07 1.5337646175339614e-07 1.0 2.326702883692633e-07 1.5337646175339614e-07 1.0 2.326702883692633e-07 2.1494564350632572e-07 1.0 1.470095867261989e-07 2.1494564350632572e-07 1.0 1.470095867261989e-07 2.1494564350632572e-07 1.0 1.470095867261989e-07 0.6283217072486877 -5.481868470269546e-07 0.7779535055160522 0.6283217072486877 -5.481868470269546e-07 0.7779535055160522 0.6283217072486877 -5.481868470269546e-07 0.7779535055160522 0.6283217072486877 -5.481868470269546e-07 0.7779535055160522</float_array>
- <technique_common>
- <accessor source="#id-mesh-12-normals-array" count="38" stride="3">
- <param name="X" type="float"/>
- <param name="Y" type="float"/>
- <param name="Z" type="float"/>
- </accessor>
- </technique_common>
- </source>
- <vertices id="id-mesh-12-vertices">
- <input semantic="POSITION" source="#id-mesh-12-positions"/>
- </vertices>
- <triangles count="16" material="id-trimat-13">
- <input semantic="VERTEX" source="#id-mesh-12-vertices" offset="0"/>
- <input semantic="NORMAL" source="#id-mesh-12-normals" offset="1"/>
- <p> 0 0 1 1 2 2 0 0 2 2 3 3 4 4 5 5 6 6 4 4 6 6 7 7 8 8 9 9 10 10 8 8 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 21 21 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35 36 36 34 34 36 36 37 37</p>
- </triangles>
- </mesh>
- </geometry>
- <geometry id="id-mesh-16" name="Cube">
- <mesh>
- <source id="id-mesh-16-positions">
- <float_array id="id-mesh-16-positions-array" count="72"> 1.0 0.9999999403953552 -1.0 1.0 -1.0 -1.0 -1.0000001192092896 -0.9999998211860657 -1.0 -0.9999996423721313 1.0000003576278687 -1.0 1.0000004768371582 0.999999463558197 1.0 -0.9999999403953552 1.0 1.0 -1.0000003576278687 -0.9999996423721313 1.0 0.9999993443489075 -1.0000005960464478 1.0 1.0 0.9999999403953552 -1.0 1.0000004768371582 0.999999463558197 1.0 0.9999993443489075 -1.0000005960464478 1.0 1.0 -1.0 -1.0 1.0 -1.0 -1.0 0.9999993443489075 -1.0000005960464478 1.0 -1.0000003576278687 -0.9999996423721313 1.0 -1.0000001192092896 -0.9999998211860657 -1.0 -1.0000001192092896 -0.9999998211860657 -1.0 -1.0000003576278687 -0.9999996423721313 1.0 -0.9999999403953552 1.0 1.0 -0.9999996423721313 1.0000003576278687 -1.0 1.0000004768371582 0.999999463558197 1.0 1.0 0.9999999403953552 -1.0 -0.9999996423721313 1.0000003576278687 -1.0 -0.9999999403953552 1.0 1.0</float_array>
- <technique_common>
- <accessor source="#id-mesh-16-positions-array" count="24" stride="3">
- <param name="X" type="float"/>
- <param name="Y" type="float"/>
- <param name="Z" type="float"/>
- </accessor>
- </technique_common>
- </source>
- <source id="id-mesh-16-normals">
- <float_array id="id-mesh-16-normals-array" count="72"> 0.0 0.0 -1.0 0.0 0.0 -1.0 0.0 0.0 -1.0 0.0 0.0 -1.0 0.0 -0.0 1.0 0.0 -0.0 1.0 0.0 -0.0 1.0 0.0 -0.0 1.0 1.0 -2.8312206268310547e-07 4.470341252726939e-08 1.0 -2.8312206268310547e-07 4.470341252726939e-08 1.0 -2.8312206268310547e-07 4.470341252726939e-08 1.0 -2.8312206268310547e-07 4.470341252726939e-08 -2.8312206268310547e-07 -1.0 -1.0430819230577981e-07 -2.8312206268310547e-07 -1.0 -1.0430819230577981e-07 -2.8312206268310547e-07 -1.0 -1.0430819230577981e-07 -2.8312206268310547e-07 -1.0 -1.0430819230577981e-07 -1.0 2.2351744632942427e-07 -1.341104365337742e-07 -1.0 2.2351744632942427e-07 -1.341104365337742e-07 -1.0 2.2351744632942427e-07 -1.341104365337742e-07 -1.0 2.2351744632942427e-07 -1.341104365337742e-07 2.384185791015625e-07 1.0 2.086162567138672e-07 2.384185791015625e-07 1.0 2.086162567138672e-07 2.384185791015625e-07 1.0 2.086162567138672e-07 2.384185791015625e-07 1.0 2.086162567138672e-07</float_array>
- <technique_common>
- <accessor source="#id-mesh-16-normals-array" count="24" stride="3">
- <param name="X" type="float"/>
- <param name="Y" type="float"/>
- <param name="Z" type="float"/>
- </accessor>
- </technique_common>
- </source>
- <vertices id="id-mesh-16-vertices">
- <input semantic="POSITION" source="#id-mesh-16-positions"/>
- </vertices>
- <triangles count="12" material="id-trimat-17">
- <input semantic="VERTEX" source="#id-mesh-16-vertices" offset="0"/>
- <input semantic="NORMAL" source="#id-mesh-16-normals" offset="1"/>
- <p> 0 0 1 1 2 2 0 0 2 2 3 3 4 4 5 5 6 6 4 4 6 6 7 7 8 8 9 9 10 10 8 8 10 10 11 11 12 12 13 13 14 14 12 12 14 14 15 15 16 16 17 17 18 18 16 16 18 18 19 19 20 20 21 21 22 22 20 20 22 22 23 23</p>
- </triangles>
- </mesh>
- </geometry>
-</library_geometries>
-<library_controllers>
-</library_controllers>
-<library_cameras>
- <camera id="id-camera-19" name="Camera">
- <optics>
- <technique_common>
- <perspective>
- <yfov> 49.13434207760448 </yfov>
- <aspect_ratio> 1.7777777777777777 </aspect_ratio>
- <znear> 0.10000000149011612 </znear>
- <zfar> 100.0 </zfar>
- </perspective>
- </technique_common>
- </optics>
- </camera>
-</library_cameras>
-<library_lights>
- <light id="id-light-18" name="Lamp">
- <optics>
- <technique_common>
- <point>
- <color> 1.0 1.0 1.0 </color>
- <linear_attenuation>0.06666670481366115</linear_attenuation>
- </point>
- </technique_common>
- </optics>
- </light>
-</library_lights>
-<library_visual_scenes>
- <visual_scene id="id-scene-1" name="scene">
- <node id="Capsule" name="Capsule" type="NODE">
- <matrix sid="transform"> 1.0 0.0 0.0 5.032209396362305 0.0 1.0 0.0 4.14798506653824e-09 0.0 0.0 1.0 -0.030872434377670288 0.0 0.0 0.0 1.0 </matrix>
- <instance_geometry url="#id-mesh-4">
- <bind_material>
- <technique_common>
- <instance_material symbol="id-trimat-5" target="#id-material-3"/>
- </technique_common>
- </bind_material>
- </instance_geometry>
- </node>
- <node id="Sphere" name="Sphere" type="NODE">
- <matrix sid="transform"> 1.0 0.0 0.0 2.2536890506744385 0.0 1.0 0.0 4.14798506653824e-09 0.0 0.0 1.0 -0.030872434377670288 0.0 0.0 0.0 1.0 </matrix>
- <instance_geometry url="#id-mesh-8">
- <bind_material>
- <technique_common>
- <instance_material symbol="id-trimat-9" target="#id-material-7"/>
- </technique_common>
- </bind_material>
- </instance_geometry>
- </node>
- <node id="Convex" name="Convex" type="NODE">
- <matrix sid="transform"> 1.0 0.0 0.0 -0.6725761890411377 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 </matrix>
- <instance_geometry url="#id-mesh-12">
- <bind_material>
- <technique_common>
- <instance_material symbol="id-trimat-13" target="#id-material-11"/>
- </technique_common>
- </bind_material>
- </instance_geometry>
- </node>
- <node id="Cube" name="Cube" type="NODE">
- <matrix sid="transform"> 1.0 0.0 0.0 -4.161163330078125 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 </matrix>
- <instance_geometry url="#id-mesh-16">
- <bind_material>
- <technique_common>
- <instance_material symbol="id-trimat-17" target="#id-material-15"/>
- </technique_common>
- </bind_material>
- </instance_geometry>
- </node>
- <node id="Lamp" name="Lamp" type="NODE">
- <matrix sid="transform"> -0.29086464643478394 -0.7711008191108704 0.5663931965827942 4.076245307922363 0.9551711678504944 -0.1998833566904068 0.21839119493961334 1.0054539442062378 -0.05518905818462372 0.6045247316360474 0.7946722507476807 5.903861999511719 0.0 0.0 0.0 1.0 </matrix>
- <instance_light url="#id-light-18"/>
- </node>
- <node id="Camera" name="Camera" type="NODE">
- <matrix sid="transform"> 0.6858805418014526 -0.31737011671066284 0.6548618674278259 7.481131553649902 0.7276337742805481 0.31246861815452576 -0.6106656193733215 -6.5076398849487305 -0.010816780850291252 0.8953432440757751 0.4452453553676605 5.34366512298584 0.0 0.0 0.0 1.0 </matrix>
- <instance_camera url="#id-camera-19"/>
- </node>
- </visual_scene>
-</library_visual_scenes>
-<scene>
- <instance_visual_scene url="#id-scene-1" />
-</scene>
-</COLLADA>
diff --git a/demos/3d/sat_test/shapes.scn b/demos/3d/sat_test/shapes.scn
deleted file mode 100644
index bf10be0a59..0000000000
--- a/demos/3d/sat_test/shapes.scn
+++ /dev/null
Binary files differ
diff --git a/demos/3d/sat_test/sphere.scn b/demos/3d/sat_test/sphere.scn
deleted file mode 100644
index e40c3bd42d..0000000000
--- a/demos/3d/sat_test/sphere.scn
+++ /dev/null
Binary files differ
diff --git a/demos/3d/shader_materials/brick_color.png b/demos/3d/shader_materials/brick_color.png
deleted file mode 100644
index 3c0548a428..0000000000
--- a/demos/3d/shader_materials/brick_color.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/shader_materials/brick_detail.png b/demos/3d/shader_materials/brick_detail.png
deleted file mode 100644
index febad683a6..0000000000
--- a/demos/3d/shader_materials/brick_detail.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/shader_materials/brick_detail_emission.png b/demos/3d/shader_materials/brick_detail_emission.png
deleted file mode 100644
index 4f11f6d920..0000000000
--- a/demos/3d/shader_materials/brick_detail_emission.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/shader_materials/brick_detail_glow.png b/demos/3d/shader_materials/brick_detail_glow.png
deleted file mode 100644
index be833564fa..0000000000
--- a/demos/3d/shader_materials/brick_detail_glow.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/shader_materials/brick_emission.png b/demos/3d/shader_materials/brick_emission.png
deleted file mode 100644
index 4de915f56b..0000000000
--- a/demos/3d/shader_materials/brick_emission.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/shader_materials/brick_normal.png b/demos/3d/shader_materials/brick_normal.png
deleted file mode 100644
index 54d3e0288d..0000000000
--- a/demos/3d/shader_materials/brick_normal.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/shader_materials/engine.cfg b/demos/3d/shader_materials/engine.cfg
deleted file mode 100644
index d683f02a76..0000000000
--- a/demos/3d/shader_materials/engine.cfg
+++ /dev/null
@@ -1,9 +0,0 @@
-[application]
-
-name="Shader Materials"
-main_scene="res://shader_materials.scn"
-icon="res://icon.png"
-
-[rasterizer]
-
-blur_buffer_size=128
diff --git a/demos/3d/shader_materials/icon.png b/demos/3d/shader_materials/icon.png
deleted file mode 100644
index 5b477499e9..0000000000
--- a/demos/3d/shader_materials/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/shader_materials/refmap.png b/demos/3d/shader_materials/refmap.png
deleted file mode 100644
index cb8d0fb6ec..0000000000
--- a/demos/3d/shader_materials/refmap.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/shader_materials/rim.png b/demos/3d/shader_materials/rim.png
deleted file mode 100644
index 9282e9aa52..0000000000
--- a/demos/3d/shader_materials/rim.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/shader_materials/rocky_specular.png b/demos/3d/shader_materials/rocky_specular.png
deleted file mode 100644
index ae210c4974..0000000000
--- a/demos/3d/shader_materials/rocky_specular.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/shader_materials/s.xml b/demos/3d/shader_materials/s.xml
deleted file mode 100644
index f974234e05..0000000000
--- a/demos/3d/shader_materials/s.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<resource_file type="Mesh" subresource_count="4" version="0.99" version_name="Godot Engine v0.99.3735-pre-beta">
- <ext_resource path="res://brick_color.*" type="ImageTexture"></ext_resource>
- <ext_resource path="res://brick_normal.*" type="ImageTexture"></ext_resource>
- <resource type="FixedMaterial" path="local://1">
- <bool name="flags/visible"> True </bool>
- <bool name="flags/double_sided"> True </bool>
- <bool name="flags/invert_faces"> False </bool>
- <bool name="flags/unshaded"> False </bool>
- <bool name="flags/on_top"> False </bool>
- <bool name="flags/wireframe"> False </bool>
- <bool name="flags/billboard_sw"> False </bool>
- <bool name="hints/decal"> False </bool>
- <bool name="hints/opaque_pre_zpass"> False </bool>
- <bool name="hints/no_shadow"> False </bool>
- <bool name="hints/no_depth_draw"> False </bool>
- <int name="params/blend_mode"> 0 </int>
- <real name="params/line_width"> 0 </real>
- <bool name="fixed_flags/use_alpha"> False </bool>
- <bool name="fixed_flags/use_color_array"> False </bool>
- <bool name="fixed_flags/use_point_size"> False </bool>
- <color name="params/diffuse"> 0.64, 0.64, 0.64, 1 </color>
- <color name="params/specular"> 0.63226, 0.63226, 0.63226, 1 </color>
- <color name="params/emission"> 0, 0, 0, 1 </color>
- <real name="params/specular_exp"> 34.20256 </real>
- <int name="params/detail_blend"> 0 </int>
- <real name="params/detail_mix"> 1 </real>
- <real name="params/normal_depth"> 0.5 </real>
- <real name="params/shade_param"> 0.5 </real>
- <int name="params/glow"> 0 </int>
- <real name="params/point_size"> 1 </real>
- <transform name="uv_xform"> 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 </transform>
- <resource name="textures/diffuse" resource_type="ImageTexture" path="res://brick_color.*"> </resource>
- <int name="textures/diffuse_tc"> 0 </int>
- <resource name="textures/detail"></resource> <int name="textures/detail_tc"> 0 </int>
- <resource name="textures/specular"></resource> <int name="textures/specular_tc"> 0 </int>
- <resource name="textures/emission"></resource> <int name="textures/emission_tc"> 0 </int>
- <resource name="textures/specular_exp"></resource> <int name="textures/specular_exp_tc"> 0 </int>
- <resource name="textures/glow"></resource> <int name="textures/glow_tc"> 0 </int>
- <resource name="textures/normal" resource_type="ImageTexture" path="res://brick_normal.*"> </resource>
- <int name="textures/normal_tc"> 0 </int>
- <resource name="textures/shade_param"></resource> <int name="textures/shade_param_tc"> 0 </int>
-
- </resource>
- <main_resource>
- <string name="resource/name"> "Sphere" </string>
- <dictionary name="surfaces/0" shared="false">
- <string> "alphasort" </string>
- <bool> False </bool>
- <string> "material" </string>
- <resource resource_type="FixedMaterial" path="local://1"> </resource>
- <string> "morph_arrays" </string>
- <array len="0" shared="false">
- </array>
- <string> "primitive" </string>
- <int> 4 </int>
- <string> "arrays" </string>
- <array len="9" shared="false">
- <vector3_array len="529"> -0.382683, -0.92388, -0, -0.55557, -0.83147, -0, -0.544895, -0.83147, -0.108386, -0.37533, -0.92388, -0.0746578, -1, 0, -0, -0.980785, 0.19509, -0, -0.96194, 0.19509, -0.191342, -0.980785, 1.19209e-07, -0.19509, -0.382683, 0.92388, -0, -0.19509, 0.980785, -0, -0.191342, 0.980785, -0.0380602, -0.37533, 0.92388, -0.0746578, -0.19509, -0.980785, -0, -0.191342, -0.980785, -0.0380602, -0.980785, -0.19509, -0, -0.96194, -0.19509, -0.191342, -0.55557, 0.83147, -0, -0.544895, 0.831469, -0.108386, -0.92388, -0.382683, -0, -0.906128, -0.382683, -0.18024, -0.707107, 0.707107, -0, -0.69352, 0.707107, -0.13795, -0.83147, -0.55557, -0, -0.815493, -0.55557, -0.162212, -0.83147, 0.55557, -0, -0.815493, 0.55557, -0.162212, -0.707107, -0.707107, -0, -0.69352, -0.707107, -0.13795, -0.92388, 0.382683, -0, -0.906127, 0.382683, -0.18024, -0.906127, -0.19509, -0.37533, -0.853553, -0.382683, -0.353554, -0.51328, 0.831469, -0.212608, -0.653281, 0.707107, -0.270598, -0.768178, -0.55557, -0.31819, -0.768178, 0.55557, -0.31819, -0.653281, -0.707107, -0.270598, -0.853553, 0.382683, -0.353554, -0.51328, -0.83147, -0.212608, -0.906127, 0.19509, -0.37533, -0.353553, -0.92388, -0.146447, -0.92388, 1.19209e-07, -0.382684, -0.18024, 0.980785, -0.0746579, -0.353553, 0.92388, -0.146447, -0.18024, -0.980785, -0.0746578, -0.46194, -0.83147, -0.308658, -0.31819, -0.92388, -0.212608, -0.815493, 0.19509, -0.544895, -0.831469, 1.19209e-07, -0.55557, -0.162211, 0.980785, -0.108387, -0.31819, 0.92388, -0.212608, -0.162211, -0.980785, -0.108386, -0.815493, -0.19509, -0.544895, -0.46194, 0.831469, -0.308658, -0.768178, -0.382683, -0.51328, -0.587938, 0.707107, -0.392848, -0.691342, -0.55557, -0.46194, -0.691342, 0.55557, -0.46194, -0.587938, -0.707107, -0.392848, -0.768178, 0.382683, -0.51328, -0.587938, -0.55557, -0.587938, -0.5, -0.707107, -0.5, -0.587938, 0.55557, -0.587938, -0.653281, 0.382683, -0.653282, -0.392847, -0.83147, -0.392848, -0.69352, 0.19509, -0.69352, -0.270598, -0.92388, -0.270598, -0.707107, 1.19209e-07, -0.707107, -0.137949, 0.980785, -0.13795, -0.270598, 0.92388, -0.270598, -0.137949, -0.980785, -0.13795, -0.69352, -0.19509, -0.69352, -0.392847, 0.831469, -0.392848, -0.653281, -0.382683, -0.653282, -0.5, 0.707107, -0.5, -0.544895, -0.19509, -0.815493, -0.51328, -0.382683, -0.768178, -0.308658, 0.831469, -0.46194, -0.392847, 0.707107, -0.587938, -0.46194, -0.55557, -0.691342, -0.46194, 0.55557, -0.691342, -0.392847, -0.707107, -0.587938, -0.51328, 0.382683, -0.768178, -0.308658, -0.83147, -0.46194, -0.544895, 0.19509, -0.815493, -0.212607, -0.92388, -0.31819, -0.55557, 1.19209e-07, -0.83147, -0.108386, 0.980785, -0.162212, -0.212607, 0.92388, -0.31819, -0.108386, -0.980785, -0.162212, -0.212607, -0.83147, -0.51328, -0.146446, -0.92388, -0.353554, -0.37533, 0.19509, -0.906128, -0.382683, 1.19209e-07, -0.92388, -0.0746576, 0.980785, -0.18024, -0.146446, 0.92388, -0.353554, -0.0746575, -0.980785, -0.18024, -0.37533, -0.19509, -0.906128, -0.212607, 0.831469, -0.51328, -0.353553, -0.382683, -0.853554, -0.270598, 0.707107, -0.653282, -0.318189, -0.55557, -0.768178, -0.318189, 0.55557, -0.768178, -0.270598, -0.707107, -0.653282, -0.353553, 0.382683, -0.853553, -0.162211, -0.55557, -0.815493, -0.137949, -0.707107, -0.69352, -0.162211, 0.55557, -0.815493, -0.18024, 0.382683, -0.906128, -0.108386, -0.83147, -0.544895, -0.191341, 0.19509, -0.96194, -0.0746575, -0.92388, -0.37533, -0.19509, 1.19209e-07, -0.980785, -0.0380599, 0.980785, -0.191342, -0.0746575, 0.92388, -0.375331, -0.0380599, -0.980785, -0.191342, -0.191341, -0.19509, -0.96194, -0.108386, 0.831469, -0.544895, -0.18024, -0.382683, -0.906128, -0.137949, 0.707107, -0.69352, -0.18024, -0.382683, -0.906128, -0.191341, -0.19509, -0.96194, 4.74853e-07, -0.19509, -0.980785, 3.40743e-07, -0.382683, -0.92388, -0.137949, 0.707107, -0.69352, -0.108386, 0.831469, -0.544895, 3.63094e-07, 0.831469, -0.55557, 4.00347e-07, 0.707107, -0.707107, -0.162211, -0.55557, -0.815493, 4.15248e-07, -0.55557, -0.83147, -0.162211, 0.55557, -0.815493, 4.15248e-07, 0.55557, -0.83147, -0.137949, -0.707107, -0.69352, 4.00347e-07, -0.707107, -0.707107, -0.18024, 0.382683, -0.906128, 3.70545e-07, 0.382683, -0.92388, -0.108386, -0.83147, -0.544895, 3.92897e-07, -0.83147, -0.55557, -0.191341, 0.19509, -0.96194, 4.74853e-07, 0.19509, -0.980785, -0.0746575, -0.92388, -0.37533, 3.55644e-07, -0.92388, -0.382683, -0.19509, 1.19209e-07, -0.980785, 3.40743e-07, 1.19209e-07, -1, -0.0746575, 0.92388, -0.375331, -0.0380599, 0.980785, -0.191342, 3.44468e-07, 0.980785, -0.195091, 3.63094e-07, 0.92388, -0.382684, -0.0380599, -0.980785, -0.191342, 3.14666e-07, -0.980785, -0.19509, 0.108387, -0.83147, -0.544895, 0.0746582, -0.92388, -0.37533, 0.191342, 0.19509, -0.96194, 0.195091, 1.19209e-07, -0.980785, 0.0380606, 0.980785, -0.191342, 0.0746582, 0.92388, -0.375331, 0.0380605, -0.980785, -0.191342, 0.191342, -0.19509, -0.96194, 0.108387, 0.831469, -0.544895, 0.18024, -0.382683, -0.906128, 0.13795, 0.707107, -0.69352, 0.162212, -0.55557, -0.815493, 0.162212, 0.55557, -0.815493, 0.13795, -0.707107, -0.69352, 0.18024, 0.382683, -0.906128, 0.270599, 0.707107, -0.653282, 0.31819, 0.55557, -0.768178, 0.31819, -0.55557, -0.768178, 0.270599, -0.707107, -0.653282, 0.353554, 0.382683, -0.853553, 0.212608, -0.83147, -0.51328, 0.375331, 0.19509, -0.906127, 0.146447, -0.92388, -0.353554, 0.382684, 1.19209e-07, -0.92388, 0.0746583, 0.980785, -0.18024, 0.146447, 0.92388, -0.353554, 0.0746581, -0.980785, -0.18024, 0.375331, -0.19509, -0.906127, 0.212608, 0.831469, -0.51328, 0.353554, -0.382683, -0.853553, 0.555571, 1.19209e-07, -0.83147, 0.544896, -0.19509, -0.815493, 0.212608, 0.92388, -0.31819, 0.308659, 0.831469, -0.46194, 0.51328, -0.382683, -0.768178, 0.392848, 0.707107, -0.587938, 0.46194, -0.55557, -0.691342, 0.46194, 0.55557, -0.691342, 0.392848, -0.707107, -0.587938, 0.51328, 0.382683, -0.768178, 0.308659, -0.83147, -0.46194, 0.544896, 0.19509, -0.815493, 0.212608, -0.92388, -0.31819, 0.108387, 0.980785, -0.162212, 0.108387, -0.980785, -0.162212, 0.5, -0.707107, -0.5, 0.392848, -0.83147, -0.392848, 0.653282, 0.382683, -0.653282, 0.69352, 0.19509, -0.69352, 0.270598, -0.92388, -0.270598, 0.707107, 1.19209e-07, -0.707107, 0.13795, 0.980785, -0.13795, 0.270599, 0.92388, -0.270598, 0.13795, -0.980785, -0.13795, 0.69352, -0.19509, -0.69352, 0.392848, 0.831469, -0.392848, 0.653282, -0.382683, -0.653282, 0.5, 0.707107, -0.5, 0.587938, -0.55557, -0.587938, 0.587938, 0.55557, -0.587938, 0.768178, -0.382683, -0.51328, 0.691342, -0.55557, -0.46194, 0.587938, 0.707107, -0.392847, 0.691342, 0.55557, -0.46194, 0.587938, -0.707107, -0.392847, 0.768178, 0.382683, -0.51328, 0.46194, -0.83147, -0.308658, 0.815493, 0.19509, -0.544895, 0.31819, -0.92388, -0.212608, 0.83147, 1.19209e-07, -0.55557, 0.162212, 0.980785, -0.108387, 0.31819, 0.92388, -0.212608, 0.162212, -0.980785, -0.108386, 0.815493, -0.19509, -0.544895, 0.46194, 0.831469, -0.308658, 0.353554, -0.92388, -0.146447, 0.18024, -0.980785, -0.0746578, 0.92388, 1.19209e-07, -0.382683, 0.906128, -0.19509, -0.37533, 0.353554, 0.92388, -0.146447, 0.513281, 0.831469, -0.212608, 0.853554, -0.382683, -0.353553, 0.653282, 0.707107, -0.270598, 0.768178, -0.55557, -0.31819, 0.768178, 0.55557, -0.31819, 0.653282, -0.707107, -0.270598, 0.853554, 0.382683, -0.353553, 0.51328, -0.83147, -0.212608, 0.906128, 0.19509, -0.37533, 0.18024, 0.980785, -0.0746578, 0.69352, -0.707107, -0.13795, 0.544896, -0.83147, -0.108386, 0.906128, 0.382683, -0.18024, 0.96194, 0.19509, -0.191342, 0.375331, -0.92388, -0.0746578, 0.980785, 1.19209e-07, -0.19509, 0.191342, 0.980785, -0.0380602, 0.375331, 0.92388, -0.0746578, 0.191342, -0.980785, -0.0380602, 0.96194, -0.19509, -0.191342, 0.544896, 0.831469, -0.108386, 0.906128, -0.382683, -0.18024, 0.69352, 0.707107, -0.13795, 0.815493, -0.55557, -0.162211, 0.815493, 0.55557, -0.162211, 0.92388, -0.382683, -0, 0.83147, -0.55557, -0, 0.707107, 0.707107, -0, 0.83147, 0.55557, -0, 0.707107, -0.707107, -0, 0.92388, 0.382683, 1.49012e-07, 0.555571, -0.83147, -0, 0.980785, 0.19509, 1.49012e-07, 0.382684, -0.92388, -0, 1, 1.19209e-07, -0, 0.195091, 0.980785, -0, 0.382684, 0.92388, -0, 0.195091, -0.980785, -0, 0.980785, -0.19509, 1.49012e-07, 0.555571, 0.831469, -0, 0.375331, -0.92388, 0.0746578, 0.191342, -0.980785, 0.0380602, 0.980785, 1.19209e-07, 0.19509, 0.96194, -0.19509, 0.191342, 0.375331, 0.92388, 0.0746579, 0.544896, 0.831469, 0.108387, 0.906128, -0.382683, 0.18024, 0.69352, 0.707107, 0.13795, 0.815493, -0.55557, 0.162212, 0.815493, 0.55557, 0.162212, 0.69352, -0.707107, 0.13795, 0.906128, 0.382683, 0.18024, 0.544895, -0.83147, 0.108387, 0.96194, 0.19509, 0.191342, 0.191342, 0.980785, 0.0380603, 0.653282, -0.707107, 0.270598, 0.51328, -0.83147, 0.212608, 0.853554, 0.382683, 0.353554, 0.906128, 0.19509, 0.37533, 0.353554, -0.92388, 0.146447, 0.92388, 1.19209e-07, 0.382683, 0.18024, 0.980785, 0.0746579, 0.353554, 0.92388, 0.146447, 0.18024, -0.980785, 0.0746578, 0.906128, -0.19509, 0.37533, 0.51328, 0.831469, 0.212608, 0.853554, -0.382683, 0.353554, 0.653282, 0.707107, 0.270598, 0.768178, -0.55557, 0.31819, 0.768178, 0.55557, 0.31819, 0.46194, 0.831469, 0.308658, 0.587938, 0.707107, 0.392848, 0.768178, -0.382683, 0.51328, 0.691342, -0.55557, 0.46194, 0.691342, 0.55557, 0.46194, 0.587938, -0.707107, 0.392848, 0.768178, 0.382683, 0.51328, 0.46194, -0.83147, 0.308658, 0.815493, 0.19509, 0.544895, 0.31819, -0.92388, 0.212608, 0.83147, 1.19209e-07, 0.55557, 0.162212, 0.980785, 0.108387, 0.31819, 0.92388, 0.212608, 0.162212, -0.980785, 0.108386, 0.815493, -0.19509, 0.544895, 0.69352, 0.19509, 0.69352, 0.707107, 1.19209e-07, 0.707107, 0.13795, 0.980785, 0.13795, 0.270598, 0.92388, 0.270598, 0.270598, -0.92388, 0.270598, 0.13795, -0.980785, 0.13795, 0.69352, -0.19509, 0.69352, 0.392848, 0.831469, 0.392848, 0.653282, -0.382683, 0.653282, 0.5, 0.707107, 0.5, 0.587938, -0.55557, 0.587938, 0.587938, 0.55557, 0.587938, 0.5, -0.707107, 0.5, 0.653282, 0.382683, 0.653282, 0.392848, -0.83147, 0.392848, 0.46194, -0.55557, 0.691342, 0.392848, -0.707107, 0.587938, 0.46194, 0.55557, 0.691342, 0.51328, 0.382683, 0.768178, 0.308659, -0.83147, 0.46194, 0.544895, 0.19509, 0.815493, 0.212608, -0.92388, 0.31819, 0.55557, 1.19209e-07, 0.831469, 0.108387, 0.980785, 0.162212, 0.212608, 0.92388, 0.31819, 0.108387, -0.980785, 0.162212, 0.544895, -0.19509, 0.815493, 0.308659, 0.831469, 0.46194, 0.51328, -0.382683, 0.768178, 0.392848, 0.707107, 0.587938, 0.37533, -0.19509, 0.906127, 0.353554, -0.382683, 0.853553, 0.212608, 0.831469, 0.51328, 0.270598, 0.707107, 0.653282, 0.31819, -0.55557, 0.768178, 0.31819, 0.55557, 0.768178, 0.270598, -0.707107, 0.653282, 0.353554, 0.382683, 0.853553, 0.212608, -0.83147, 0.51328, 0.37533, 0.19509, 0.906127, 0.146447, -0.92388, 0.353553, 0.382683, 1.19209e-07, 0.923879, 0.0746581, 0.980785, 0.18024, 0.146447, 0.92388, 0.353554, 0.0746581, -0.980785, 0.18024, 0.108387, -0.83147, 0.544895, 0.0746581, -0.92388, 0.37533, 0.191342, 0.19509, 0.96194, 0.19509, 1.19209e-07, 0.980785, 0.0380605, 0.980785, 0.191342, 0.0746581, 0.92388, 0.37533, 0.0380605, -0.980785, 0.191342, 0.191342, -0.19509, 0.96194, 0.108387, 0.831469, 0.544895, 0.18024, -0.382683, 0.906128, 0.13795, 0.707107, 0.69352, 0.162212, -0.55557, 0.815493, 0.162212, 0.55557, 0.815493, 0.13795, -0.707107, 0.69352, 0.18024, 0.382683, 0.906127, 2.21533e-07, -0.55557, 0.831469, 2.21533e-07, -0.707107, 0.707107, 2.21533e-07, 0.55557, 0.831469, 1.47027e-07, 0.382683, 0.92388, 2.14083e-07, -0.83147, 0.55557, 0, 0.19509, 0.980785, 3.1094e-07, -0.92388, 0.382683, 1.61929e-07, 1.19209e-07, 1, 2.77413e-07, 0.980785, 0.19509, 2.51336e-07, 0.92388, 0.382683, 3.14666e-07, -0.980785, 0.19509, 0, -0.19509, 0.980785, 2.28984e-07, 0.831469, 0.55557, 1.7683e-07, -0.382683, 0.92388, 2.21533e-07, 0.707107, 0.707107, -0.191342, -0.19509, 0.961939, -0.18024, -0.382683, 0.906128, -0.108386, 0.831469, 0.544895, -0.137949, 0.707107, 0.69352, -0.162211, -0.55557, 0.815493, -0.162211, 0.55557, 0.815493, -0.137949, -0.707107, 0.69352, -0.18024, 0.382683, 0.906127, -0.108386, -0.83147, 0.544895, -0.191342, 0.19509, 0.961939, -0.0746575, -0.92388, 0.37533, -0.19509, 1.19209e-07, 0.980785, -0.0380599, 0.980785, 0.191342, -0.0746576, 0.92388, 0.37533, -0.0380599, -0.980785, 0.191342, -0.212607, -0.83147, 0.51328, -0.146446, -0.92388, 0.353553, -0.37533, 0.19509, 0.906127, -0.382683, 1.19209e-07, 0.923879, -0.0746576, 0.980785, 0.18024, -0.146446, 0.92388, 0.353553, -0.0746575, -0.980785, 0.18024, -0.37533, -0.19509, 0.906127, -0.212607, 0.831469, 0.51328, -0.353553, -0.382683, 0.853553, -0.270598, 0.707107, 0.653281, -0.318189, -0.55557, 0.768178, -0.318189, 0.55557, 0.768178, -0.270598, -0.707107, 0.653281, -0.353553, 0.382683, 0.853553, -0.461939, -0.55557, 0.691341, -0.392847, -0.707107, 0.587938, -0.461939, 0.55557, 0.691341, -0.51328, 0.382683, 0.768178, -0.308658, -0.83147, 0.46194, -0.544895, 0.19509, 0.815493, -0.212607, -0.92388, 0.31819, -0.55557, 1.19209e-07, 0.831469, -0.108386, 0.980785, 0.162212, -0.212607, 0.92388, 0.31819, -0.108386, -0.980785, 0.162211, -0.544895, -0.19509, 0.815493, -0.308658, 0.831469, 0.46194, -0.51328, -0.382683, 0.768178, -0.392847, 0.707107, 0.587938, -0.270598, 0.92388, 0.270598, -0.392847, 0.831469, 0.392847, -0.693519, -0.19509, 0.693519, -0.653281, -0.382683, 0.653281, -0.5, 0.707107, 0.5, -0.587937, -0.55557, 0.587937, -0.587937, 0.55557, 0.587937, -0.5, -0.707107, 0.5, -0.653281, 0.382683, 0.653281, -0.392847, -0.83147, 0.392847, -0.693519, 0.19509, 0.693519, -0.270598, -0.92388, 0.270598, -0.707106, 1.19209e-07, 0.707106, -0.137949, 0.980785, 0.13795, -0.137949, -0.980785, 0.13795, -0.768178, 0.382683, 0.51328, -0.815493, 0.19509, 0.544895, -0.461939, -0.83147, 0.308658, -0.318189, -0.92388, 0.212608, -0.831469, 1.19209e-07, 0.55557, -0.162211, 0.980785, 0.108386, -0.318189, 0.92388, 0.212608, -0.162211, -0.980785, 0.108386, -0.815493, -0.19509, 0.544895, -0.46194, 0.831469, 0.308658, -0.768178, -0.382683, 0.51328, -0.587937, 0.707107, 0.392847, -0.691341, -0.55557, 0.46194, -0.691341, 0.55557, 0.46194, -0.587937, -0.707107, 0.392847, -0.853553, -0.382683, 0.353553, -0.768177, -0.55557, 0.318189, -0.653281, 0.707107, 0.270598, -0.768177, 0.55557, 0.318189, -0.653281, -0.707107, 0.270598, -0.853553, 0.382683, 0.353553, -0.51328, -0.83147, 0.212607, -0.906127, 0.19509, 0.37533, -0.353553, -0.92388, 0.146446, -0.923879, 1.19209e-07, 0.382683, -0.18024, 0.980785, 0.0746578, -0.353553, 0.92388, 0.146446, -0.180239, -0.980785, 0.0746577, -0.906127, -0.19509, 0.37533, -0.51328, 0.831469, 0.212607, -0.37533, -0.92388, 0.0746578, -0.191341, -0.980785, 0.0380602, -0.980784, 1.19209e-07, 0.19509, -0.961939, -0.19509, 0.191341, -0.37533, 0.92388, 0.0746578, -0.544895, 0.831469, 0.108386, -0.906127, -0.382683, 0.18024, -0.693519, 0.707107, 0.137949, -0.815493, -0.55557, 0.162211, -0.815493, 0.55557, 0.162211, -0.693519, -0.707107, 0.137949, -0.906127, 0.382683, 0.18024, -0.544895, -0.83147, 0.108386, -0.961939, 0.19509, 0.191341, -0.191342, 0.980785, 0.0380602, 3.25841e-07, -1, -0, 2.01147e-07, 1, 3.01038e-07, -0.18024, -0.980785, -0.0746578, -0.162211, -0.980785, -0.108386, -0.137949, 0.980785, -0.13795, -0.137949, -0.980785, -0.13795, -0.108386, -0.980785, -0.162212, -0.108386, 0.980785, -0.162212, -0.0746575, -0.980785, -0.18024, -0.0746576, 0.980785, -0.18024, -1.0086, -1.73377, 0.997801, -1.0086, -1.73377, -1.0022, -1.0086, -3.73377, -1.0022, -1.0086, -3.73377, 0.997801, -1.0086, -1.73377, -1.0022, 0.991403, -1.73377, -1.0022, 0.991403, -3.73377, -1.0022, -1.0086, -3.73377, -1.0022, 0.991403, -1.73377, -1.0022, 0.991403, -1.73377, 0.997801, 0.991403, -3.73377, 0.997801, 0.991403, -3.73377, -1.0022, 0.991403, -1.73377, 0.997801, -1.0086, -1.73377, 0.997801, -1.0086, -3.73377, 0.997801, 0.991403, -3.73377, 0.997801, -1.0086, -3.73377, 0.997801, -1.0086, -3.73377, -1.0022, 0.991403, -3.73377, -1.0022, 0.991403, -3.73377, 0.997801, 0.991403, -1.73377, 0.997801, 0.991403, -1.73377, -1.0022, -1.0086, -1.73377, -1.0022, -1.0086, -1.73377, 0.997801 </vector3_array>
- <vector3_array len="529"> -0.387, -0.921, -0, -0.559, -0.828, -0, -0.548, -0.828, -0.109, -0.379, -0.921, -0.076, -0.999, 0, -0, -0.98, 0.194, -0, -0.961, 0.194, -0.191, -0.98, 0, -0.195, -0.387, 0.922, -0, -0.2, 0.98, -0, -0.196, 0.98, -0.039, -0.379, 0.922, -0.076, -0.2, -0.979, -0, -0.196, -0.979, -0.039, -0.98, -0.193, -0, -0.961, -0.193, -0.191, -0.559, 0.829, -0, -0.548, 0.829, -0.109, -0.924, -0.38, -0, -0.906, -0.38, -0.18, -0.709, 0.704, -0, -0.695, 0.704, -0.139, -0.832, -0.552, -0, -0.816, -0.552, -0.163, -0.832, 0.553, -0, -0.816, 0.553, -0.163, -0.709, -0.703, -0, -0.695, -0.703, -0.139, -0.924, 0.381, -0, -0.906, 0.381, -0.18, -0.905, -0.193, -0.375, -0.853, -0.38, -0.354, -0.516, 0.829, -0.214, -0.655, 0.704, -0.272, -0.769, -0.552, -0.319, -0.769, 0.553, -0.319, -0.655, -0.703, -0.272, -0.853, 0.381, -0.354, -0.516, -0.828, -0.214, -0.905, 0.194, -0.375, -0.357, -0.921, -0.148, -0.923, 0, -0.383, -0.185, 0.98, -0.077, -0.357, 0.922, -0.148, -0.185, -0.979, -0.077, -0.464, -0.828, -0.311, -0.321, -0.921, -0.215, -0.815, 0.194, -0.545, -0.83, 0, -0.556, -0.166, 0.98, -0.112, -0.321, 0.922, -0.215, -0.166, -0.979, -0.112, -0.815, -0.193, -0.545, -0.464, 0.829, -0.311, -0.768, -0.38, -0.514, -0.589, 0.704, -0.395, -0.692, -0.552, -0.463, -0.692, 0.553, -0.463, -0.589, -0.703, -0.395, -0.768, 0.381, -0.514, -0.588, -0.552, -0.589, -0.501, -0.703, -0.502, -0.588, 0.553, -0.589, -0.653, 0.381, -0.654, -0.395, -0.828, -0.396, -0.693, 0.194, -0.694, -0.273, -0.921, -0.274, -0.706, 0, -0.707, -0.141, 0.98, -0.142, -0.273, 0.922, -0.274, -0.141, -0.979, -0.142, -0.693, -0.193, -0.694, -0.395, 0.829, -0.396, -0.653, -0.38, -0.654, -0.501, 0.704, -0.502, -0.544, -0.193, -0.816, -0.513, -0.38, -0.769, -0.31, 0.829, -0.465, -0.394, 0.704, -0.59, -0.462, -0.552, -0.693, -0.462, 0.553, -0.693, -0.394, -0.703, -0.59, -0.513, 0.381, -0.769, -0.31, -0.828, -0.465, -0.544, 0.194, -0.816, -0.214, -0.921, -0.322, -0.555, 0, -0.831, -0.111, 0.98, -0.167, -0.214, 0.922, -0.322, -0.111, -0.979, -0.167, -0.213, -0.828, -0.517, -0.147, -0.921, -0.358, -0.374, 0.194, -0.906, -0.382, 0, -0.924, -0.076, 0.98, -0.186, -0.147, 0.922, -0.358, -0.076, -0.979, -0.186, -0.374, -0.193, -0.906, -0.213, 0.829, -0.517, -0.353, -0.38, -0.854, -0.271, 0.704, -0.656, -0.318, -0.552, -0.77, -0.318, 0.553, -0.77, -0.271, -0.703, -0.656, -0.353, 0.381, -0.854, -0.162, -0.552, -0.817, -0.138, -0.703, -0.696, -0.162, 0.553, -0.817, -0.179, 0.381, -0.907, -0.108, -0.828, -0.549, -0.19, 0.194, -0.962, -0.075, -0.921, -0.38, -0.194, 0, -0.981, -0.038, 0.98, -0.197, -0.075, 0.922, -0.38, -0.038, -0.979, -0.197, -0.19, -0.193, -0.962, -0.108, 0.829, -0.549, -0.179, -0.38, -0.907, -0.138, 0.704, -0.696, -0.179, -0.38, -0.907, -0.19, -0.193, -0.962, 0, -0.193, -0.981, 0, -0.38, -0.925, -0.138, 0.704, -0.696, -0.108, 0.829, -0.549, 0, 0.829, -0.56, 0, 0.704, -0.71, -0.162, -0.552, -0.817, 0, -0.552, -0.833, -0.162, 0.553, -0.817, 0, 0.553, -0.833, -0.138, -0.703, -0.696, 0, -0.703, -0.71, -0.179, 0.381, -0.907, 0, 0.381, -0.925, -0.108, -0.828, -0.549, 0, -0.828, -0.56, -0.19, 0.194, -0.962, 0, 0.194, -0.981, -0.075, -0.921, -0.38, 0, -0.921, -0.388, -0.194, 0, -0.981, 0, 0, -1, -0.075, 0.922, -0.38, -0.038, 0.98, -0.197, 0, 0.98, -0.201, 0, 0.922, -0.388, -0.038, -0.979, -0.197, 0, -0.979, -0.201, 0.109, -0.828, -0.549, 0.076, -0.921, -0.38, 0.191, 0.194, -0.962, 0.195, 0, -0.981, 0.039, 0.98, -0.197, 0.076, 0.922, -0.38, 0.039, -0.979, -0.197, 0.191, -0.193, -0.962, 0.109, 0.829, -0.549, 0.18, -0.38, -0.907, 0.139, 0.704, -0.696, 0.163, -0.552, -0.817, 0.163, 0.553, -0.817, 0.139, -0.703, -0.696, 0.18, 0.381, -0.907, 0.272, 0.704, -0.656, 0.319, 0.553, -0.77, 0.319, -0.552, -0.77, 0.272, -0.703, -0.656, 0.354, 0.381, -0.854, 0.214, -0.828, -0.517, 0.375, 0.194, -0.906, 0.148, -0.921, -0.358, 0.383, 0, -0.924, 0.077, 0.98, -0.186, 0.148, 0.922, -0.358, 0.077, -0.979, -0.186, 0.375, -0.193, -0.906, 0.214, 0.829, -0.517, 0.354, -0.38, -0.854, 0.556, 0, -0.831, 0.545, -0.193, -0.816, 0.215, 0.922, -0.322, 0.311, 0.829, -0.465, 0.514, -0.38, -0.769, 0.395, 0.704, -0.59, 0.463, -0.552, -0.693, 0.463, 0.553, -0.693, 0.395, -0.703, -0.59, 0.514, 0.381, -0.769, 0.311, -0.828, -0.465, 0.545, 0.194, -0.816, 0.215, -0.921, -0.322, 0.112, 0.98, -0.167, 0.112, -0.979, -0.167, 0.502, -0.703, -0.502, 0.396, -0.828, -0.396, 0.654, 0.381, -0.654, 0.694, 0.194, -0.694, 0.274, -0.921, -0.274, 0.707, 0, -0.707, 0.142, 0.98, -0.142, 0.274, 0.922, -0.274, 0.142, -0.979, -0.142, 0.694, -0.193, -0.694, 0.396, 0.829, -0.396, 0.654, -0.38, -0.654, 0.502, 0.704, -0.502, 0.589, -0.552, -0.589, 0.589, 0.553, -0.589, 0.769, -0.38, -0.514, 0.693, -0.552, -0.463, 0.59, 0.704, -0.395, 0.693, 0.553, -0.463, 0.59, -0.703, -0.395, 0.769, 0.381, -0.514, 0.465, -0.828, -0.311, 0.816, 0.194, -0.545, 0.322, -0.921, -0.215, 0.831, 0, -0.556, 0.167, 0.98, -0.112, 0.322, 0.922, -0.215, 0.167, -0.979, -0.112, 0.816, -0.193, -0.545, 0.465, 0.829, -0.311, 0.358, -0.921, -0.148, 0.186, -0.979, -0.077, 0.924, 0, -0.383, 0.906, -0.193, -0.375, 0.358, 0.922, -0.148, 0.517, 0.829, -0.214, 0.854, -0.38, -0.354, 0.656, 0.704, -0.272, 0.77, -0.552, -0.319, 0.77, 0.553, -0.319, 0.656, -0.703, -0.272, 0.854, 0.381, -0.354, 0.517, -0.828, -0.214, 0.906, 0.194, -0.375, 0.186, 0.98, -0.077, 0.696, -0.703, -0.139, 0.549, -0.828, -0.109, 0.907, 0.381, -0.18, 0.962, 0.194, -0.191, 0.38, -0.921, -0.076, 0.981, 0, -0.195, 0.197, 0.98, -0.039, 0.38, 0.922, -0.076, 0.197, -0.979, -0.039, 0.962, -0.193, -0.191, 0.549, 0.829, -0.109, 0.907, -0.38, -0.18, 0.696, 0.704, -0.139, 0.817, -0.552, -0.163, 0.817, 0.553, -0.163, 0.925, -0.38, -0, 0.833, -0.552, -0, 0.71, 0.704, -0, 0.833, 0.553, -0, 0.71, -0.703, -0, 0.925, 0.381, -0, 0.56, -0.828, -0, 0.981, 0.194, -0, 0.388, -0.921, -0, 1, 0, -0, 0.201, 0.98, -0, 0.388, 0.922, -0, 0.201, -0.979, -0, 0.981, -0.193, -0, 0.56, 0.829, -0, 0.38, -0.921, 0.075, 0.197, -0.979, 0.038, 0.981, 0, 0.194, 0.962, -0.193, 0.19, 0.38, 0.922, 0.075, 0.549, 0.829, 0.108, 0.907, -0.38, 0.179, 0.696, 0.704, 0.138, 0.817, -0.552, 0.162, 0.817, 0.553, 0.162, 0.696, -0.703, 0.138, 0.907, 0.381, 0.179, 0.549, -0.828, 0.108, 0.962, 0.194, 0.19, 0.197, 0.98, 0.038, 0.656, -0.703, 0.271, 0.517, -0.828, 0.213, 0.854, 0.381, 0.353, 0.906, 0.194, 0.374, 0.358, -0.921, 0.147, 0.924, 0, 0.382, 0.186, 0.98, 0.076, 0.358, 0.922, 0.147, 0.186, -0.979, 0.076, 0.906, -0.193, 0.374, 0.517, 0.829, 0.213, 0.854, -0.38, 0.353, 0.656, 0.704, 0.271, 0.77, -0.552, 0.318, 0.77, 0.553, 0.318, 0.465, 0.829, 0.31, 0.59, 0.704, 0.394, 0.769, -0.38, 0.513, 0.693, -0.552, 0.462, 0.693, 0.553, 0.462, 0.59, -0.703, 0.394, 0.769, 0.381, 0.513, 0.465, -0.828, 0.31, 0.816, 0.194, 0.544, 0.322, -0.921, 0.214, 0.831, 0, 0.555, 0.167, 0.98, 0.111, 0.322, 0.922, 0.214, 0.167, -0.979, 0.111, 0.816, -0.193, 0.544, 0.694, 0.194, 0.693, 0.707, 0, 0.706, 0.142, 0.98, 0.141, 0.274, 0.922, 0.273, 0.274, -0.921, 0.273, 0.142, -0.979, 0.141, 0.694, -0.193, 0.693, 0.396, 0.829, 0.395, 0.654, -0.38, 0.653, 0.502, 0.704, 0.501, 0.589, -0.552, 0.588, 0.589, 0.553, 0.588, 0.502, -0.703, 0.501, 0.654, 0.381, 0.653, 0.396, -0.828, 0.395, 0.463, -0.552, 0.692, 0.395, -0.703, 0.589, 0.463, 0.553, 0.692, 0.514, 0.381, 0.768, 0.311, -0.828, 0.464, 0.545, 0.194, 0.815, 0.215, -0.921, 0.321, 0.556, 0, 0.83, 0.112, 0.98, 0.166, 0.215, 0.922, 0.321, 0.112, -0.979, 0.166, 0.545, -0.193, 0.815, 0.311, 0.829, 0.464, 0.514, -0.38, 0.768, 0.395, 0.704, 0.589, 0.375, -0.193, 0.905, 0.354, -0.38, 0.853, 0.214, 0.829, 0.516, 0.272, 0.704, 0.655, 0.319, -0.552, 0.769, 0.319, 0.553, 0.769, 0.272, -0.703, 0.655, 0.354, 0.381, 0.853, 0.214, -0.828, 0.516, 0.375, 0.194, 0.905, 0.148, -0.921, 0.357, 0.383, 0, 0.923, 0.077, 0.98, 0.185, 0.148, 0.922, 0.357, 0.077, -0.979, 0.185, 0.109, -0.828, 0.548, 0.076, -0.921, 0.379, 0.191, 0.194, 0.961, 0.195, 0, 0.98, 0.039, 0.98, 0.196, 0.076, 0.922, 0.379, 0.039, -0.979, 0.196, 0.191, -0.193, 0.961, 0.109, 0.829, 0.548, 0.18, -0.38, 0.906, 0.139, 0.704, 0.695, 0.163, -0.552, 0.816, 0.163, 0.553, 0.816, 0.139, -0.703, 0.695, 0.18, 0.381, 0.906, 0, -0.552, 0.832, 0, -0.703, 0.709, 0, 0.553, 0.832, 0, 0.381, 0.924, 0, -0.828, 0.559, 0, 0.194, 0.98, 0, -0.921, 0.387, 0, 0, 0.999, 0, 0.98, 0.2, 0, 0.922, 0.387, 0, -0.979, 0.2, 0, -0.193, 0.98, 0, 0.829, 0.559, 0, -0.38, 0.924, 0, 0.704, 0.709, -0.19, -0.193, 0.961, -0.179, -0.38, 0.906, -0.108, 0.829, 0.548, -0.138, 0.704, 0.695, -0.162, -0.552, 0.816, -0.162, 0.553, 0.816, -0.138, -0.703, 0.695, -0.179, 0.381, 0.906, -0.108, -0.828, 0.548, -0.19, 0.194, 0.961, -0.075, -0.921, 0.379, -0.194, 0, 0.98, -0.038, 0.98, 0.196, -0.075, 0.922, 0.379, -0.038, -0.979, 0.196, -0.213, -0.828, 0.516, -0.147, -0.921, 0.357, -0.374, 0.194, 0.905, -0.382, 0, 0.923, -0.076, 0.98, 0.185, -0.147, 0.922, 0.357, -0.076, -0.979, 0.185, -0.374, -0.193, 0.905, -0.213, 0.829, 0.516, -0.353, -0.38, 0.853, -0.271, 0.704, 0.655, -0.318, -0.552, 0.769, -0.318, 0.553, 0.769, -0.271, -0.703, 0.655, -0.353, 0.381, 0.853, -0.462, -0.552, 0.692, -0.394, -0.703, 0.589, -0.462, 0.553, 0.692, -0.513, 0.381, 0.768, -0.31, -0.828, 0.464, -0.544, 0.194, 0.815, -0.214, -0.921, 0.321, -0.555, 0, 0.83, -0.111, 0.98, 0.166, -0.214, 0.922, 0.321, -0.111, -0.979, 0.166, -0.544, -0.193, 0.815, -0.31, 0.829, 0.464, -0.513, -0.38, 0.768, -0.394, 0.704, 0.589, -0.273, 0.922, 0.273, -0.395, 0.829, 0.395, -0.693, -0.193, 0.693, -0.653, -0.38, 0.653, -0.501, 0.704, 0.501, -0.588, -0.552, 0.588, -0.588, 0.553, 0.588, -0.501, -0.703, 0.501, -0.653, 0.381, 0.653, -0.395, -0.828, 0.395, -0.693, 0.194, 0.693, -0.273, -0.921, 0.273, -0.706, 0, 0.706, -0.141, 0.98, 0.141, -0.141, -0.979, 0.141, -0.768, 0.381, 0.513, -0.815, 0.194, 0.544, -0.464, -0.828, 0.31, -0.321, -0.921, 0.214, -0.83, 0, 0.555, -0.166, 0.98, 0.111, -0.321, 0.922, 0.214, -0.166, -0.979, 0.111, -0.815, -0.193, 0.544, -0.464, 0.829, 0.31, -0.768, -0.38, 0.513, -0.589, 0.704, 0.394, -0.692, -0.552, 0.462, -0.692, 0.553, 0.462, -0.589, -0.703, 0.394, -0.853, -0.38, 0.353, -0.769, -0.552, 0.318, -0.655, 0.704, 0.271, -0.769, 0.553, 0.318, -0.655, -0.703, 0.271, -0.853, 0.381, 0.353, -0.516, -0.828, 0.213, -0.905, 0.194, 0.374, -0.357, -0.921, 0.147, -0.923, 0, 0.382, -0.185, 0.98, 0.076, -0.357, 0.922, 0.147, -0.185, -0.979, 0.076, -0.905, -0.193, 0.374, -0.516, 0.829, 0.213, -0.379, -0.921, 0.075, -0.196, -0.979, 0.038, -0.98, 0, 0.194, -0.961, -0.193, 0.19, -0.379, 0.922, 0.075, -0.548, 0.829, 0.108, -0.906, -0.38, 0.179, -0.695, 0.704, 0.138, -0.816, -0.552, 0.162, -0.816, 0.553, 0.162, -0.695, -0.703, 0.138, -0.906, 0.381, 0.179, -0.548, -0.828, 0.108, -0.961, 0.194, 0.19, -0.196, 0.98, 0.038, 0, -0.999, -0, 0, 1, -0, -0.185, -0.979, -0.077, -0.166, -0.979, -0.112, -0.141, 0.98, -0.142, -0.141, -0.979, -0.142, -0.111, -0.979, -0.167, -0.111, 0.98, -0.167, -0.076, -0.979, -0.186, -0.076, 0.98, -0.186, -0.999, 0, -0, -0.999, 0, -0, -0.999, 0, -0, -0.999, 0, -0, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 1, 0, -0, 1, 0, -0, 1, 0, -0, 1, 0, -0, 0, 0, 0.999, 0, 0, 0.999, 0, 0, 0.999, 0, 0, 0.999, 0, -0.999, -0, 0, -0.999, -0, 0, -0.999, -0, 0, -0.999, -0, 0, 1, -0, 0, 1, -0, 0, 1, -0, 0, 1, -0 </vector3_array>
- <real_array len="2116"> -8.45635e-07, 6.55321e-11, 5.43309e-05, -1, -7.60958e-07, 8.21475e-11, 7.88761e-05, -1, -1.61343e-05, 0, 7.72122e-05, -1, -1.14287e-05, 0, 5.3122e-05, -1, 3.14458e-10, 2.35952e-11, 0.000141973, -1, 1.78795e-07, -7.46003e-11, 0.000139245, -1, -2.69904e-05, -8.18762e-11, 0.000136605, -1, -2.76976e-05, -4.18367e-11, 0.000139245, -1, 8.45595e-07, -3.60059e-11, 5.43309e-05, -1, 8.97648e-07, -1.31877e-11, 2.76977e-05, -1, -4.52315e-06, 1.32495e-11, 2.73406e-05, -1, -9.77004e-06, 7.11452e-11, 5.34519e-05, -1, -8.97644e-07, 1.77967e-11, 2.76975e-05, -1, 3.70824e-05, 0, -0.000115969, 1, -1.78314e-07, 1.18204e-10, 0.000139245, -1, -2.73406e-05, -2.54659e-11, 0.000136535, -1, 7.61095e-07, 7.35022e-12, 7.88759e-05, -1, -1.46417e-05, 2.91035e-11, 7.75091e-05, -1, -3.501e-07, 1.51469e-10, 0.000131166, -1, -2.59328e-05, 0, 0.000128578, -1, 6.47297e-07, -3.15704e-11, 0.00010039, -1, -1.89506e-05, -2.18279e-11, 9.85877e-05, -1, -5.08347e-07, 1.8673e-10, 0.000118047, -1, -2.35285e-05, 0, 0.000115679, -1, 5.08612e-07, -7.53002e-11, 0.000118046, -1, -2.25311e-05, 1.45519e-11, 0.000115877, -1, -6.47088e-07, 9.33417e-11, 0.00010039, -1, -2.022e-05, 0, 9.83353e-05, -1, 3.50432e-07, -3.63799e-12, 0.000131166, -1, -2.52458e-05, -3.27635e-11, 0.000128714, -1, -5.34519e-05, 0, 0.000128578, -1, -5.05187e-05, 0, 0.000121048, -1, -2.94817e-05, -5.06199e-11, 7.31634e-05, -1, -3.782e-05, -6.35165e-11, 9.29963e-05, -1, -4.56443e-05, 0, 0.000108866, -1, -4.47048e-05, -3.4561e-11, 0.000109255, -1, -3.90157e-05, 0, 9.25011e-05, -1, -4.98717e-05, -8.39094e-11, 0.000121316, -1, -3.08876e-05, 0, 7.25808e-05, -1, -5.3122e-05, -4.3656e-11, 0.000128714, -1, -2.15727e-05, 0, 4.98716e-05, -1, -5.43308e-05, 0, 0.000131166, -1, -9.77018e-06, 0, 2.59328e-05, -1, -2.00105e-05, -2.1516e-11, 5.05189e-05, -1, -7.8728e-06, 0, 1.66611e-05, -1, -4.4454e-05, 0, 6.51604e-05, -1, -3.08877e-05, 0, 4.47048e-05, -1, -7.7212e-05, 0, 0.000115877, -1, -7.8876e-05, -9.08977e-11, 0.000118046, -1, 8.01326e-05, 1.25499e-10, -9.19525e-05, 1, -2.94818e-05, -4.8265e-11, 4.56443e-05, -1, -1.0972e-05, 0, 1.4805e-05, -1, -7.75089e-05, -4.54747e-11, 0.000115679, -1, -4.31887e-05, -5.07835e-11, 6.6006e-05, -1, -7.31633e-05, 0, 0.000108866, -1, -5.5236e-05, -6.35165e-11, 8.38312e-05, -1, -6.6006e-05, 0, 9.78697e-05, -1, -6.51604e-05, -4.02535e-11, 9.84346e-05, -1, -5.63121e-05, 0, 8.31121e-05, -1, -7.2581e-05, -8.39094e-11, 0.000109256, -1, -8.38313e-05, -7.48144e-11, 8.31122e-05, -1, -7.14445e-05, -3.45609e-11, 7.05292e-05, -1, -8.3112e-05, 0, 8.3831e-05, -1, -9.25009e-05, 0, 9.29962e-05, -1, -5.63121e-05, 0, 5.52359e-05, -1, -9.83349e-05, -4.5423e-11, 9.85874e-05, -1, -3.90157e-05, 0, 3.78199e-05, -1, -0.00010039, -9.08977e-11, 0.00010039, -1, -1.23801e-05, -2.64371e-11, 1.36494e-05, -1, -3.782e-05, -3.50773e-11, 3.90156e-05, -1, -1.36494e-05, 0, 1.238e-05, -1, -9.85875e-05, 0, 9.83349e-05, -1, -5.52358e-05, 0, 5.63119e-05, -1, -9.29963e-05, 0, 9.25009e-05, -1, -7.05291e-05, 0, 7.14442e-05, -1, -0.000115877, -8.90787e-11, 7.7212e-05, -1, -0.000109255, -8.39093e-11, 7.25809e-05, -1, -6.51603e-05, 0, 4.44539e-05, -1, -8.3112e-05, 0, 5.63119e-05, -1, -9.84349e-05, -7.48144e-11, 6.51606e-05, -1, -9.78696e-05, 0, 6.60058e-05, -1, -8.38311e-05, 0, 5.52358e-05, -1, -0.000108866, 0, 7.31631e-05, -1, -6.60059e-05, 0, 4.31885e-05, -1, -0.000115679, 0, 7.75089e-05, -1, -4.56442e-05, 0, 2.94816e-05, -1, -0.000118046, 0, 7.8876e-05, -1, -1.4805e-05, 0, 1.09719e-05, -1, -4.47047e-05, 0, 3.08876e-05, -1, -1.58024e-05, 0, 9.47927e-06, -1, -7.31632e-05, 0, 2.94815e-05, -1, -5.05187e-05, 0, 2.00103e-05, -1, -0.000128578, 0, 5.34518e-05, -1, -0.000131166, -4.5423e-11, 5.43308e-05, -1, -1.6661e-05, 0, 7.87277e-06, -1, -4.98716e-05, 0, 2.15727e-05, -1, -1.73481e-05, 0, 6.21423e-06, -1, -0.000128714, -8.90787e-11, 5.31218e-05, -1, -7.25809e-05, 0, 3.08876e-05, -1, -0.000121316, 0, 4.98715e-05, -1, -9.25009e-05, 0, 3.90156e-05, -1, -0.000109255, 7.48142e-11, 4.47047e-05, -1, -0.000108866, 0, 4.56441e-05, -1, -9.29963e-05, 3.45608e-11, 3.78198e-05, -1, -0.000121048, 0, 5.05186e-05, -1, -5.42731e-05, 7.48142e-11, 1.64635e-05, -1, -4.51072e-05, 0, 1.36831e-05, -1, -5.92369e-05, 0, 1.79693e-05, -1, -6.47724e-05, 0, 1.96485e-05, -1, -3.42079e-05, 0, 1.03768e-05, -1, -6.78186e-05, 0, 2.05725e-05, -1, -2.19941e-05, 0, 6.67182e-06, -1, -6.82587e-05, 0, 2.0706e-05, -1, -1.32308e-05, 0, 4.0135e-06, -1, -3.02489e-05, 0, 9.17591e-06, -1, -4.4675e-06, 0, 1.35519e-06, -1, -6.60754e-05, 0, 2.00437e-05, -1, -4.16371e-05, 0, 1.26305e-05, -1, -6.13532e-05, 4.02534e-11, 1.86112e-05, -1, -5.14251e-05, 0, 1.55996e-05, -1, -6.73611e-05, 0, 6.63452e-06, -1, -7.05292e-05, 0, 6.94649e-06, -1, -0.000139245, 0, -1.7851e-07, -1, -0.000131166, -4.02536e-11, -3.5018e-07, -1, -4.69101e-05, 0, 4.62024e-06, -1, -3.55752e-05, 0, 3.50383e-06, -1, -7.88762e-05, -8.2452e-11, 7.60845e-07, -1, -0.00010039, -2.91038e-11, 6.47123e-07, -1, -6.16048e-05, -7.48146e-11, 6.06759e-06, -1, -0.000118047, -4.23273e-16, -5.08459e-07, -1, -5.64422e-05, 0, 5.55906e-06, -1, -0.000118047, 0, 5.08438e-07, -1, -5.34806e-05, -3.4561e-11, 5.26741e-06, -1, -0.00010039, 3.45608e-11, -6.47156e-07, -1, -6.38054e-05, 0, 6.28426e-06, -1, -0.000131166, 0, 3.50232e-07, -1, -4.33013e-05, 0, 4.2648e-06, -1, -7.88763e-05, 0, -7.60975e-07, -1, -6.87165e-05, 0, 6.76798e-06, -1, -0.000139246, 0, 1.78513e-07, -1, -3.14579e-05, 0, 3.09832e-06, -1, -5.4331e-05, 0, -8.45516e-07, -1, -7.09869e-05, 0, 6.99154e-06, -1, -0.000141973, 0, 1.50067e-11, -1, -2.28732e-05, 0, 2.2528e-06, -1, -1.37596e-05, 0, 2.27038e-06, -1, -2.76978e-05, 0, 8.97609e-07, -1, -5.4331e-05, -5.17065e-11, 8.45403e-07, -1, -2.28731e-05, 0, 3.168e-06, -1, -2.76977e-05, 0, -8.9759e-07, -1, -7.72121e-05, 0, -1.61343e-05, -1, -5.31219e-05, 0, -1.14287e-05, -1, -0.000136604, 0, -2.69903e-05, -1, -0.000139245, 0, -2.76976e-05, -1, -2.73406e-05, -1.98742e-11, -4.52323e-06, -1, -5.34519e-05, -7.32224e-11, -9.77032e-06, -1, -2.69903e-05, 0, -6.2839e-06, -1, -0.000136534, 0, -2.73405e-05, -1, -7.75088e-05, -5.06197e-11, -1.46417e-05, -1, -0.000128577, -4.34419e-11, -2.59327e-05, -1, -9.85873e-05, 0, -1.89505e-05, -1, -0.000115679, -4.00175e-11, -2.35284e-05, -1, -0.000115877, 0, -2.25311e-05, -1, -9.83351e-05, -3.45607e-11, -2.02199e-05, -1, -0.000128714, 0, -2.52457e-05, -1, -9.29959e-05, -6.3516e-11, -3.78198e-05, -1, -0.000109255, -3.45607e-11, -4.47046e-05, -1, -0.000108866, -7.48139e-11, -4.56441e-05, -1, -9.25007e-05, 0, -3.90155e-05, -1, -0.000121316, 0, -4.98715e-05, -1, -7.25808e-05, 0, -3.08876e-05, -1, -0.000128714, 0, -5.31218e-05, -1, -4.98716e-05, 0, -2.15727e-05, -1, -0.000131166, 0, -5.43308e-05, -1, -2.59328e-05, 0, -9.77019e-06, -1, -5.05187e-05, 0, -2.00104e-05, -1, -2.52458e-05, 0, -1.14287e-05, -1, -0.000128577, -4.36774e-11, -5.34518e-05, -1, -7.3163e-05, 0, -2.94815e-05, -1, -0.000121048, -1.23948e-10, -5.05186e-05, -1, -0.000118046, 0, -7.88761e-05, -1, -0.000115679, 0, -7.7509e-05, -1, -4.56442e-05, 0, -2.94816e-05, -1, -6.60057e-05, -5.42652e-11, -4.31885e-05, -1, -0.000108866, 0, -7.31632e-05, -1, -8.38307e-05, -7.80679e-11, -5.52358e-05, -1, -9.78695e-05, 0, -6.60058e-05, -1, -9.84342e-05, 0, -6.51602e-05, -1, -8.31119e-05, 0, -5.63119e-05, -1, -0.000109255, 0, -7.25808e-05, -1, -6.51604e-05, 0, -4.4454e-05, -1, -0.000115877, 0, -7.7212e-05, -1, -4.47046e-05, 3.47035e-11, -3.08877e-05, -1, -2.35285e-05, 0, -1.46417e-05, -1, -2.2531e-05, 1.31877e-11, -1.61344e-05, -1, -7.0529e-05, 0, -7.14442e-05, -1, -5.52356e-05, 2.15158e-11, -5.63118e-05, -1, -9.29961e-05, -4.00178e-11, -9.25008e-05, -1, -9.85875e-05, 0, -9.8335e-05, -1, -3.78197e-05, 3.47035e-11, -3.90156e-05, -1, -0.00010039, 0, -0.00010039, -1, -2.02199e-05, 0, -1.89505e-05, -1, -3.90156e-05, -1.07579e-11, -3.78199e-05, -1, -1.89505e-05, 0, -2.022e-05, -1, -9.8335e-05, 0, -9.85875e-05, -1, -5.63118e-05, -1.21431e-16, -5.52357e-05, -1, -9.25008e-05, 0, -9.29962e-05, -1, -7.1444e-05, 1.45518e-11, -7.05288e-05, -1, -8.31119e-05, 0, -8.3831e-05, -1, -8.38308e-05, -7.53002e-11, -8.31118e-05, -1, -7.25807e-05, 8.36951e-11, -0.000109255, -1, -6.51603e-05, 4.00178e-11, -9.84345e-05, -1, -5.63118e-05, 2.82338e-11, -8.31117e-05, -1, -6.60058e-05, -4.07394e-11, -9.78695e-05, -1, -5.52356e-05, 0, -8.38309e-05, -1, -7.31631e-05, 0, -0.000108866, -1, -4.31883e-05, 0, -6.60057e-05, -1, -7.75089e-05, 0, -0.000115679, -1, -2.94815e-05, 0, -4.56442e-05, -1, -7.88761e-05, 0, -0.000118046, -1, -1.61344e-05, 0, -2.25311e-05, -1, -3.08876e-05, 1.07579e-11, -4.47047e-05, -1, -1.46417e-05, 0, -2.35285e-05, -1, -7.7212e-05, 0, -0.000115877, -1, -4.44538e-05, 2.53097e-11, -6.51601e-05, -1, -2.00103e-05, 0, -5.05186e-05, -1, -9.77013e-06, 0, -2.59328e-05, -1, -5.43307e-05, 0, -0.000131166, -1, -5.31218e-05, 4.36774e-11, -0.000128714, -1, -2.15727e-05, 0, -4.98716e-05, -1, -3.08876e-05, 2.89554e-11, -7.25807e-05, -1, -4.98715e-05, 8.36951e-11, -0.000121316, -1, -3.90156e-05, 6.35162e-11, -9.25008e-05, -1, -4.47047e-05, 7.48142e-11, -0.000109255, -1, -4.56442e-05, 7.53001e-11, -0.000108866, -1, -3.78198e-05, 3.45608e-11, -9.29962e-05, -1, -5.05186e-05, 4.00177e-11, -0.000121048, -1, -2.94815e-05, 0, -7.3163e-05, -1, -5.34518e-05, 0, -0.000128578, -1, -1.14287e-05, 0, -2.52458e-05, -1, -1.89505e-05, 0, -9.85877e-05, -1, -1.46416e-05, 0, -7.75088e-05, -1, -2.59327e-05, 0, -0.000128578, -1, -2.73405e-05, 0, -0.000136535, -1, -9.77011e-06, 0, -5.34517e-05, -1, -2.76975e-05, 0, -0.000139245, -1, -6.2839e-06, 0, -2.69904e-05, -1, -1.14287e-05, 0, -5.3122e-05, -1, -4.52318e-06, 0, -2.73406e-05, -1, -2.69902e-05, 0, -0.000136604, -1, -1.61342e-05, 0, -7.72118e-05, -1, -2.52457e-05, 4.02534e-11, -0.000128714, -1, -2.02199e-05, 3.52824e-11, -9.83349e-05, -1, -2.2531e-05, 7.48142e-11, -0.000115878, -1, -2.35284e-05, 7.53001e-11, -0.000115679, -1, 3.50285e-07, 4.36557e-11, -0.000131166, -1, 5.0848e-07, 0, -0.000118047, -1, -6.47094e-07, 0, -0.00010039, -1, -5.08415e-07, 0, -0.000118046, -1, 6.47182e-07, 0, -0.00010039, -1, -3.50228e-07, 0, -0.000131166, -1, 7.60985e-07, 0, -7.8876e-05, -1, -1.78516e-07, 0, -0.000139245, -1, 8.45443e-07, -3.47036e-11, -5.43308e-05, -1, 1.45519e-11, 0, -0.000141973, -1, -8.97602e-07, 0, -2.76977e-05, -1, -8.45542e-07, 1.75386e-11, -5.43308e-05, -1, 8.97572e-07, -1.31877e-11, -2.76976e-05, -1, 1.78554e-07, 8.90786e-11, -0.000139245, -1, -7.60942e-07, 1.09139e-11, -7.88759e-05, -1, 1.14286e-05, -3.47036e-11, -5.3122e-05, -1, 6.2839e-06, 0, -2.69903e-05, -1, 2.76976e-05, 4.54229e-11, -0.000139245, -1, 2.73405e-05, 8.90786e-11, -0.000136534, -1, 9.77013e-06, 1.75386e-11, -5.34518e-05, -1, 1.46416e-05, 5.06196e-11, -7.75088e-05, -1, 2.59328e-05, 0, -0.000128578, -1, 1.89505e-05, 2.91038e-11, -9.85874e-05, -1, 2.35284e-05, 0, -0.000115679, -1, 2.2531e-05, 0, -0.000115877, -1, 2.02199e-05, 0, -9.83353e-05, -1, 2.52458e-05, 0, -0.000128714, -1, 1.61343e-05, -2.15159e-11, -7.72121e-05, -1, 2.69903e-05, 0, -0.000136605, -1, 4.52318e-06, 6.6247e-12, -2.73406e-05, -1, 3.90157e-05, 0, -9.2501e-05, -1, 3.08876e-05, 0, -7.25808e-05, -1, 4.98716e-05, 0, -0.000121316, -1, 5.31219e-05, 0, -0.000128714, -1, 2.15727e-05, 0, -4.98716e-05, -1, 5.43308e-05, 0, -0.000131166, -1, 9.77017e-06, 0, -2.59328e-05, -1, 2.00103e-05, 2.15158e-11, -5.05187e-05, -1, 1.14287e-05, 0, -2.52458e-05, -1, 5.34517e-05, 0, -0.000128577, -1, 2.94814e-05, 5.06196e-11, -7.3163e-05, -1, 5.05187e-05, 0, -0.000121048, -1, 3.78198e-05, 0, -9.29961e-05, -1, 4.56442e-05, 0, -0.000108866, -1, 4.47047e-05, 0, -0.000109255, -1, 4.31884e-05, 0, -6.60057e-05, -1, 5.52357e-05, 0, -8.38308e-05, -1, 7.31632e-05, 0, -0.000108866, -1, 6.6006e-05, 0, -9.78697e-05, -1, 6.51603e-05, 0, -9.84344e-05, -1, 5.6312e-05, 0, -8.3112e-05, -1, 7.25808e-05, 0, -0.000109255, -1, 4.44539e-05, 0, -6.51603e-05, -1, 7.72121e-05, 0, -0.000115877, -1, 3.08876e-05, 0, -4.47047e-05, -1, 7.8876e-05, 0, -0.000118046, -1, 1.46417e-05, 0, -2.35284e-05, -1, 2.94815e-05, 0, -4.56441e-05, -1, 1.61343e-05, 0, -2.2531e-05, -1, 7.75088e-05, 0, -0.000115679, -1, 9.8335e-05, 0, -9.85875e-05, -1, 0.00010039, 9.08975e-11, -0.00010039, -1, 1.89505e-05, 0, -2.02199e-05, -1, 3.78197e-05, 3.50772e-11, -3.90156e-05, -1, 3.90155e-05, 0, -3.78198e-05, -1, 2.02199e-05, 0, -1.89504e-05, -1, 9.85874e-05, 4.54746e-11, -9.83349e-05, -1, 5.52357e-05, 2.18278e-11, -5.63118e-05, -1, 9.29962e-05, 0, -9.25009e-05, -1, 7.0529e-05, 0, -7.14441e-05, -1, 8.38311e-05, 0, -8.3112e-05, -1, 8.31118e-05, 0, -8.38308e-05, -1, 7.14444e-05, 0, -7.05291e-05, -1, 9.25008e-05, 0, -9.2996e-05, -1, 5.63119e-05, 0, -5.52357e-05, -1, 9.84347e-05, 0, -6.51604e-05, -1, 8.38311e-05, 0, -5.52359e-05, -1, 9.78695e-05, 3.45608e-11, -6.60058e-05, -1, 0.000108866, 0, -7.31632e-05, -1, 6.60058e-05, 0, -4.31885e-05, -1, 0.000115679, 4.54229e-11, -7.75088e-05, -1, 4.56442e-05, 0, -2.94815e-05, -1, 0.000118046, 9.08975e-11, -7.88758e-05, -1, 2.2531e-05, 1.32494e-11, -1.61343e-05, -1, 4.47046e-05, 3.50772e-11, -3.08876e-05, -1, 2.35284e-05, 0, -1.46416e-05, -1, 0.000115877, 0, -7.7212e-05, -1, 6.51603e-05, 0, -4.44539e-05, -1, 0.000109255, 0, -7.25808e-05, -1, 8.31118e-05, 6.35162e-11, -5.63119e-05, -1, 0.000128714, 0, -5.31218e-05, -1, 0.000121316, 0, -4.98715e-05, -1, 7.25807e-05, 2.89554e-11, -3.08876e-05, -1, 9.25008e-05, 6.35162e-11, -3.90156e-05, -1, 0.000109255, 0, -4.47047e-05, -1, 0.000108866, 0, -4.56442e-05, -1, 9.29963e-05, 0, -3.78199e-05, -1, 0.000121048, 8.3909e-11, -5.05186e-05, -1, 7.31631e-05, 0, -2.94815e-05, -1, 0.000128577, 1.32808e-10, -5.34517e-05, -1, 5.05187e-05, 0, -2.00103e-05, -1, 0.000131166, 4.54746e-11, -5.43307e-05, -1, 2.52458e-05, 0, -1.14287e-05, -1, 4.98716e-05, 0, -2.15726e-05, -1, 2.59327e-05, 0, -9.77013e-06, -1, 7.75088e-05, 0, -1.46416e-05, -1, 5.34518e-05, 0, -9.77013e-06, -1, 0.000136535, 8.91521e-11, -2.73405e-05, -1, 0.000139245, 0, -2.76975e-05, -1, 2.69903e-05, 0, -6.28387e-06, -1, 5.31219e-05, 0, -1.14287e-05, -1, 2.73405e-05, 0, -4.52317e-06, -1, 0.000136605, 0, -2.69902e-05, -1, 7.72119e-05, 0, -1.61343e-05, -1, 0.000128714, 0, -2.52457e-05, -1, 9.8335e-05, 0, -2.02198e-05, -1, 0.000115877, 0, -2.25311e-05, -1, 0.000115679, 1.15553e-10, -2.35284e-05, -1, 9.85874e-05, 0, -1.89504e-05, -1, 0.000128577, 1.67604e-10, -2.59327e-05, -1, 0.000118047, -7.48146e-11, 5.08444e-07, -1, 0.00010039, -3.4561e-11, 6.47187e-07, -1, 0.000118046, 7.53001e-11, -5.08473e-07, -1, 0.000131166, 0, -3.50157e-07, -1, 7.88762e-05, 0, 7.60994e-07, -1, 0.000139245, 0, -1.78442e-07, -1, 5.43309e-05, 0, 8.45525e-07, -1, 0.000141973, 0, 8.73115e-11, -1, 2.76977e-05, 1.76615e-11, -8.97677e-07, -1, 5.43309e-05, 1.31877e-11, -8.4554e-07, -1, 2.76976e-05, 0, 8.97607e-07, -1, 0.000139245, 0, 1.7861e-07, -1, 7.88759e-05, 5.06197e-11, -7.60998e-07, -1, 0.000131166, 0, 3.50257e-07, -1, 0.00010039, 6.43862e-11, -6.47166e-07, -1, 0.000136535, 0, 2.73406e-05, -1, 0.000128578, -4.02536e-11, 2.59328e-05, -1, 7.75089e-05, 7.24475e-11, 1.46415e-05, -1, 9.85876e-05, 0, 1.89505e-05, -1, 0.000115679, -4.23273e-16, 2.35285e-05, -1, 0.000115877, 0, 2.25311e-05, -1, 9.83352e-05, 3.45608e-11, 2.022e-05, -1, 0.000128714, 0, 2.52458e-05, -1, 7.72121e-05, 0, 1.61343e-05, -1, 0.000136604, 0, 2.69904e-05, -1, 5.3122e-05, 0, 1.14287e-05, -1, 0.000139245, 0, 2.76976e-05, -1, 2.73406e-05, 1.76615e-11, 4.52311e-06, -1, 5.34518e-05, 5.65931e-11, 9.77003e-06, -1, 2.69903e-05, 0, 6.28388e-06, -1, 7.25808e-05, 0, 3.08876e-05, -1, 4.98716e-05, 0, 2.15727e-05, -1, 0.000128714, 0, 5.31219e-05, -1, 0.000131166, 0, 5.43308e-05, -1, 2.59328e-05, 1.32494e-11, 9.7701e-06, -1, 5.05187e-05, 3.50772e-11, 2.00102e-05, -1, 2.52458e-05, 0, 1.14287e-05, -1, 0.000128578, 0, 5.34518e-05, -1, 7.31632e-05, 0, 2.94816e-05, -1, 0.000121048, 4.02534e-11, 5.05188e-05, -1, 9.29961e-05, 0, 3.78198e-05, -1, 0.000108866, -1.42247e-16, 4.56443e-05, -1, 0.000109255, 0, 4.47047e-05, -1, 9.2501e-05, -3.45609e-11, 3.90156e-05, -1, 0.000121316, 0, 4.98716e-05, -1, 9.78698e-05, -7.48143e-11, 6.6006e-05, -1, 8.31119e-05, 0, 5.63119e-05, -1, 9.84346e-05, 0, 6.51605e-05, -1, 0.000109255, 0, 7.25809e-05, -1, 6.51603e-05, -5.07834e-11, 4.44539e-05, -1, 0.000115877, 0, 7.72121e-05, -1, 4.47047e-05, -2.18279e-11, 3.08876e-05, -1, 0.000118046, 0, 7.88761e-05, -1, 2.35284e-05, 0, 1.46416e-05, -1, 4.56441e-05, 0, 2.94815e-05, -1, 2.2531e-05, 0, 1.61343e-05, -1, 0.000115679, 0, 7.7509e-05, -1, 6.60058e-05, 0, 4.31885e-05, -1, 0.000108866, -4.02534e-11, 7.31633e-05, -1, 8.3831e-05, 0, 5.52358e-05, -1, 3.90156e-05, 0, 3.78199e-05, -1, 5.6312e-05, 0, 5.52359e-05, -1, 9.83349e-05, 0, 9.85875e-05, -1, 9.2501e-05, 0, 9.29963e-05, -1, 7.14443e-05, 0, 7.05292e-05, -1, 8.3112e-05, 0, 8.38311e-05, -1, 8.3831e-05, 0, 8.3112e-05, -1, 7.05291e-05, -2.89555e-11, 7.14443e-05, -1, 9.29961e-05, 0, 9.25008e-05, -1, 5.52359e-05, -5.07834e-11, 5.6312e-05, -1, 9.85874e-05, 0, 9.8335e-05, -1, 3.78198e-05, 0, 3.90155e-05, -1, 0.00010039, 0, 0.00010039, -1, 2.02199e-05, 0, 1.89505e-05, -1, 1.89504e-05, 0, 2.02198e-05, -1, 7.31632e-05, 2.00089e-11, 0.000108866, -1, 7.75089e-05, 0, 0.000115679, -1, 4.31886e-05, -2.91039e-11, 6.60059e-05, -1, 2.94816e-05, -5.22827e-11, 4.56441e-05, -1, 7.8876e-05, 0, 0.000118046, -1, 1.61343e-05, 0, 2.25311e-05, -1, 3.08876e-05, 0, 4.47048e-05, -1, 1.46418e-05, -3.78059e-11, 2.35285e-05, -1, 7.7212e-05, 0, 0.000115877, -1, 4.4454e-05, 0, 6.51604e-05, -1, 7.25809e-05, 0, 0.000109255, -1, 5.63119e-05, 0, 8.31119e-05, -1, 6.51605e-05, -7.48143e-11, 9.84347e-05, -1, 6.60058e-05, 3.76501e-11, 9.78695e-05, -1, 5.52359e-05, -9.89471e-11, 8.38311e-05, -1, 4.98717e-05, -1.67605e-10, 0.000121316, -1, 4.47049e-05, -1.50115e-10, 0.000109256, -1, 3.90155e-05, 5.03088e-11, 9.25007e-05, -1, 4.56441e-05, 1.81898e-11, 0.000108866, -1, 3.78199e-05, -6.43863e-11, 9.29962e-05, -1, 5.05186e-05, -2.00089e-11, 0.000121048, -1, 2.94815e-05, -3.22738e-11, 7.31632e-05, -1, 5.34517e-05, 0, 0.000128578, -1, 2.00105e-05, -6.55322e-11, 5.05187e-05, -1, 5.43307e-05, 0, 0.000131166, -1, 1.14287e-05, 0, 2.52458e-05, -1, 2.15727e-05, 0, 4.98716e-05, -1, 9.77026e-06, -1.7797e-11, 2.59328e-05, -1, 5.31219e-05, -8.90788e-11, 0.000128714, -1, 3.08876e-05, 0, 7.25808e-05, -1, 9.77007e-06, 7.3201e-11, 5.34518e-05, -1, 4.52308e-06, 3.78056e-11, 2.73403e-05, -1, 2.76979e-05, -2.72332e-11, 0.000139245, -1, 2.69906e-05, -3.65975e-12, 0.000136605, -1, 1.14287e-05, -3.50156e-11, 5.31219e-05, -1, 1.61343e-05, -8.70736e-11, 7.7212e-05, -1, 2.5246e-05, 5.63886e-11, 0.000128714, -1, 2.02199e-05, -6.1297e-11, 9.83349e-05, -1, 2.25312e-05, 1.91465e-10, 0.000115877, -1, 2.35286e-05, -1.45692e-10, 0.000115679, -1, 1.89505e-05, 1.35327e-10, 9.85875e-05, -1, 2.59329e-05, -4.72937e-11, 0.000128577, -1, 1.46417e-05, 7.89776e-11, 7.75089e-05, -1, 2.73407e-05, -2.18279e-11, 0.000136535, -1, 6.28395e-06, 0, 2.69903e-05, -1, 4.33663e-05, -2.34188e-16, -0.000142959, 1, 9.47743e-05, 1.43161e-10, -0.000115481, 1, 3.98104e-05, 0, -0.000134374, 1, -5.16238e-06, 0, 7.72604e-06, -1, 8.82039e-05, 1.38687e-10, -0.00010891, 1, -6.57047e-06, 0, 6.57046e-06, -1, -7.72605e-06, 0, 5.16238e-06, -1, -7.72607e-06, 0, 5.16239e-06, -1, -8.58472e-06, 0, 3.5559e-06, -1, -8.58475e-06, 0, 3.55591e-06, -1, 0, 4.76837e-07, 4, -1, 0, 2.38419e-07, 2, -1, 0, 4.76837e-07, 4, -1, 0, 2.38419e-07, 2, -1, -4, 4.76837e-07, 0, -1, -2, 2.38419e-07, 0, -1, -4, 4.76837e-07, 0, -1, -2, 2.38419e-07, 0, -1, 0, 4.76837e-07, -4, -1, 0, 2.38419e-07, -2, -1, 0, 4.76837e-07, -4, -1, 0, 2.38419e-07, -2, -1, 4, 4.76837e-07, 0, -1, 2, 2.38419e-07, 0, -1, 4, 4.76837e-07, 0, -1, 2, 2.38419e-07, 0, -1, -4.76837e-07, 0, 4, -1, -2.38418e-07, 0, 2, -1, -4.76837e-07, 0, 4, -1, -2.38419e-07, 0, 2, -1, 4.76837e-07, 0, 4, -1, 2.38418e-07, 0, 2, -1, 4.76837e-07, 0, 4, -1, 2.38419e-07, 0, 2, -1 </real_array>
- <nil> </nil>
- <vector3_array len="529"> 0.25, 0.875, 0, 0.25, 0.8125, 0, 0.21875, 0.8125, 0, 0.21875, 0.875, 0, 0.25, 0.5, 0, 0.25, 0.4375, 0, 0.21875, 0.4375, 0, 0.21875, 0.5, 0, 0.25, 0.125, 0, 0.25, 0.0624999, 0, 0.21875, 0.0624999, 0, 0.21875, 0.125, 0, 0.25, 0.9375, 0, 0.21875, 0.9375, 0, 0.25, 0.5625, 0, 0.21875, 0.5625, 0, 0.25, 0.1875, 0, 0.21875, 0.1875, 0, 0.25, 0.625, 0, 0.21875, 0.625, 0, 0.25, 0.25, 0, 0.21875, 0.25, 0, 0.25, 0.6875, 0, 0.21875, 0.6875, 0, 0.25, 0.3125, 0, 0.21875, 0.3125, 0, 0.25, 0.75, 0, 0.21875, 0.75, 0, 0.25, 0.375, 0, 0.21875, 0.375, 0, 0.1875, 0.5625, 0, 0.1875, 0.625, 0, 0.1875, 0.1875, 0, 0.1875, 0.25, 0, 0.1875, 0.6875, 0, 0.1875, 0.3125, 0, 0.1875, 0.75, 0, 0.1875, 0.375, 0, 0.1875, 0.8125, 0, 0.1875, 0.4375, 0, 0.1875, 0.875, 0, 0.1875, 0.5, 0, 0.1875, 0.0624999, 0, 0.1875, 0.125, 0, 0.1875, 0.9375, 0, 0.15625, 0.8125, 0, 0.15625, 0.875, 0, 0.15625, 0.4375, 0, 0.15625, 0.5, 0, 0.15625, 0.0624999, 0, 0.15625, 0.125, 0, 0.15625, 0.9375, 0, 0.15625, 0.5625, 0, 0.15625, 0.1875, 0, 0.15625, 0.625, 0, 0.15625, 0.25, 0, 0.15625, 0.6875, 0, 0.15625, 0.3125, 0, 0.15625, 0.75, 0, 0.15625, 0.375, 0, 0.125, 0.6875, 0, 0.125, 0.75, 0, 0.125, 0.3125, 0, 0.125, 0.375, 0, 0.125, 0.8125, 0, 0.125, 0.4375, 0, 0.125, 0.875, 0, 0.125, 0.5, 0, 0.125, 0.0625, 0, 0.125, 0.125, 0, 0.125, 0.9375, 0, 0.125, 0.5625, 0, 0.125, 0.1875, 0, 0.125, 0.625, 0, 0.125, 0.25, 0, 0.0937499, 0.5625, 0, 0.0937499, 0.625, 0, 0.0937499, 0.1875, 0, 0.0937499, 0.25, 0, 0.0937499, 0.6875, 0, 0.0937499, 0.3125, 0, 0.0937499, 0.75, 0, 0.0937499, 0.375, 0, 0.0937499, 0.8125, 0, 0.0937499, 0.4375, 0, 0.0937499, 0.875, 0, 0.0937499, 0.5, 0, 0.0937496, 0.0625, 0, 0.0937498, 0.125, 0, 0.0937499, 0.9375, 0, 0.0624999, 0.8125, 0, 0.0624999, 0.875, 0, 0.0624999, 0.4375, 0, 0.0624999, 0.5, 0, 0.0624996, 0.0625, 0, 0.0624998, 0.125, 0, 0.0624999, 0.9375, 0, 0.0624999, 0.5625, 0, 0.0624999, 0.1875, 0, 0.0624999, 0.625, 0, 0.0624999, 0.25, 0, 0.0624999, 0.6875, 0, 0.0624999, 0.3125, 0, 0.0624999, 0.75, 0, 0.0624999, 0.375, 0, 0.0312499, 0.6875, 0, 0.0312499, 0.75, 0, 0.0312499, 0.3125, 0, 0.0312499, 0.375, 0, 0.0312499, 0.8125, 0, 0.0312499, 0.4375, 0, 0.0312499, 0.875, 0, 0.0312499, 0.5, 0, 0.0312496, 0.0625, 0, 0.0312498, 0.125, 0, 0.0312498, 0.9375, 0, 0.0312499, 0.5625, 0, 0.0312499, 0.1875, 0, 0.0312499, 0.625, 0, 0.0312499, 0.25, 0, 1.03125, 0.625, 0, 1.03125, 0.5625, 0, 1, 0.5625, 0, 1, 0.625, 0, 1.03125, 0.25, 0, 1.03125, 0.1875, 0, 1, 0.1875, 0, 1, 0.25, 0, 1.03125, 0.6875, 0, 1, 0.6875, 0, 1.03125, 0.3125, 0, 1, 0.3125, 0, 1.03125, 0.75, 0, 1, 0.75, 0, 1.03125, 0.375, 0, 1, 0.375, 0, 1.03125, 0.8125, 0, 1, 0.8125, 0, 1.03125, 0.4375, 0, 1, 0.4375, 0, 1.03125, 0.875, 0, 1, 0.875, 0, 1.03125, 0.5, 0, 1, 0.5, 0, 1.03125, 0.125, 0, 1.03125, 0.0625, 0, 1, 0.0625, 0, 1, 0.125, 0, 1.03125, 0.9375, 0, 1, 0.9375, 0, 0.96875, 0.8125, 0, 0.96875, 0.875, 0, 0.96875, 0.4375, 0, 0.96875, 0.5, 0, 0.96875, 0.0625, 0, 0.96875, 0.125, 0, 0.96875, 0.9375, 0, 0.96875, 0.5625, 0, 0.96875, 0.1875, 0, 0.96875, 0.625, 0, 0.96875, 0.25, 0, 0.96875, 0.6875, 0, 0.96875, 0.3125, 0, 0.96875, 0.75, 0, 0.96875, 0.375, 0, 0.9375, 0.25, 0, 0.9375, 0.3125, 0, 0.9375, 0.6875, 0, 0.9375, 0.75, 0, 0.9375, 0.375, 0, 0.9375, 0.8125, 0, 0.9375, 0.4375, 0, 0.9375, 0.875, 0, 0.9375, 0.5, 0, 0.9375, 0.0625, 0, 0.9375, 0.125, 0, 0.9375, 0.9375, 0, 0.9375, 0.5625, 0, 0.9375, 0.1875, 0, 0.9375, 0.625, 0, 0.90625, 0.5, 0, 0.90625, 0.5625, 0, 0.90625, 0.125, 0, 0.90625, 0.1875, 0, 0.90625, 0.625, 0, 0.90625, 0.25, 0, 0.90625, 0.6875, 0, 0.90625, 0.3125, 0, 0.90625, 0.75, 0, 0.90625, 0.375, 0, 0.90625, 0.8125, 0, 0.90625, 0.4375, 0, 0.90625, 0.875, 0, 0.90625, 0.0625, 0, 0.90625, 0.9375, 0, 0.875, 0.75, 0, 0.875, 0.8125, 0, 0.875, 0.375, 0, 0.875, 0.4375, 0, 0.875, 0.875, 0, 0.875, 0.5, 0, 0.875, 0.0625, 0, 0.875, 0.125, 0, 0.875, 0.9375, 0, 0.875, 0.5625, 0, 0.875, 0.1875, 0, 0.875, 0.625, 0, 0.875, 0.25, 0, 0.875, 0.6875, 0, 0.875, 0.3125, 0, 0.84375, 0.625, 0, 0.84375, 0.6875, 0, 0.84375, 0.25, 0, 0.84375, 0.3125, 0, 0.84375, 0.75, 0, 0.84375, 0.375, 0, 0.84375, 0.8125, 0, 0.84375, 0.4375, 0, 0.84375, 0.875, 0, 0.84375, 0.5, 0, 0.84375, 0.0625, 0, 0.84375, 0.125, 0, 0.84375, 0.9375, 0, 0.84375, 0.5625, 0, 0.84375, 0.1875, 0, 0.8125, 0.875, 0, 0.8125, 0.9375, 0, 0.8125, 0.5, 0, 0.8125, 0.5625, 0, 0.8125, 0.125, 0, 0.8125, 0.1875, 0, 0.8125, 0.625, 0, 0.8125, 0.25, 0, 0.8125, 0.6875, 0, 0.8125, 0.3125, 0, 0.8125, 0.75, 0, 0.8125, 0.375, 0, 0.8125, 0.8125, 0, 0.8125, 0.4375, 0, 0.8125, 0.0625, 0, 0.78125, 0.75, 0, 0.78125, 0.8125, 0, 0.78125, 0.375, 0, 0.78125, 0.4375, 0, 0.78125, 0.875, 0, 0.78125, 0.5, 0, 0.78125, 0.0625, 0, 0.78125, 0.125, 0, 0.78125, 0.9375, 0, 0.78125, 0.5625, 0, 0.78125, 0.1875, 0, 0.78125, 0.625, 0, 0.78125, 0.25, 0, 0.78125, 0.6875, 0, 0.78125, 0.3125, 0, 0.75, 0.625, 0, 0.75, 0.6875, 0, 0.75, 0.25, 0, 0.75, 0.3125, 0, 0.75, 0.75, 0, 0.75, 0.375, 0, 0.75, 0.8125, 0, 0.75, 0.4375, 0, 0.75, 0.875, 0, 0.75, 0.5, 0, 0.75, 0.0625, 0, 0.75, 0.125, 0, 0.75, 0.9375, 0, 0.75, 0.5625, 0, 0.75, 0.1875, 0, 0.71875, 0.875, 0, 0.71875, 0.9375, 0, 0.71875, 0.5, 0, 0.71875, 0.5625, 0, 0.71875, 0.125, 0, 0.71875, 0.1875, 0, 0.71875, 0.625, 0, 0.71875, 0.25, 0, 0.71875, 0.6875, 0, 0.71875, 0.3125, 0, 0.71875, 0.75, 0, 0.71875, 0.375, 0, 0.71875, 0.8125, 0, 0.71875, 0.4375, 0, 0.71875, 0.0625, 0, 0.6875, 0.75, 0, 0.6875, 0.8125, 0, 0.6875, 0.375, 0, 0.6875, 0.4375, 0, 0.6875, 0.875, 0, 0.6875, 0.5, 0, 0.6875, 0.0625, 0, 0.6875, 0.125, 0, 0.6875, 0.9375, 0, 0.6875, 0.5625, 0, 0.6875, 0.1875, 0, 0.6875, 0.625, 0, 0.6875, 0.25, 0, 0.6875, 0.6875, 0, 0.6875, 0.3125, 0, 0.65625, 0.1875, 0, 0.65625, 0.25, 0, 0.65625, 0.625, 0, 0.65625, 0.6875, 0, 0.65625, 0.3125, 0, 0.65625, 0.75, 0, 0.65625, 0.375, 0, 0.65625, 0.8125, 0, 0.65625, 0.4375, 0, 0.65625, 0.875, 0, 0.65625, 0.5, 0, 0.65625, 0.0625, 0, 0.65625, 0.125, 0, 0.65625, 0.9375, 0, 0.65625, 0.5625, 0, 0.625, 0.4375, 0, 0.625, 0.5, 0, 0.625, 0.0625, 0, 0.625, 0.125, 0, 0.625, 0.875, 0, 0.625, 0.9375, 0, 0.625, 0.5625, 0, 0.625, 0.1875, 0, 0.625, 0.625, 0, 0.625, 0.25, 0, 0.625, 0.6875, 0, 0.625, 0.3125, 0, 0.625, 0.75, 0, 0.625, 0.375, 0, 0.625, 0.8125, 0, 0.59375, 0.6875, 0, 0.59375, 0.75, 0, 0.59375, 0.3125, 0, 0.59375, 0.375, 0, 0.59375, 0.8125, 0, 0.59375, 0.4375, 0, 0.59375, 0.875, 0, 0.59375, 0.5, 0, 0.59375, 0.0625, 0, 0.59375, 0.125, 0, 0.59375, 0.9375, 0, 0.59375, 0.5625, 0, 0.59375, 0.1875, 0, 0.59375, 0.625, 0, 0.59375, 0.25, 0, 0.5625, 0.5625, 0, 0.5625, 0.625, 0, 0.5625, 0.1875, 0, 0.5625, 0.25, 0, 0.5625, 0.6875, 0, 0.5625, 0.3125, 0, 0.5625, 0.75, 0, 0.5625, 0.375, 0, 0.5625, 0.8125, 0, 0.5625, 0.4375, 0, 0.5625, 0.875, 0, 0.5625, 0.5, 0, 0.5625, 0.0625, 0, 0.5625, 0.125, 0, 0.5625, 0.9375, 0, 0.53125, 0.8125, 0, 0.53125, 0.875, 0, 0.53125, 0.4375, 0, 0.53125, 0.5, 0, 0.53125, 0.0625, 0, 0.53125, 0.125, 0, 0.53125, 0.9375, 0, 0.53125, 0.5625, 0, 0.53125, 0.1875, 0, 0.53125, 0.625, 0, 0.53125, 0.25, 0, 0.53125, 0.6875, 0, 0.53125, 0.3125, 0, 0.53125, 0.75, 0, 0.53125, 0.375, 0, 0.5, 0.6875, 0, 0.5, 0.75, 0, 0.5, 0.3125, 0, 0.5, 0.375, 0, 0.5, 0.8125, 0, 0.5, 0.4375, 0, 0.5, 0.875, 0, 0.5, 0.5, 0, 0.5, 0.0625, 0, 0.5, 0.125, 0, 0.5, 0.9375, 0, 0.5, 0.5625, 0, 0.5, 0.1875, 0, 0.5, 0.625, 0, 0.5, 0.25, 0, 0.46875, 0.5625, 0, 0.46875, 0.625, 0, 0.46875, 0.1875, 0, 0.46875, 0.25, 0, 0.46875, 0.6875, 0, 0.46875, 0.3125, 0, 0.46875, 0.75, 0, 0.46875, 0.375, 0, 0.46875, 0.8125, 0, 0.46875, 0.4375, 0, 0.46875, 0.875, 0, 0.46875, 0.5, 0, 0.46875, 0.0624999, 0, 0.46875, 0.125, 0, 0.46875, 0.9375, 0, 0.4375, 0.8125, 0, 0.4375, 0.875, 0, 0.4375, 0.4375, 0, 0.4375, 0.5, 0, 0.4375, 0.0624999, 0, 0.4375, 0.125, 0, 0.4375, 0.9375, 0, 0.4375, 0.5625, 0, 0.4375, 0.1875, 0, 0.4375, 0.625, 0, 0.4375, 0.25, 0, 0.4375, 0.6875, 0, 0.4375, 0.3125, 0, 0.4375, 0.75, 0, 0.4375, 0.375, 0, 0.40625, 0.6875, 0, 0.40625, 0.75, 0, 0.40625, 0.3125, 0, 0.40625, 0.375, 0, 0.40625, 0.8125, 0, 0.40625, 0.4375, 0, 0.40625, 0.875, 0, 0.40625, 0.5, 0, 0.40625, 0.0624999, 0, 0.40625, 0.125, 0, 0.40625, 0.9375, 0, 0.40625, 0.5625, 0, 0.40625, 0.1875, 0, 0.40625, 0.625, 0, 0.40625, 0.25, 0, 0.375, 0.125, 0, 0.375, 0.1875, 0, 0.375, 0.5625, 0, 0.375, 0.625, 0, 0.375, 0.25, 0, 0.375, 0.6875, 0, 0.375, 0.3125, 0, 0.375, 0.75, 0, 0.375, 0.375, 0, 0.375, 0.8125, 0, 0.375, 0.4375, 0, 0.375, 0.875, 0, 0.375, 0.5, 0, 0.375, 0.0624999, 0, 0.375, 0.9375, 0, 0.34375, 0.375, 0, 0.34375, 0.4375, 0, 0.34375, 0.8125, 0, 0.34375, 0.875, 0, 0.34375, 0.5, 0, 0.34375, 0.0624999, 0, 0.34375, 0.125, 0, 0.34375, 0.9375, 0, 0.34375, 0.5625, 0, 0.34375, 0.1875, 0, 0.34375, 0.625, 0, 0.34375, 0.25, 0, 0.34375, 0.6875, 0, 0.34375, 0.3125, 0, 0.34375, 0.75, 0, 0.3125, 0.625, 0, 0.3125, 0.6875, 0, 0.3125, 0.25, 0, 0.3125, 0.3125, 0, 0.3125, 0.75, 0, 0.3125, 0.375, 0, 0.3125, 0.8125, 0, 0.3125, 0.4375, 0, 0.3125, 0.875, 0, 0.3125, 0.5, 0, 0.3125, 0.0624999, 0, 0.3125, 0.125, 0, 0.3125, 0.9375, 0, 0.3125, 0.5625, 0, 0.3125, 0.1875, 0, 0.28125, 0.875, 0, 0.28125, 0.9375, 0, 0.28125, 0.5, 0, 0.28125, 0.5625, 0, 0.28125, 0.125, 0, 0.28125, 0.1875, 0, 0.28125, 0.625, 0, 0.28125, 0.25, 0, 0.28125, 0.6875, 0, 0.28125, 0.3125, 0, 0.28125, 0.75, 0, 0.28125, 0.375, 0, 0.28125, 0.8125, 0, 0.28125, 0.4375, 0, 0.28125, 0.0624999, 0, 0.692175, 1, 0, 0.649736, 0, 0, 1.1875, 0.9375, 0, 1.15625, 0.9375, 0, 1.125, 0.0625, 0, 1.125, 0.9375, 0, 1.09375, 0.9375, 0, 1.09375, 0.0625, 0, 1.0625, 0.9375, 0, 1.0625, 0.0625, 0, 1, 1.19209e-07, 0, 1.19209e-07, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1.19209e-07, 0, 1.19209e-07, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1.19209e-07, 0, 1.19209e-07, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1.19209e-07, 0, 1.19209e-07, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1.19209e-07, 0, 1.19209e-07, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1.19209e-07, 0, 1.19209e-07, 0, 0, 0, 1, 0, 1, 1, 0 </vector3_array>
- <nil> </nil>
- <nil> </nil>
- <nil> </nil>
- <int_array len="2916"> 0, 2, 1, 0, 3, 2, 4, 6, 5, 4, 7, 6, 8, 10, 9, 8, 11, 10, 12, 3, 0, 12, 13, 3, 14, 7, 4, 14, 15, 7, 16, 11, 8, 16, 17, 11, 18, 15, 14, 18, 19, 15, 20, 17, 16, 20, 21, 17, 22, 19, 18, 22, 23, 19, 24, 21, 20, 24, 25, 21, 26, 23, 22, 26, 27, 23, 28, 25, 24, 28, 29, 25, 1, 27, 26, 1, 2, 27, 5, 29, 28, 5, 6, 29, 19, 30, 15, 19, 31, 30, 21, 32, 17, 21, 33, 32, 23, 31, 19, 23, 34, 31, 25, 33, 21, 25, 35, 33, 27, 34, 23, 27, 36, 34, 29, 35, 25, 29, 37, 35, 2, 36, 27, 2, 38, 36, 6, 37, 29, 6, 39, 37, 3, 38, 2, 3, 40, 38, 7, 39, 6, 7, 41, 39, 11, 42, 10, 11, 43, 42, 13, 40, 3, 13, 44, 40, 15, 41, 7, 15, 30, 41, 17, 43, 11, 17, 32, 43, 40, 45, 38, 40, 46, 45, 41, 47, 39, 41, 48, 47, 43, 49, 42, 43, 50, 49, 44, 46, 40, 44, 51, 46, 30, 48, 41, 30, 52, 48, 32, 50, 43, 32, 53, 50, 31, 52, 30, 31, 54, 52, 33, 53, 32, 33, 55, 53, 34, 54, 31, 34, 56, 54, 35, 55, 33, 35, 57, 55, 36, 56, 34, 36, 58, 56, 37, 57, 35, 37, 59, 57, 38, 58, 36, 38, 45, 58, 39, 59, 37, 39, 47, 59, 58, 60, 56, 58, 61, 60, 59, 62, 57, 59, 63, 62, 45, 61, 58, 45, 64, 61, 47, 63, 59, 47, 65, 63, 46, 64, 45, 46, 66, 64, 48, 65, 47, 48, 67, 65, 50, 68, 49, 50, 69, 68, 51, 66, 46, 51, 70, 66, 52, 67, 48, 52, 71, 67, 53, 69, 50, 53, 72, 69, 54, 71, 52, 54, 73, 71, 55, 72, 53, 55, 74, 72, 56, 73, 54, 56, 60, 73, 57, 74, 55, 57, 62, 74, 73, 75, 71, 73, 76, 75, 74, 77, 72, 74, 78, 77, 60, 76, 73, 60, 79, 76, 62, 78, 74, 62, 80, 78, 61, 79, 60, 61, 81, 79, 63, 80, 62, 63, 82, 80, 64, 81, 61, 64, 83, 81, 65, 82, 63, 65, 84, 82, 66, 83, 64, 66, 85, 83, 67, 84, 65, 67, 86, 84, 69, 87, 68, 69, 88, 87, 70, 85, 66, 70, 89, 85, 71, 86, 67, 71, 75, 86, 72, 88, 69, 72, 77, 88, 85, 90, 83, 85, 91, 90, 86, 92, 84, 86, 93, 92, 88, 94, 87, 88, 95, 94, 89, 91, 85, 89, 96, 91, 75, 93, 86, 75, 97, 93, 77, 95, 88, 77, 98, 95, 76, 97, 75, 76, 99, 97, 78, 98, 77, 78, 100, 98, 79, 99, 76, 79, 101, 99, 80, 100, 78, 80, 102, 100, 81, 101, 79, 81, 103, 101, 82, 102, 80, 82, 104, 102, 83, 103, 81, 83, 90, 103, 84, 104, 82, 84, 92, 104, 103, 105, 101, 103, 106, 105, 104, 107, 102, 104, 108, 107, 90, 106, 103, 90, 109, 106, 92, 108, 104, 92, 110, 108, 91, 109, 90, 91, 111, 109, 93, 110, 92, 93, 112, 110, 95, 113, 94, 95, 114, 113, 96, 111, 91, 96, 115, 111, 97, 112, 93, 97, 116, 112, 98, 114, 95, 98, 117, 114, 99, 116, 97, 99, 118, 116, 100, 117, 98, 100, 119, 117, 101, 118, 99, 101, 105, 118, 102, 119, 100, 102, 107, 119, 120, 122, 121, 120, 123, 122, 124, 126, 125, 124, 127, 126, 128, 123, 120, 128, 129, 123, 130, 127, 124, 130, 131, 127, 132, 129, 128, 132, 133, 129, 134, 131, 130, 134, 135, 131, 136, 133, 132, 136, 137, 133, 138, 135, 134, 138, 139, 135, 140, 137, 136, 140, 141, 137, 142, 139, 138, 142, 143, 139, 144, 146, 145, 144, 147, 146, 148, 141, 140, 148, 149, 141, 121, 143, 142, 121, 122, 143, 125, 147, 144, 125, 126, 147, 141, 150, 137, 141, 151, 150, 143, 152, 139, 143, 153, 152, 147, 154, 146, 147, 155, 154, 149, 151, 141, 149, 156, 151, 122, 153, 143, 122, 157, 153, 126, 155, 147, 126, 158, 155, 123, 157, 122, 123, 159, 157, 127, 158, 126, 127, 160, 158, 129, 159, 123, 129, 161, 159, 131, 160, 127, 131, 162, 160, 133, 161, 129, 133, 163, 161, 135, 162, 131, 135, 164, 162, 137, 163, 133, 137, 150, 163, 139, 164, 135, 139, 152, 164, 162, 165, 160, 162, 166, 165, 163, 167, 161, 163, 168, 167, 164, 166, 162, 164, 169, 166, 150, 168, 163, 150, 170, 168, 152, 169, 164, 152, 171, 169, 151, 170, 150, 151, 172, 170, 153, 171, 152, 153, 173, 171, 155, 174, 154, 155, 175, 174, 156, 172, 151, 156, 176, 172, 157, 173, 153, 157, 177, 173, 158, 175, 155, 158, 178, 175, 159, 177, 157, 159, 179, 177, 160, 178, 158, 160, 165, 178, 161, 179, 159, 161, 167, 179, 177, 180, 173, 177, 181, 180, 178, 182, 175, 178, 183, 182, 179, 181, 177, 179, 184, 181, 165, 183, 178, 165, 185, 183, 167, 184, 179, 167, 186, 184, 166, 185, 165, 166, 187, 185, 168, 186, 167, 168, 188, 186, 169, 187, 166, 169, 189, 187, 170, 188, 168, 170, 190, 188, 171, 189, 169, 171, 191, 189, 172, 190, 170, 172, 192, 190, 173, 191, 171, 173, 180, 191, 175, 193, 174, 175, 182, 193, 176, 192, 172, 176, 194, 192, 190, 195, 188, 190, 196, 195, 191, 197, 189, 191, 198, 197, 192, 196, 190, 192, 199, 196, 180, 198, 191, 180, 200, 198, 182, 201, 193, 182, 202, 201, 194, 199, 192, 194, 203, 199, 181, 200, 180, 181, 204, 200, 183, 202, 182, 183, 205, 202, 184, 204, 181, 184, 206, 204, 185, 205, 183, 185, 207, 205, 186, 206, 184, 186, 208, 206, 187, 207, 185, 187, 209, 207, 188, 208, 186, 188, 195, 208, 189, 209, 187, 189, 197, 209, 208, 210, 206, 208, 211, 210, 209, 212, 207, 209, 213, 212, 195, 211, 208, 195, 214, 211, 197, 213, 209, 197, 215, 213, 196, 214, 195, 196, 216, 214, 198, 215, 197, 198, 217, 215, 199, 216, 196, 199, 218, 216, 200, 217, 198, 200, 219, 217, 202, 220, 201, 202, 221, 220, 203, 218, 199, 203, 222, 218, 204, 219, 200, 204, 223, 219, 205, 221, 202, 205, 224, 221, 206, 223, 204, 206, 210, 223, 207, 224, 205, 207, 212, 224, 222, 225, 218, 222, 226, 225, 223, 227, 219, 223, 228, 227, 224, 229, 221, 224, 230, 229, 210, 228, 223, 210, 231, 228, 212, 230, 224, 212, 232, 230, 211, 231, 210, 211, 233, 231, 213, 232, 212, 213, 234, 232, 214, 233, 211, 214, 235, 233, 215, 234, 213, 215, 236, 234, 216, 235, 214, 216, 237, 235, 217, 236, 215, 217, 238, 236, 218, 237, 216, 218, 225, 237, 219, 238, 217, 219, 227, 238, 221, 239, 220, 221, 229, 239, 237, 240, 235, 237, 241, 240, 238, 242, 236, 238, 243, 242, 225, 241, 237, 225, 244, 241, 227, 243, 238, 227, 245, 243, 229, 246, 239, 229, 247, 246, 226, 244, 225, 226, 248, 244, 228, 245, 227, 228, 249, 245, 230, 247, 229, 230, 250, 247, 231, 249, 228, 231, 251, 249, 232, 250, 230, 232, 252, 250, 233, 251, 231, 233, 253, 251, 234, 252, 232, 234, 254, 252, 235, 253, 233, 235, 240, 253, 236, 254, 234, 236, 242, 254, 253, 255, 251, 253, 256, 255, 254, 257, 252, 254, 258, 257, 240, 256, 253, 240, 259, 256, 242, 258, 254, 242, 260, 258, 241, 259, 240, 241, 261, 259, 243, 260, 242, 243, 262, 260, 244, 261, 241, 244, 263, 261, 245, 262, 243, 245, 264, 262, 247, 265, 246, 247, 266, 265, 248, 263, 244, 248, 267, 263, 249, 264, 245, 249, 268, 264, 250, 266, 247, 250, 269, 266, 251, 268, 249, 251, 255, 268, 252, 269, 250, 252, 257, 269, 267, 270, 263, 267, 271, 270, 268, 272, 264, 268, 273, 272, 269, 274, 266, 269, 275, 274, 255, 273, 268, 255, 276, 273, 257, 275, 269, 257, 277, 275, 256, 276, 255, 256, 278, 276, 258, 277, 257, 258, 279, 277, 259, 278, 256, 259, 280, 278, 260, 279, 258, 260, 281, 279, 261, 280, 259, 261, 282, 280, 262, 281, 260, 262, 283, 281, 263, 282, 261, 263, 270, 282, 264, 283, 262, 264, 272, 283, 266, 284, 265, 266, 274, 284, 282, 285, 280, 282, 286, 285, 283, 287, 281, 283, 288, 287, 270, 286, 282, 270, 289, 286, 272, 288, 283, 272, 290, 288, 274, 291, 284, 274, 292, 291, 271, 289, 270, 271, 293, 289, 273, 290, 272, 273, 294, 290, 275, 292, 274, 275, 295, 292, 276, 294, 273, 276, 296, 294, 277, 295, 275, 277, 297, 295, 278, 296, 276, 278, 298, 296, 279, 297, 277, 279, 299, 297, 280, 298, 278, 280, 285, 298, 281, 299, 279, 281, 287, 299, 297, 300, 295, 297, 301, 300, 298, 302, 296, 298, 303, 302, 299, 301, 297, 299, 304, 301, 285, 303, 298, 285, 305, 303, 287, 304, 299, 287, 306, 304, 286, 305, 285, 286, 307, 305, 288, 306, 287, 288, 308, 306, 289, 307, 286, 289, 309, 307, 290, 308, 288, 290, 310, 308, 292, 311, 291, 292, 312, 311, 293, 309, 289, 293, 313, 309, 294, 310, 290, 294, 314, 310, 295, 312, 292, 295, 300, 312, 296, 314, 294, 296, 302, 314, 310, 315, 308, 310, 316, 315, 312, 317, 311, 312, 318, 317, 313, 319, 309, 313, 320, 319, 314, 316, 310, 314, 321, 316, 300, 318, 312, 300, 322, 318, 302, 321, 314, 302, 323, 321, 301, 322, 300, 301, 324, 322, 303, 323, 302, 303, 325, 323, 304, 324, 301, 304, 326, 324, 305, 325, 303, 305, 327, 325, 306, 326, 304, 306, 328, 326, 307, 327, 305, 307, 329, 327, 308, 328, 306, 308, 315, 328, 309, 329, 307, 309, 319, 329, 327, 330, 325, 327, 331, 330, 328, 332, 326, 328, 333, 332, 329, 331, 327, 329, 334, 331, 315, 333, 328, 315, 335, 333, 319, 334, 329, 319, 336, 334, 316, 335, 315, 316, 337, 335, 318, 338, 317, 318, 339, 338, 320, 336, 319, 320, 340, 336, 321, 337, 316, 321, 341, 337, 322, 339, 318, 322, 342, 339, 323, 341, 321, 323, 343, 341, 324, 342, 322, 324, 344, 342, 325, 343, 323, 325, 330, 343, 326, 344, 324, 326, 332, 344, 343, 345, 341, 343, 346, 345, 344, 347, 342, 344, 348, 347, 330, 346, 343, 330, 349, 346, 332, 348, 344, 332, 350, 348, 331, 349, 330, 331, 351, 349, 333, 350, 332, 333, 352, 350, 334, 351, 331, 334, 353, 351, 335, 352, 333, 335, 354, 352, 336, 353, 334, 336, 355, 353, 337, 354, 335, 337, 356, 354, 339, 357, 338, 339, 358, 357, 340, 355, 336, 340, 359, 355, 341, 356, 337, 341, 345, 356, 342, 358, 339, 342, 347, 358, 355, 360, 353, 355, 361, 360, 356, 362, 354, 356, 363, 362, 358, 364, 357, 358, 365, 364, 359, 361, 355, 359, 366, 361, 345, 363, 356, 345, 367, 363, 347, 365, 358, 347, 368, 365, 346, 367, 345, 346, 369, 367, 348, 368, 347, 348, 370, 368, 349, 369, 346, 349, 371, 369, 350, 370, 348, 350, 372, 370, 351, 371, 349, 351, 373, 371, 352, 372, 350, 352, 374, 372, 353, 373, 351, 353, 360, 373, 354, 374, 352, 354, 362, 374, 373, 375, 371, 373, 376, 375, 374, 377, 372, 374, 378, 377, 360, 376, 373, 360, 379, 376, 362, 378, 374, 362, 380, 378, 361, 379, 360, 361, 381, 379, 363, 380, 362, 363, 382, 380, 365, 383, 364, 365, 384, 383, 366, 381, 361, 366, 385, 381, 367, 382, 363, 367, 386, 382, 368, 384, 365, 368, 387, 384, 369, 386, 367, 369, 388, 386, 370, 387, 368, 370, 389, 387, 371, 388, 369, 371, 375, 388, 372, 389, 370, 372, 377, 389, 388, 390, 386, 388, 391, 390, 389, 392, 387, 389, 393, 392, 375, 391, 388, 375, 394, 391, 377, 393, 389, 377, 395, 393, 376, 394, 375, 376, 396, 394, 378, 395, 377, 378, 397, 395, 379, 396, 376, 379, 398, 396, 380, 397, 378, 380, 399, 397, 381, 398, 379, 381, 400, 398, 382, 399, 380, 382, 401, 399, 384, 402, 383, 384, 403, 402, 385, 400, 381, 385, 404, 400, 386, 401, 382, 386, 390, 401, 387, 403, 384, 387, 392, 403, 400, 405, 398, 400, 406, 405, 401, 407, 399, 401, 408, 407, 403, 409, 402, 403, 410, 409, 404, 406, 400, 404, 411, 406, 390, 408, 401, 390, 412, 408, 392, 410, 403, 392, 413, 410, 391, 412, 390, 391, 414, 412, 393, 413, 392, 393, 415, 413, 394, 414, 391, 394, 416, 414, 395, 415, 393, 395, 417, 415, 396, 416, 394, 396, 418, 416, 397, 417, 395, 397, 419, 417, 398, 418, 396, 398, 405, 418, 399, 419, 397, 399, 407, 419, 418, 420, 416, 418, 421, 420, 419, 422, 417, 419, 423, 422, 405, 421, 418, 405, 424, 421, 407, 423, 419, 407, 425, 423, 406, 424, 405, 406, 426, 424, 408, 425, 407, 408, 427, 425, 410, 428, 409, 410, 429, 428, 411, 426, 406, 411, 430, 426, 412, 427, 408, 412, 431, 427, 413, 429, 410, 413, 432, 429, 414, 431, 412, 414, 433, 431, 415, 432, 413, 415, 434, 432, 416, 433, 414, 416, 420, 433, 417, 434, 415, 417, 422, 434, 432, 435, 429, 432, 436, 435, 433, 437, 431, 433, 438, 437, 434, 436, 432, 434, 439, 436, 420, 438, 433, 420, 440, 438, 422, 439, 434, 422, 441, 439, 421, 440, 420, 421, 442, 440, 423, 441, 422, 423, 443, 441, 424, 442, 421, 424, 444, 442, 425, 443, 423, 425, 445, 443, 426, 444, 424, 426, 446, 444, 427, 445, 425, 427, 447, 445, 429, 448, 428, 429, 435, 448, 430, 446, 426, 430, 449, 446, 431, 447, 427, 431, 437, 447, 445, 450, 443, 445, 451, 450, 446, 452, 444, 446, 453, 452, 447, 451, 445, 447, 454, 451, 435, 455, 448, 435, 456, 455, 449, 453, 446, 449, 457, 453, 437, 454, 447, 437, 458, 454, 436, 456, 435, 436, 459, 456, 438, 458, 437, 438, 460, 458, 439, 459, 436, 439, 461, 459, 440, 460, 438, 440, 462, 460, 441, 461, 439, 441, 463, 461, 442, 462, 440, 442, 464, 462, 443, 463, 441, 443, 450, 463, 444, 464, 442, 444, 452, 464, 462, 465, 460, 462, 466, 465, 463, 467, 461, 463, 468, 467, 464, 466, 462, 464, 469, 466, 450, 468, 463, 450, 470, 468, 452, 469, 464, 452, 471, 469, 451, 470, 450, 451, 472, 470, 453, 471, 452, 453, 473, 471, 454, 472, 451, 454, 474, 472, 456, 475, 455, 456, 476, 475, 457, 473, 453, 457, 477, 473, 458, 474, 454, 458, 478, 474, 459, 476, 456, 459, 479, 476, 460, 478, 458, 460, 465, 478, 461, 479, 459, 461, 467, 479, 477, 480, 473, 477, 481, 480, 478, 482, 474, 478, 483, 482, 479, 484, 476, 479, 485, 484, 465, 483, 478, 465, 486, 483, 467, 485, 479, 467, 487, 485, 466, 486, 465, 466, 488, 486, 468, 487, 467, 468, 489, 487, 469, 488, 466, 469, 490, 488, 470, 489, 468, 470, 491, 489, 471, 490, 469, 471, 492, 490, 472, 491, 470, 472, 493, 491, 473, 492, 471, 473, 480, 492, 474, 493, 472, 474, 482, 493, 476, 494, 475, 476, 484, 494, 495, 13, 12, 9, 10, 496, 10, 42, 496, 495, 497, 13, 495, 498, 497, 42, 49, 496, 49, 499, 496, 495, 500, 498, 495, 501, 500, 499, 502, 496, 495, 503, 501, 502, 504, 496, 504, 145, 496, 495, 148, 503, 495, 149, 148, 145, 146, 496, 146, 154, 496, 495, 156, 149, 154, 174, 496, 495, 176, 156, 495, 194, 176, 174, 193, 496, 193, 201, 496, 495, 203, 194, 201, 220, 496, 495, 222, 203, 495, 226, 222, 220, 239, 496, 239, 246, 496, 495, 248, 226, 246, 265, 496, 495, 267, 248, 495, 271, 267, 265, 284, 496, 284, 291, 496, 495, 293, 271, 291, 311, 496, 495, 313, 293, 495, 320, 313, 311, 317, 496, 317, 338, 496, 495, 340, 320, 495, 359, 340, 338, 357, 496, 495, 366, 359, 357, 364, 496, 364, 383, 496, 495, 385, 366, 495, 404, 385, 383, 402, 496, 495, 411, 404, 402, 409, 496, 409, 428, 496, 495, 430, 411, 495, 449, 430, 428, 448, 496, 448, 455, 496, 495, 457, 449, 455, 475, 496, 495, 477, 457, 495, 481, 477, 475, 494, 496, 492, 26, 490, 492, 1, 26, 493, 28, 491, 493, 5, 28, 496, 494, 9, 480, 1, 492, 480, 0, 1, 482, 5, 493, 482, 4, 5, 9, 484, 8, 9, 494, 484, 481, 0, 480, 481, 12, 0, 483, 4, 482, 483, 14, 4, 485, 8, 484, 485, 16, 8, 495, 12, 481, 486, 14, 483, 486, 18, 14, 487, 16, 485, 487, 20, 16, 488, 18, 486, 488, 22, 18, 489, 20, 487, 489, 24, 20, 490, 22, 488, 490, 26, 22, 491, 24, 489, 491, 28, 24, 505, 507, 506, 505, 508, 507, 509, 511, 510, 509, 512, 511, 513, 515, 514, 513, 516, 515, 517, 519, 518, 517, 520, 519, 521, 523, 522, 521, 524, 523, 525, 527, 526, 525, 528, 527 </int_array>
- </array>
- </dictionary>
-
- </main_resource>
-</resource_file> \ No newline at end of file
diff --git a/demos/3d/shader_materials/sb.cube b/demos/3d/shader_materials/sb.cube
deleted file mode 100644
index c5e4acbcd4..0000000000
--- a/demos/3d/shader_materials/sb.cube
+++ /dev/null
@@ -1,7 +0,0 @@
-sb_left.png
-sb_right.png
-sb_bottom.png
-sb_top.png
-sb_back.png
-sb_front.png
-
diff --git a/demos/3d/shader_materials/sb_back.png b/demos/3d/shader_materials/sb_back.png
deleted file mode 100644
index 85ba234654..0000000000
--- a/demos/3d/shader_materials/sb_back.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/shader_materials/sb_bottom.png b/demos/3d/shader_materials/sb_bottom.png
deleted file mode 100644
index 46cb8fd765..0000000000
--- a/demos/3d/shader_materials/sb_bottom.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/shader_materials/sb_front.png b/demos/3d/shader_materials/sb_front.png
deleted file mode 100644
index 0ddaede187..0000000000
--- a/demos/3d/shader_materials/sb_front.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/shader_materials/sb_left.png b/demos/3d/shader_materials/sb_left.png
deleted file mode 100644
index a548d7ef13..0000000000
--- a/demos/3d/shader_materials/sb_left.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/shader_materials/sb_right.png b/demos/3d/shader_materials/sb_right.png
deleted file mode 100644
index 36ac03db3a..0000000000
--- a/demos/3d/shader_materials/sb_right.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/shader_materials/sb_top.png b/demos/3d/shader_materials/sb_top.png
deleted file mode 100644
index af7274447e..0000000000
--- a/demos/3d/shader_materials/sb_top.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/shader_materials/shader_materials.scn b/demos/3d/shader_materials/shader_materials.scn
deleted file mode 100644
index 7eb43cda0d..0000000000
--- a/demos/3d/shader_materials/shader_materials.scn
+++ /dev/null
Binary files differ
diff --git a/demos/3d/shader_materials/tournesol.png b/demos/3d/shader_materials/tournesol.png
deleted file mode 100644
index 54b391fc36..0000000000
--- a/demos/3d/shader_materials/tournesol.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/truck_town/car_base.scn b/demos/3d/truck_town/car_base.scn
deleted file mode 100644
index acfbfae162..0000000000
--- a/demos/3d/truck_town/car_base.scn
+++ /dev/null
Binary files differ
diff --git a/demos/3d/truck_town/car_select.gd b/demos/3d/truck_town/car_select.gd
deleted file mode 100644
index 4efcf63426..0000000000
--- a/demos/3d/truck_town/car_select.gd
+++ /dev/null
@@ -1,32 +0,0 @@
-
-extends Control
-
-# Member variables
-var town = null
-
-
-func _back():
- town.queue_free()
- show()
-
-
-func _load_scene(car):
- var tt = load(car).instance()
- tt.set_name("car")
- town = load("res://truck_scene.scn").instance()
- town.get_node("instance_pos").add_child(tt)
- town.get_node("back").connect("pressed", self, "_back")
- get_parent().add_child(town)
- hide()
-
-
-func _on_van_1_pressed():
- _load_scene("res://car_base.scn")
-
-
-func _on_van_2_pressed():
- _load_scene("res://trailer_truck.scn")
-
-
-func _on_van_3_pressed():
- _load_scene("res://crane.scn")
diff --git a/demos/3d/truck_town/car_select.scn b/demos/3d/truck_town/car_select.scn
deleted file mode 100644
index d838e995b2..0000000000
--- a/demos/3d/truck_town/car_select.scn
+++ /dev/null
Binary files differ
diff --git a/demos/3d/truck_town/cement.tex b/demos/3d/truck_town/cement.tex
deleted file mode 100644
index a80cde6464..0000000000
--- a/demos/3d/truck_town/cement.tex
+++ /dev/null
Binary files differ
diff --git a/demos/3d/truck_town/choose_tow.png b/demos/3d/truck_town/choose_tow.png
deleted file mode 100644
index 8f92833450..0000000000
--- a/demos/3d/truck_town/choose_tow.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/truck_town/choose_trailer.png b/demos/3d/truck_town/choose_trailer.png
deleted file mode 100644
index ead3330296..0000000000
--- a/demos/3d/truck_town/choose_trailer.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/truck_town/choose_van.png b/demos/3d/truck_town/choose_van.png
deleted file mode 100644
index 1ecdd54372..0000000000
--- a/demos/3d/truck_town/choose_van.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/truck_town/crane.scn b/demos/3d/truck_town/crane.scn
deleted file mode 100644
index dfddd97882..0000000000
--- a/demos/3d/truck_town/crane.scn
+++ /dev/null
Binary files differ
diff --git a/demos/3d/truck_town/engine.cfg b/demos/3d/truck_town/engine.cfg
deleted file mode 100644
index b2a463e1e2..0000000000
--- a/demos/3d/truck_town/engine.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[application]
-
-name="Truck Town"
-main_scene="res://car_select.scn"
-icon="res://icon.png"
-
-[display]
-
-width=1280
-height=720
-
-[rasterizer]
-
-shadow_filter=3
diff --git a/demos/3d/truck_town/follow_camera.gd b/demos/3d/truck_town/follow_camera.gd
deleted file mode 100644
index 7c6a0a2ba6..0000000000
--- a/demos/3d/truck_town/follow_camera.gd
+++ /dev/null
@@ -1,57 +0,0 @@
-
-extends Camera
-
-# Member variables
-var collision_exception = []
-export var min_distance = 0.5
-export var max_distance = 4.0
-export var angle_v_adjust = 0.0
-export var autoturn_ray_aperture = 25
-export var autoturn_speed = 50
-var max_height = 2.0
-var min_height = 0
-
-
-func _fixed_process(dt):
- var target = get_parent().get_global_transform().origin
- var pos = get_global_transform().origin
- var up = Vector3(0, 1, 0)
-
- var delta = pos - target
-
- # Regular delta follow
-
- # Check ranges
- if (delta.length() < min_distance):
- delta = delta.normalized()*min_distance
- elif (delta.length() > max_distance):
- delta = delta.normalized()*max_distance
-
- # Check upper and lower height
- if ( delta.y > max_height):
- delta.y = max_height
- if ( delta.y < min_height):
- delta.y = min_height
-
- pos = target + delta
-
- look_at_from_pos(pos, target, up)
-
- # Turn a little up or down
- var t = get_transform()
- t.basis = Matrix3(t.basis[0], deg2rad(angle_v_adjust))*t.basis
- set_transform(t)
-
-
-func _ready():
- # Find collision exceptions for ray
- var node = self
- while(node):
- if (node extends RigidBody):
- collision_exception.append(node.get_rid())
- break
- else:
- node = node.get_parent()
- set_fixed_process(true)
- # This detaches the camera transform from the parent spatial node
- set_as_toplevel(true)
diff --git a/demos/3d/truck_town/grass.tex b/demos/3d/truck_town/grass.tex
deleted file mode 100644
index c28d060697..0000000000
--- a/demos/3d/truck_town/grass.tex
+++ /dev/null
Binary files differ
diff --git a/demos/3d/truck_town/icon.png b/demos/3d/truck_town/icon.png
deleted file mode 100644
index 7d7bd42116..0000000000
--- a/demos/3d/truck_town/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/3d/truck_town/trailer_truck.scn b/demos/3d/truck_town/trailer_truck.scn
deleted file mode 100644
index 6fcf83e270..0000000000
--- a/demos/3d/truck_town/trailer_truck.scn
+++ /dev/null
Binary files differ
diff --git a/demos/3d/truck_town/truck_scene.scn b/demos/3d/truck_town/truck_scene.scn
deleted file mode 100644
index 0c1be13ce2..0000000000
--- a/demos/3d/truck_town/truck_scene.scn
+++ /dev/null
Binary files differ
diff --git a/demos/3d/truck_town/trucktown.scn b/demos/3d/truck_town/trucktown.scn
deleted file mode 100644
index 4a8f7e7e52..0000000000
--- a/demos/3d/truck_town/trucktown.scn
+++ /dev/null
Binary files differ
diff --git a/demos/3d/truck_town/vehicle.gd b/demos/3d/truck_town/vehicle.gd
deleted file mode 100644
index c4224577c6..0000000000
--- a/demos/3d/truck_town/vehicle.gd
+++ /dev/null
@@ -1,45 +0,0 @@
-
-extends VehicleBody
-
-# Member variables
-const STEER_SPEED = 1
-const STEER_LIMIT = 0.4
-
-var steer_angle = 0
-var steer_target = 0
-
-export var engine_force = 40
-
-
-func _fixed_process(delta):
- if (Input.is_action_pressed("ui_left")):
- steer_target = -STEER_LIMIT
- elif (Input.is_action_pressed("ui_right")):
- steer_target = STEER_LIMIT
- else:
- steer_target = 0
-
- if (Input.is_action_pressed("ui_up")):
- set_engine_force(engine_force)
- else:
- set_engine_force(0)
-
- if (Input.is_action_pressed("ui_down")):
- set_brake(1)
- else:
- set_brake(0.0)
-
- if (steer_target < steer_angle):
- steer_angle -= STEER_SPEED*delta
- if (steer_target > steer_angle):
- steer_angle = steer_target
- elif (steer_target > steer_angle):
- steer_angle += STEER_SPEED*delta
- if (steer_target < steer_angle):
- steer_angle = steer_target
-
- set_steering(steer_angle)
-
-
-func _ready():
- set_fixed_process(true)
diff --git a/demos/LICENSE.md b/demos/LICENSE.md
deleted file mode 100644
index 2f3e879c8c..0000000000
--- a/demos/LICENSE.md
+++ /dev/null
@@ -1,27 +0,0 @@
- GODOT ENGINE
- http://www.godotengine.org
-
-************************************************************************
-
- Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur.
-
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
-
- The above copyright notice and this permission notice shall be
- included in all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-************************************************************************
diff --git a/demos/gui/drag_and_drop/drag_and_drop.scn b/demos/gui/drag_and_drop/drag_and_drop.scn
deleted file mode 100644
index 9dec254ef7..0000000000
--- a/demos/gui/drag_and_drop/drag_and_drop.scn
+++ /dev/null
Binary files differ
diff --git a/demos/gui/drag_and_drop/drag_drop_script.gd b/demos/gui/drag_and_drop/drag_drop_script.gd
deleted file mode 100644
index 719c42fe8f..0000000000
--- a/demos/gui/drag_and_drop/drag_drop_script.gd
+++ /dev/null
@@ -1,20 +0,0 @@
-
-extends ColorPickerButton
-
-
-func get_drag_data(pos):
- # Use another colorpicker as drag preview
- var cpb = ColorPickerButton.new()
- cpb.set_color(get_color())
- cpb.set_size(Vector2(50, 50))
- set_drag_preview(cpb)
- # Return color as drag data
- return get_color()
-
-
-func can_drop_data(pos, data):
- return typeof(data) == TYPE_COLOR
-
-
-func drop_data(pos, data):
- set_color(data)
diff --git a/demos/gui/drag_and_drop/engine.cfg b/demos/gui/drag_and_drop/engine.cfg
deleted file mode 100644
index 49b9b93512..0000000000
--- a/demos/gui/drag_and_drop/engine.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-[application]
-
-name="Drag &amp; Drop (GUI)"
-main_scene="res://drag_and_drop.scn"
-icon="res://icon.png"
diff --git a/demos/gui/drag_and_drop/icon.png b/demos/gui/drag_and_drop/icon.png
deleted file mode 100644
index f900d8d4a3..0000000000
--- a/demos/gui/drag_and_drop/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/gui/input_mapping/controls.gd b/demos/gui/input_mapping/controls.gd
deleted file mode 100644
index f337353796..0000000000
--- a/demos/gui/input_mapping/controls.gd
+++ /dev/null
@@ -1,56 +0,0 @@
-
-extends Control
-
-# Note for the reader:
-#
-# This demo conveniently uses the same names for actions and for the container nodes
-# that hold each remapping button. This allow to get back to the button based simply
-# on the name of the corresponding action, but it might not be so simple in your project.
-#
-# A better approach for large-scale input remapping might be to do the connections between
-# buttons and wait_for_input through the code, passing as arguments both the name of the
-# action and the node, e.g.:
-# button.connect("pressed", self, "wait_for_input", [ button, action ])
-
-# Member variables
-var player_actions = [ "move_up", "move_down", "move_left", "move_right", "jump" ]
-var action # To register the action the UI is currently handling
-var button # Button node corresponding to the above action
-
-
-func wait_for_input(action_bind):
- action = action_bind
- # See note at the beginning of the script
- button = get_node("bindings").get_node(action).get_node("Button")
- get_node("contextual_help").set_text("Press a key to assign to the '" + action + "' action.")
- set_process_input(true)
-
-
-func _input(event):
- # Handle the first pressed key
- if (event.type == InputEvent.KEY):
- # Register the event as handled and stop polling
- get_tree().set_input_as_handled()
- set_process_input(false)
- # Reinitialise the contextual help label
- get_node("contextual_help").set_text("Click a key binding to reassign it, or press the Cancel action.")
- if (not event.is_action("ui_cancel")):
- # Display the string corresponding to the pressed key
- button.set_text(OS.get_scancode_string(event.scancode))
- # Start by removing previously key binding(s)
- for old_event in InputMap.get_action_list(action):
- InputMap.action_erase_event(action, old_event)
- # Add the new key binding
- InputMap.action_add_event(action, event)
-
-
-func _ready():
- # Initialise each button with the default key binding from InputMap
- var input_event
- for action in player_actions:
- # We assume that the key binding that we want is the first one (0), if there are several
- input_event = InputMap.get_action_list(action)[0]
- # See note at the beginning of the script
- var button = get_node("bindings").get_node(action).get_node("Button")
- button.set_text(OS.get_scancode_string(input_event.scancode))
- button.connect("pressed", self, "wait_for_input", [action])
diff --git a/demos/gui/input_mapping/controls.scn b/demos/gui/input_mapping/controls.scn
deleted file mode 100644
index 7894212fb7..0000000000
--- a/demos/gui/input_mapping/controls.scn
+++ /dev/null
Binary files differ
diff --git a/demos/gui/input_mapping/engine.cfg b/demos/gui/input_mapping/engine.cfg
deleted file mode 100644
index 811635ce25..0000000000
--- a/demos/gui/input_mapping/engine.cfg
+++ /dev/null
@@ -1,18 +0,0 @@
-[application]
-
-name="Input Mapping GUI"
-main_scene="res://controls.scn"
-icon="res://icon.png"
-
-[display]
-
-width=640
-height=480
-
-[input]
-
-move_up=[key(Up)]
-move_down=[key(Down)]
-move_left=[key(Left)]
-move_right=[key(Right)]
-jump=[key(Space)]
diff --git a/demos/gui/input_mapping/icon.png b/demos/gui/input_mapping/icon.png
deleted file mode 100644
index 5a1abf4f58..0000000000
--- a/demos/gui/input_mapping/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/gui/rich_text_bbcode/OFL.txt b/demos/gui/rich_text_bbcode/OFL.txt
deleted file mode 100644
index 723d4560b9..0000000000
--- a/demos/gui/rich_text_bbcode/OFL.txt
+++ /dev/null
@@ -1,92 +0,0 @@
-Copyright (c) 2009-2011 by Accademia di Belle Arti di Urbino and students of MA course of Visual design. Some rights reserved.
-This Font Software is licensed under the SIL Open Font License, Version 1.1.
-This license is copied below, and is also available with a FAQ at:
-http://scripts.sil.org/OFL
-
-
------------------------------------------------------------
-SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
------------------------------------------------------------
-
-PREAMBLE
-The goals of the Open Font License (OFL) are to stimulate worldwide
-development of collaborative font projects, to support the font creation
-efforts of academic and linguistic communities, and to provide a free and
-open framework in which fonts may be shared and improved in partnership
-with others.
-
-The OFL allows the licensed fonts to be used, studied, modified and
-redistributed freely as long as they are not sold by themselves. The
-fonts, including any derivative works, can be bundled, embedded,
-redistributed and/or sold with any software provided that any reserved
-names are not used by derivative works. The fonts and derivatives,
-however, cannot be released under any other type of license. The
-requirement for fonts to remain under this license does not apply
-to any document created using the fonts or their derivatives.
-
-DEFINITIONS
-"Font Software" refers to the set of files released by the Copyright
-Holder(s) under this license and clearly marked as such. This may
-include source files, build scripts and documentation.
-
-"Reserved Font Name" refers to any names specified as such after the
-copyright statement(s).
-
-"Original Version" refers to the collection of Font Software components as
-distributed by the Copyright Holder(s).
-
-"Modified Version" refers to any derivative made by adding to, deleting,
-or substituting -- in part or in whole -- any of the components of the
-Original Version, by changing formats or by porting the Font Software to a
-new environment.
-
-"Author" refers to any designer, engineer, programmer, technical
-writer or other person who contributed to the Font Software.
-
-PERMISSION & CONDITIONS
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of the Font Software, to use, study, copy, merge, embed, modify,
-redistribute, and sell modified and unmodified copies of the Font
-Software, subject to the following conditions:
-
-1) Neither the Font Software nor any of its individual components,
-in Original or Modified Versions, may be sold by itself.
-
-2) Original or Modified Versions of the Font Software may be bundled,
-redistributed and/or sold with any software, provided that each copy
-contains the above copyright notice and this license. These can be
-included either as stand-alone text files, human-readable headers or
-in the appropriate machine-readable metadata fields within text or
-binary files as long as those fields can be easily viewed by the user.
-
-3) No Modified Version of the Font Software may use the Reserved Font
-Name(s) unless explicit written permission is granted by the corresponding
-Copyright Holder. This restriction only applies to the primary font name as
-presented to the users.
-
-4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
-Software shall not be used to promote, endorse or advertise any
-Modified Version, except to acknowledge the contribution(s) of the
-Copyright Holder(s) and the Author(s) or with their explicit written
-permission.
-
-5) The Font Software, modified or unmodified, in part or in whole,
-must be distributed entirely under this license, and must not be
-distributed under any other license. The requirement for fonts to
-remain under this license does not apply to any document created
-using the Font Software.
-
-TERMINATION
-This license becomes null and void if any of the above conditions are
-not met.
-
-DISCLAIMER
-THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
-OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
-COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
-DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
-OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/demos/gui/rich_text_bbcode/TitilliumWeb-Bold.ttf b/demos/gui/rich_text_bbcode/TitilliumWeb-Bold.ttf
deleted file mode 100644
index 0af0fe7d27..0000000000
--- a/demos/gui/rich_text_bbcode/TitilliumWeb-Bold.ttf
+++ /dev/null
Binary files differ
diff --git a/demos/gui/rich_text_bbcode/TitilliumWeb-BoldItalic.ttf b/demos/gui/rich_text_bbcode/TitilliumWeb-BoldItalic.ttf
deleted file mode 100644
index 77425eaab6..0000000000
--- a/demos/gui/rich_text_bbcode/TitilliumWeb-BoldItalic.ttf
+++ /dev/null
Binary files differ
diff --git a/demos/gui/rich_text_bbcode/TitilliumWeb-Italic.ttf b/demos/gui/rich_text_bbcode/TitilliumWeb-Italic.ttf
deleted file mode 100644
index 42f2c10f18..0000000000
--- a/demos/gui/rich_text_bbcode/TitilliumWeb-Italic.ttf
+++ /dev/null
Binary files differ
diff --git a/demos/gui/rich_text_bbcode/TitilliumWeb-Regular.ttf b/demos/gui/rich_text_bbcode/TitilliumWeb-Regular.ttf
deleted file mode 100644
index 6da821935d..0000000000
--- a/demos/gui/rich_text_bbcode/TitilliumWeb-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/demos/gui/rich_text_bbcode/engine.cfg b/demos/gui/rich_text_bbcode/engine.cfg
deleted file mode 100644
index 5f68b6a0e6..0000000000
--- a/demos/gui/rich_text_bbcode/engine.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-[application]
-
-name="Rich Text Label (BBCode)"
-main_scene="res://rich_text_bbcode.scn"
-icon="res://icon.png"
diff --git a/demos/gui/rich_text_bbcode/icon.png b/demos/gui/rich_text_bbcode/icon.png
deleted file mode 100644
index 6db48a3a9b..0000000000
--- a/demos/gui/rich_text_bbcode/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/gui/rich_text_bbcode/rich_text_bbcode.gd b/demos/gui/rich_text_bbcode/rich_text_bbcode.gd
deleted file mode 100644
index 79a08c1303..0000000000
--- a/demos/gui/rich_text_bbcode/rich_text_bbcode.gd
+++ /dev/null
@@ -1,6 +0,0 @@
-
-extends Panel
-
-
-func _on_RichTextLabel_meta_clicked(meta):
- OS.shell_open(meta)
diff --git a/demos/gui/rich_text_bbcode/rich_text_bbcode.scn b/demos/gui/rich_text_bbcode/rich_text_bbcode.scn
deleted file mode 100644
index c908d44dc3..0000000000
--- a/demos/gui/rich_text_bbcode/rich_text_bbcode.scn
+++ /dev/null
Binary files differ
diff --git a/demos/gui/rich_text_bbcode/titilium-bold.fnt b/demos/gui/rich_text_bbcode/titilium-bold.fnt
deleted file mode 100644
index 7920ca743d..0000000000
--- a/demos/gui/rich_text_bbcode/titilium-bold.fnt
+++ /dev/null
Binary files differ
diff --git a/demos/gui/rich_text_bbcode/titilium-bolditalic.fnt b/demos/gui/rich_text_bbcode/titilium-bolditalic.fnt
deleted file mode 100644
index cc2d650d08..0000000000
--- a/demos/gui/rich_text_bbcode/titilium-bolditalic.fnt
+++ /dev/null
Binary files differ
diff --git a/demos/gui/rich_text_bbcode/titilium-italic.fnt b/demos/gui/rich_text_bbcode/titilium-italic.fnt
deleted file mode 100644
index f2e8edf2c2..0000000000
--- a/demos/gui/rich_text_bbcode/titilium-italic.fnt
+++ /dev/null
Binary files differ
diff --git a/demos/gui/rich_text_bbcode/titilium-regular.fnt b/demos/gui/rich_text_bbcode/titilium-regular.fnt
deleted file mode 100644
index fc3b789e11..0000000000
--- a/demos/gui/rich_text_bbcode/titilium-regular.fnt
+++ /dev/null
Binary files differ
diff --git a/demos/gui/rich_text_bbcode/unicorn_icon.png b/demos/gui/rich_text_bbcode/unicorn_icon.png
deleted file mode 100644
index a14517e12b..0000000000
--- a/demos/gui/rich_text_bbcode/unicorn_icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/gui/translation/controls.gd b/demos/gui/translation/controls.gd
deleted file mode 100644
index ae2e26362b..0000000000
--- a/demos/gui/translation/controls.gd
+++ /dev/null
@@ -1,9 +0,0 @@
-
-extends Panel
-
-
-func _on_back_pressed():
- var s = load("res://main.scn")
- var si = s.instance()
- get_parent().add_child(si)
- queue_free()
diff --git a/demos/gui/translation/controls.scn b/demos/gui/translation/controls.scn
deleted file mode 100644
index 055ac90b9b..0000000000
--- a/demos/gui/translation/controls.scn
+++ /dev/null
Binary files differ
diff --git a/demos/gui/translation/engine.cfg b/demos/gui/translation/engine.cfg
deleted file mode 100644
index dcd3d1983d..0000000000
--- a/demos/gui/translation/engine.cfg
+++ /dev/null
@@ -1,10 +0,0 @@
-[application]
-
-name="Translation Demo"
-main_scene="res://main.scn"
-icon="res://icon.png"
-
-[locale]
-
-translations=["res://translations/text.en.xl", "res://translations/text.es.xl", "res://translations/text.ja.xl"]
-translation_remaps={"res://flag_uk.png":["res://flag_spain.png:es", "res://flag_japan.png:ja"]}
diff --git a/demos/gui/translation/flag_japan.png b/demos/gui/translation/flag_japan.png
deleted file mode 100644
index 4cc8267a5c..0000000000
--- a/demos/gui/translation/flag_japan.png
+++ /dev/null
Binary files differ
diff --git a/demos/gui/translation/flag_spain.png b/demos/gui/translation/flag_spain.png
deleted file mode 100644
index 4d00f93593..0000000000
--- a/demos/gui/translation/flag_spain.png
+++ /dev/null
Binary files differ
diff --git a/demos/gui/translation/flag_uk.png b/demos/gui/translation/flag_uk.png
deleted file mode 100644
index 53fbef3d67..0000000000
--- a/demos/gui/translation/flag_uk.png
+++ /dev/null
Binary files differ
diff --git a/demos/gui/translation/icon.png b/demos/gui/translation/icon.png
deleted file mode 100644
index 4be5ac1127..0000000000
--- a/demos/gui/translation/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/gui/translation/main.gd b/demos/gui/translation/main.gd
deleted file mode 100644
index c3e788f82b..0000000000
--- a/demos/gui/translation/main.gd
+++ /dev/null
@@ -1,32 +0,0 @@
-
-extends Panel
-
-
-func _goto_scene():
- var s = load("res://controls.scn")
- var si = s.instance()
- get_parent().add_child(si)
- queue_free()
-
-
-func _on_system_pressed():
- # Will autodetect based on system, then fall back
- # to english if not found
- _goto_scene()
-
-# NOTE: Changing locale will not change the text in the controls,
-# The scene must be reloaded for changes to take effect.
-
-func _on_english_pressed():
- TranslationServer.set_locale("en")
- _goto_scene()
-
-
-func _on_spanish_pressed():
- TranslationServer.set_locale("es")
- _goto_scene()
-
-
-func _on_japanese_pressed():
- TranslationServer.set_locale("ja")
- _goto_scene()
diff --git a/demos/gui/translation/main.scn b/demos/gui/translation/main.scn
deleted file mode 100644
index be833fcdb8..0000000000
--- a/demos/gui/translation/main.scn
+++ /dev/null
Binary files differ
diff --git a/demos/gui/translation/noto.fnt b/demos/gui/translation/noto.fnt
deleted file mode 100644
index e019615f41..0000000000
--- a/demos/gui/translation/noto.fnt
+++ /dev/null
Binary files differ
diff --git a/demos/gui/translation/text.csv b/demos/gui/translation/text.csv
deleted file mode 100644
index 0f4c148b95..0000000000
--- a/demos/gui/translation/text.csv
+++ /dev/null
@@ -1,3 +0,0 @@
-,en,es,ja
-KEY_HELLO,Hello!,Hola!,こんにちは
-KEY_PUSH,Push Me!,Aprétame!,私をプッシュ \ No newline at end of file
diff --git a/demos/gui/translation/translations/text.en.xl b/demos/gui/translation/translations/text.en.xl
deleted file mode 100644
index 7bcba63e71..0000000000
--- a/demos/gui/translation/translations/text.en.xl
+++ /dev/null
Binary files differ
diff --git a/demos/gui/translation/translations/text.es.xl b/demos/gui/translation/translations/text.es.xl
deleted file mode 100644
index 4474d955d5..0000000000
--- a/demos/gui/translation/translations/text.es.xl
+++ /dev/null
Binary files differ
diff --git a/demos/gui/translation/translations/text.ja.xl b/demos/gui/translation/translations/text.ja.xl
deleted file mode 100644
index b3d1f0bf60..0000000000
--- a/demos/gui/translation/translations/text.ja.xl
+++ /dev/null
Binary files differ
diff --git a/demos/misc/autoload/engine.cfg b/demos/misc/autoload/engine.cfg
deleted file mode 100644
index c6ad023013..0000000000
--- a/demos/misc/autoload/engine.cfg
+++ /dev/null
@@ -1,8 +0,0 @@
-[application]
-
-name="Autoload (Singletons)"
-main_scene="res://scene_a.scn"
-
-[autoload]
-
-global="res://global.gd"
diff --git a/demos/misc/autoload/global.gd b/demos/misc/autoload/global.gd
deleted file mode 100644
index 735995e806..0000000000
--- a/demos/misc/autoload/global.gd
+++ /dev/null
@@ -1,36 +0,0 @@
-extends Node
-
-
-# Changing scenes is most easily done using the functions `change_scene`
-# and `change_scene_to` of the SceneTree. This script demonstrates how to
-# change scenes without those helpers.
-
-
-func goto_scene(path):
- # This function will usually be called from a signal callback,
- # or some other function from the running scene.
- # Deleting the current scene at this point might be
- # a bad idea, because it may be inside of a callback or function of it.
- # The worst case will be a crash or unexpected behavior.
-
- # The way around this is deferring the load to a later time, when
- # it is ensured that no code from the current scene is running:
-
- call_deferred("_deferred_goto_scene",path)
-
-
-func _deferred_goto_scene(path):
- # Immediately free the current scene, there is no risk here.
- get_tree().get_current_scene().free()
-
- # Load new scene
- var packed_scene = ResourceLoader.load(path)
-
- # Instance the new scene
- var instanced_scene = packed_scene.instance()
-
- # Add it to the scene tree, as direct child of root
- get_tree().get_root().add_child(instanced_scene)
-
- # Set it as the current scene, only after it has been added to the tree
- get_tree().set_current_scene(instanced_scene)
diff --git a/demos/misc/autoload/scene_a.gd b/demos/misc/autoload/scene_a.gd
deleted file mode 100644
index 03da86d9a0..0000000000
--- a/demos/misc/autoload/scene_a.gd
+++ /dev/null
@@ -1,5 +0,0 @@
-extends Panel
-
-
-func _on_goto_scene_pressed():
- get_node("/root/global").goto_scene("res://scene_b.scn")
diff --git a/demos/misc/autoload/scene_a.scn b/demos/misc/autoload/scene_a.scn
deleted file mode 100644
index eff314e29d..0000000000
--- a/demos/misc/autoload/scene_a.scn
+++ /dev/null
Binary files differ
diff --git a/demos/misc/autoload/scene_b.gd b/demos/misc/autoload/scene_b.gd
deleted file mode 100644
index dea8c4623f..0000000000
--- a/demos/misc/autoload/scene_b.gd
+++ /dev/null
@@ -1,5 +0,0 @@
-extends Panel
-
-
-func _on_goto_scene_pressed():
- get_node("/root/global").goto_scene("res://scene_a.scn")
diff --git a/demos/misc/autoload/scene_b.scn b/demos/misc/autoload/scene_b.scn
deleted file mode 100644
index 4cdb03e90e..0000000000
--- a/demos/misc/autoload/scene_b.scn
+++ /dev/null
Binary files differ
diff --git a/demos/misc/instancing/ball.scn b/demos/misc/instancing/ball.scn
deleted file mode 100644
index 4d6367885e..0000000000
--- a/demos/misc/instancing/ball.scn
+++ /dev/null
Binary files differ
diff --git a/demos/misc/instancing/bowling_ball.png b/demos/misc/instancing/bowling_ball.png
deleted file mode 100644
index 9443cda882..0000000000
--- a/demos/misc/instancing/bowling_ball.png
+++ /dev/null
Binary files differ
diff --git a/demos/misc/instancing/container.png b/demos/misc/instancing/container.png
deleted file mode 100644
index 8e1363ae4c..0000000000
--- a/demos/misc/instancing/container.png
+++ /dev/null
Binary files differ
diff --git a/demos/misc/instancing/container.scn b/demos/misc/instancing/container.scn
deleted file mode 100644
index 0f65daa2ca..0000000000
--- a/demos/misc/instancing/container.scn
+++ /dev/null
Binary files differ
diff --git a/demos/misc/instancing/engine.cfg b/demos/misc/instancing/engine.cfg
deleted file mode 100644
index 76b0c97721..0000000000
--- a/demos/misc/instancing/engine.cfg
+++ /dev/null
@@ -1,9 +0,0 @@
-[application]
-
-name="Scene Instancing Demo"
-main_scene="res://container.scn"
-icon="res://icon.png"
-
-[physics_2d]
-
-default_gravity=300
diff --git a/demos/misc/instancing/icon.png b/demos/misc/instancing/icon.png
deleted file mode 100644
index 79a4283de7..0000000000
--- a/demos/misc/instancing/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/misc/joysticks/diagram.png b/demos/misc/joysticks/diagram.png
deleted file mode 100644
index 3f8ba1f973..0000000000
--- a/demos/misc/joysticks/diagram.png
+++ /dev/null
Binary files differ
diff --git a/demos/misc/joysticks/engine.cfg b/demos/misc/joysticks/engine.cfg
deleted file mode 100644
index 79cda1eeb4..0000000000
--- a/demos/misc/joysticks/engine.cfg
+++ /dev/null
@@ -1,10 +0,0 @@
-[application]
-
-name="Joysticks"
-main_scene="res://joysticks.scn"
-icon="res://icon.png"
-
-[display]
-
-width=550
-height=300
diff --git a/demos/misc/joysticks/icon.png b/demos/misc/joysticks/icon.png
deleted file mode 100644
index 06b0d7532d..0000000000
--- a/demos/misc/joysticks/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/misc/joysticks/indicators.png b/demos/misc/joysticks/indicators.png
deleted file mode 100644
index 90fee48498..0000000000
--- a/demos/misc/joysticks/indicators.png
+++ /dev/null
Binary files differ
diff --git a/demos/misc/joysticks/joysticks.gd b/demos/misc/joysticks/joysticks.gd
deleted file mode 100644
index a6b90241b2..0000000000
--- a/demos/misc/joysticks/joysticks.gd
+++ /dev/null
@@ -1,61 +0,0 @@
-
-extends Node2D
-
-# Joysticks demo, written by Dana Olson <dana@shineuponthee.com>
-#
-# This is a demo of joystick support, and doubles as a testing application
-# inspired by and similar to jstest-gtk.
-#
-# Licensed under the MIT license
-
-# Member variables
-var joy_num
-var cur_joy
-var axis_value
-
-const DEADZONE = 0.2
-
-func _fixed_process(delta):
- # Get the joystick device number from the spinbox
- joy_num = get_node("joy_num").get_value()
-
- # Display the name of the joystick if we haven't already
- if joy_num != cur_joy:
- cur_joy = joy_num
- get_node("joy_name").set_text(Input.get_joy_name(joy_num))
-
- # Loop through the axes and show their current values
- for axis in range(JOY_ANALOG_0_X, JOY_AXIS_MAX):
- axis_value = Input.get_joy_axis(joy_num, axis)
- get_node("axis_prog" + str(axis)).set_value(100*axis_value)
- get_node("axis_val" + str(axis)).set_text(str(axis_value))
- # Show joystick direction indicators
- if (axis <= JOY_ANALOG_1_Y):
- if (abs(axis_value) < DEADZONE):
- get_node("diagram/axes/" + str(axis) + "+").hide()
- get_node("diagram/axes/" + str(axis) + "-").hide()
- elif (axis_value > 0):
- get_node("diagram/axes/" + str(axis) + "+").show()
- else:
- get_node("diagram/axes/" + str(axis) + "-").show()
-
- # Loop through the buttons and highlight the ones that are pressed
- for btn in range(JOY_BUTTON_0, JOY_BUTTON_MAX):
- if (Input.is_joy_button_pressed(joy_num, btn)):
- get_node("btn" + str(btn)).add_color_override("font_color", Color(1, 1, 1, 1))
- get_node("diagram/buttons/" + str(btn)).show()
- else:
- get_node("btn" + str(btn)).add_color_override("font_color", Color(0.2, 0.1, 0.3, 1))
- get_node("diagram/buttons/" + str(btn)).hide()
-
-func _ready():
- set_fixed_process(true)
- Input.connect("joy_connection_changed", self, "_on_joy_connection_changed")
-
-#Called whenever a joystick has been connected or disconnected.
-func _on_joy_connection_changed(device_id, connected):
- if device_id == cur_joy:
- if connected:
- get_node("joy_name").set_text(Input.get_joy_name(device_id))
- else:
- get_node("joy_name").set_text("")
diff --git a/demos/misc/joysticks/joysticks.scn b/demos/misc/joysticks/joysticks.scn
deleted file mode 100644
index 7fc283ca69..0000000000
--- a/demos/misc/joysticks/joysticks.scn
+++ /dev/null
Binary files differ
diff --git a/demos/misc/joysticks/jsdiagram.xscn b/demos/misc/joysticks/jsdiagram.xscn
deleted file mode 100644
index 537ad30278..0000000000
--- a/demos/misc/joysticks/jsdiagram.xscn
+++ /dev/null
@@ -1,115 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<resource_file type="PackedScene" subresource_count="3" version="2.0" version_name="Godot Engine v2.0.alpha.custom_build">
- <ext_resource path="res://indicators.png" type="Texture" index="1"></ext_resource>
- <ext_resource path="res://diagram.png" type="Texture" index="0"></ext_resource>
- <main_resource>
- <dictionary name="_bundled" shared="false">
- <string> "conn_count" </string>
- <int> 0 </int>
- <string> "conns" </string>
- <int_array len="0"> </int_array>
- <string> "editable_instances" </string>
- <array len="0" shared="false">
- </array>
- <string> "names" </string>
- <string_array len="37">
- <string> "diagram" </string>
- <string> "transform/pos" </string>
- <string> "transform/scale" </string>
- <string> "texture" </string>
- <string> "__meta__" </string>
- <string> "Sprite" </string>
- <string> "buttons" </string>
- <string> "Node2D" </string>
- <string> "0" </string>
- <string> "region" </string>
- <string> "region_rect" </string>
- <string> "1" </string>
- <string> "2" </string>
- <string> "3" </string>
- <string> "4" </string>
- <string> "5" </string>
- <string> "6" </string>
- <string> "flip_h" </string>
- <string> "7" </string>
- <string> "8" </string>
- <string> "9" </string>
- <string> "10" </string>
- <string> "11" </string>
- <string> "12" </string>
- <string> "13" </string>
- <string> "flip_v" </string>
- <string> "14" </string>
- <string> "15" </string>
- <string> "axes" </string>
- <string> "0-" </string>
- <string> "0+" </string>
- <string> "1-" </string>
- <string> "1+" </string>
- <string> "3-" </string>
- <string> "3+" </string>
- <string> "2-" </string>
- <string> "2+" </string>
- </string_array>
- <string> "node_count" </string>
- <int> 27 </int>
- <string> "node_paths" </string>
- <array len="0" shared="false">
- </array>
- <string> "nodes" </string>
- <int_array len="453"> -1, -1, 5, 0, -1, 4, 1, 0, 2, 1, 3, 2, 4, 3, 0, 0, 0, 7, 6, -1, 1, 4, 4, 0, 1, 0, 5, 8, -1, 5, 1, 5, 2, 6, 3, 7, 9, 8, 10, 9, 0, 1, 0, 5, 11, -1, 5, 1, 10, 2, 6, 3, 7, 9, 8, 10, 9, 0, 1, 0, 5, 12, -1, 5, 1, 11, 2, 6, 3, 7, 9, 8, 10, 9, 0, 1, 0, 5, 13, -1, 5, 1, 12, 2, 6, 3, 7, 9, 8, 10, 9, 0, 1, 0, 5, 14, -1, 5, 1, 13, 2, 14, 3, 7, 9, 8, 10, 15, 0, 1, 0, 5, 15, -1, 5, 1, 16, 2, 14, 3, 7, 9, 8, 10, 15, 0, 1, 0, 5, 16, -1, 6, 1, 17, 2, 18, 3, 7, 17, 8, 9, 8, 10, 19, 0, 1, 0, 5, 18, -1, 5, 1, 20, 2, 18, 3, 7, 9, 8, 10, 19, 0, 1, 0, 5, 19, -1, 5, 1, 21, 2, 6, 3, 7, 9, 8, 10, 9, 0, 1, 0, 5, 20, -1, 5, 1, 22, 2, 6, 3, 7, 9, 8, 10, 9, 0, 1, 0, 5, 21, -1, 5, 1, 23, 2, 24, 3, 7, 9, 8, 10, 9, 0, 1, 0, 5, 22, -1, 5, 1, 25, 2, 24, 3, 7, 9, 8, 10, 9, 0, 1, 0, 5, 23, -1, 5, 1, 26, 2, 6, 3, 7, 9, 8, 10, 27, 0, 1, 0, 5, 24, -1, 6, 1, 28, 2, 6, 3, 7, 25, 8, 9, 8, 10, 27, 0, 1, 0, 5, 26, -1, 5, 1, 29, 2, 6, 3, 7, 9, 8, 10, 30, 0, 1, 0, 5, 27, -1, 6, 1, 31, 2, 6, 3, 7, 17, 8, 9, 8, 10, 30, 0, 0, 0, 7, 28, -1, 0, 0, 18, 0, 5, 29, -1, 5, 1, 32, 2, 6, 3, 7, 9, 8, 10, 30, 0, 18, 0, 5, 30, -1, 6, 1, 33, 2, 6, 3, 7, 17, 8, 9, 8, 10, 30, 0, 18, 0, 5, 31, -1, 5, 1, 34, 2, 6, 3, 7, 9, 8, 10, 27, 0, 18, 0, 5, 32, -1, 6, 1, 35, 2, 6, 3, 7, 25, 8, 9, 8, 10, 27, 0, 18, 0, 5, 33, -1, 5, 1, 36, 2, 6, 3, 7, 9, 8, 10, 27, 0, 18, 0, 5, 34, -1, 6, 1, 37, 2, 6, 3, 7, 25, 8, 9, 8, 10, 27, 0, 18, 0, 5, 35, -1, 5, 1, 38, 2, 6, 3, 7, 9, 8, 10, 30, 0, 18, 0, 5, 36, -1, 6, 1, 39, 2, 6, 3, 7, 17, 8, 9, 8, 10, 30, 0 </int_array>
- <string> "variants" </string>
- <array len="40" shared="false">
- <vector2> 368.635, 155.289 </vector2>
- <vector2> 0.432859, 0.446287 </vector2>
- <resource external="0"> </resource>
- <dictionary shared="false">
- <string> "__editor_plugin_screen__" </string>
- <string> "2D" </string>
- </dictionary>
- <dictionary shared="false">
- <string> "_editor_collapsed" </string>
- <bool> True </bool>
- </dictionary>
- <vector2> 147.73, 120.925 </vector2>
- <vector2> 0.9, 0.9 </vector2>
- <resource external="1"> </resource>
- <bool> True </bool>
- <rect2> 0, 0, 45, 45 </rect2>
- <vector2> 185.769, 82.4874 </vector2>
- <vector2> 112.377, 82.4874 </vector2>
- <vector2> 149.073, 47.3293 </vector2>
- <vector2> -161.038, -158.037 </vector2>
- <vector2> 5.3348, 3.35512 </vector2>
- <rect2> 10, 10, 10, 10 </rect2>
- <vector2> 159.362, -156.977 </vector2>
- <vector2> -159.349, -221.878 </vector2>
- <vector2> 1.0458, 2.16952 </vector2>
- <rect2> 0, 0, 45, 22 </rect2>
- <vector2> 156.677, -220.11 </vector2>
- <vector2> -67.5308, 164.422 </vector2>
- <vector2> 75.8825, 167.363 </vector2>
- <vector2> -46.6707, 52.702 </vector2>
- <vector2> 0.810497, 0.57205 </vector2>
- <vector2> 56.2581, 54.4382 </vector2>
- <vector2> -139.402, 46.8295 </vector2>
- <rect2> 50, 0, 54, 14 </rect2>
- <vector2> -139.838, 115.789 </vector2>
- <vector2> -172.262, 81.8793 </vector2>
- <rect2> 50, 0, 14, 54 </rect2>
- <vector2> -105.085, 81.0326 </vector2>
- <vector2> -94.4295, 164.932 </vector2>
- <vector2> -40.3475, 164.509 </vector2>
- <vector2> -67.6802, 137.926 </vector2>
- <vector2> -67.4618, 192.915 </vector2>
- <vector2> 76.6557, 140.986 </vector2>
- <vector2> 76.0009, 195.339 </vector2>
- <vector2> 48.8152, 167.145 </vector2>
- <vector2> 102.899, 167.857 </vector2>
- </array>
- <string> "version" </string>
- <int> 2 </int>
- </dictionary>
-
- </main_resource>
-</resource_file> \ No newline at end of file
diff --git a/demos/misc/pause/engine.cfg b/demos/misc/pause/engine.cfg
deleted file mode 100644
index a5cb20cc7f..0000000000
--- a/demos/misc/pause/engine.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-[application]
-
-name="Pause"
-main_scene="res://spinpause.scn"
-icon="res://icon.png"
diff --git a/demos/misc/pause/icon.png b/demos/misc/pause/icon.png
deleted file mode 100644
index 49b3fd4053..0000000000
--- a/demos/misc/pause/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/misc/pause/spinpause.gd b/demos/misc/pause/spinpause.gd
deleted file mode 100644
index ea5617c06f..0000000000
--- a/demos/misc/pause/spinpause.gd
+++ /dev/null
@@ -1,13 +0,0 @@
-
-extends Spatial
-
-
-func _on_pause_pressed():
- get_node("pause_popup").set_exclusive(true)
- get_node("pause_popup").popup()
- get_tree().set_pause(true)
-
-
-func _on_unpause_pressed():
- get_node("pause_popup").hide()
- get_tree().set_pause(false)
diff --git a/demos/misc/pause/spinpause.scn b/demos/misc/pause/spinpause.scn
deleted file mode 100644
index 2cbe85ec9a..0000000000
--- a/demos/misc/pause/spinpause.scn
+++ /dev/null
Binary files differ
diff --git a/demos/misc/regex/engine.cfg b/demos/misc/regex/engine.cfg
deleted file mode 100644
index ef5483e096..0000000000
--- a/demos/misc/regex/engine.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-[application]
-
-name="RegEx"
-main_scene="res://regex.scn"
-icon="res://icon.png"
diff --git a/demos/misc/regex/icon.png b/demos/misc/regex/icon.png
deleted file mode 100644
index 7a5232ec4b..0000000000
--- a/demos/misc/regex/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/misc/regex/regex.gd b/demos/misc/regex/regex.gd
deleted file mode 100644
index 98e5ca8828..0000000000
--- a/demos/misc/regex/regex.gd
+++ /dev/null
@@ -1,28 +0,0 @@
-
-extends VBoxContainer
-
-# Member variables
-var regex = RegEx.new()
-
-
-func update_expression(text):
- regex.compile(text)
- update_text()
-
-
-func update_text():
- var text = get_node("Text").get_text()
- var list = get_node("List")
- for child in list.get_children():
- child.queue_free()
- if regex.is_valid():
- regex.find(text)
- for res in regex.get_captures():
- var label = Label.new()
- label.set_text(res)
- list.add_child(label)
-
-
-func _ready():
- get_node("Text").set_text("They asked me \"What's going on \\\"in the manor\\\"?\"")
- update_expression(get_node("Expression").get_text())
diff --git a/demos/misc/regex/regex.scn b/demos/misc/regex/regex.scn
deleted file mode 100644
index debd55504f..0000000000
--- a/demos/misc/regex/regex.scn
+++ /dev/null
Binary files differ
diff --git a/demos/misc/scene_changer/engine.cfg b/demos/misc/scene_changer/engine.cfg
deleted file mode 100644
index 1ba1a41167..0000000000
--- a/demos/misc/scene_changer/engine.cfg
+++ /dev/null
@@ -1,4 +0,0 @@
-[application]
-
-name="Scene Changer"
-main_scene="res://scene_a.scn"
diff --git a/demos/misc/scene_changer/scene_a.gd b/demos/misc/scene_changer/scene_a.gd
deleted file mode 100644
index 0e80395e84..0000000000
--- a/demos/misc/scene_changer/scene_a.gd
+++ /dev/null
@@ -1,16 +0,0 @@
-
-extends Panel
-
-# Member variables here, example:
-# var a=2
-# var b="textvar"
-
-
-func _ready():
- # Initalization here
- pass
-
-
-func _on_goto_scene_pressed():
- get_tree().change_scene("res://scene_b.scn")
- pass # Replace with function body
diff --git a/demos/misc/scene_changer/scene_a.scn b/demos/misc/scene_changer/scene_a.scn
deleted file mode 100644
index 9a4b6434be..0000000000
--- a/demos/misc/scene_changer/scene_a.scn
+++ /dev/null
Binary files differ
diff --git a/demos/misc/scene_changer/scene_b.gd b/demos/misc/scene_changer/scene_b.gd
deleted file mode 100644
index 9ed13cf26b..0000000000
--- a/demos/misc/scene_changer/scene_b.gd
+++ /dev/null
@@ -1,16 +0,0 @@
-
-extends Panel
-
-# Member variables here, example:
-# var a=2
-# var b="textvar"
-
-
-func _ready():
- # Initalization here
- pass
-
-
-func _on_goto_scene_pressed():
- get_tree().change_scene("res://scene_a.scn")
- pass # Replace with function body
diff --git a/demos/misc/scene_changer/scene_b.scn b/demos/misc/scene_changer/scene_b.scn
deleted file mode 100644
index 4cdb03e90e..0000000000
--- a/demos/misc/scene_changer/scene_b.scn
+++ /dev/null
Binary files differ
diff --git a/demos/misc/threads/engine.cfg b/demos/misc/threads/engine.cfg
deleted file mode 100644
index 6f19936c9d..0000000000
--- a/demos/misc/threads/engine.cfg
+++ /dev/null
@@ -1,4 +0,0 @@
-[application]
-
-name="Loading in a Thread"
-main_scene="res://thread.scn"
diff --git a/demos/misc/threads/mona.png b/demos/misc/threads/mona.png
deleted file mode 100644
index 0bcda570b4..0000000000
--- a/demos/misc/threads/mona.png
+++ /dev/null
Binary files differ
diff --git a/demos/misc/threads/thread.gd b/demos/misc/threads/thread.gd
deleted file mode 100644
index 1ef67e403c..0000000000
--- a/demos/misc/threads/thread.gd
+++ /dev/null
@@ -1,31 +0,0 @@
-
-extends Node2D
-
-# Member variables
-var thread = Thread.new()
-
-
-# This function runs in a thread!
-# Threads always take one userdata argument
-func _bg_load(path):
- print("THREAD FUNC!")
- # Load the resource
- var tex = ResourceLoader.load(path)
- # Call _bg_load_done on main thread
- call_deferred("_bg_load_done")
- return tex # return it
-
-
-func _bg_load_done():
- # Wait for the thread to complete, get the returned value
- var tex = thread.wait_to_finish()
- # Set to the sprite
- get_node("sprite").set_texture(tex)
-
-
-func _on_load_pressed():
- if (thread.is_active()):
- # Already working
- return
- print("START THREAD!")
- thread.start(self, "_bg_load", "res://mona.png")
diff --git a/demos/misc/threads/thread.scn b/demos/misc/threads/thread.scn
deleted file mode 100644
index eea93615c7..0000000000
--- a/demos/misc/threads/thread.scn
+++ /dev/null
Binary files differ
diff --git a/demos/misc/tween/engine.cfg b/demos/misc/tween/engine.cfg
deleted file mode 100644
index 1d87303015..0000000000
--- a/demos/misc/tween/engine.cfg
+++ /dev/null
@@ -1,11 +0,0 @@
-[application]
-
-name="Tween Demo"
-main_scene="res://main.scn"
-icon="res://icon.png"
-target_fps=60
-
-[display]
-
-stretch_mode="2d"
-stretch_aspect="keep_width"
diff --git a/demos/misc/tween/icon.png b/demos/misc/tween/icon.png
deleted file mode 100644
index ed55c24140..0000000000
--- a/demos/misc/tween/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/misc/tween/main.gd b/demos/misc/tween/main.gd
deleted file mode 100644
index b899825d55..0000000000
--- a/demos/misc/tween/main.gd
+++ /dev/null
@@ -1,165 +0,0 @@
-
-extends Control
-
-# Member variables
-var trans = ["linear", "sine", "quint", "quart", "quad", "expo", "elastic", "cubic", "circ", "bounce", "back"]
-var eases = ["in", "out", "in_out", "out_in"]
-var modes = ["move", "color", "scale", "rotate", "callback", "follow", "repeat", "pause"]
-
-var state = {
- trans = Tween.TRANS_LINEAR,
- eases = Tween.EASE_IN,
-}
-
-
-func _ready():
- for index in range(trans.size()):
- var name = trans[index]
- get_node("trans/" + name).connect("pressed", self, "on_trans_changed", [name, index])
-
- for index in range(eases.size()):
- var name = eases[index]
- get_node("eases/" + name).connect("pressed", self, "on_eases_changed", [name, index])
-
- for index in range(modes.size()):
- var name = modes[index]
- get_node("modes/" + name).connect("pressed", self, "on_modes_changed", [name])
-
- get_node("color/color_from").set_color(Color(1, 0, 0, 1))
- get_node("color/color_from").connect("color_changed", self, "on_color_changed")
-
- get_node("color/color_to").set_color(Color(0, 1, 1, 1))
- get_node("color/color_to").connect("color_changed", self, "on_color_changed")
-
- get_node("trans/linear").set_pressed(true)
- get_node("eases/in").set_pressed(true)
- get_node("modes/move").set_pressed(true)
- get_node("modes/repeat").set_pressed(true)
-
- reset_tween()
-
-
-func on_trans_changed(name, index):
- for index in range(trans.size()):
- var pressed = trans[index] == name
- var btn = get_node("trans/" + trans[index])
-
- btn.set_pressed(pressed)
- btn.set_ignore_mouse(pressed)
-
- state.trans = index
- reset_tween()
-
-
-func on_eases_changed(name, index):
- for index in range(eases.size()):
- var pressed = eases[index] == name
- var btn = get_node("eases/" + eases[index])
-
- btn.set_pressed(pressed)
- btn.set_ignore_mouse(pressed)
-
- state.eases = index
- reset_tween()
-
-
-func on_modes_changed(name):
- var tween = get_node("tween")
- if name == "pause":
- if get_node("modes/pause").is_pressed():
- tween.stop_all()
- get_node("timeline").set_ignore_mouse(false)
- else:
- tween.resume_all()
- get_node("timeline").set_ignore_mouse(true)
- else:
- reset_tween()
-
-
-func on_color_changed(color):
- reset_tween()
-
-
-func reset_tween():
- var tween = get_node("tween")
- var pos = tween.tell()
- tween.reset_all()
- tween.remove_all()
-
- var sprite = get_node("tween/area/sprite")
- var follow = get_node("tween/area/follow")
- var follow_2 = get_node("tween/area/follow_2")
- var size = get_node("tween/area").get_size()
-
- if get_node("modes/move").is_pressed():
- tween.interpolate_method(sprite, "set_pos", Vector2(0, 0), Vector2(size.width, size.height), 2, state.trans, state.eases)
- tween.interpolate_property(sprite, "transform/pos", Vector2(size.width, size.height), Vector2(0, 0), 2, state.trans, state.eases, 2)
-
- if get_node("modes/color").is_pressed():
- tween.interpolate_method(sprite, "set_modulate", get_node("color/color_from").get_color(), get_node("color/color_to").get_color(), 2, state.trans, state.eases)
- tween.interpolate_property(sprite, "modulate", get_node("color/color_to").get_color(), get_node("color/color_from").get_color(), 2, state.trans, state.eases, 2)
- else:
- sprite.set_modulate(Color(1,1,1,1))
-
- if get_node("modes/scale").is_pressed():
- tween.interpolate_method(sprite, "set_scale", Vector2(0.5, 0.5), Vector2(1.5, 1.5), 2, state.trans, state.eases)
- tween.interpolate_property(sprite, "transform/scale", Vector2(1.5, 1.5), Vector2(0.5, 0.5), 2, state.trans, state.eases, 2)
- else:
- sprite.set_scale(Vector2(1,1))
-
- if get_node("modes/rotate").is_pressed():
- tween.interpolate_method(sprite, "set_rotd", 0, 360, 2, state.trans, state.eases)
- tween.interpolate_property(sprite, "transform/rot", 360, 0, 2, state.trans, state.eases, 2)
-
- if get_node("modes/callback").is_pressed():
- tween.interpolate_callback(self, 0.5, "on_callback", "0.5 second's after")
- tween.interpolate_callback(self, 0.2, "on_callback", "1.2 second's after")
-
- if get_node("modes/follow").is_pressed():
- follow.show()
- follow_2.show()
-
- tween.follow_method(follow, "set_pos", Vector2(0, size.height), sprite, "get_pos", 2, state.trans, state.eases)
- tween.targeting_method(follow, "set_pos", sprite, "get_pos", Vector2(0, size.height), 2, state.trans, state.eases, 2)
-
- tween.targeting_property(follow_2, "transform/pos", sprite, "transform/pos", Vector2(size.width, 0), 2, state.trans, state.eases)
- tween.follow_property(follow_2, "transform/pos", Vector2(size.width, 0), sprite, "transform/pos", 2, state.trans, state.eases, 2)
- else:
- follow.hide()
- follow_2.hide()
-
- tween.set_repeat(get_node("modes/repeat").is_pressed())
- tween.start()
- tween.seek(pos)
-
- if get_node("modes/pause").is_pressed():
- tween.stop_all()
- get_node("timeline").set_ignore_mouse(false)
- get_node("timeline").set_value(0)
- else:
- tween.resume_all()
- get_node("timeline").set_ignore_mouse(true)
-
-
-func _on_tween_step(object, key, elapsed, value):
- var timeline = get_node("timeline")
-
- var tween = get_node("tween")
- var runtime = tween.get_runtime()
-
- var ratio = 100*(elapsed/runtime)
- timeline.set_value(ratio)
-
-
-func _on_timeline_value_changed(value):
- if !get_node("modes/pause").is_pressed():
- return
-
- var tween = get_node("tween")
- var runtime = tween.get_runtime()
- tween.seek(runtime*value/100)
-
-
-func on_callback(arg):
- var label = get_node("tween/area/label")
- label.add_text("on_callback -> " + arg + "\n")
diff --git a/demos/misc/tween/main.scn b/demos/misc/tween/main.scn
deleted file mode 100644
index 3f25bfd75c..0000000000
--- a/demos/misc/tween/main.scn
+++ /dev/null
Binary files differ
diff --git a/demos/misc/udp_chat/chat.gd b/demos/misc/udp_chat/chat.gd
deleted file mode 100644
index b60afa9ded..0000000000
--- a/demos/misc/udp_chat/chat.gd
+++ /dev/null
@@ -1,66 +0,0 @@
-
-extends Panel
-
-# Really simple UDP chat client, not intended as a comprehensive chat implementation.
-# (UDP can lose packets and you won't normally find out, so don't do a chat this way)
-# This is just a demo that shows how to use the UDP class.
-
-# Member variables
-var udp = PacketPeerUDP.new()
-
-
-func _process(delta):
- if (not udp.is_listening()):
- return
-
- while(udp.get_available_packet_count() > 0):
- var packet = udp.get_var()
- if (typeof(packet) == TYPE_STRING):
- var host = udp.get_packet_ip()
- var port = udp.get_packet_port()
- get_node("chat/text").add_text("(" + host + ":" + str(port) + ":) " + packet)
- get_node("chat/text").newline()
-
-
-func _ready():
- get_node("chat").add_style_override("panel", get_stylebox("bg", "Tree"))
- set_process(true)
-
-
-func send_message(text):
- if (udp.is_listening()):
- udp.put_var(text)
-
-
-func _on_connect_toggled(pressed):
- if (pressed):
- var err = udp.listen(get_node("listen_port").get_val())
- if (err != OK):
- get_node("status").set_text("Error:\nCan't listen.")
- get_node("connect").set_pressed(false)
- else:
- get_node("status").set_text("Connected.")
- get_node("connect").set_text("Disconnect")
- err = udp.set_send_address(get_node("remote_host").get_text(),get_node("remote_port").get_val())
- if (err != OK):
- get_node("status").set_text("Error:\nCan't resolve.")
- get_node("connect").set_pressed(false)
- else:
- send_message("* " + get_node("user_name").get_text() + " entered chat.")
- else:
- udp.close()
- get_node("status").set_text("Disconnected.")
- get_node("connect").set_text("Connect")
-
-
-func _on_entry_line_text_entered(text):
- _on_entry_button_pressed()
-
-
-func _on_entry_button_pressed():
- var msg = get_node("entry_line").get_text()
- if (msg == ""):
- return
- send_message(get_node("user_name").get_text() + "> " + msg)
-
- get_node("entry_line").set_text("")
diff --git a/demos/misc/udp_chat/chat.scn b/demos/misc/udp_chat/chat.scn
deleted file mode 100644
index fe38e9da72..0000000000
--- a/demos/misc/udp_chat/chat.scn
+++ /dev/null
Binary files differ
diff --git a/demos/misc/udp_chat/engine.cfg b/demos/misc/udp_chat/engine.cfg
deleted file mode 100644
index 584841ea83..0000000000
--- a/demos/misc/udp_chat/engine.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-[application]
-
-name="UDP Chat"
-main_scene="res://chat.scn"
-icon="res://icon.png"
diff --git a/demos/misc/udp_chat/icon.png b/demos/misc/udp_chat/icon.png
deleted file mode 100644
index db6e21cce1..0000000000
--- a/demos/misc/udp_chat/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/misc/window_management/control.gd b/demos/misc/window_management/control.gd
deleted file mode 100644
index cd8e0e185b..0000000000
--- a/demos/misc/window_management/control.gd
+++ /dev/null
@@ -1,186 +0,0 @@
-
-extends Control
-
-# Member variables
-var mousepos
-
-
-func _fixed_process(delta):
- var modetext = "Mode:\n"
-
- if(OS.is_window_fullscreen()):
- modetext += "Fullscreen\n"
- else:
- modetext += "Windowed\n"
-
- if(!OS.is_window_resizable()):
- modetext += "FixedSize\n"
-
- if(OS.is_window_minimized()):
- modetext += "Minimized\n"
-
- if(OS.is_window_maximized()):
- modetext += "Maximized\n"
-
- if(Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED):
- modetext += "MouseGrab\n"
- get_node("Label_MouseGrab_KeyInfo").show()
- else:
- get_node("Label_MouseGrab_KeyInfo").hide()
-
- get_node("Label_Mode").set_text(modetext)
-
- get_node("Label_Position").set_text(str("Position:\n", OS.get_window_position()))
-
- get_node("Label_Size").set_text(str("Size:\n", OS.get_window_size()))
-
- get_node("Label_MousePosition").set_text(str("Mouse Position:\n", mousepos))
-
- get_node("Label_Screen_Count").set_text(str("Screen_Count:\n", OS.get_screen_count()))
-
- get_node("Label_Screen_Current").set_text(str("Screen:\n", OS.get_current_screen()))
-
- get_node("Label_Screen0_Resolution").set_text(str("Screen0 Resolution:\n", OS.get_screen_size()))
-
- get_node("Label_Screen0_Position").set_text(str("Screen0 Position:\n", OS.get_screen_position()))
-
- if(OS.get_screen_count() > 1):
- get_node("Button_Screen0").show()
- get_node("Button_Screen1").show()
- get_node("Label_Screen1_Resolution").show()
- get_node("Label_Screen1_Position").show()
- get_node("Label_Screen1_Resolution").set_text(str("Screen1 Resolution:\n", OS.get_screen_size(1)))
- get_node("Label_Screen1_Position").set_text(str("Screen1 Position:\n", OS.get_screen_position(1)))
- else:
- get_node("Button_Screen0").hide()
- get_node("Button_Screen1").hide()
- get_node("Label_Screen1_Resolution").hide()
- get_node("Label_Screen1_Position").hide()
-
- get_node("Button_Fullscreen").set_pressed(OS.is_window_fullscreen())
- get_node("Button_FixedSize").set_pressed(!OS.is_window_resizable())
- get_node("Button_Minimized").set_pressed(OS.is_window_minimized())
- get_node("Button_Maximized").set_pressed(OS.is_window_maximized())
- get_node("Button_Mouse_Grab").set_pressed(Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED)
-
-
-func check_wm_api():
- var s = ""
- if(!OS.has_method("get_screen_count")):
- s += " - get_screen_count()\n"
-
- if(!OS.has_method("get_current_screen")):
- s += " - get_current_screen()\n"
-
- if(!OS.has_method("set_current_screen")):
- s += " - set_current_screen()\n"
-
- if(!OS.has_method("get_screen_position")):
- s += " - get_screen_position()\n"
-
- if(!OS.has_method("get_screen_size")):
- s += " - get_screen_size()\n"
-
- if(!OS.has_method("get_window_position")):
- s += " - get_window_position()\n"
-
- if(!OS.has_method("set_window_position")):
- s += " - set_window_position()\n"
-
- if(!OS.has_method("get_window_size")):
- s += " - get_window_size()\n"
-
- if(!OS.has_method("set_window_size")):
- s += " - set_window_size()\n"
-
- if(!OS.has_method("set_window_fullscreen")):
- s += " - set_window_fullscreen()\n"
-
- if(!OS.has_method("is_window_fullscreen")):
- s += " - is_window_fullscreen()\n"
-
- if(!OS.has_method("set_window_resizable")):
- s += " - set_window_resizable()\n"
-
- if(!OS.has_method("is_window_resizable")):
- s += " - is_window_resizable()\n"
-
- if(!OS.has_method("set_window_minimized")):
- s += " - set_window_minimized()\n"
-
- if(!OS.has_method("is_window_minimized")):
- s += " - is_window_minimized()\n"
-
- if(!OS.has_method("set_window_maximized")):
- s += " - set_window_maximized()\n"
-
- if(!OS.has_method("is_window_maximized")):
- s += " - is_window_maximized()\n"
-
- if(s.length() == 0):
- return true
- else:
- var text = get_node("ImplementationDialog/Text").get_text()
- get_node("ImplementationDialog/Text").set_text(text + s)
- get_node("ImplementationDialog").show()
- return false
-
-
-func _ready():
- if(check_wm_api()):
- set_fixed_process(true)
- set_process_input(true)
-
-
-func _input(event):
- if (event.type == InputEvent.MOUSE_MOTION):
- mousepos = event.pos
-
-
-func _on_Button_MoveTo_pressed():
- OS.set_window_position(Vector2(100, 100))
-
-
-func _on_Button_Resize_pressed():
- OS.set_window_size(Vector2(1024, 768))
-
-
-func _on_Button_Screen0_pressed():
- OS.set_current_screen(0)
-
-
-func _on_Button_Screen1_pressed():
- OS.set_current_screen(1)
-
-
-func _on_Button_Fullscreen_pressed():
- if(OS.is_window_fullscreen()):
- OS.set_window_fullscreen(false)
- else:
- OS.set_window_fullscreen(true)
-
-
-func _on_Button_FixedSize_pressed():
- if(OS.is_window_resizable()):
- OS.set_window_resizable(false)
- else:
- OS.set_window_resizable(true)
-
-
-func _on_Button_Minimized_pressed():
- if(OS.is_window_minimized()):
- OS.set_window_minimized(false)
- else:
- OS.set_window_minimized(true)
-
-
-func _on_Button_Maximized_pressed():
- if(OS.is_window_maximized()):
- OS.set_window_maximized(false)
- else:
- OS.set_window_maximized(true)
-
-
-func _on_Button_Mouse_Grab_pressed():
- var observer = get_node("../Observer")
- observer.state = observer.STATE_GRAB
diff --git a/demos/misc/window_management/engine.cfg b/demos/misc/window_management/engine.cfg
deleted file mode 100644
index 911d3fd4a1..0000000000
--- a/demos/misc/window_management/engine.cfg
+++ /dev/null
@@ -1,19 +0,0 @@
-[application]
-
-name="Window Management"
-main_scene="res://window_management.scn"
-icon="res://icon.png"
-
-[display]
-
-fullscreen=false
-resizable=true
-width=800
-height=600
-
-[input]
-
-move_forward=[key(W)]
-move_backwards=[key(S)]
-move_left=[key(A)]
-move_right=[key(D)]
diff --git a/demos/misc/window_management/icon.png b/demos/misc/window_management/icon.png
deleted file mode 100644
index ec5c7891f9..0000000000
--- a/demos/misc/window_management/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/misc/window_management/observer/observer.gd b/demos/misc/window_management/observer/observer.gd
deleted file mode 100644
index f100811859..0000000000
--- a/demos/misc/window_management/observer/observer.gd
+++ /dev/null
@@ -1,78 +0,0 @@
-
-extends Spatial
-
-# Member variables
-var r_pos = Vector2()
-var state
-
-const STATE_MENU = 0
-const STATE_GRAB = 1
-
-
-func direction(vector):
- var v = get_node("Camera").get_global_transform().basis*vector
- v = v.normalized()
- return v
-
-
-func impulse(event, action):
- if(event.is_action(action) && event.is_pressed() && !event.is_echo()):
- return true
- else:
- return false
-
-
-func _fixed_process(delta):
- if(state != STATE_GRAB):
- return
-
- if(Input.get_mouse_mode() != Input.MOUSE_MODE_CAPTURED):
- Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
-
- var dir = Vector3()
- var cam = get_global_transform()
- var org = get_translation()
-
- if (Input.is_action_pressed("move_forward")):
- dir += direction(Vector3(0, 0, -1))
- if (Input.is_action_pressed("move_backwards")):
- dir += direction(Vector3(0, 0, 1))
- if (Input.is_action_pressed("move_left")):
- dir += direction(Vector3(-1, 0, 0))
- if (Input.is_action_pressed("move_right")):
- dir += direction(Vector3(1, 0, 0))
-
- dir = dir.normalized()
-
- move(dir*10*delta)
- var d = delta*0.1
-
- var yaw = get_transform().rotated(Vector3(0, 1, 0), d*r_pos.x)
- set_transform(yaw)
-
- var cam = get_node("Camera")
- var pitch = cam.get_transform().rotated(Vector3(1, 0, 0), d*r_pos.y)
- cam.set_transform(pitch)
-
- r_pos.x = 0.0
- r_pos.y = 0.0
-
-
-func _input(event):
- if(event.type == InputEvent.MOUSE_MOTION):
- r_pos = event.relative_pos
-
- if(impulse(event, "ui_cancel")):
- if(state == STATE_GRAB):
- Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
- state = STATE_MENU
- else:
- Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
- state = STATE_GRAB
-
-
-func _ready():
- set_fixed_process(true)
- set_process_input(true)
-
- state = STATE_MENU
diff --git a/demos/misc/window_management/observer/observer.scn b/demos/misc/window_management/observer/observer.scn
deleted file mode 100644
index 813d7d4587..0000000000
--- a/demos/misc/window_management/observer/observer.scn
+++ /dev/null
Binary files differ
diff --git a/demos/misc/window_management/window_management.scn b/demos/misc/window_management/window_management.scn
deleted file mode 100644
index 35662871f1..0000000000
--- a/demos/misc/window_management/window_management.scn
+++ /dev/null
Binary files differ
diff --git a/demos/plugins/custom_dock/custom_dock.scn b/demos/plugins/custom_dock/custom_dock.scn
deleted file mode 100644
index 0e32ece264..0000000000
--- a/demos/plugins/custom_dock/custom_dock.scn
+++ /dev/null
Binary files differ
diff --git a/demos/plugins/custom_dock/dock_plugin.gd b/demos/plugins/custom_dock/dock_plugin.gd
deleted file mode 100644
index ce8a3bcd09..0000000000
--- a/demos/plugins/custom_dock/dock_plugin.gd
+++ /dev/null
@@ -1,23 +0,0 @@
-tool
-extends EditorPlugin
-
-var dock = null
-
-func _enter_tree():
- # When this plugin node enters tree, add the custom type
-
- dock = preload("res://addons/custom_dock/custom_dock.scn").instance()
-
- add_control_to_dock( DOCK_SLOT_LEFT_UL, dock )
-
-func _exit_tree():
-
- # Remove from docks (must be called so layout is updated and saved)
- remove_control_from_docks(dock)
- # Remove the node
- dock.free()
-
-
-
-
- \ No newline at end of file
diff --git a/demos/plugins/custom_dock/plugin.cfg b/demos/plugins/custom_dock/plugin.cfg
deleted file mode 100644
index e295384c25..0000000000
--- a/demos/plugins/custom_dock/plugin.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[plugin]
-
-name="Custom Dock"
-description="Adds a new Customizable Dock"
-author="Juan Linietsky"
-version="1.0"
-script="dock_plugin.gd"
-
-
-
-
-
-
-
diff --git a/demos/plugins/custom_import_plugin/import_plugin.gd b/demos/plugins/custom_import_plugin/import_plugin.gd
deleted file mode 100644
index 2cf8a0302f..0000000000
--- a/demos/plugins/custom_import_plugin/import_plugin.gd
+++ /dev/null
@@ -1,81 +0,0 @@
-tool
-
-extends EditorImportPlugin
-
-
-# Simple plugin that imports a text file with extension .mtxt
-# which contains 3 integers in format R,G,B (0-255)
-# (see example .mtxt in this folder)
-# Imported file is converted to a material
-
-var dialog = null
-
-func get_name():
- return "silly_material"
-
-func get_visible_name():
- return "Silly Material"
-
-func import_dialog(path):
- var md = null
- if (path!=""):
- md = ResourceLoader.load_import_metadata(path)
- dialog.configure(self,path,md)
- dialog.popup_centered()
-
-func import(path,metadata):
-
- assert(metadata.get_source_count() == 1)
-
- var source = metadata.get_source_path(0)
- var use_red_anyway = metadata.get_option("use_red_anyway")
-
- var f = File.new()
- var err = f.open(source,File.READ)
- if (err!=OK):
- return ERR_CANT_OPEN
-
- var l = f.get_line()
-
- f.close()
-
- var channels = l.split(",")
- if (channels.size()!=3):
- return ERR_PARSE_ERROR
-
- var color = Color8(int(channels[0]),int(channels[1]),int(channels[2]))
-
- var material
-
- if (ResourceLoader.has(path)):
- # Material is in use, update it
- material = ResourceLoader.load(path)
- else:
- # Material not in use, create
- material = FixedMaterial.new()
-
- if (use_red_anyway):
- color=Color8(255,0,0)
-
- material.set_parameter(FixedMaterial.PARAM_DIFFUSE,color)
-
- # Make sure import metadata links to this plugin
-
- metadata.set_editor("silly_material")
-
- # Update the import metadata
-
- material.set_import_metadata(metadata)
-
-
- # Save
- err = ResourceSaver.save(path,material)
-
- return err
-
-
-func config(base_control):
-
- dialog = preload("res://addons/custom_import_plugin/material_dialog.tscn").instance()
- base_control.add_child(dialog)
-
diff --git a/demos/plugins/custom_import_plugin/material_dialog.gd b/demos/plugins/custom_import_plugin/material_dialog.gd
deleted file mode 100644
index 1022743254..0000000000
--- a/demos/plugins/custom_import_plugin/material_dialog.gd
+++ /dev/null
@@ -1,67 +0,0 @@
-tool
-extends ConfirmationDialog
-
-var src_fs
-var dst_fs
-var import_plugin
-
-func configure(p_import_plugin,path,metadata):
- import_plugin=p_import_plugin
- if (metadata):
- # metadata from previous import exists, fill in fields
- assert( metadata.get_source_count() > 0 )
- # Always expand the source paths
- var src_path = import_plugin.expand_source_path( metadata.get_source_path(0) )
- get_node("src_file").set_text(src_path)
- get_node("dst_file").set_text(path)
- # Fill in from metadata options
- get_node("use_red_anyway").set_pressed( metadata.get_option("use_red_anyway") )
-
-
-func _ready():
-
- src_fs = FileDialog.new()
- src_fs.set_mode(FileDialog.MODE_OPEN_FILE)
- src_fs.set_access(FileDialog.ACCESS_FILESYSTEM) #access all filesystem, not only res://
- src_fs.add_filter("*.mtxt")
- src_fs.connect("file_selected",self,"_on_src_selected")
-
- add_child(src_fs)
-
- dst_fs = EditorFileDialog.new()
- dst_fs.set_mode(EditorFileDialog.MODE_SAVE_FILE)
- dst_fs.add_filter("*.mtl") # Use binary extension always, text can't save metadata
- dst_fs.connect("file_selected",self,"_on_dst_selected")
-
- add_child(dst_fs)
-
- set_hide_on_ok(true)
- get_ok().set_text("Import!")
-
-
-func _on_src_browse_pressed():
- src_fs.popup_centered_ratio()
-
-func _on_dst_browse_pressed():
- dst_fs.popup_centered_ratio()
-
-func _on_src_selected(path):
- get_node("src_file").set_text(path)
-
-func _on_dst_selected(path):
- get_node("dst_file").set_text(path)
-
-func _on_MaterialImport_confirmed():
- # Create an import metadata
- var imd = ResourceImportMetadata.new()
- # Add the source files, always validate the source path
- imd.add_source( import_plugin.validate_source_path( get_node("src_file").get_text() ))
- # Add the options
- imd.set_option( "use_red_anyway", get_node("use_red_anyway").is_pressed() )
- # Perform regular import
- var err = import_plugin.import( get_node("dst_file").get_text(), imd )
- # Warn if error
- if (err!=OK):
- get_node("error").set_text("Error Importing!")
- get_node("error").popup_centered_minsize()
-
diff --git a/demos/plugins/custom_import_plugin/material_dialog.tscn b/demos/plugins/custom_import_plugin/material_dialog.tscn
deleted file mode 100644
index 9ad6f492fd..0000000000
--- a/demos/plugins/custom_import_plugin/material_dialog.tscn
+++ /dev/null
@@ -1,111 +0,0 @@
-[gd_scene load_steps=2 format=1]
-
-[ext_resource path="res://addons/custom_import_plugin/material_dialog.gd" type="Script" id=1]
-
-[node name="MaterialImport" type="ConfirmationDialog"]
-
-margin/right = 276.0
-margin/bottom = 154.0
-focus/ignore_mouse = false
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-popup/exclusive = false
-window/title = "Silly Material Import"
-dialog/hide_on_ok = true
-script/script = ExtResource( 1 )
-__meta__ = { "__editor_plugin_screen__":"Script" }
-
-[node name="src_file" type="LineEdit" parent="."]
-
-margin/left = 19.0
-margin/top = 6.0
-margin/right = 190.0
-margin/bottom = 29.0
-focus/ignore_mouse = false
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-text = ""
-max_length = 0
-editable = true
-secret = false
-
-[node name="src_browse" type="Button" parent="."]
-
-margin/left = 195.0
-margin/top = 7.0
-margin/right = 249.0
-margin/bottom = 29.0
-focus/ignore_mouse = false
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-toggle_mode = false
-text = "browse"
-flat = false
-
-[node name="dst_browse" type="Button" parent="."]
-
-margin/left = 195.0
-margin/top = 47.0
-margin/right = 249.0
-margin/bottom = 69.0
-focus/ignore_mouse = false
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-toggle_mode = false
-text = "browse"
-flat = false
-
-[node name="dst_file" type="LineEdit" parent="."]
-
-margin/left = 19.0
-margin/top = 46.0
-margin/right = 190.0
-margin/bottom = 69.0
-focus/ignore_mouse = false
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-text = ""
-max_length = 0
-editable = true
-secret = false
-
-[node name="use_red_anyway" type="CheckBox" parent="."]
-
-margin/left = 20.0
-margin/top = 84.0
-margin/right = 144.0
-margin/bottom = 106.0
-focus/ignore_mouse = false
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-toggle_mode = true
-text = "Use Red Anyway"
-flat = false
-align = 0
-
-[node name="error" type="AcceptDialog" parent="."]
-
-visibility/visible = false
-margin/right = 40.0
-margin/bottom = 40.0
-focus/ignore_mouse = false
-focus/stop_mouse = true
-size_flags/horizontal = 2
-size_flags/vertical = 2
-popup/exclusive = false
-window/title = "Alert!"
-dialog/hide_on_ok = true
-
-[connection signal="confirmed" from="." to="." method="_on_MaterialImport_confirmed"]
-
-[connection signal="pressed" from="src_browse" to="." method="_on_src_browse_pressed"]
-
-[connection signal="pressed" from="dst_browse" to="." method="_on_dst_browse_pressed"]
-
-
diff --git a/demos/plugins/custom_import_plugin/material_import.gd b/demos/plugins/custom_import_plugin/material_import.gd
deleted file mode 100644
index f9859251af..0000000000
--- a/demos/plugins/custom_import_plugin/material_import.gd
+++ /dev/null
@@ -1,22 +0,0 @@
-tool
-extends EditorPlugin
-
-var import_plugin
-
-func _enter_tree():
-
- import_plugin = preload("res://addons/custom_import_plugin/import_plugin.gd").new()
-
- # pass the GUI base control, so the dialog has a parent node
- import_plugin.config( get_base_control() )
-
- add_import_plugin( import_plugin)
-
-func _exit_tree():
-
- remove_import_plugin( import_plugin )
-
-
-
-
- \ No newline at end of file
diff --git a/demos/plugins/custom_import_plugin/plugin.cfg b/demos/plugins/custom_import_plugin/plugin.cfg
deleted file mode 100644
index a002ad680d..0000000000
--- a/demos/plugins/custom_import_plugin/plugin.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[plugin]
-
-name="Silly Material Importer"
-description="Imports a 3D Material from an external text file"
-author="Juan Linietsky"
-version="1.0"
-script="material_import.gd"
-
-
-
-
-
-
-
diff --git a/demos/plugins/custom_import_plugin/test.mtxt b/demos/plugins/custom_import_plugin/test.mtxt
deleted file mode 100644
index 546ea2af20..0000000000
--- a/demos/plugins/custom_import_plugin/test.mtxt
+++ /dev/null
@@ -1 +0,0 @@
-0,0,255
diff --git a/demos/plugins/custom_node/heart.gd b/demos/plugins/custom_node/heart.gd
deleted file mode 100644
index d53c92d800..0000000000
--- a/demos/plugins/custom_node/heart.gd
+++ /dev/null
@@ -1,12 +0,0 @@
-tool
-extends Node2D
-
-
-var heart = preload("res://addons/custom_node/heart.png")
-
-func _draw():
- draw_texture(heart,-heart.get_size()/2)
-
-func _get_item_rect():
- #override
- return Rect2(-heart.get_size()/2,heart.get_size())
diff --git a/demos/plugins/custom_node/heart.png b/demos/plugins/custom_node/heart.png
deleted file mode 100644
index 1dfd14a456..0000000000
--- a/demos/plugins/custom_node/heart.png
+++ /dev/null
Binary files differ
diff --git a/demos/plugins/custom_node/heart_icon.png b/demos/plugins/custom_node/heart_icon.png
deleted file mode 100644
index 2eb819aa24..0000000000
--- a/demos/plugins/custom_node/heart_icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/plugins/custom_node/heart_plugin.gd b/demos/plugins/custom_node/heart_plugin.gd
deleted file mode 100644
index 01a6177c9b..0000000000
--- a/demos/plugins/custom_node/heart_plugin.gd
+++ /dev/null
@@ -1,18 +0,0 @@
-tool
-extends EditorPlugin
-
-
-func _enter_tree():
- # When this plugin node enters tree, add the custom type
-
- add_custom_type("Heart","Node2D",preload("res://addons/custom_node/heart.gd"),preload("res://addons/custom_node/heart_icon.png"))
-
-func _exit_tree():
- # When the plugin node exits the tree, remove the custom type
-
- remove_custom_type("Heart")
-
-
-
-
- \ No newline at end of file
diff --git a/demos/plugins/custom_node/plugin.cfg b/demos/plugins/custom_node/plugin.cfg
deleted file mode 100644
index ebb4b56499..0000000000
--- a/demos/plugins/custom_node/plugin.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[plugin]
-
-name="Heart"
-description="Adds a new Heart node in 2D"
-author="Juan Linietsky"
-version="1.0"
-script="heart_plugin.gd"
-
-
-
-
-
-
-
diff --git a/demos/plugins/readme.txt b/demos/plugins/readme.txt
deleted file mode 100644
index 963850dcbb..0000000000
--- a/demos/plugins/readme.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-
-To install these, copy each of these folders to a folder:
-
-addons/
-
-inside your projects, example:
-
-addons/custom_node
-
-To distribute and install from UI, make a zip that contains the folder,
-example:
-
-zip -r custom_node.zip custom_node/* \ No newline at end of file
diff --git a/demos/viewport/2d_in_3d/ball.png b/demos/viewport/2d_in_3d/ball.png
deleted file mode 100644
index c0f6da4f6f..0000000000
--- a/demos/viewport/2d_in_3d/ball.png
+++ /dev/null
Binary files differ
diff --git a/demos/viewport/2d_in_3d/engine.cfg b/demos/viewport/2d_in_3d/engine.cfg
deleted file mode 100644
index fc586dcaf3..0000000000
--- a/demos/viewport/2d_in_3d/engine.cfg
+++ /dev/null
@@ -1,22 +0,0 @@
-[application]
-
-name="Pong 2D in 3D"
-main_scene="res://pong3d.scn"
-icon="res://icon.png"
-
-[display]
-
-width=640
-height=400
-stretch_2d=true
-
-[input]
-
-left_move_up=[key(A)]
-left_move_down=[key(Z)]
-right_move_up=[key(Up)]
-right_move_down=[key(Down)]
-
-[render]
-
-default_clear_color=#ff000000
diff --git a/demos/viewport/2d_in_3d/icon.png b/demos/viewport/2d_in_3d/icon.png
deleted file mode 100644
index eab34de53d..0000000000
--- a/demos/viewport/2d_in_3d/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/viewport/2d_in_3d/left_pallete.png b/demos/viewport/2d_in_3d/left_pallete.png
deleted file mode 100644
index f0d4b549d0..0000000000
--- a/demos/viewport/2d_in_3d/left_pallete.png
+++ /dev/null
Binary files differ
diff --git a/demos/viewport/2d_in_3d/pong.gd b/demos/viewport/2d_in_3d/pong.gd
deleted file mode 100644
index ac3457453b..0000000000
--- a/demos/viewport/2d_in_3d/pong.gd
+++ /dev/null
@@ -1,66 +0,0 @@
-
-extends Node2D
-
-# Member variables
-const INITIAL_BALL_SPEED = 80
-var ball_speed = INITIAL_BALL_SPEED
-var screen_size = Vector2(640, 400)
-# Default ball direction
-var direction = Vector2(-1, 0)
-var pad_size = Vector2(8, 32)
-const PAD_SPEED = 150
-
-
-func _process(delta):
- # Get ball position and pad rectangles
- var ball_pos = get_node("ball").get_pos()
- var left_rect = Rect2(get_node("left").get_pos() - pad_size*0.5, pad_size)
- var right_rect = Rect2(get_node("right").get_pos() - pad_size*0.5, pad_size)
-
- # Integrate new ball postion
- ball_pos += direction*ball_speed*delta
-
- # Flip when touching roof or floor
- if ((ball_pos.y < 0 and direction.y < 0) or (ball_pos.y > screen_size.y and direction.y > 0)):
- direction.y = -direction.y
-
- # Flip, change direction and increase speed when touching pads
- if ((left_rect.has_point(ball_pos) and direction.x < 0) or (right_rect.has_point(ball_pos) and direction.x > 0)):
- direction.x = -direction.x
- ball_speed *= 1.1
- direction.y = randf()*2.0 - 1
- direction = direction.normalized()
-
- # Check gameover
- if (ball_pos.x < 0 or ball_pos.x > screen_size.x):
- ball_pos = screen_size*0.5
- ball_speed = INITIAL_BALL_SPEED
- direction = Vector2(-1, 0)
-
- get_node("ball").set_pos(ball_pos)
-
- # Move left pad
- var left_pos = get_node("left").get_pos()
-
- if (left_pos.y > 0 and Input.is_action_pressed("left_move_up")):
- left_pos.y += -PAD_SPEED*delta
- if (left_pos.y < screen_size.y and Input.is_action_pressed("left_move_down")):
- left_pos.y += PAD_SPEED*delta
-
- get_node("left").set_pos(left_pos)
-
- # Move right pad
- var right_pos = get_node("right").get_pos()
-
- if (right_pos.y > 0 and Input.is_action_pressed("right_move_up")):
- right_pos.y += -PAD_SPEED*delta
- if (right_pos.y < screen_size.y and Input.is_action_pressed("right_move_down")):
- right_pos.y += PAD_SPEED*delta
-
- get_node("right").set_pos(right_pos)
-
-
-func _ready():
- screen_size = get_viewport_rect().size # Get actual size
- pad_size = get_node("left").get_texture().get_size()
- set_process(true)
diff --git a/demos/viewport/2d_in_3d/pong.scn b/demos/viewport/2d_in_3d/pong.scn
deleted file mode 100644
index 559e2f96bc..0000000000
--- a/demos/viewport/2d_in_3d/pong.scn
+++ /dev/null
Binary files differ
diff --git a/demos/viewport/2d_in_3d/pong3d.gd b/demos/viewport/2d_in_3d/pong3d.gd
deleted file mode 100644
index 79a7a36801..0000000000
--- a/demos/viewport/2d_in_3d/pong3d.gd
+++ /dev/null
@@ -1,7 +0,0 @@
-
-extends Spatial
-
-
-func _ready():
- var tex = get_node("Viewport").get_render_target_texture()
- get_node("Quad").get_material_override().set_texture(FixedMaterial.PARAM_DIFFUSE, tex)
diff --git a/demos/viewport/2d_in_3d/pong3d.scn b/demos/viewport/2d_in_3d/pong3d.scn
deleted file mode 100644
index 2e60764a88..0000000000
--- a/demos/viewport/2d_in_3d/pong3d.scn
+++ /dev/null
Binary files differ
diff --git a/demos/viewport/2d_in_3d/right_pallete.png b/demos/viewport/2d_in_3d/right_pallete.png
deleted file mode 100644
index 3cdb673a5b..0000000000
--- a/demos/viewport/2d_in_3d/right_pallete.png
+++ /dev/null
Binary files differ
diff --git a/demos/viewport/2d_in_3d/separator.png b/demos/viewport/2d_in_3d/separator.png
deleted file mode 100644
index 56874a59cb..0000000000
--- a/demos/viewport/2d_in_3d/separator.png
+++ /dev/null
Binary files differ
diff --git a/demos/viewport/3d_in_2d/engine.cfg b/demos/viewport/3d_in_2d/engine.cfg
deleted file mode 100644
index 6d456d7bd4..0000000000
--- a/demos/viewport/3d_in_2d/engine.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-[application]
-
-name="3D in 2D"
-main_scene="res://main.scn"
-icon="res://icon.png"
diff --git a/demos/viewport/3d_in_2d/icon.png b/demos/viewport/3d_in_2d/icon.png
deleted file mode 100644
index d8a332c18f..0000000000
--- a/demos/viewport/3d_in_2d/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/viewport/3d_in_2d/main.scn b/demos/viewport/3d_in_2d/main.scn
deleted file mode 100644
index d6c4deea42..0000000000
--- a/demos/viewport/3d_in_2d/main.scn
+++ /dev/null
Binary files differ
diff --git a/demos/viewport/3d_in_2d/player.scn b/demos/viewport/3d_in_2d/player.scn
deleted file mode 100644
index 7f490237fb..0000000000
--- a/demos/viewport/3d_in_2d/player.scn
+++ /dev/null
Binary files differ
diff --git a/demos/viewport/3d_in_2d/player_2d.scn b/demos/viewport/3d_in_2d/player_2d.scn
deleted file mode 100644
index edb6c080c1..0000000000
--- a/demos/viewport/3d_in_2d/player_2d.scn
+++ /dev/null
Binary files differ
diff --git a/demos/viewport/3d_in_2d/player_3d.scn b/demos/viewport/3d_in_2d/player_3d.scn
deleted file mode 100644
index c8bba5e460..0000000000
--- a/demos/viewport/3d_in_2d/player_3d.scn
+++ /dev/null
Binary files differ
diff --git a/demos/viewport/3d_in_2d/robot_demo.png b/demos/viewport/3d_in_2d/robot_demo.png
deleted file mode 100644
index bba8c63874..0000000000
--- a/demos/viewport/3d_in_2d/robot_demo.png
+++ /dev/null
Binary files differ
diff --git a/demos/viewport/gui_in_3d/engine.cfg b/demos/viewport/gui_in_3d/engine.cfg
deleted file mode 100644
index 252e53ca33..0000000000
--- a/demos/viewport/gui_in_3d/engine.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-[application]
-
-name="GUI in 3D"
-main_scene="res://gui_3d.scn"
-icon="res://icon.png"
diff --git a/demos/viewport/gui_in_3d/gui.scn b/demos/viewport/gui_in_3d/gui.scn
deleted file mode 100644
index d7daa30340..0000000000
--- a/demos/viewport/gui_in_3d/gui.scn
+++ /dev/null
Binary files differ
diff --git a/demos/viewport/gui_in_3d/gui_3d.gd b/demos/viewport/gui_in_3d/gui_3d.gd
deleted file mode 100644
index b93c17521d..0000000000
--- a/demos/viewport/gui_in_3d/gui_3d.gd
+++ /dev/null
@@ -1,37 +0,0 @@
-
-extends Spatial
-
-# Member variables
-var prev_pos = null
-
-
-func _input(event):
- # All other (non-mouse) events
- if (not event.type in [InputEvent.MOUSE_BUTTON, InputEvent.MOUSE_MOTION, InputEvent.SCREEN_DRAG, InputEvent.SCREEN_TOUCH]):
- get_node("viewport").input(event)
-
-
-# Mouse events for Area
-func _on_area_input_event(camera, event, click_pos, click_normal, shape_idx):
- # Use click pos (click in 3d space, convert to area space)
- var pos = get_node("area").get_global_transform().affine_inverse()*click_pos
- # Convert to 2D
- pos = Vector2(pos.x, pos.y)
- # Convert to viewport coordinate system
- pos.x = (pos.x + 1.5)*100
- pos.y = (-pos.y + 0.75)*100
- # Set to event
- event.pos = pos
- event.global_pos = pos
- if (prev_pos == null):
- prev_pos = pos
- if (event.type == InputEvent.MOUSE_MOTION):
- event.relative_pos = pos - prev_pos
- prev_pos = pos
- # Send the event to the viewport
- get_node("viewport").input(event)
-
-
-func _ready():
- get_node("area/quad").get_material_override().set_texture(FixedMaterial.PARAM_DIFFUSE, get_node("viewport").get_render_target_texture())
- set_process_input(true)
diff --git a/demos/viewport/gui_in_3d/gui_3d.scn b/demos/viewport/gui_in_3d/gui_3d.scn
deleted file mode 100644
index 0541e7b142..0000000000
--- a/demos/viewport/gui_in_3d/gui_3d.scn
+++ /dev/null
Binary files differ
diff --git a/demos/viewport/gui_in_3d/icon.png b/demos/viewport/gui_in_3d/icon.png
deleted file mode 100644
index 22bdd791bb..0000000000
--- a/demos/viewport/gui_in_3d/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/viewport/screen_capture/engine.cfg b/demos/viewport/screen_capture/engine.cfg
deleted file mode 100644
index a843242720..0000000000
--- a/demos/viewport/screen_capture/engine.cfg
+++ /dev/null
@@ -1,9 +0,0 @@
-[application]
-
-name="Screen Capturing"
-main_scene="res://screen_capture.scn"
-icon="res://icon.png"
-
-[display]
-
-stretch_mode="2d"
diff --git a/demos/viewport/screen_capture/icon.png b/demos/viewport/screen_capture/icon.png
deleted file mode 100644
index a696824775..0000000000
--- a/demos/viewport/screen_capture/icon.png
+++ /dev/null
Binary files differ
diff --git a/demos/viewport/screen_capture/mountains.png b/demos/viewport/screen_capture/mountains.png
deleted file mode 100644
index b8435bb1a8..0000000000
--- a/demos/viewport/screen_capture/mountains.png
+++ /dev/null
Binary files differ
diff --git a/demos/viewport/screen_capture/screen_capture.gd b/demos/viewport/screen_capture/screen_capture.gd
deleted file mode 100644
index 9867d95452..0000000000
--- a/demos/viewport/screen_capture/screen_capture.gd
+++ /dev/null
@@ -1,16 +0,0 @@
-
-extends Control
-
-
-func _on_button_pressed():
- get_viewport().queue_screen_capture()
- # Let two frames pass to make sure the screen was captured
- yield(get_tree(), "idle_frame")
- yield(get_tree(), "idle_frame")
- # Retrieve the captured image
- var img = get_viewport().get_screen_capture()
- # Create a texture for it
- var tex = ImageTexture.new()
- tex.create_from_image(img)
- # Set it to the capture node
- get_node("capture").set_texture(tex)
diff --git a/demos/viewport/screen_capture/screen_capture.scn b/demos/viewport/screen_capture/screen_capture.scn
deleted file mode 100644
index ee847fbe62..0000000000
--- a/demos/viewport/screen_capture/screen_capture.scn
+++ /dev/null
Binary files differ
diff --git a/doc/base/classes.xml b/doc/base/classes.xml
index 43f755d246..d329d5344f 100644
--- a/doc/base/classes.xml
+++ b/doc/base/classes.xml
@@ -205,22 +205,20 @@
Exponential logarithm.
</description>
</method>
- <method name="isnan">
+ <method name="is_nan">
<return type="float">
</return>
<argument index="0" name="s" type="float">
</argument>
<description>
- Return true if the float is not a number.
</description>
</method>
- <method name="isinf">
+ <method name="is_inf">
<return type="float">
</return>
<argument index="0" name="s" type="float">
</argument>
<description>
- Return true if the float is infinite.
</description>
</method>
<method name="ease">
@@ -1103,7 +1101,7 @@
% key
</constant>
<constant name="KEY_AMPERSAND" value="38">
- & key
+ &amp; key
</constant>
<constant name="KEY_APOSTROPHE" value="39">
' key
@@ -2100,13 +2098,13 @@
</methods>
<members>
<member name="pos" type="Vector3">
- Position (starting corner).
+ Position (starting corner).
</member>
<member name="size" type="Vector3">
- Size from position to end.
+ Size from position to end.
</member>
<member name="end" type="Vector3">
- Ending corner.
+ Ending corner.
</member>
</members>
<constants>
@@ -2234,6 +2232,34 @@
Get the [SpriteFrames] resource, which contains all frames.
</description>
</method>
+ <method name="set_animation">
+ <argument index="0" name="animation" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="get_animation" qualifiers="const">
+ <return type="String">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="play">
+ <argument index="0" name="anim" type="String" default="&quot;&quot;">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="stop">
+ <description>
+ </description>
+ </method>
+ <method name="is_playing" qualifiers="const">
+ <return type="bool">
+ </return>
+ <description>
+ </description>
+ </method>
<method name="set_centered">
<argument index="0" name="centered" type="bool">
</argument>
@@ -3612,8 +3638,10 @@
</class>
<class name="Area" inherits="CollisionObject" category="Core">
<brief_description>
+ General purpose area detection and influence for 3D physics.
</brief_description>
<description>
+ General purpose area detection for 3D physics. Areas can be used for detection of objects that enter/exit them, as well as overriding space parameters (changing gravity, damping, etc). For this, use any space override different from AREA_SPACE_OVERRIDE_DISABLE and point gravity at the center of mass.
</description>
<methods>
<method name="set_space_override_mode">
@@ -3632,114 +3660,140 @@
<return type="int">
</return>
<description>
+ Return the space override mode.
</description>
</method>
<method name="set_gravity_is_point">
<argument index="0" name="enable" type="bool">
</argument>
<description>
+ When overriding space parameters, this method sets whether this area has a center of gravity. To set/get the location of the center of gravity, use [method set_gravity_vector]/[method get_gravity_vector].
</description>
</method>
<method name="is_gravity_a_point" qualifiers="const">
<return type="bool">
</return>
<description>
+ Return whether gravity is a point. A point gravity will attract objects towards it, as opposed to a gravity vector, which moves them in a given direction.
</description>
</method>
<method name="set_gravity_distance_scale">
<argument index="0" name="distance_scale" type="float">
</argument>
<description>
+ Set the falloff factor for point gravity. The greater this value is, the faster the strength of gravity decreases with the square of distance.
</description>
</method>
<method name="get_gravity_distance_scale" qualifiers="const">
<return type="float">
</return>
<description>
+ Return the falloff factor for point gravity.
</description>
</method>
<method name="set_gravity_vector">
<argument index="0" name="vector" type="Vector3">
</argument>
<description>
+ Set the gravity vector. This vector does not have to be normalized.
+ If gravity is a point (see [method is_gravity_a_point]), this will be the attraction center.
</description>
</method>
<method name="get_gravity_vector" qualifiers="const">
<return type="Vector3">
</return>
<description>
+ Return the gravity vector. If gravity is a point (see [method is_gravity_a_point]), this will be the attraction center.
</description>
</method>
<method name="set_gravity">
<argument index="0" name="gravity" type="float">
</argument>
<description>
+ Set the gravity intensity. This is useful to alter the force of gravity without altering its direction.
+ This value multiplies the gravity vector, whether it is the given vector ([method set_gravity_vector]), or a calculated one (when using a center of gravity).
</description>
</method>
<method name="get_gravity" qualifiers="const">
<return type="float">
</return>
<description>
+ Return the gravity intensity.
</description>
</method>
<method name="set_angular_damp">
<argument index="0" name="angular_damp" type="float">
</argument>
<description>
+ Set the rate at which objects stop spinning in this area, if there are not any other forces making it spin. The value is a fraction of its current speed, lost per second. Thus, a value of 1.0 should mean stopping immediately, and 0.0 means the object never stops.
+ In practice, as the fraction of speed lost gets smaller with each frame, a value of 1.0 does not mean the object will stop in exactly one second. Only when the physics calculations are done at 1 frame per second, it does stop in a second.
</description>
</method>
<method name="get_angular_damp" qualifiers="const">
<return type="float">
</return>
<description>
+ Return the angular damp rate.
</description>
</method>
<method name="set_linear_damp">
<argument index="0" name="linear_damp" type="float">
</argument>
<description>
+ Set the rate at which objects stop moving in this area, if there are not any other forces moving it. The value is a fraction of its current speed, lost per second. Thus, a value of 1.0 should mean stopping immediately, and 0.0 means the object never stops.
+ In practice, as the fraction of speed lost gets smaller with each frame, a value of 1.0 does not mean the object will stop in exactly one second. Only when the physics calculations are done at 1 frame per second, it does stop in a second.
</description>
</method>
<method name="get_linear_damp" qualifiers="const">
<return type="float">
</return>
<description>
+ Return the linear damp rate.
</description>
</method>
<method name="set_priority">
<argument index="0" name="priority" type="float">
</argument>
<description>
+ Set the order in which the area is processed. Greater values mean the area gets processed first. This is useful for areas which have an space override different from AREA_SPACE_OVERRIDE_DISABLED or AREA_SPACE_OVERRIDE_COMBINE, as they replace values, and are thus order-dependent.
+ Areas with the same priority value get evaluated in an unpredictable order, and should be differentiated if evaluation order is to be important.
</description>
</method>
<method name="get_priority" qualifiers="const">
<return type="float">
</return>
<description>
+ Return the processing order of this area.
</description>
</method>
<method name="set_collision_mask">
<argument index="0" name="collision_mask" type="int">
</argument>
<description>
+ Set the physics layers this area can scan for collisions.
</description>
</method>
<method name="get_collision_mask" qualifiers="const">
<return type="int">
</return>
<description>
+ Return the physics layers this area can scan for collisions.
</description>
</method>
<method name="set_layer_mask">
<argument index="0" name="layer_mask" type="int">
</argument>
<description>
+ Set the physics layers this area is in.
+ Collidable objects can exist in any of 32 different layers. These layers are not visual, but more of a tagging system instead. A collidable can use these layers/tags to select with which objects it can collide, using [method set_collision_mask].
+ A contact is detected if object A is in any of the layers that object B scans, or object B is in any layer scanned by object A.
</description>
</method>
<method name="get_layer_mask" qualifiers="const">
<return type="int">
</return>
<description>
+ Return the physics layer this area is in.
</description>
</method>
<method name="set_collision_mask_bit">
@@ -3748,6 +3802,7 @@
<argument index="1" name="value" type="bool">
</argument>
<description>
+ Set/clear individual bits on the collision mask. This makes selecting the areas scanned easier.
</description>
</method>
<method name="get_collision_mask_bit" qualifiers="const">
@@ -3756,6 +3811,7 @@
<argument index="0" name="bit" type="int">
</argument>
<description>
+ Return an individual bit on the collision mask.
</description>
</method>
<method name="set_layer_mask_bit">
@@ -3764,6 +3820,7 @@
<argument index="1" name="value" type="bool">
</argument>
<description>
+ Set/clear individual bits on the layer mask. This makes getting an area in/out of only one layer easier.
</description>
</method>
<method name="get_layer_mask_bit" qualifiers="const">
@@ -3772,58 +3829,67 @@
<argument index="0" name="bit" type="int">
</argument>
<description>
+ Return an individual bit on the layer mask.
</description>
</method>
<method name="set_monitorable">
<argument index="0" name="enable" type="bool">
</argument>
<description>
+ Set whether this area can be detected by other, monitoring, areas. Only areas need to be marked as monitorable. Bodies are always so.
</description>
</method>
<method name="is_monitorable" qualifiers="const">
<return type="bool">
</return>
<description>
+ Return whether this area can be detected by other, monitoring, areas.
</description>
</method>
<method name="set_enable_monitoring">
<argument index="0" name="enable" type="bool">
</argument>
<description>
+ Set whether this area can detect bodies/areas entering/exiting it.
</description>
</method>
<method name="is_monitoring_enabled" qualifiers="const">
<return type="bool">
</return>
<description>
+ Return whether this area detects bodies/areas entering/exiting it.
</description>
</method>
<method name="get_overlapping_bodies" qualifiers="const">
<return type="Array">
</return>
<description>
+ Return a list of the bodies ([PhysicsBody]) that are totally or partially inside this area.
</description>
</method>
<method name="get_overlapping_areas" qualifiers="const">
<return type="Array">
</return>
<description>
+ Return a list of the areas that are totally or partially inside this area.
</description>
</method>
<method name="overlaps_body" qualifiers="const">
- <return type="PhysicsBody">
+ <return type="bool">
</return>
<argument index="0" name="body" type="Object">
</argument>
<description>
+ Return whether the body passed is totally or partially inside this area.
</description>
</method>
<method name="overlaps_area" qualifiers="const">
- <return type="Area">
+ <return type="bool">
</return>
<argument index="0" name="area" type="Object">
</argument>
<description>
+ Return whether the area passed is totally or partially inside this area.
</description>
</method>
</methods>
@@ -3832,6 +3898,7 @@
<argument index="0" name="body" type="Object">
</argument>
<description>
+ This signal is triggered only once when a body enters this area. The only parameter passed is the body that entered this area.
</description>
</signal>
<signal name="body_enter_shape">
@@ -3844,12 +3911,14 @@
<argument index="3" name="area_shape" type="int">
</argument>
<description>
+ This signal triggers only once when a body enters this area. The first parameter is the body's [RID]. The second one is the body as an object. The third one is the index of the shape of the body that entered this area, and the fourth one is the index of the shape in this area that reported the entering.
</description>
</signal>
<signal name="area_enter">
<argument index="0" name="area" type="Object">
</argument>
<description>
+ This signal is triggered only once when an area enters this area. The only parameter passed is the area that entered this area.
</description>
</signal>
<signal name="area_enter_shape">
@@ -3862,12 +3931,14 @@
<argument index="3" name="area_shape" type="int">
</argument>
<description>
+ This signal triggers only once when an area enters this area. The first parameter is the area's [RID]. The second one is the area as an object. The third one is the index of the shape entering this area, and the fourth one is the index of the shape in this area that reported the entering.
</description>
</signal>
<signal name="body_exit">
<argument index="0" name="body" type="Object">
</argument>
<description>
+ This signal is triggered only once when a body exits this area. The only parameter passed is the body that exited this area.
</description>
</signal>
<signal name="body_exit_shape">
@@ -3880,12 +3951,14 @@
<argument index="3" name="area_shape" type="int">
</argument>
<description>
+ This signal triggers only once when a body exits this area. The first parameter is the body's [RID]. The second one is the body as an object. The third one is the index of the shape exiting this area, and the fourth one is the index of the shape in this area that reported the exit.
</description>
</signal>
<signal name="area_exit">
<argument index="0" name="area" type="Object">
</argument>
<description>
+ This signal is triggered only once when an area exits this area. The only parameter passed is the area that exited this area.
</description>
</signal>
<signal name="area_exit_shape">
@@ -3898,6 +3971,7 @@
<argument index="3" name="area_shape" type="int">
</argument>
<description>
+ This signal triggers only once when an area exits this area. The first parameter is the area's [RID]. The second one is the area as an object. The third one is the index of the shape entering this area, and the fourth one is the index of the shape in this area that reported the entering.
</description>
</signal>
</signals>
@@ -4125,7 +4199,7 @@
<return type="bool">
</return>
<description>
- Set whether this area can be detected by other, monitoring, areas.
+ Return whether this area can be detected by other, monitoring, areas.
</description>
</method>
<method name="get_overlapping_bodies" qualifiers="const">
@@ -4266,6 +4340,15 @@
Clear the array (resize to 0).
</description>
</method>
+ <method name="count">
+ <return type="int">
+ </return>
+ <argument index="0" name="value" type="var">
+ </argument>
+ <description>
+ Return the amount of times an element is in the array.
+ </description>
+ </method>
<method name="empty">
<return type="bool">
</return>
@@ -4289,6 +4372,15 @@
Searches the array for a value and returns its index or -1 if not found.
</description>
</method>
+ <method name="find_last">
+ <return type="int">
+ </return>
+ <argument index="0" name="value" type="var">
+ </argument>
+ <description>
+ Searches the array in reverse order for a value and returns its index or -1 if not found.
+ </description>
+ </method>
<method name="hash">
<return type="int">
</return>
@@ -5123,41 +5215,50 @@
</class>
<class name="BackBufferCopy" inherits="Node2D" category="Core">
<brief_description>
+ Copies a region of the screen (or the whole screen) to a buffer so it can be accessed with the texscreen() shader instruction.
</brief_description>
<description>
+ Node for back-buffering the currently displayed screen. The region defined in the BackBufferCopy node is bufferized with the content of the screen it covers, or the entire screen according to the copy mode set. Accessing this buffer is done with the texscreen() shader instruction.
</description>
<methods>
<method name="set_rect">
<argument index="0" name="rect" type="Rect2">
</argument>
<description>
+ Defines the area covered by the BackBufferCopy.
</description>
</method>
<method name="get_rect" qualifiers="const">
<return type="Rect2">
</return>
<description>
+ Return the area covered by the BackBufferCopy.
</description>
</method>
<method name="set_copy_mode">
<argument index="0" name="copy_mode" type="int">
</argument>
<description>
+ Set the copy mode of the BackBufferCopy (refer to constants section).
</description>
</method>
<method name="get_copy_mode" qualifiers="const">
<return type="int">
</return>
<description>
+ Return the copy mode currently applied to the BackBufferCopy (refer to constants section).
</description>
</method>
</methods>
<constants>
<constant name="COPY_MODE_DISABLED" value="0">
+ Disables the buffering mode. This means the BackBufferCopy node will directly use the portion of screen it covers.
</constant>
<constant name="COPY_MODE_RECT" value="1">
+ Sets the copy mode to a region.
</constant>
<constant name="COPY_MODE_VIEWPORT" value="2">
+ Sets the copy mode to the entire screen.
</constant>
</constants>
</class>
@@ -5655,6 +5756,32 @@
Return the visual state used to draw the button. This is useful mainly when implementing your own draw code by either overriding _draw() or connecting to "draw" signal. The visual state of the button is defined by the DRAW_* enum.
</description>
</method>
+ <method name="set_enabled_focus_mode">
+ <argument index="0" name="mode" type="int">
+ </argument>
+ <description>
+ Sets the focus access mode to use when switching between enabled/disabled (see [method Control.set_focus_mode] and [method set_disabled]).
+ </description>
+ </method>
+ <method name="get_enabled_focus_mode" qualifiers="const">
+ <return type="int">
+ </return>
+ <description>
+ Returns focus access mode used when switching between enabled/disabled (see [method Control.set_focus_mode] and [method set_disabled]).
+ </description>
+ </method>
+ <method name="set_shortcut">
+ <argument index="0" name="shortcut" type="Object">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="get_shortcut" qualifiers="const">
+ <return type="Object">
+ </return>
+ <description>
+ </description>
+ </method>
</methods>
<signals>
<signal name="released">
@@ -7268,12 +7395,14 @@
<argument index="0" name="degrees" type="float">
</argument>
<description>
+ Set rotation of the layer in degree.
</description>
</method>
<method name="get_rotationd" qualifiers="const">
<return type="float">
</return>
<description>
+ Get rotation of the layer in degree.
</description>
</method>
<method name="set_scale">
@@ -8200,37 +8329,37 @@
</methods>
<members>
<member name="r" type="float">
- Red (0 to 1)
+ Red (0 to 1)
</member>
<member name="g" type="float">
- Green (0 to 1)
+ Green (0 to 1)
</member>
<member name="b" type="float">
- Blue (0 to 1)
+ Blue (0 to 1)
</member>
<member name="a" type="float">
- Alpha (0 to 1)
+ Alpha (0 to 1)
</member>
<member name="h" type="float">
- Hue (0 to 1)
+ Hue (0 to 1)
</member>
<member name="s" type="float">
- Saturation (0 to 1)
+ Saturation (0 to 1)
</member>
<member name="v" type="float">
- Value (0 to 1)
+ Value (0 to 1)
</member>
<member name="r8" type="int">
- Red (0 to 255)
+ Red (0 to 255)
</member>
<member name="g8" type="int">
- Green (0 to 255)
+ Green (0 to 255)
</member>
<member name="b8" type="int">
- Blue (0 to 255)
+ Blue (0 to 255)
</member>
<member name="a8" type="int">
- Alpha (0 to 255)
+ Alpha (0 to 255)
</member>
</members>
<constants>
@@ -8886,7 +9015,7 @@
</argument>
<description>
Change the anchor (ANCHOR_BEGIN, ANCHOR_END, ANCHOR_RATIO) type for a margin (MARGIN_LEFT, MARGIN_TOP, MARGIN_RIGHT, MARGIN_BOTTOM). Changing the anchor mode converts the current margin offset from the previous anchor mode to the new one, so margin offsets ([method set_margin]) must be done after setting anchors, or at the same time ([method set_anchor_and_margin])
-
+
Additionally, [code]keep_margin[/code] controls whether margins should be left the same, or changed to keep the same position and size on-screen.
</description>
</method>
@@ -9086,6 +9215,13 @@
Set the focus access mode for the control (FOCUS_NONE, FOCUS_CLICK, FOCUS_ALL). Only one Control can be focused at the same time, and it will receive keyboard signals.
</description>
</method>
+ <method name="get_focus_mode" qualifiers="const">
+ <return type="int">
+ </return>
+ <description>
+ Returns the focus access mode for the control (FOCUS_NONE, FOCUS_CLICK, FOCUS_ALL) (see [method set_focus_mode]).
+ </description>
+ </method>
<method name="has_focus" qualifiers="const">
<return type="bool">
</return>
@@ -10176,7 +10312,7 @@ This approximation makes straight segments between each point, then subdivides t
<return type="Array">
</return>
<description>
- Return the list of keys in the dictionary.
+ Return the list of keys in the [Dictionary].
</description>
</method>
<method name="parse_json">
@@ -10202,6 +10338,13 @@ This approximation makes straight segments between each point, then subdivides t
Return the dictionary as json text.
</description>
</method>
+ <method name="values">
+ <return type="Array">
+ </return>
+ <description>
+ Return the list of values in the [Dictionary].
+ </description>
+ </method>
</methods>
<constants>
</constants>
@@ -10467,6 +10610,40 @@ This approximation makes straight segments between each point, then subdivides t
<description>
</description>
</method>
+ <method name="add_fallback">
+ <argument index="0" name="data" type="DynamicFontData">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="set_fallback">
+ <argument index="0" name="idx" type="int">
+ </argument>
+ <argument index="1" name="data" type="DynamicFontData">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="get_fallback" qualifiers="const">
+ <return type="DynamicFontData">
+ </return>
+ <argument index="0" name="idx" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="remove_fallback">
+ <argument index="0" name="idx" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="get_fallback_count" qualifiers="const">
+ <return type="int">
+ </return>
+ <description>
+ </description>
+ </method>
</methods>
<constants>
</constants>
@@ -10501,14 +10678,14 @@ This approximation makes straight segments between each point, then subdivides t
This function is called for each file exported and
depending from the return value one of many things
might happen.
-
+
1) If returned value is null, the file is exported
as is.
-
+
2) If the returned value is a RawAray (array of
bytes), the content of that array becomes the new
file being exported.
-
+
3) If the file must also change it's name when
exported, then a [Dictionary] must be returned with
two fields: 'name' with the new filename and 'data'
@@ -10678,12 +10855,18 @@ This approximation makes straight segments between each point, then subdivides t
</brief_description>
<description>
Import plugins make it easy to handle importing of external assets
- into a project.
-
+ into a project.
+
They way they work is not that obvious though, so please make sure
to read the documentation, tutorials and examples.
</description>
<methods>
+ <method name="can_reimport_multiple_files" qualifiers="virtual">
+ <return type="bool">
+ </return>
+ <description>
+ </description>
+ </method>
<method name="custom_export" qualifiers="virtual">
<return type="RawArray">
</return>
@@ -10696,7 +10879,7 @@ This approximation makes straight segments between each point, then subdivides t
when exported. The only exception is in some cases
when the file must be re-imported for different
platforms (ie. texture compression).
-
+
If you want to customize the export process, it's
recommended to use [EditorExportPlugin.custom_export]
instead.
@@ -10708,7 +10891,7 @@ This approximation makes straight segments between each point, then subdivides t
<description>
Get the name of the import plugin, which will be
used to identify content imported by this plugin.
-
+
Try to use lowecase and underscores if possible.
</description>
</method>
@@ -10733,23 +10916,23 @@ This approximation makes straight segments between each point, then subdivides t
(from the dialog) or re-import
(manual or automatic when external source files
changed).
-
+
An import process generally works like this:
-
+
1) Check the metadata for source files and options.
Metadata is either generated in the import dialog or
taken from an existing resource upon reimport.
-
+
2) Perform the import process into a new resource.
Some times the resource being re-imported may be already loaded
and in use, so checking for this by using
[ResourceLoader.has] is recommended. Otherwise
create a new resource.
-
+
3) Set the metadata from the argument into the existing or new
resource being created using
[Resource.set_import_metadata].
-
+
4) Save the resource into 'path' (function argument)
</description>
</method>
@@ -10762,12 +10945,12 @@ This approximation makes straight segments between each point, then subdivides t
when the user chooses to re-import the resource
(from filesystem). In the later case, the path for
the existing file is supplied in the argument.
-
+
If the path is supplied, it is recommended to read
the import metadata with
[ResourceLoader.load_import_metadata] and fill in
the fields with the values contained there.
-
+
The dialog can be shown in any way (just use a
ConfirmationDialog and pop it up). Upon
confirmation, fill up a ResourceImportMetadata and
@@ -10775,6 +10958,20 @@ This approximation makes straight segments between each point, then subdivides t
this information.
</description>
</method>
+ <method name="import_from_drop" qualifiers="virtual">
+ <argument index="0" name="files" type="StringArray">
+ </argument>
+ <argument index="1" name="dest_path" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="reimport_multiple_files" qualifiers="virtual">
+ <argument index="0" name="files" type="StringArray">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="validate_source_path">
<return type="String">
</return>
@@ -10810,8 +11007,8 @@ This approximation makes straight segments between each point, then subdivides t
This method is called when the editor is about to
save the project, switch to another tab, etc. It
asks the plugin to apply any pending state changes
- to ensure consistency.
-
+ to ensure consistency.
+
This is used, for example, in shader editors to let
the plugin know that it must apply the shader code
being written by the user to the object.
@@ -10855,7 +11052,7 @@ This approximation makes straight segments between each point, then subdivides t
object type derived from CanvasItem to capture the input in the 2D editor
viewport. The function is only being called if your
object is being edited.
-
+
Return true if you want to capture the input,
otherwise false.
</description>
@@ -10872,11 +11069,11 @@ This approximation makes straight segments between each point, then subdivides t
given objet type derived from Spatial to capture the
input of the viewport. The function is only being
called if your object is being edited.
-
+
By using the [InputEvent] and the [Camera] arguments
it's pretty easy to do raycasts into space using
Camera functions.
-
+
Return true if you want to capture the input,
otherwise false.
</description>
@@ -10938,7 +11135,7 @@ This approximation makes straight segments between each point, then subdivides t
This function will be called when the editor is
requested to become visible. It is used for plugins
that edit a specific object type.
-
+
Remember that you have to manage the visibility of
all your editor controls manually.
</description>
@@ -10959,11 +11156,11 @@ This approximation makes straight segments between each point, then subdivides t
Add a custom control to a container (see
CONTAINER_* enum). There are many locations where
custom controls can be added in the editor UI.
-
+
Please remember that you have to manage the
visibility of your custom controls yourself (and likely
hide it after adding it).
-
+
If your plugin is being removed, also make sure to
remove your custom controls too.
</description>
@@ -10976,7 +11173,7 @@ This approximation makes straight segments between each point, then subdivides t
<description>
Add a control to the bottom panel (together with
Output, Debug, Animation, etc).
-
+
If your plugin is being removed, also make sure to
remove your control by calling [method
remove_control_from_bottom_panel].
@@ -10989,12 +11186,12 @@ This approximation makes straight segments between each point, then subdivides t
</argument>
<description>
Add the control to a specific dock slot (see DOCK_*
- enum for options).
-
+ enum for options).
+
If the dock is repositioned and as long as the
plugin is active, the editor will save the dock
position on further sessions.
-
+
If your plugin is being removed, also make sure to
remove your control by calling [method
remove_control_from_docks].
@@ -11031,16 +11228,16 @@ This approximation makes straight segments between each point, then subdivides t
Add a custom type, which will appear in the list of
nodes or resources. An icon can be optionally
passed.
-
+
When given node or resource is selected, the base
type will be instanced (ie, "Spatial", "Control",
"Resource"), then the script will be loaded and set
to this object.
-
+
You can use the [EditorPlugin.handles] to check if
your custom object is being edited by checking the
- script or using 'extends' keyword.
-
+ script or using 'extends' keyword.
+
During run-time, this will be a simple object with a
script so this function does not need to be called
then.
@@ -11061,7 +11258,7 @@ This approximation makes straight segments between each point, then subdivides t
Add an import plugin. These plugins manage importing
external content (from outside the project) into
formats the engine can understand.
-
+
On exit, don't forget to remove the plugin by
calling [method remove_import_plugin]
</description>
@@ -11140,6 +11337,8 @@ This approximation makes straight segments between each point, then subdivides t
</constant>
<constant name="CONTAINER_CANVAS_EDITOR_SIDE" value="5">
</constant>
+ <constant name="CONTAINER_PROPERTY_EDITOR_BOTTOM" value="7">
+ </constant>
<constant name="DOCK_SLOT_LEFT_UL" value="0">
</constant>
<constant name="DOCK_SLOT_LEFT_BL" value="1">
@@ -11175,7 +11374,7 @@ This approximation makes straight segments between each point, then subdivides t
<description>
This function is called upon import with the
imported scene.
-
+
Just do any changes desired to the scene and return
it. If null is returned, import will fail and throw
an error to the user.
@@ -11265,14 +11464,14 @@ This approximation makes straight segments between each point, then subdivides t
<description>
Object that holds the project-independent editor settings. These
settings are generally visible in the Editor Settings menu.
-
+
Accessing the settings is done by using the regular [Object] API,
such as.
-
+
settings.set(prop,value)
-
+
settings.get(prop)
-
+
list_of_settings = settings.get_property_list()
</description>
<methods>
@@ -11289,9 +11488,9 @@ This approximation makes straight segments between each point, then subdivides t
<description>
Get the global settings path for the engine. Inside
this path you can find some standard paths such as:
-
+
settings/tmp - used for temporary storage of files
-
+
settings/templates - where export templates are
located
</description>
@@ -11367,7 +11566,7 @@ This approximation makes straight segments between each point, then subdivides t
<description>
Commit a handle being edited (handles must have been
prevously added by [method add_handles]).
-
+
If the cancel parameter is true, an option to
restore the edited value to the original is
provided.
@@ -11381,7 +11580,7 @@ This approximation makes straight segments between each point, then subdivides t
<description>
Get the name of an edited handle (handles must have
been previously added by [method add_handles]).
-
+
Handles can be named for reference to the user when editing.
</description>
</method>
@@ -11413,8 +11612,8 @@ This approximation makes straight segments between each point, then subdivides t
<description>
This function is used when the user drags a gizmo
handle (previously added with [method add_handles])
- in screen coordinates.
-
+ in screen coordinates.
+
The [Camera] is also provided
so screen coordinates can be converted to raycasts.
</description>
@@ -11430,7 +11629,7 @@ This approximation makes straight segments between each point, then subdivides t
Add lines to the gizmo (as sets of 2 points), with a
given material. The lines are used for visualizing
the gizmo.
-
+
Call this function during [method redraw].
</description>
</method>
@@ -11444,7 +11643,7 @@ This approximation makes straight segments between each point, then subdivides t
<description>
Add a mesh to the gizmo, this is used for
visualization.
-
+
Call this function during [method redraw].
</description>
</method>
@@ -11461,7 +11660,7 @@ This approximation makes straight segments between each point, then subdivides t
Add collision triangles to the gizmo for picking. A
[TriangleMesh] can be generated from a regular
[Mesh] too.
-
+
Call this function during [method redraw].
</description>
</method>
@@ -11472,7 +11671,7 @@ This approximation makes straight segments between each point, then subdivides t
</argument>
<description>
Add an unscaled billboard for visualization.
-
+
Call this function during [method redraw].
</description>
</method>
@@ -11486,10 +11685,10 @@ This approximation makes straight segments between each point, then subdivides t
<description>
Add a list of handles (points) which can be used to
deform the object being edited.
-
+
There are virtual functions which will be called
upon editing of these handles.
-
+
Call this function during [method redraw].
</description>
</method>
@@ -11499,7 +11698,7 @@ This approximation makes straight segments between each point, then subdivides t
<description>
Call this function once and upon creation of the
gizmo, otherwise no other function will work.
-
+
The argument is the node being edited by the gizmo.
</description>
</method>
@@ -12250,18 +12449,21 @@ This approximation makes straight segments between each point, then subdivides t
<argument index="0" name="dir" type="String">
</argument>
<description>
+ Set the current working directory of the file dialog.
</description>
</method>
<method name="set_current_file">
<argument index="0" name="file" type="String">
</argument>
<description>
+ Set the current selected file name of the file dialog.
</description>
</method>
<method name="set_current_path">
<argument index="0" name="path" type="String">
</argument>
<description>
+ Set the current selected file path of the file dialog.
</description>
</method>
<method name="set_mode">
@@ -12282,6 +12484,7 @@ This approximation makes straight segments between each point, then subdivides t
<return type="VBoxContainer">
</return>
<description>
+ Return the vertical box container of the dialog, custom controls can be added to it.
</description>
</method>
<method name="set_access">
@@ -12314,6 +12517,7 @@ This approximation makes straight segments between each point, then subdivides t
</method>
<method name="invalidate">
<description>
+ Invalidate and update the current dialog content list.
</description>
</method>
</methods>
@@ -12351,6 +12555,7 @@ This approximation makes straight segments between each point, then subdivides t
The dialog functions as a folder selector, disallowing the selection of any file.
</constant>
<constant name="MODE_OPEN_ANY" value="3">
+ The dialog allows the selection of a file or a directory.
</constant>
<constant name="MODE_SAVE_FILE" value="4">
The dialog will warn when a file exists.
@@ -14248,8 +14453,11 @@ This approximation makes straight segments between each point, then subdivides t
</class>
<class name="HTTPClient" inherits="Reference" category="Core">
<brief_description>
+ Hyper-text transfer protocol client.
</brief_description>
<description>
+ Hyper-text transfer protocol client. Supports SSL and SSL server certificate verification.
+ Can be reused to connect to different hosts and make many requests.
</description>
<methods>
<method name="connect">
@@ -14273,12 +14481,14 @@ This approximation makes straight segments between each point, then subdivides t
<argument index="0" name="connection" type="StreamPeer">
</argument>
<description>
+ Set connection to use, for this client.
</description>
</method>
<method name="get_connection" qualifiers="const">
<return type="StreamPeer">
</return>
<description>
+ Return current connection.
</description>
</method>
<method name="request_raw">
@@ -14290,9 +14500,12 @@ This approximation makes straight segments between each point, then subdivides t
</argument>
<argument index="2" name="headers" type="StringArray">
</argument>
- <argument index="3" name="body" type="RawArray" default="&quot;&quot;">
+ <argument index="3" name="body" type="RawArray">
</argument>
<description>
+ Sends a raw request to the connected host. The url is what is normally behind the hostname, i.e. in [code]http://somehost.com/index.php[/code], url would be "index.php".
+ Headers are HTTP request headers.
+ Sends body raw, as a byte array, does not encode it in any way.
</description>
</method>
<method name="request">
@@ -14338,30 +14551,35 @@ This approximation makes straight segments between each point, then subdivides t
</method>
<method name="close">
<description>
+ Cloces the current connection, allows for reusal of [HTTPClient].
</description>
</method>
<method name="has_response" qualifiers="const">
<return type="bool">
</return>
<description>
+ Return whether this [HTTPClient] has a response available.
</description>
</method>
<method name="is_response_chunked" qualifiers="const">
<return type="bool">
</return>
<description>
+ Return whether this [HTTPClient] has a response that is chunked.
</description>
</method>
<method name="get_response_code" qualifiers="const">
<return type="int">
</return>
<description>
+ Return the HTTP status code of the response.
</description>
</method>
<method name="get_response_headers">
<return type="StringArray">
</return>
<description>
+ Return the response headers.
</description>
</method>
<method name="get_response_headers_as_dictionary">
@@ -14377,32 +14595,35 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8)
<return type="int">
</return>
<description>
+ Return the response's body length.
</description>
</method>
<method name="read_response_body_chunk">
<return type="RawArray">
</return>
<description>
+ Reads one chunk from the response.
</description>
</method>
<method name="set_read_chunk_size">
<argument index="0" name="bytes" type="int">
</argument>
<description>
- Sets the size of the buffer used and maximum bytes to read per iteration
+ Sets the size of the buffer used and maximum bytes to read per iteration. see [method read_response_body_chunk]
</description>
</method>
<method name="set_blocking_mode">
<argument index="0" name="enabled" type="bool">
</argument>
<description>
- If set to true, execute will wait until all data is read from the response.
+ If set to true, execution will block until all data is read from the response.
</description>
</method>
<method name="is_blocking_mode_enabled" qualifiers="const">
<return type="bool">
</return>
<description>
+ Return whether blocking mode is enabled.
</description>
</method>
<method name="get_status" qualifiers="const">
@@ -14575,8 +14796,11 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8)
</class>
<class name="HTTPRequest" inherits="Node" category="Core">
<brief_description>
+ A Node with the ability to send HTTP requests.
</brief_description>
<description>
+ A Node with the ability to send HTTP requests. Uses a [HTTPClient] internally, supports HTTPS.
+ Can be used to make HTTP requests or download files via HTTP.
</description>
<methods>
<method name="request">
@@ -14589,76 +14813,91 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8)
<argument index="2" name="ssl_validate_domain" type="bool" default="true">
</argument>
<description>
+ Make a HTTP GET request. The url is the complete url including "http://" or "https://" which will be parsed for a host and a port.
+ The custom_headers are HTTP request headers which will be used. If User-Agent is not specified a Godot specific will be used.
+ The ssl_validate_domain specifies if in case of HTTPS the server certificate should be verified.
</description>
</method>
<method name="cancel_request">
<description>
+ Cancel the current request.
</description>
</method>
<method name="get_http_client_status" qualifiers="const">
<return type="int">
</return>
<description>
+ Return the current status of the underlying [HTTPClient].
</description>
</method>
<method name="set_use_threads">
<argument index="0" name="enable" type="bool">
</argument>
<description>
+ Make this HTTPRequest use threads.
</description>
</method>
<method name="is_using_threads" qualifiers="const">
<return type="bool">
</return>
<description>
+ Whether this request is using threads.
</description>
</method>
<method name="set_body_size_limit">
<argument index="0" name="bytes" type="int">
</argument>
<description>
+ Set the response body size limit.
</description>
</method>
<method name="get_body_size_limit" qualifiers="const">
<return type="int">
</return>
<description>
+ Return current body size limit.
</description>
</method>
<method name="set_max_redirects">
<argument index="0" name="amount" type="int">
</argument>
<description>
+ Set the maximum amount of redirects the request will follow.
</description>
</method>
<method name="get_max_redirects" qualifiers="const">
<return type="int">
</return>
<description>
+ Return the maximum amount of redirects that will be followed.
</description>
</method>
<method name="set_download_file">
<argument index="0" name="path" type="String">
</argument>
<description>
+ Set the file to download into. Outputs the response body into the file.
</description>
</method>
<method name="get_download_file" qualifiers="const">
<return type="String">
</return>
<description>
+ Return the file this request will download into.
</description>
</method>
<method name="get_downloaded_bytes" qualifiers="const">
<return type="int">
</return>
<description>
+ Return the amount of bytes this HTTPRequest downloaded.
</description>
</method>
<method name="get_body_size" qualifiers="const">
<return type="int">
</return>
<description>
+ Return the response body length.
</description>
</method>
</methods>
@@ -14673,31 +14912,45 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8)
<argument index="3" name="body" type="RawArray">
</argument>
<description>
+ This signal is emitted upon request completion.
</description>
</signal>
</signals>
<constants>
<constant name="RESULT_SUCCESS" value="0">
+ Request successful.
</constant>
<constant name="RESULT_CHUNKED_BODY_SIZE_MISMATCH" value="1">
</constant>
<constant name="RESULT_CANT_CONNECT" value="2">
+ Request failed while connecting.
</constant>
<constant name="RESULT_CANT_RESOLVE" value="3">
+ Request failed while resolving.
</constant>
<constant name="RESULT_CONNECTION_ERROR" value="4">
+ Request failed due to connection(read/write) error.
</constant>
<constant name="RESULT_SSL_HANDSHAKE_ERROR" value="5">
+ Request failed on SSL handshake.
</constant>
<constant name="RESULT_NO_RESPONSE" value="6">
+ Request does not have a response(yet).
</constant>
<constant name="RESULT_BODY_SIZE_LIMIT_EXCEEDED" value="7">
+ Request exceded it's maximum size limit, see [method set_body_size_limit].
</constant>
<constant name="RESULT_REQUEST_FAILED" value="8">
+ Request failed. (unused)
</constant>
- <constant name="RESULT_REDIRECT_LIMIT_REACHED" value="11">
+ <constant name="RESULT_DOWNLOAD_FILE_CANT_OPEN" value="9">
+ HTTPRequest couldn't open the download file.
</constant>
<constant name="RESULT_DOWNLOAD_FILE_WRITE_ERROR" value="10">
+ HTTPRequest couldn't write to the download file.
+ </constant>
+ <constant name="RESULT_REDIRECT_LIMIT_REACHED" value="11">
+ Request reached it's maximum redirect limit, see [method set_max_redirects].
</constant>
</constants>
</class>
@@ -15370,6 +15623,13 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8)
If the device has an accelerometer, this will return the movement.
</description>
</method>
+ <method name="get_magnetometer">
+ <return type="Vector3">
+ </return>
+ <description>
+ If the device has a magnetometer, this will return the magnetic field strength in micro-Tesla for all axes.
+ </description>
+ </method>
<method name="get_mouse_speed" qualifiers="const">
<return type="Vector2">
</return>
@@ -16325,6 +16585,7 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8)
<argument index="0" name="action" type="String">
</argument>
<description>
+ Whether this InputMap has an action with name "action".
</description>
</method>
<method name="get_action_id" qualifiers="const">
@@ -16333,6 +16594,7 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8)
<argument index="0" name="action" type="String">
</argument>
<description>
+ Return the id of an action.
</description>
</method>
<method name="get_action_from_id" qualifiers="const">
@@ -16341,18 +16603,28 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8)
<argument index="0" name="id" type="int">
</argument>
<description>
+ Return the action from an id.
+ </description>
+ </method>
+ <method name="get_actions">
+ <return type="Array">
+ </return>
+ <description>
+ Return an [Array] of all actions in the [InputMap].
</description>
</method>
<method name="add_action">
<argument index="0" name="action" type="String">
</argument>
<description>
+ Add an action to the [InputMap].
</description>
</method>
<method name="erase_action">
<argument index="0" name="action" type="String">
</argument>
<description>
+ Remove an action from the [InputMap].
</description>
</method>
<method name="action_add_event">
@@ -16361,6 +16633,7 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8)
<argument index="1" name="event" type="InputEvent">
</argument>
<description>
+ Add an [InputEvent] to action. This [InputEvent] will trigger the action.
</description>
</method>
<method name="action_has_event">
@@ -16371,6 +16644,7 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8)
<argument index="1" name="event" type="InputEvent">
</argument>
<description>
+ Whether an action has an [InputEvent] associated with it.
</description>
</method>
<method name="action_erase_event">
@@ -16379,6 +16653,7 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8)
<argument index="1" name="event" type="InputEvent">
</argument>
<description>
+ Remove an [InputEvent] from an action.
</description>
</method>
<method name="get_action_list">
@@ -16387,6 +16662,7 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8)
<argument index="0" name="action" type="String">
</argument>
<description>
+ Return an [Array] of [InputEvent]s associated with an action.
</description>
</method>
<method name="event_is_action" qualifiers="const">
@@ -16401,6 +16677,7 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8)
</method>
<method name="load_from_globals">
<description>
+ Clears the [InputMap] and loads it from [Globals].
</description>
</method>
</methods>
@@ -16806,6 +17083,18 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8)
<description>
</description>
</method>
+ <method name="set_same_column_width">
+ <argument index="0" name="enable" type="bool">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="is_same_column_width" qualifiers="const">
+ <return type="int">
+ </return>
+ <description>
+ </description>
+ </method>
<method name="set_max_text_lines">
<argument index="0" name="lines" type="int">
</argument>
@@ -16866,11 +17155,49 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8)
<description>
</description>
</method>
+ <method name="set_max_icon_size">
+ <argument index="0" name="size" type="Vector2">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="get_max_icon_size" qualifiers="const">
+ <return type="Vector2">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="set_icon_scale">
+ <argument index="0" name="scale" type="float">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="get_icon_scale" qualifiers="const">
+ <return type="float">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="set_allow_rmb_select">
+ <argument index="0" name="allow" type="bool">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="get_allow_rmb_select" qualifiers="const">
+ <return type="bool">
+ </return>
+ <description>
+ </description>
+ </method>
<method name="get_item_at_pos" qualifiers="const">
<return type="int">
</return>
<argument index="0" name="pos" type="Vector2">
</argument>
+ <argument index="1" name="exact" type="bool" default="false">
+ </argument>
<description>
</description>
</method>
@@ -16894,6 +17221,14 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8)
<description>
</description>
</signal>
+ <signal name="item_rmb_selected">
+ <argument index="0" name="index" type="int">
+ </argument>
+ <argument index="1" name="atpos" type="Vector2">
+ </argument>
+ <description>
+ </description>
+ </signal>
<signal name="item_selected">
<argument index="0" name="index" type="int">
</argument>
@@ -17510,6 +17845,8 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8)
<theme_items>
<theme_item name="shadow_offset_x" type="int">
</theme_item>
+ <theme_item name="line_spacing" type="int">
+ </theme_item>
<theme_item name="shadow_offset_y" type="int">
</theme_item>
<theme_item name="shadow_as_outline" type="int">
@@ -17734,266 +18071,314 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8)
</class>
<class name="Light2D" inherits="Node2D" category="Core">
<brief_description>
+ Node that casts light in a 2D environment.
</brief_description>
<description>
+ Node that casts light in a 2D environment. Light is defined by a (usually grayscale) texture, a color, an energy value, a mode (see constants), and various other parameters (range and shadows-related). Note that Light2D can be used as a mask.
</description>
<methods>
<method name="set_enabled">
<argument index="0" name="enabled" type="bool">
</argument>
<description>
+ Switches the Light2D on or off, depending on the 'enabled' parameter.
</description>
</method>
<method name="is_enabled" qualifiers="const">
<return type="bool">
</return>
<description>
+ Return true if the Light2D is enabled, false if it is not.
</description>
</method>
<method name="set_texture">
<argument index="0" name="texture" type="Object">
</argument>
<description>
+ Set the texture of the Light2D.
</description>
</method>
<method name="get_texture" qualifiers="const">
<return type="Object">
</return>
<description>
+ Return the texture of the Light2D.
</description>
</method>
<method name="set_texture_offset">
<argument index="0" name="texture_offset" type="Vector2">
</argument>
<description>
+ Set the offset of the light texture.
</description>
</method>
<method name="get_texture_offset" qualifiers="const">
<return type="Vector2">
</return>
<description>
+ Return the offset of the light texture.
</description>
</method>
<method name="set_color">
<argument index="0" name="color" type="Color">
</argument>
<description>
+ Set the color of the Light2D.
</description>
</method>
<method name="get_color" qualifiers="const">
<return type="Color">
</return>
<description>
+ Return the color of the Light2D.
</description>
</method>
<method name="set_height">
<argument index="0" name="height" type="float">
</argument>
<description>
+ Set the height of the Light2D. Used with 2D normalmapping.
</description>
</method>
<method name="get_height" qualifiers="const">
<return type="float">
</return>
<description>
+ Return the height of the Light2D. Used with 2D normalmapping.
</description>
</method>
<method name="set_energy">
<argument index="0" name="energy" type="float">
</argument>
<description>
+ Set the energy value of the Light2D. The bigger the value, the stronger the light.
</description>
</method>
<method name="get_energy" qualifiers="const">
<return type="float">
</return>
<description>
+ Return the energy value of the Light2D.
</description>
</method>
<method name="set_texture_scale">
<argument index="0" name="texture_scale" type="float">
</argument>
<description>
+ Set the scale value of the light texture.
</description>
</method>
<method name="get_texture_scale" qualifiers="const">
<return type="float">
</return>
<description>
+ Return the scale value of the light texture.
</description>
</method>
<method name="set_z_range_min">
<argument index="0" name="z" type="int">
</argument>
<description>
+ Set the minimum Z value that objects of the scene have to be in order to be affected by the Light2D.
</description>
</method>
<method name="get_z_range_min" qualifiers="const">
<return type="int">
</return>
<description>
+ Get the minimum Z value that objects of the scene have to be in order to be affected by the Light2D.
</description>
</method>
<method name="set_z_range_max">
<argument index="0" name="z" type="int">
</argument>
<description>
+ Set the maximum Z value that objects of the scene can be in order to be affected by the Light2D.
</description>
</method>
<method name="get_z_range_max" qualifiers="const">
<return type="int">
</return>
<description>
+ Get the maximum Z value that objects of the scene can be in order to be affected by the Light2D.
</description>
</method>
<method name="set_layer_range_min">
<argument index="0" name="layer" type="int">
</argument>
<description>
+ Set the minimum layer value of objects of the scene that are affected by the Light2D.
</description>
</method>
<method name="get_layer_range_min" qualifiers="const">
<return type="int">
</return>
<description>
+ Get the minimum layer value of objects of the scene that are affected by the Light2D.
</description>
</method>
<method name="set_layer_range_max">
<argument index="0" name="layer" type="int">
</argument>
<description>
+ Set the maximum layer value of objects of the scene that are affected by the Light2D.
</description>
</method>
<method name="get_layer_range_max" qualifiers="const">
<return type="int">
</return>
<description>
+ Set the maximum layer value of objects of the scene that are affected by the Light2D.
</description>
</method>
<method name="set_item_mask">
<argument index="0" name="item_mask" type="int">
</argument>
<description>
+ Set the item mask of the Light2D to 'item_mask' value.
</description>
</method>
<method name="get_item_mask" qualifiers="const">
<return type="int">
</return>
<description>
+ Return the item mask of the Light2D.
</description>
</method>
<method name="set_item_shadow_mask">
<argument index="0" name="item_shadow_mask" type="int">
</argument>
<description>
+ Set the item shadow mask to 'item_shadow_mask' value.
</description>
</method>
<method name="get_item_shadow_mask" qualifiers="const">
<return type="int">
</return>
<description>
+ Return the item shadow mask of the Light2D.
</description>
</method>
<method name="set_mode">
<argument index="0" name="mode" type="int">
</argument>
<description>
+ Set the behaviour mode of the Light2D. Use constants defined in the constants section.
</description>
</method>
<method name="get_mode" qualifiers="const">
<return type="int">
</return>
<description>
+ Return the current mode set to the Light2D.
</description>
</method>
<method name="set_shadow_enabled">
<argument index="0" name="enabled" type="bool">
</argument>
<description>
+ Enable or disable shadows casting from this Light2D according to the 'enabled' parameter.
</description>
</method>
<method name="is_shadow_enabled" qualifiers="const">
<return type="bool">
</return>
<description>
+ Return true if shadow casting is enabled for this Light2D, else return false.
</description>
</method>
<method name="set_shadow_buffer_size">
<argument index="0" name="size" type="int">
</argument>
<description>
+ Set the shadow buffer size.
</description>
</method>
<method name="get_shadow_buffer_size" qualifiers="const">
<return type="int">
</return>
<description>
+ Return the shadow buffer size.
</description>
</method>
<method name="set_shadow_esm_multiplier">
<argument index="0" name="multiplier" type="float">
</argument>
<description>
+ Set the Exponential Shadow Multiplier (ESM) value of the Light2D.
</description>
</method>
<method name="get_shadow_esm_multiplier" qualifiers="const">
<return type="float">
</return>
<description>
+ Return the Exponential Shadow Multiplier (ESM) value of the Light2D.
</description>
</method>
<method name="set_shadow_color">
<argument index="0" name="shadow_color" type="Color">
</argument>
<description>
+ Set the color of casted shadows for this Light2D.
</description>
</method>
<method name="get_shadow_color" qualifiers="const">
<return type="Color">
</return>
<description>
+ Return the color of casted shadows for this Light2D.
</description>
</method>
</methods>
<constants>
<constant name="MODE_ADD" value="0">
+ Adds the value of pixels corresponding to the Light2D to the values of pixels under it. This is the common behaviour of a light.
</constant>
<constant name="MODE_SUB" value="1">
+ Substract the value of pixels corresponding to the Light2D to the values of pixels under it, resulting in inversed light effect.
</constant>
<constant name="MODE_MIX" value="2">
+ Mix the value of pixels corresponding to the Light2D to the values of pixels under it by linear interpolation.
</constant>
<constant name="MODE_MASK" value="3">
+ The light texture of the Light2D is used as a mask, hiding or revealing parts of the screen underneath depending on the value of each pixel of the light (mask) texture.
</constant>
</constants>
</class>
<class name="LightOccluder2D" inherits="Node2D" category="Core">
<brief_description>
+ Occludes light cast by a Light2D, thus casting shadows.
</brief_description>
<description>
+ Occludes light cast by a Light2D, thus casting shadows. The LightOccluder2D must be provided with a shape (see OccluderPolygon2D) that allows the shadow to be computed. This shape affects the resulting shadow, while the shape of the representating asset shadowed does not actually affect shadows.
</description>
<methods>
<method name="set_occluder_polygon">
<argument index="0" name="polygon" type="OccluderPolygon2D">
</argument>
<description>
+ Set the OccluderPolygon2D that defines the LightOccluder2D.
</description>
</method>
<method name="get_occluder_polygon" qualifiers="const">
<return type="OccluderPolygon2D">
</return>
<description>
+ Return the OccluderPolygon2D that defines the LightOccluder2D.
</description>
</method>
<method name="set_occluder_light_mask">
<argument index="0" name="mask" type="int">
</argument>
<description>
+ Set the LightOccluder2D light mask. The LightOccluder2D will cast shadows only from Light2Ds that belong to the same light mask(s).
</description>
</method>
<method name="get_occluder_light_mask" qualifiers="const">
<return type="int">
</return>
<description>
+ Return the light mask of the LightOccluder2D.
</description>
</method>
</methods>
@@ -18115,6 +18500,18 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8)
<description>
</description>
</method>
+ <method name="menu_option">
+ <argument index="0" name="option" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="get_menu" qualifiers="const">
+ <return type="PopupMenu">
+ </return>
+ <description>
+ </description>
+ </method>
</methods>
<signals>
<signal name="text_entered">
@@ -18141,6 +18538,20 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8)
</constant>
<constant name="ALIGN_FILL" value="3">
</constant>
+ <constant name="MENU_CUT" value="0">
+ </constant>
+ <constant name="MENU_COPY" value="1">
+ </constant>
+ <constant name="MENU_PASTE" value="2">
+ </constant>
+ <constant name="MENU_CLEAR" value="3">
+ </constant>
+ <constant name="MENU_SELECT_ALL" value="4">
+ </constant>
+ <constant name="MENU_UNDO" value="5">
+ </constant>
+ <constant name="MENU_MAX" value="6">
+ </constant>
</constants>
<theme_items>
<theme_item name="minimum_spaces" type="int">
@@ -18269,6 +18680,14 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8)
Main loop is the abstract main loop base class. All other main loop classes are derived from it. Upon application start, a [MainLoop] has to be provided to OS, else the application will exit. This happens automatically (and a [SceneTree] is created), unless a main [Script] is supplied, which may or not create and return a [MainLoop].
</description>
<methods>
+ <method name="_drop_files" qualifiers="virtual">
+ <argument index="0" name="files" type="StringArray">
+ </argument>
+ <argument index="1" name="screen" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="_finalize" qualifiers="virtual">
<description>
</description>
@@ -18367,7 +18786,13 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8)
<constants>
</constants>
<theme_items>
- <theme_item name="margin" type="int">
+ <theme_item name="margin_right" type="int">
+ </theme_item>
+ <theme_item name="margin_top" type="int">
+ </theme_item>
+ <theme_item name="margin_left" type="int">
+ </theme_item>
+ <theme_item name="margin_bottom" type="int">
</theme_item>
</theme_items>
</class>
@@ -21263,6 +21688,14 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8)
Returns the dimensions in pixels of the specified screen.
</description>
</method>
+ <method name="get_screen_dpi" qualifiers="const">
+ <return type="int">
+ </return>
+ <argument index="0" name="screen" type="int" default="0">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="get_window_position" qualifiers="const">
<return type="Vector2">
</return>
@@ -21323,24 +21756,28 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8)
<argument index="0" name="enabled" type="bool">
</argument>
<description>
+ Set whether the window is minimized.
</description>
</method>
<method name="is_window_minimized" qualifiers="const">
<return type="bool">
</return>
<description>
+ Return true if the window is minimized.
</description>
</method>
<method name="set_window_maximized">
<argument index="0" name="enabled" type="bool">
</argument>
<description>
+ Set the window size to maximized.
</description>
</method>
<method name="is_window_maximized" qualifiers="const">
<return type="bool">
</return>
<description>
+ Return true if the window is maximized.
</description>
</method>
<method name="set_borderless_window">
@@ -21578,6 +22015,7 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8)
<return type="int">
</return>
<description>
+ Return the current unix timestamp.
</description>
</method>
<method name="get_datetime_from_unix_time" qualifiers="const">
@@ -21740,6 +22178,7 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8)
<return type="String">
</return>
<description>
+ Return the absolute directory path of user data path([user://]).
</description>
</method>
<method name="get_system_dir" qualifiers="const">
@@ -27717,6 +28156,18 @@ This method controls whether the position between two cached points is interpola
Returns the polygon fill color
</description>
</method>
+ <method name="set_vertex_colors">
+ <argument index="0" name="vertex_colors" type="ColorArray">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="get_vertex_colors" qualifiers="const">
+ <return type="ColorArray">
+ </return>
+ <description>
+ </description>
+ </method>
<method name="set_texture">
<argument index="0" name="texture" type="Object">
</argument>
@@ -28040,6 +28491,42 @@ This method controls whether the position between two cached points is interpola
Adds an item with a submenu. The submenu is the name of a child PopupMenu node that would be shown when the item is clicked. An id can optionally be provided, but if is isn't provided, one will be created from the index.
</description>
</method>
+ <method name="add_icon_shortcut">
+ <argument index="0" name="texture" type="Object">
+ </argument>
+ <argument index="1" name="shortcut" type="ShortCut">
+ </argument>
+ <argument index="2" name="id" type="int" default="-1">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="add_shortcut">
+ <argument index="0" name="shortcut" type="ShortCut">
+ </argument>
+ <argument index="1" name="id" type="int" default="-1">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="add_icon_check_shortcut">
+ <argument index="0" name="texture" type="Object">
+ </argument>
+ <argument index="1" name="shortcut" type="ShortCut">
+ </argument>
+ <argument index="2" name="id" type="int" default="-1">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="add_check_shortcut">
+ <argument index="0" name="shortcut" type="ShortCut">
+ </argument>
+ <argument index="1" name="id" type="int" default="-1">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="set_item_text">
<argument index="0" name="idx" type="int">
</argument>
@@ -28094,6 +28581,14 @@ This method controls whether the position between two cached points is interpola
Sets whether the item at index "idx" is disabled or not. When it is disabled it can't be selected, or its action invoked.
</description>
</method>
+ <method name="set_item_shortcut">
+ <argument index="0" name="idx" type="int">
+ </argument>
+ <argument index="1" name="shortcut" type="ShortCut">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="set_item_submenu">
<argument index="0" name="idx" type="int">
</argument>
@@ -28164,6 +28659,14 @@ This method controls whether the position between two cached points is interpola
Return the accelerator of the item at index "idx". Accelerators are special combinations of keys that activate the item, no matter which control is focused.
</description>
</method>
+ <method name="get_item_shortcut" qualifiers="const">
+ <return type="ShortCut">
+ </return>
+ <argument index="0" name="idx" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="get_item_submenu" qualifiers="const">
<return type="String">
</return>
@@ -29391,13 +29894,13 @@ This method controls whether the position between two cached points is interpola
</methods>
<members>
<member name="pos" type="Vector2">
- Position (starting corner).
+ Position (starting corner).
</member>
<member name="size" type="Vector2">
- Size from position to end.
+ Size from position to end.
</member>
<member name="end" type="Vector2">
- Ending corner.
+ Ending corner.
</member>
</members>
<constants>
@@ -29615,13 +30118,14 @@ This method controls whether the position between two cached points is interpola
<argument index="0" name="path" type="String">
</argument>
<description>
- Set the path of the resource. This is useful mainly for editors when saving/loading, and shouldn't be changed by anything else.
+ Set the path of the resource. This is useful mainly for editors when saving/loading, and shouldn't be changed by anything else. Fails if another [Resource] already has path "path".
</description>
</method>
<method name="take_over_path">
<argument index="0" name="path" type="String">
</argument>
<description>
+ Set the path of the resource. Differs from set_path(), if another [Resource] exists with "path" it over-takes it, instead of failing.
</description>
</method>
<method name="get_path" qualifiers="const">
@@ -29724,6 +30228,14 @@ This method controls whether the position between two cached points is interpola
<description>
</description>
</method>
+ <method name="set_source_md5">
+ <argument index="0" name="idx" type="int">
+ </argument>
+ <argument index="1" name="md5" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="remove_source">
<argument index="0" name="idx" type="int">
</argument>
@@ -30289,188 +30801,221 @@ This method controls whether the position between two cached points is interpola
</class>
<class name="RigidBody" inherits="PhysicsBody" category="Core">
<brief_description>
+ Rigid body node.
</brief_description>
<description>
+ Rigid body node. This node is used for placing rigid bodies in the scene. It can contain a number of shapes, and also shift mode between regular Rigid body, Kinematic, Character or Static.
</description>
<methods>
<method name="_integrate_forces" qualifiers="virtual">
<argument index="0" name="state" type="PhysicsDirectBodyState">
</argument>
<description>
+ Called during physics processing, allowing you to read and safely modify the simulation state for the object. By default it works in addition to the usual physics behavior, but [method set_use_custom_integrator] allows you to disable the default behavior and do fully custom force integration for a body.
</description>
</method>
<method name="set_mode">
<argument index="0" name="mode" type="int">
</argument>
<description>
+ Set the body mode, from the MODE_* enum. This allows to change to a static body or a character body.
</description>
</method>
<method name="get_mode" qualifiers="const">
<return type="int">
</return>
<description>
+ Return the current body mode, see [method set_mode].
</description>
</method>
<method name="set_mass">
<argument index="0" name="mass" type="float">
</argument>
<description>
+ Set the body mass.
</description>
</method>
<method name="get_mass" qualifiers="const">
<return type="float">
</return>
<description>
+ Return the current body mass.
</description>
</method>
<method name="set_weight">
<argument index="0" name="weight" type="float">
</argument>
<description>
+ Set the body weight given standard earth-weight (gravity 9.8).
</description>
</method>
<method name="get_weight" qualifiers="const">
<return type="float">
</return>
<description>
+ Return the current body weight, given standard earth-weight (gravity 9.8).
</description>
</method>
<method name="set_friction">
<argument index="0" name="friction" type="float">
</argument>
<description>
+ Set the body friction, from 0 (frictionless) to 1 (max friction).
</description>
</method>
<method name="get_friction" qualifiers="const">
<return type="float">
</return>
<description>
+ Return the current body friction, from 0 (frictionless) to 1 (max friction).
</description>
</method>
<method name="set_bounce">
<argument index="0" name="bounce" type="float">
</argument>
<description>
+ Set the body bounciness, from 0 (no bounciness) to 1 (max bounciness).
</description>
</method>
<method name="get_bounce" qualifiers="const">
<return type="float">
</return>
<description>
+ Return the current body bounciness.
</description>
</method>
<method name="set_linear_velocity">
<argument index="0" name="linear_velocity" type="Vector3">
</argument>
<description>
+ Set the body linear velocity. Can be used sporadically, but [b]DON'T SET THIS IN EVERY FRAME[/b], because physics may be running in another thread and definitely runs at a different granularity. Use [method _integrate_forces] as your process loop if you want to have precise control of the body state.
</description>
</method>
<method name="get_linear_velocity" qualifiers="const">
<return type="Vector3">
</return>
<description>
+ Return the current body linear velocity.
</description>
</method>
<method name="set_angular_velocity">
<argument index="0" name="angular_velocity" type="Vector3">
</argument>
<description>
+ Set the body angular velocity. Can be used sporadically, but [b]DON'T SET THIS IN EVERY FRAME[/b], because physics may be running in another thread and definitely runs at a different granularity. Use [method _integrate_forces] as your process loop if you want to have precise control of the body state.
</description>
</method>
<method name="get_angular_velocity" qualifiers="const">
<return type="Vector3">
</return>
<description>
+ Return the current body angular velocity.
</description>
</method>
<method name="set_gravity_scale">
<argument index="0" name="gravity_scale" type="float">
</argument>
<description>
+ Set the gravity factor. This factor multiplies gravity intensity just for this body.
</description>
</method>
<method name="get_gravity_scale" qualifiers="const">
<return type="float">
</return>
<description>
+ Return the current body gravity scale.
</description>
</method>
<method name="set_linear_damp">
<argument index="0" name="linear_damp" type="float">
</argument>
<description>
+ Set the linear damp for this body. Default of -1, cannot be less than -1. If this value is different from -1, any linear damp derived from the world or areas will be overridden.
</description>
</method>
<method name="get_linear_damp" qualifiers="const">
<return type="float">
</return>
<description>
+ Return the current body linear damp. Default is -1.
</description>
</method>
<method name="set_angular_damp">
<argument index="0" name="angular_damp" type="float">
</argument>
<description>
+ Set the angular damp for this body. Default of -1, cannot be less than -1. If this value is different from -1, any angular damp derived from the world or areas will be overridden.
</description>
</method>
<method name="get_angular_damp" qualifiers="const">
<return type="float">
</return>
<description>
+ Return the current body angular damp. Default is -1.
</description>
</method>
<method name="set_max_contacts_reported">
<argument index="0" name="amount" type="int">
</argument>
<description>
+ Set the maximum contacts to report. Bodies can keep a log of the contacts with other bodies, this is enabled by setting the maximum amount of contacts reported to a number greater than 0.
</description>
</method>
<method name="get_max_contacts_reported" qualifiers="const">
<return type="int">
</return>
<description>
+ Return the maximum contacts that can be reported. See [method set_max_contacts_reported].
</description>
</method>
<method name="set_use_custom_integrator">
<argument index="0" name="enable" type="bool">
</argument>
<description>
+ Pass true to disable the internal force integration (like gravity or air friction) for this body. Other than collision response, the body will only move as determined by the [method _integrate_forces] function, if defined.
</description>
</method>
<method name="is_using_custom_integrator">
<return type="bool">
</return>
<description>
+ Return whether the body is using a custom integrator.
</description>
</method>
<method name="set_contact_monitor">
<argument index="0" name="enabled" type="bool">
</argument>
<description>
+ Enable contact monitoring. This allows the body to emit signals when it collides with another.
</description>
</method>
<method name="is_contact_monitor_enabled" qualifiers="const">
<return type="bool">
</return>
<description>
+ Return whether contact monitoring is enabled.
</description>
</method>
<method name="set_use_continuous_collision_detection">
<argument index="0" name="enable" type="bool">
</argument>
<description>
+ Set the continuous collision detection mode from the enum CCD_MODE_*.
+ Continuous collision detection tries to predict where a moving body will collide, instead of moving it and correcting its movement if it collided. The first is more precise, and misses less impacts by small, fast-moving objects. The second is faster to compute, but can miss small, fast-moving objects.
</description>
</method>
<method name="is_using_continuous_collision_detection" qualifiers="const">
<return type="bool">
</return>
<description>
+ Return whether this body is using continuous collision detection.
</description>
</method>
<method name="set_axis_velocity">
<argument index="0" name="axis_velocity" type="Vector3">
</argument>
<description>
+ Set an axis velocity. The velocity in the given vector axis will be set as the given vector length. This is useful for jumping behavior.
</description>
</method>
<method name="apply_impulse">
@@ -30479,48 +31024,57 @@ This method controls whether the position between two cached points is interpola
<argument index="1" name="impulse" type="Vector3">
</argument>
<description>
+ Apply a positioned impulse (which will be affected by the body mass and shape). This is the equivalent of hitting a billiard ball with a cue: a force that is applied once, and only once. Both the impulse and the offset from the body origin are in global coordinates.
</description>
</method>
<method name="set_sleeping">
<argument index="0" name="sleeping" type="bool">
</argument>
<description>
+ Set whether a body is sleeping or not. Sleeping bodies are not affected by forces until a collision or an [method apply_impulse] wakes them up. Until then, they behave like a static body.
</description>
</method>
<method name="is_sleeping" qualifiers="const">
<return type="bool">
</return>
<description>
+ Return whether the body is sleeping.
</description>
</method>
<method name="set_can_sleep">
<argument index="0" name="able_to_sleep" type="bool">
</argument>
<description>
+ Set the body ability to fall asleep when not moving. This saves an enormous amount of processor time when there are plenty of rigid bodies (non static) in a scene.
+ Sleeping bodies are not affected by forces until a collision or an [method apply_impulse] / [method set_applied_force] wakes them up. Until then, they behave like a static body.
</description>
</method>
<method name="is_able_to_sleep" qualifiers="const">
<return type="bool">
</return>
<description>
+ Return whether the body has the ability to fall asleep when not moving. See [method set_can_sleep].
</description>
</method>
<method name="set_axis_lock">
<argument index="0" name="axis_lock" type="int">
</argument>
<description>
+ Set the axis lock of the body, from the AXIS_LOCK_* enum. Axis lock stops the body from moving along the specified axis(X/Y/Z) and rotating along the other two axes.
</description>
</method>
<method name="get_axis_lock" qualifiers="const">
<return type="int">
</return>
<description>
+ Return the current axis lock of the body. One of AXIS_LOCK_* enum.
</description>
</method>
<method name="get_colliding_bodies" qualifiers="const">
<return type="Array">
</return>
<description>
+ Return a list of the bodies colliding with this one.
</description>
</method>
</methods>
@@ -30529,6 +31083,7 @@ This method controls whether the position between two cached points is interpola
<argument index="0" name="body" type="Object">
</argument>
<description>
+ Emitted when a body enters into contact with this one. Contact monitor and contacts reported must be enabled for this to work.
</description>
</signal>
<signal name="body_enter_shape">
@@ -30541,12 +31096,15 @@ This method controls whether the position between two cached points is interpola
<argument index="3" name="local_shape" type="int">
</argument>
<description>
+ Emitted when a body enters into contact with this one. Contact monitor and contacts reported must be enabled for this to work.
+ This signal not only receives the body that collided with this one, but also its [RID] (body_id), the shape index from the colliding body (body_shape), and the shape index from this body (local_shape) the other body collided with.
</description>
</signal>
<signal name="body_exit">
<argument index="0" name="body" type="Object">
</argument>
<description>
+ Emitted when a body shape exits contact with this one. Contact monitor and contacts reported must be enabled for this to work.
</description>
</signal>
<signal name="body_exit_shape">
@@ -30559,19 +31117,25 @@ This method controls whether the position between two cached points is interpola
<argument index="3" name="local_shape" type="int">
</argument>
<description>
+ Emitted when a body shape exits contact with this one. Contact monitor and contacts reported must be enabled for this to work.
+ This signal not only receives the body that stopped colliding with this one, but also its [RID] (body_id), the shape index from the colliding body (body_shape), and the shape index from this body (local_shape) the other body stopped colliding with.
</description>
</signal>
<signal name="sleeping_state_changed">
<description>
+ Emitted when the body changes it's sleeping state. Either by sleeping or waking up.
</description>
</signal>
</signals>
<constants>
<constant name="MODE_STATIC" value="1">
+ Static mode. The body behaves like a [StaticBody], and can only move by user code.
</constant>
<constant name="MODE_KINEMATIC" value="3">
+ Kinematic body. The body behaves like a [KinematicBody], and can only move by user code.
</constant>
<constant name="MODE_RIGID" value="0">
+ Rigid body. This is the "natural" state of a rigid body. It is affected by forces, and can move, rotate, and be affected by user code.
</constant>
<constant name="MODE_CHARACTER" value="2">
</constant>
@@ -30682,7 +31246,7 @@ This method controls whether the position between two cached points is interpola
<argument index="0" name="gravity_scale" type="float">
</argument>
<description>
- Set The gravity factor. This factor multiplies gravity intensity just for this body.
+ Set the gravity factor. This factor multiplies gravity intensity just for this body.
</description>
</method>
<method name="get_gravity_scale" qualifiers="const">
@@ -30795,7 +31359,7 @@ This method controls whether the position between two cached points is interpola
</argument>
<description>
Set the continuous collision detection mode from the enum CCD_MODE_*.
- Continuous collision detection tries to predict where a moving body will collide, instead of moving it and correcting its movement if it collided. The first is more precise, and misses less impacts by small, fast-moving objects. The second is faster to compute, but can miss small, fat-moving objects.
+ Continuous collision detection tries to predict where a moving body will collide, instead of moving it and correcting its movement if it collided. The first is more precise, and misses less impacts by small, fast-moving objects. The second is faster to compute, but can miss small, fast-moving objects.
</description>
</method>
<method name="get_continuous_collision_detection_mode" qualifiers="const">
@@ -30953,6 +31517,7 @@ This method controls whether the position between two cached points is interpola
</signal>
<signal name="sleeping_state_changed">
<description>
+ Emitted when the body changes it's sleeping state. Either by sleeping or waking up.
</description>
</signal>
</signals>
@@ -32259,6 +32824,12 @@ This method controls whether the position between two cached points is interpola
</method>
</methods>
<signals>
+ <signal name="node_configuration_warning_changed">
+ <argument index="0" name="node" type="Object">
+ </argument>
+ <description>
+ </description>
+ </signal>
<signal name="screen_resized">
<description>
</description>
@@ -32269,6 +32840,14 @@ This method controls whether the position between two cached points is interpola
<description>
</description>
</signal>
+ <signal name="files_dropped">
+ <argument index="0" name="files" type="StringArray">
+ </argument>
+ <argument index="1" name="screen" type="int">
+ </argument>
+ <description>
+ </description>
+ </signal>
<signal name="idle_frame">
<description>
</description>
@@ -32355,8 +32934,9 @@ This method controls whether the position between two cached points is interpola
<method name="reload">
<return type="int">
</return>
+ <argument index="0" name="keep_state" type="bool" default="false">
+ </argument>
<description>
- Reload the script. This will fail if there are existing instances.
</description>
</method>
</methods>
@@ -33618,6 +34198,48 @@ This method controls whether the position between two cached points is interpola
<constants>
</constants>
</class>
+<class name="ShortCut" inherits="Resource" category="Core">
+ <brief_description>
+ </brief_description>
+ <description>
+ </description>
+ <methods>
+ <method name="set_shortcut">
+ <argument index="0" name="event" type="InputEvent">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="get_shortcut" qualifiers="const">
+ <return type="InputEvent">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="is_valid" qualifiers="const">
+ <return type="bool">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="is_shortcut" qualifiers="const">
+ <return type="bool">
+ </return>
+ <argument index="0" name="event" type="InputEvent">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="get_as_text" qualifiers="const">
+ <return type="String">
+ </return>
+ <description>
+ </description>
+ </method>
+ </methods>
+ <constants>
+ </constants>
+</class>
<class name="Skeleton" inherits="Spatial" category="Core">
<brief_description>
Skeleton for characters and animated objects.
@@ -35191,49 +35813,120 @@ This method controls whether the position between two cached points is interpola
Sprite frame library for [AnimatedSprite].
</description>
<methods>
+ <method name="add_animation">
+ <argument index="0" name="anim" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="has_animation" qualifiers="const">
+ <return type="bool">
+ </return>
+ <argument index="0" name="anim" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="remove_animation">
+ <argument index="0" name="anim" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="rename_animation">
+ <argument index="0" name="anim" type="String">
+ </argument>
+ <argument index="1" name="newname" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="set_animation_speed">
+ <argument index="0" name="anim" type="String">
+ </argument>
+ <argument index="1" name="speed" type="float">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="get_animation_speed" qualifiers="const">
+ <return type="float">
+ </return>
+ <argument index="0" name="anim" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="set_animation_loop">
+ <argument index="0" name="anim" type="String">
+ </argument>
+ <argument index="1" name="loop" type="bool">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="get_animation_loop" qualifiers="const">
+ <return type="bool">
+ </return>
+ <argument index="0" name="anim" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="add_frame">
- <argument index="0" name="frame" type="Object">
+ <argument index="0" name="anim" type="String">
+ </argument>
+ <argument index="1" name="frame" type="Object">
</argument>
- <argument index="1" name="atpos" type="int" default="-1">
+ <argument index="2" name="atpos" type="int" default="-1">
</argument>
<description>
- Add a frame (texture).
</description>
</method>
<method name="get_frame_count" qualifiers="const">
<return type="int">
</return>
+ <argument index="0" name="anim" type="String">
+ </argument>
<description>
- Return the amount of frames.
</description>
</method>
<method name="get_frame" qualifiers="const">
<return type="Object">
</return>
- <argument index="0" name="idx" type="int">
+ <argument index="0" name="anim" type="String">
+ </argument>
+ <argument index="1" name="idx" type="int">
</argument>
<description>
- Return a texture (frame).
</description>
</method>
<method name="set_frame">
- <argument index="0" name="idx" type="int">
+ <argument index="0" name="anim" type="String">
+ </argument>
+ <argument index="1" name="idx" type="int">
</argument>
- <argument index="1" name="txt" type="Object">
+ <argument index="2" name="txt" type="Object">
</argument>
<description>
</description>
</method>
<method name="remove_frame">
- <argument index="0" name="idx" type="int">
+ <argument index="0" name="anim" type="String">
+ </argument>
+ <argument index="1" name="idx" type="int">
</argument>
<description>
- Remove a frame
</description>
</method>
<method name="clear">
+ <argument index="0" name="anim" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="clear_all">
<description>
- Clear the frames.
</description>
</method>
</methods>
@@ -35242,58 +35935,68 @@ This method controls whether the position between two cached points is interpola
</class>
<class name="StaticBody" inherits="PhysicsBody" category="Core">
<brief_description>
- PhysicsBody for static collision objects.
+ Static body for 3D Physics.
</brief_description>
<description>
- StaticBody implements a static collision [Node], by utilizing a rigid body in the [PhysicsServer]. Static bodies are used for static collision. For more information on physics body nodes, see [PhysicsBody].
+ Static body for 3D Physics. A static body is a simple body that is not intended to move. They don't consume any CPU resources in contrast to a [RigidBody3D] so they are great for scenario collision.
+ A static body can also be animated by using simulated motion mode. This is useful for implementing functionalities such as moving platforms. When this mode is active the body can be animated and automatically computes linear and angular velocity to apply in that frame and to influence other bodies.
+ Alternatively, a constant linear or angular velocity can be set for the static body, so even if it doesn't move, it affects other bodies as if it was moving (this is useful for simulating conveyor belts or conveyor wheels).
</description>
<methods>
<method name="set_constant_linear_velocity">
<argument index="0" name="vel" type="Vector3">
</argument>
<description>
+ Set a constant linear velocity for the body. This does not move the body, but affects other bodies touching it, as if it was moving.
</description>
</method>
<method name="set_constant_angular_velocity">
<argument index="0" name="vel" type="Vector3">
</argument>
<description>
+ Set a constant angular velocity for the body. This does not rotate the body, but affects other bodies touching it, as if it was rotating.
</description>
</method>
<method name="get_constant_linear_velocity" qualifiers="const">
<return type="Vector3">
</return>
<description>
+ Return the constant linear velocity for the body.
</description>
</method>
<method name="get_constant_angular_velocity" qualifiers="const">
<return type="Vector3">
</return>
<description>
+ Return the constant angular velocity for the body.
</description>
</method>
<method name="set_friction">
<argument index="0" name="friction" type="float">
</argument>
<description>
+ Set the body friction, from 0 (frictionless) to 1 (full friction).
</description>
</method>
<method name="get_friction" qualifiers="const">
<return type="float">
</return>
<description>
+ Return the body friction.
</description>
</method>
<method name="set_bounce">
<argument index="0" name="bounce" type="float">
</argument>
<description>
+ Set the body bounciness, from 0 (not bouncy) to 1 (bouncy).
</description>
</method>
<method name="get_bounce" qualifiers="const">
<return type="float">
</return>
<description>
+ Return the body bounciness.
</description>
</method>
</methods>
@@ -35321,14 +36024,14 @@ This method controls whether the position between two cached points is interpola
<argument index="0" name="vel" type="float">
</argument>
<description>
- Set a constant angular velocity for the body.
+ Set a constant angular velocity for the body. This does not rotate the body, but affects other bodies touching it, as if it was rotating.
</description>
</method>
<method name="get_constant_linear_velocity" qualifiers="const">
<return type="Vector2">
</return>
<description>
- Return the constant linear velocity for the body. This does not rotate the body, but affects other bodies touching it, as if it was rotating.
+ Return the constant linear velocity for the body.
</description>
</method>
<method name="get_constant_angular_velocity" qualifiers="const">
@@ -37480,6 +38183,18 @@ This method controls whether the position between two cached points is interpola
Clear all the syntax coloring information.
</description>
</method>
+ <method name="menu_option">
+ <argument index="0" name="arg0" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="get_menu" qualifiers="const">
+ <return type="PopupMenu">
+ </return>
+ <description>
+ </description>
+ </method>
</methods>
<signals>
<signal name="text_changed">
@@ -37507,6 +38222,20 @@ This method controls whether the position between two cached points is interpola
<constant name="SEARCH_BACKWARDS" value="4">
Search from end to beginning.
</constant>
+ <constant name="MENU_CUT" value="0">
+ </constant>
+ <constant name="MENU_COPY" value="1">
+ </constant>
+ <constant name="MENU_PASTE" value="2">
+ </constant>
+ <constant name="MENU_CLEAR" value="3">
+ </constant>
+ <constant name="MENU_SELECT_ALL" value="4">
+ </constant>
+ <constant name="MENU_UNDO" value="5">
+ </constant>
+ <constant name="MENU_MAX" value="6">
+ </constant>
</constants>
<theme_items>
<theme_item name="line_spacing" type="int">
@@ -37519,12 +38248,12 @@ This method controls whether the position between two cached points is interpola
</theme_item>
<theme_item name="symbol_color" type="Color">
</theme_item>
- <theme_item name="cursor_color" type="Color">
- </theme_item>
<theme_item name="selection_color" type="Color">
</theme_item>
<theme_item name="completion_existing" type="Color">
</theme_item>
+ <theme_item name="caret_color" type="Color">
+ </theme_item>
<theme_item name="breakpoint_color" type="Color">
</theme_item>
<theme_item name="font_color_selected" type="Color">
@@ -37827,8 +38556,30 @@ This method controls whether the position between two cached points is interpola
<description>
</description>
</method>
+ <method name="set_stretch_mode">
+ <argument index="0" name="stretch_mode" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="get_stretch_mode" qualifiers="const">
+ <return type="int">
+ </return>
+ <description>
+ </description>
+ </method>
</methods>
<constants>
+ <constant name="STRETCH_SCALE_ON_EXPAND" value="0">
+ </constant>
+ <constant name="STRETCH_SCALE" value="1">
+ </constant>
+ <constant name="STRETCH_TILE" value="2">
+ </constant>
+ <constant name="STRETCH_KEEP" value="3">
+ </constant>
+ <constant name="STRETCH_KEEP_CENTERED" value="4">
+ </constant>
</constants>
</class>
<class name="TextureProgress" inherits="Range" category="Core">
@@ -39316,10 +40067,10 @@ This method controls whether the position between two cached points is interpola
</methods>
<members>
<member name="basis" type="Matrix3">
- The basis contains 3 [Vector3]. X axis, Y axis, and Z axis.
+ The basis contains 3 [Vector3]. X axis, Y axis, and Z axis.
</member>
<member name="origin" type="Vector3">
- The origin of the transform. Which is the translation offset.
+ The origin of the transform. Which is the translation offset.
</member>
</members>
<constants>
@@ -39640,6 +40391,30 @@ This method controls whether the position between two cached points is interpola
<description>
</description>
</method>
+ <method name="set_allow_rmb_select">
+ <argument index="0" name="allow" type="bool">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="get_allow_rmb_select" qualifiers="const">
+ <return type="bool">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="set_single_select_cell_editing_only_when_already_selected">
+ <argument index="0" name="enable" type="bool">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="get_single_select_cell_editing_only_when_already_selected" qualifiers="const">
+ <return type="bool">
+ </return>
+ <description>
+ </description>
+ </method>
</methods>
<signals>
<signal name="item_activated">
@@ -39672,6 +40447,18 @@ This method controls whether the position between two cached points is interpola
<description>
</description>
</signal>
+ <signal name="empty_tree_rmb_selected">
+ <argument index="0" name="pos" type="Vector2">
+ </argument>
+ <description>
+ </description>
+ </signal>
+ <signal name="item_rmb_selected">
+ <argument index="0" name="pos" type="Vector2">
+ </argument>
+ <description>
+ </description>
+ </signal>
<signal name="item_selected">
<description>
</description>
@@ -40633,7 +41420,7 @@ This method controls whether the position between two cached points is interpola
<description>
Helper to maange UndoRedo in the editor or custom tools. It works by
storing calls to functions in both 'do' an 'undo' lists.
-
+
Common behavior is to create an action, then add do/undo calls to
functions or property changes, then commiting the action.
</description>
@@ -40757,8 +41544,8 @@ This method controls whether the position between two cached points is interpola
<description>
Get the version, each time a new action is commited,
the version number of the UndoRedo is increased
- automatically.
-
+ automatically.
+
This is useful mostly to check if something changed
from a saved version.
</description>
@@ -41096,16 +41883,16 @@ This method controls whether the position between two cached points is interpola
</methods>
<members>
<member name="x" type="float">
- X component of the vector.
+ X component of the vector.
</member>
<member name="y" type="float">
- Y component of the vector.
+ Y component of the vector.
</member>
<member name="width" type="float">
- Width of the vector (Same as X).
+ Width of the vector (Same as X).
</member>
<member name="height" type="float">
- Height of the vector (Same as Y).
+ Height of the vector (Same as Y).
</member>
</members>
<constants>
@@ -41349,13 +42136,13 @@ This method controls whether the position between two cached points is interpola
</methods>
<members>
<member name="x" type="float">
- X component of the vector.
+ X component of the vector.
</member>
<member name="y" type="float">
- Y component of the vector.
+ Y component of the vector.
</member>
<member name="z" type="float">
- Z component of the vector.
+ Z component of the vector.
</member>
</members>
<constants>
@@ -41487,6 +42274,17 @@ This method controls whether the position between two cached points is interpola
<description>
</description>
</method>
+ <method name="get_linear_velocity">
+ <return type="Vector3">
+ </return>
+ <description>
+ Returns the VehicleBody's velocity vector. To get the absolute speed in scalar value, get the length of the return vector in pixels/second. Example:
+ [codeblock]
+ # vehicle is an instance of VehicleBody
+ var speed = vehicle.get_linear_velocity().length()
+ [/codeblock]
+ </description>
+ </method>
</methods>
<constants>
</constants>
@@ -41810,54 +42608,63 @@ This method controls whether the position between two cached points is interpola
<return type="World2D">
</return>
<description>
+ Return the 2D world of the viewport.
</description>
</method>
<method name="set_world">
<argument index="0" name="world" type="World">
</argument>
<description>
+ Change the 3D world of the viewport.
</description>
</method>
<method name="get_world" qualifiers="const">
<return type="World">
</return>
<description>
+ Return the 3D world of the viewport.
</description>
</method>
<method name="find_world" qualifiers="const">
<return type="World">
</return>
<description>
+ Return the 3D world of the viewport, or if no such present, the one of the parent viewport.
</description>
</method>
<method name="set_canvas_transform">
<argument index="0" name="xform" type="Matrix32">
</argument>
<description>
+ Set the canvas transform of the viewport, useful for changing the on-screen positions of all child [CanvasItem]s. This is relative to the global canvas transform of the viewport.
</description>
</method>
<method name="get_canvas_transform" qualifiers="const">
<return type="Matrix32">
</return>
<description>
+ Get the canvas transform of the viewport.
</description>
</method>
<method name="set_global_canvas_transform">
<argument index="0" name="xform" type="Matrix32">
</argument>
<description>
+ Set the global canvas transform of the viewport. The canvas transform is relative to this.
</description>
</method>
<method name="get_global_canvas_transform" qualifiers="const">
<return type="Matrix32">
</return>
<description>
+ Get the global canvas transform of the viewport.
</description>
</method>
<method name="get_final_transform" qualifiers="const">
<return type="Matrix32">
</return>
<description>
+ Get the total transform of the viewport.
</description>
</method>
<method name="get_visible_rect" qualifiers="const">
@@ -41889,134 +42696,157 @@ This method controls whether the position between two cached points is interpola
<argument index="2" name="margin" type="Vector2" default="Vector2(0,0)">
</argument>
<description>
+ Set the size of the viewport. If the enable parameter is true, it would use the override, otherwise it would use the default size. If the size parameter is equal to [code](-1, -1)[/code], it won't update the size.
</description>
</method>
<method name="get_size_override" qualifiers="const">
<return type="Vector2">
</return>
<description>
+ Get the size override set with [method set_size_override].
</description>
</method>
<method name="is_size_override_enabled" qualifiers="const">
<return type="bool">
</return>
<description>
+ Get the enabled status of the size override set with [method set_size_override].
</description>
</method>
<method name="set_size_override_stretch">
<argument index="0" name="enabled" type="bool">
</argument>
<description>
+ Set whether the size override affects stretch as well.
</description>
</method>
<method name="is_size_override_stretch_enabled" qualifiers="const">
<return type="bool">
</return>
<description>
+ Get the enabled status of the size strech override set with [method set_size_override_stretch].
</description>
</method>
<method name="queue_screen_capture">
<description>
+ Queue a multithreaded screenshot, you can retrive it at a later frame via [method get_screen_capture].
</description>
</method>
<method name="get_screen_capture" qualifiers="const">
<return type="Image">
</return>
<description>
+ Return the captured screenshot after [method queue_screen_capture]. You might need to check more than one frame untill the right image is returned.
</description>
</method>
<method name="set_as_render_target">
<argument index="0" name="enable" type="bool">
</argument>
<description>
+ Set the viewport's render target mode.
</description>
</method>
<method name="is_set_as_render_target" qualifiers="const">
<return type="bool">
</return>
<description>
+ Return whether the viewport is set as a render target by [method set_as_render_target].
</description>
</method>
<method name="set_render_target_vflip">
<argument index="0" name="enable" type="bool">
</argument>
<description>
+ Set whether the render target should be flipped on the Y axis.
</description>
</method>
<method name="get_render_target_vflip" qualifiers="const">
<return type="bool">
</return>
<description>
+ Set whether the render target is flipped on the Y axis.
</description>
</method>
<method name="set_render_target_clear_on_new_frame">
<argument index="0" name="enable" type="bool">
</argument>
<description>
+ Enable/disable automatic clearing of the render target on each frame. You might find it better to disable this if you are using the viewport for rarely updated textures. To clear manually, check [method render_target_clear]
</description>
</method>
<method name="get_render_target_clear_on_new_frame" qualifiers="const">
<return type="bool">
</return>
<description>
+ Return whether automatic clearing of the render target on each frame is enabled.
</description>
</method>
<method name="render_target_clear">
<description>
+ Clear the render target manually.
</description>
</method>
<method name="set_render_target_filter">
<argument index="0" name="enable" type="bool">
</argument>
<description>
+ Set whether the rendered texture should have filters enabled. Disable if you want the texture's pixels be visible.
</description>
</method>
<method name="get_render_target_filter" qualifiers="const">
<return type="bool">
</return>
<description>
+ Get whether the rendered texture has filters enabled.
</description>
</method>
<method name="set_render_target_gen_mipmaps">
<argument index="0" name="enable" type="bool">
</argument>
<description>
+ Set whether the rendered texture should have mipmaps generated. Mipmaps allow the texture to have better antialiasing from far away.
</description>
</method>
<method name="get_render_target_gen_mipmaps" qualifiers="const">
<return type="bool">
</return>
<description>
+ Get whether the rendered texture will have mipmaps generated.
</description>
</method>
<method name="set_render_target_update_mode">
<argument index="0" name="mode" type="int">
</argument>
<description>
+ Set when the render target should be updated, has to be one of the [code]RENDER_TARGET_UPDATE_*[/code] constants.
</description>
</method>
<method name="get_render_target_update_mode" qualifiers="const">
<return type="int">
</return>
<description>
+ Get when the render target would be updated, will be one of the [code]RENDER_TARGET_UPDATE_*[/code] constants.
</description>
</method>
<method name="get_render_target_texture" qualifiers="const">
<return type="RenderTargetTexture">
</return>
<description>
+ Get the render target's texture, for use with various objects that you want to texture with the viewport.
</description>
</method>
<method name="set_physics_object_picking">
<argument index="0" name="enable" type="bool">
</argument>
<description>
+ Enable/disable picking for all physics objects inside the viewport.
</description>
</method>
<method name="get_physics_object_picking">
<return type="bool">
</return>
<description>
+ Get whether picking for all physics objects inside the viewport is enabled.
</description>
</method>
<method name="get_viewport" qualifiers="const">
@@ -42040,162 +42870,192 @@ This method controls whether the position between two cached points is interpola
</method>
<method name="update_worlds">
<description>
+ Force update of the 2D and 3D worlds.
</description>
</method>
<method name="set_use_own_world">
<argument index="0" name="enable" type="bool">
</argument>
<description>
+ Make the viewport use a world separate from the parent viewport's world.
</description>
</method>
<method name="is_using_own_world" qualifiers="const">
<return type="bool">
</return>
<description>
+ Return whether the viewport is using a world separate from the parent viewport's world.
</description>
</method>
<method name="get_camera" qualifiers="const">
<return type="Camera">
</return>
<description>
+ Return the active 3D camera.
</description>
</method>
<method name="set_as_audio_listener">
<argument index="0" name="enable" type="bool">
</argument>
<description>
+ Makes the viewport send sounds to the speakers.
</description>
</method>
<method name="is_audio_listener" qualifiers="const">
<return type="bool">
</return>
<description>
+ Returns whether the viewport sends sounds to the speakers.
</description>
</method>
<method name="set_as_audio_listener_2d">
<argument index="0" name="enable" type="bool">
</argument>
<description>
+ Makes the viewport send sounds from 2D emitters to the speakers.
</description>
</method>
<method name="is_audio_listener_2d" qualifiers="const">
<return type="bool">
</return>
<description>
+ Returns whether the viewport sends soundsfrom 2D emitters to the speakers.
</description>
</method>
<method name="set_render_target_to_screen_rect">
<argument index="0" name="rect" type="Rect2">
</argument>
<description>
+ Map a part of the screen to the render target directly.
</description>
</method>
<method name="get_mouse_pos" qualifiers="const">
<return type="Vector2">
</return>
<description>
+ Get the mouse position, relative to the viewport.
</description>
</method>
<method name="warp_mouse">
<argument index="0" name="to_pos" type="Vector2">
</argument>
<description>
+ Wrap the mouse to a position, relative to the viewport.
</description>
</method>
<method name="gui_has_modal_stack" qualifiers="const">
<return type="bool">
</return>
<description>
+ Returs whether there are shown modals on-screen.
</description>
</method>
<method name="gui_get_drag_data" qualifiers="const">
<return type="Variant">
</return>
<description>
+ Returs the drag data from the GUI, that was previously returned by [method Control.get_drag_data].
</description>
</method>
<method name="set_disable_input">
<argument index="0" name="disable" type="bool">
</argument>
<description>
+ Set whether input to the viewport is disabled.
</description>
</method>
<method name="is_input_disabled" qualifiers="const">
<return type="bool">
</return>
<description>
+ Return whether input to the viewport is disabled.
</description>
</method>
</methods>
<signals>
<signal name="size_changed">
<description>
+ Emitted when the size of the viewport is changed, whether by [method set_size_override], resize of window, or some other means.
</description>
</signal>
</signals>
<constants>
<constant name="RENDER_TARGET_UPDATE_DISABLED" value="0">
+ Do not update the render target.
</constant>
<constant name="RENDER_TARGET_UPDATE_ONCE" value="1">
+ Update the render target once, then switch to [code]RENDER_TARGET_UPDATE_DISABLED[/code]
</constant>
<constant name="RENDER_TARGET_UPDATE_WHEN_VISIBLE" value="2">
+ Update the render target only when it is visible. This is the default value.
</constant>
<constant name="RENDER_TARGET_UPDATE_ALWAYS" value="3">
+ Update the render target always.
</constant>
</constants>
</class>
<class name="ViewportSprite" inherits="Node2D" category="Core">
<brief_description>
+ Displays a viewport as a sprite.
</brief_description>
<description>
+ Used to display a [Viewport] node at some position in the world, without having to mess with [RenderTargetTexture]s.
</description>
<methods>
<method name="set_viewport_path">
<argument index="0" name="path" type="NodePath">
</argument>
<description>
+ Set the path to the shown [Viewport] node.
</description>
</method>
<method name="get_viewport_path" qualifiers="const">
<return type="NodePath">
</return>
<description>
+ Return the path to the shown [Viewport] node.
</description>
</method>
<method name="set_centered">
<argument index="0" name="centered" type="bool">
</argument>
<description>
+ Set whether the viewport's texture should be centered on the origin.
</description>
</method>
<method name="is_centered" qualifiers="const">
<return type="bool">
</return>
<description>
+ Return whether the viewport's texture is centered on the origin.
</description>
</method>
<method name="set_offset">
<argument index="0" name="offset" type="Vector2">
</argument>
<description>
+ Set the offset to the origin of the texture.
</description>
</method>
<method name="get_offset" qualifiers="const">
<return type="Vector2">
</return>
<description>
+ get the offset to the origin of the texture.
</description>
</method>
<method name="set_modulate">
<argument index="0" name="modulate" type="Color">
</argument>
<description>
+ Set color modulation for the texture. All texture pixels are multiplied by this color. Color may contain rgb values above 1 to achieve a highlight effect.
</description>
</method>
<method name="get_modulate" qualifiers="const">
<return type="Color">
</return>
<description>
+ Get color modulation for the texture. All texture pixels are multiplied by this color.
</description>
</method>
</methods>
@@ -42204,8 +43064,10 @@ This method controls whether the position between two cached points is interpola
</class>
<class name="VisibilityEnabler" inherits="VisibilityNotifier" category="Core">
<brief_description>
+ Enable certain nodes only when visible.
</brief_description>
<description>
+ The VisibilityEnabler will disable [RigidBody] and [AnimationPlayer] nodes when they are not visible. It will only affect other nodes within the same scene as the VisibilityEnabler itself.
</description>
<methods>
<method name="set_enabler">
@@ -42214,6 +43076,7 @@ This method controls whether the position between two cached points is interpola
<argument index="1" name="enabled" type="bool">
</argument>
<description>
+ Set an enabler to true for all nodes of its type to be disabled when the VisibilityEnabler is not in view. See the constants for enablers and what they affect.
</description>
</method>
<method name="is_enabler_enabled" qualifiers="const">
@@ -42222,13 +43085,16 @@ This method controls whether the position between two cached points is interpola
<argument index="0" name="enabler" type="int">
</argument>
<description>
+ Returns whether the specified enabler was set to true or not.
</description>
</method>
</methods>
<constants>
<constant name="ENABLER_FREEZE_BODIES" value="1">
+ This enabler will freeze [RigidBody] nodes.
</constant>
<constant name="ENABLER_PAUSE_ANIMATIONS" value="0">
+ This enabler will pause [AnimationPlayer] nodes.
</constant>
<constant name="ENABLER_MAX" value="2">
</constant>
@@ -42236,8 +43102,10 @@ This method controls whether the position between two cached points is interpola
</class>
<class name="VisibilityEnabler2D" inherits="VisibilityNotifier2D" category="Core">
<brief_description>
+ Enable certain nodes only when visible.
</brief_description>
<description>
+ The VisibilityEnabler2D will disable [RigidBody2D], [AnimationPlayer], and other nodes when they are not visible. It will only affect other nodes within the same scene as the VisibilityEnabler2D itself.
</description>
<methods>
<method name="set_enabler">
@@ -42246,6 +43114,7 @@ This method controls whether the position between two cached points is interpola
<argument index="1" name="enabled" type="bool">
</argument>
<description>
+ Set an enabler to true for all nodes of its type to be disabled when the VisibilityEnabler2D is not in view. See the constants for enablers and what they affect.
</description>
</method>
<method name="is_enabler_enabled" qualifiers="const">
@@ -42254,68 +43123,85 @@ This method controls whether the position between two cached points is interpola
<argument index="0" name="enabler" type="int">
</argument>
<description>
+ Returns whether the specified enabler was set to true or not.
</description>
</method>
</methods>
<constants>
<constant name="ENABLER_FREEZE_BODIES" value="1">
+ This enabler will freeze [RigidBody2D] nodes.
</constant>
<constant name="ENABLER_PAUSE_ANIMATIONS" value="0">
+ This enabler will pause [AnimationPlayer] nodes.
</constant>
<constant name="ENABLER_PAUSE_PARTICLES" value="2">
+ This enabler will stop [Particles2D] nodes.
+ </constant>
+ <constant name="ENABLER_PAUSE_ANIMATED_SPRITES" value="5">
</constant>
<constant name="ENABLER_PARENT_PROCESS" value="3">
+ This enabler will stop the parent's _process function.
</constant>
<constant name="ENABLER_PARENT_FIXED_PROCESS" value="4">
+ This enabler will stop the parent's _fixed_process function.
</constant>
- <constant name="ENABLER_MAX" value="5">
+ <constant name="ENABLER_MAX" value="6">
</constant>
</constants>
</class>
<class name="VisibilityNotifier" inherits="Spatial" category="Core">
<brief_description>
+ Detect when the node is visible on screen.
</brief_description>
<description>
+ The VisibilityNotifier is used to notify when its bounding box enters the screen, is visible on the screen, or when it exits the screen.
</description>
<methods>
<method name="set_aabb">
<argument index="0" name="rect" type="AABB">
</argument>
<description>
+ Set the visibility bounding box of the VisibilityNotifier.
</description>
</method>
<method name="get_aabb" qualifiers="const">
<return type="AABB">
</return>
<description>
+ Return the visibility bounding box of the VisibilityNotifier.
</description>
</method>
<method name="is_on_screen" qualifiers="const">
<return type="bool">
</return>
<description>
+ Return true if any part of the bounding box is on the screen.
</description>
</method>
</methods>
<signals>
<signal name="enter_screen">
<description>
+ Emitted when the VisibilityNotifier enters the screen.
</description>
</signal>
<signal name="enter_camera">
<argument index="0" name="camera" type="Object">
</argument>
<description>
+ Emitted when the VisibilityNotifier enters a [Camera]'s view.
</description>
</signal>
<signal name="exit_screen">
<description>
+ Emitted when the VisibilityNotifier exits the screen.
</description>
</signal>
<signal name="exit_camera">
<argument index="0" name="camera" type="Object">
</argument>
<description>
+ Emitted when the VisibilityNotifier exits a [Camera]'s view.
</description>
</signal>
</signals>
@@ -42324,48 +43210,57 @@ This method controls whether the position between two cached points is interpola
</class>
<class name="VisibilityNotifier2D" inherits="Node2D" category="Core">
<brief_description>
+ Detect when the node is visible on screen.
</brief_description>
<description>
+ The VisibilityNotifier2D is used to notify when its bounding rectangle enters the screen, is visible on the screen, or when it exits the screen.
</description>
<methods>
<method name="set_rect">
<argument index="0" name="rect" type="Rect2">
</argument>
<description>
+ Set the visibility bounding rectangle of the VisibilityNotifier2D.
</description>
</method>
<method name="get_rect" qualifiers="const">
<return type="Rect2">
</return>
<description>
+ Return the visibility bounding rectangle of the VisibilityNotifier2D.
</description>
</method>
<method name="is_on_screen" qualifiers="const">
<return type="bool">
</return>
<description>
+ Return true if any part of the bounding rectangle is on the screen.
</description>
</method>
</methods>
<signals>
<signal name="enter_screen">
<description>
+ Emitted when the VisibilityNotifier2D enters the screen.
</description>
</signal>
<signal name="enter_viewport">
<argument index="0" name="viewport" type="Object">
</argument>
<description>
+ Emitted when the VisibilityNotifier2D enters a [Viewport].
</description>
</signal>
<signal name="exit_screen">
<description>
+ Emitted when the VisibilityNotifier2D exits the screen.
</description>
</signal>
<signal name="exit_viewport">
<argument index="0" name="viewport" type="Object">
</argument>
<description>
+ Emitted when the VisibilityNotifier2D exits a [Viewport].
</description>
</signal>
</signals>
diff --git a/drivers/SCsub b/drivers/SCsub
index 63f37698fb..79cbe50685 100644
--- a/drivers/SCsub
+++ b/drivers/SCsub
@@ -1,9 +1,12 @@
Import('env')
+env_drivers = env.Clone()
+
env.drivers_sources=[]
#env.add_source_files(env.drivers_sources,"*.cpp")
-env.Append(CPPPATH=["vorbis"])
-Export('env')
+env_drivers.Append(CPPPATH=["vorbis"])
+
+Export('env_drivers')
SConscript('unix/SCsub');
SConscript('alsa/SCsub');
@@ -14,12 +17,9 @@ SConscript('gl_context/SCsub');
SConscript('pnm/SCsub');
if (env['openssl']!='no'):
- env_ssl = env.Clone()
- Export('env_ssl')
-
- env_ssl.Append(CPPFLAGS=['-DOPENSSL_ENABLED']);
+ env_drivers.Append(CPPFLAGS=['-DOPENSSL_ENABLED']);
if (env['openssl']=="builtin"):
- env_ssl.Append(CPPPATH=['#drivers/builtin_openssl2'])
+ env_drivers.Append(CPPPATH=['#drivers/builtin_openssl2'])
SConscript("builtin_openssl2/SCsub");
SConscript('openssl/SCsub')
@@ -47,7 +47,7 @@ if (env["vorbis"]=="yes" or env["speex"]=="yes" or env["theoralib"]=="yes" or en
if (env["vorbis"]=="yes"):
SConscript("vorbis/SCsub");
if (env["opus"]=="yes"):
- SConscript('opus/SCsub');
+ SConscript('opus/SCsub');
if (env["tools"]=="yes"):
SConscript("convex_decomp/SCsub");
@@ -59,6 +59,8 @@ if (env['musepack']=='yes'):
SConscript("mpc/SCsub");
if (env["squish"]=="yes" and env["tools"]=="yes"):
SConscript("squish/SCsub");
+if (env["freetype"]!="no"):
+ SConscript("freetype/SCsub");
num = 0
cur_base = ""
@@ -84,14 +86,14 @@ if (env.split_drivers): #split drivers, this used to be needed for windows until
base = string.join(fname.split("/")[:2], "/")
if base != cur_base and len(list) > max_src:
if num > 0:
- lib = env.Library("drivers"+str(num), list)
+ lib = env_drivers.Library("drivers"+str(num), list)
lib_list.append(lib)
list = []
num = num+1
cur_base = base
list.append(f)
- lib = env.Library("drivers"+str(num), list)
+ lib = env_drivers.Library("drivers"+str(num), list)
lib_list.append(lib)
if len(lib_list) > 0:
@@ -99,15 +101,15 @@ if (env.split_drivers): #split drivers, this used to be needed for windows until
if os.name=='posix' and sys.platform=='msys':
env.Replace(ARFLAGS=['rcsT'])
- lib = env.Library("drivers_collated", lib_list)
+ lib = env_drivers.Library("drivers_collated", lib_list)
lib_list = [lib]
drivers_base=[]
- env.add_source_files(drivers_base,"*.cpp")
- lib_list.insert(0, env.Library("drivers", drivers_base))
+ env_drivers.add_source_files(drivers_base,"*.cpp")
+ lib_list.insert(0, env_drivers.Library("drivers", drivers_base))
env.Prepend(LIBS=lib_list)
else:
- env.add_source_files(env.drivers_sources,"*.cpp")
- lib = env.Library("drivers",env.drivers_sources)
+ env_drivers.add_source_files(env.drivers_sources,"*.cpp")
+ lib = env_drivers.Library("drivers",env.drivers_sources)
env.Prepend(LIBS=[lib])
diff --git a/drivers/builtin_openssl2/SCsub b/drivers/builtin_openssl2/SCsub
index 06d6b07c11..bd0f428cfc 100644
--- a/drivers/builtin_openssl2/SCsub
+++ b/drivers/builtin_openssl2/SCsub
@@ -1,5 +1,5 @@
Import('env')
-Import('env_ssl')
+Import('env_drivers')
openssl_sources = [
"ssl/t1_lib.c",
@@ -642,17 +642,17 @@ openssl_sources = [
#env.drivers_sources+=openssl_sources
-env_ssl.Append(CPPPATH=["#drivers/builtin_openssl2/crypto"])
-env_ssl.Append(CPPPATH=["#drivers/builtin_openssl2/openssl"])
-env_ssl.Append(CPPPATH=["#drivers/builtin_openssl2/crypto/evp"])
-env_ssl.Append(CPPPATH=["#drivers/builtin_openssl2/crypto/asn1"])
-env_ssl.Append(CPPPATH=["#drivers/builtin_openssl2/crypto/modes"])
+env_drivers.Append(CPPPATH=["#drivers/builtin_openssl2/crypto"])
+env_drivers.Append(CPPPATH=["#drivers/builtin_openssl2/openssl"])
+env_drivers.Append(CPPPATH=["#drivers/builtin_openssl2/crypto/evp"])
+env_drivers.Append(CPPPATH=["#drivers/builtin_openssl2/crypto/asn1"])
+env_drivers.Append(CPPPATH=["#drivers/builtin_openssl2/crypto/modes"])
#env_ssl.Append(CPPPATH=["#drivers/builtin_openssl2/crypto/store"])
-env_ssl.Append(CPPFLAGS=["-DOPENSSL_NO_ASM","-DOPENSSL_THREADS","-DL_ENDIAN"])
+env_drivers.Append(CPPFLAGS=["-DOPENSSL_NO_ASM","-DOPENSSL_THREADS","-DL_ENDIAN"])
# Workaround for compilation error with GCC/Clang when -Werror is too greedy (GH-4517)
import os
if not (os.name=="nt" and os.getenv("VSINSTALLDIR")!=None): # not Windows and not MSVC
- env_ssl.Append(CFLAGS=["-Wno-error=implicit-function-declaration"])
+ env_drivers.Append(CFLAGS=["-Wno-error=implicit-function-declaration"])
-env_ssl.add_source_files(env.drivers_sources,openssl_sources)
+env_drivers.add_source_files(env.drivers_sources,openssl_sources)
diff --git a/drivers/etc1/SCsub b/drivers/etc1/SCsub
index 4ce921ad9f..2b9dc1b31c 100644
--- a/drivers/etc1/SCsub
+++ b/drivers/etc1/SCsub
@@ -3,7 +3,8 @@ Import('env')
etc_sources = [
"etc1/image_etc.cpp",
- "etc1/rg_etc1.cpp"
+ "etc1/rg_etc1.cpp",
+ "etc1/texture_loader_pkm.cpp"
]
if (env["etc1"] != "no"):
diff --git a/drivers/etc1/texture_loader_pkm.cpp b/drivers/etc1/texture_loader_pkm.cpp
new file mode 100644
index 0000000000..275afc1fd6
--- /dev/null
+++ b/drivers/etc1/texture_loader_pkm.cpp
@@ -0,0 +1,84 @@
+#include "texture_loader_pkm.h"
+#include "os/file_access.h"
+#include <string.h>
+
+struct ETC1Header {
+ char tag[6]; // "PKM 10"
+ uint16_t format; // Format == number of mips (== zero)
+ uint16_t texWidth; // Texture dimensions, multiple of 4 (big-endian)
+ uint16_t texHeight;
+ uint16_t origWidth; // Original dimensions (big-endian)
+ uint16_t origHeight;
+};
+
+RES ResourceFormatPKM::load(const String &p_path, const String& p_original_path, Error *r_error) {
+
+ if (r_error)
+ *r_error=ERR_CANT_OPEN;
+
+ Error err;
+ FileAccess *f = FileAccess::open(p_path,FileAccess::READ,&err);
+ if (!f)
+ return RES();
+
+ FileAccessRef fref(f);
+ if (r_error)
+ *r_error=ERR_FILE_CORRUPT;
+
+ ERR_EXPLAIN("Unable to open PKM texture file: "+p_path);
+ ERR_FAIL_COND_V(err!=OK,RES());
+
+ // big endian
+ f->set_endian_swap(true);
+
+ ETC1Header h;
+ ERR_EXPLAIN("Invalid or Unsupported PKM texture file: "+p_path);
+ f->get_buffer((uint8_t *) &h.tag, sizeof(h.tag));
+ if(strncmp(h.tag, "PKM 10", sizeof(h.tag)))
+ ERR_FAIL_V(RES());
+
+ h.format = f->get_16();
+ h.texWidth = f->get_16();
+ h.texHeight = f->get_16();
+ h.origWidth = f->get_16();
+ h.origHeight = f->get_16();
+
+ DVector<uint8_t> src_data;
+
+ uint32_t size = h.texWidth * h.texHeight / 2;
+ src_data.resize(size);
+ DVector<uint8_t>::Write wb = src_data.write();
+ f->get_buffer(wb.ptr(),size);
+ wb=DVector<uint8_t>::Write();
+
+ int mipmaps = h.format;
+ int width = h.origWidth;
+ int height = h.origHeight;
+
+ Image img(width,height,mipmaps,Image::FORMAT_ETC,src_data);
+
+ Ref<ImageTexture> texture = memnew( ImageTexture );
+ texture->create_from_image(img);
+
+ if (r_error)
+ *r_error=OK;
+
+ return texture;
+}
+
+void ResourceFormatPKM::get_recognized_extensions(List<String> *p_extensions) const {
+
+ p_extensions->push_back("pkm");
+}
+
+bool ResourceFormatPKM::handles_type(const String& p_type) const {
+
+ return ObjectTypeDB::is_type(p_type,"Texture");
+}
+
+String ResourceFormatPKM::get_resource_type(const String &p_path) const {
+
+ if (p_path.extension().to_lower()=="pkm")
+ return "ImageTexture";
+ return "";
+}
diff --git a/drivers/etc1/texture_loader_pkm.h b/drivers/etc1/texture_loader_pkm.h
new file mode 100644
index 0000000000..5788716d9f
--- /dev/null
+++ b/drivers/etc1/texture_loader_pkm.h
@@ -0,0 +1,18 @@
+#ifndef TEXTURE_LOADER_PKM_H
+#define TEXTURE_LOADER_PKM_H
+
+#include "scene/resources/texture.h"
+#include "io/resource_loader.h"
+
+class ResourceFormatPKM : public ResourceFormatLoader{
+public:
+
+ virtual RES load(const String &p_path,const String& p_original_path="",Error *r_error=NULL);
+ virtual void get_recognized_extensions(List<String> *p_extensions) const;
+ virtual bool handles_type(const String& p_type) const;
+ virtual String get_resource_type(const String &p_path) const;
+
+ virtual ~ResourceFormatPKM() {}
+};
+
+#endif // TEXTURE_LOADER_PKM_H
diff --git a/drivers/freetype/FTL.TXT b/drivers/freetype/FTL.TXT
new file mode 100644
index 0000000000..433ab060e3
--- /dev/null
+++ b/drivers/freetype/FTL.TXT
@@ -0,0 +1,169 @@
+ The FreeType Project LICENSE
+ ----------------------------
+
+ 2006-Jan-27
+
+ Copyright 1996-2002, 2006 by
+ David Turner, Robert Wilhelm, and Werner Lemberg
+
+
+
+Introduction
+============
+
+ The FreeType Project is distributed in several archive packages;
+ some of them may contain, in addition to the FreeType font engine,
+ various tools and contributions which rely on, or relate to, the
+ FreeType Project.
+
+ This license applies to all files found in such packages, and
+ which do not fall under their own explicit license. The license
+ affects thus the FreeType font engine, the test programs,
+ documentation and makefiles, at the very least.
+
+ This license was inspired by the BSD, Artistic, and IJG
+ (Independent JPEG Group) licenses, which all encourage inclusion
+ and use of free software in commercial and freeware products
+ alike. As a consequence, its main points are that:
+
+ o We don't promise that this software works. However, we will be
+ interested in any kind of bug reports. (`as is' distribution)
+
+ o You can use this software for whatever you want, in parts or
+ full form, without having to pay us. (`royalty-free' usage)
+
+ o You may not pretend that you wrote this software. If you use
+ it, or only parts of it, in a program, you must acknowledge
+ somewhere in your documentation that you have used the
+ FreeType code. (`credits')
+
+ We specifically permit and encourage the inclusion of this
+ software, with or without modifications, in commercial products.
+ We disclaim all warranties covering The FreeType Project and
+ assume no liability related to The FreeType Project.
+
+
+ Finally, many people asked us for a preferred form for a
+ credit/disclaimer to use in compliance with this license. We thus
+ encourage you to use the following text:
+
+ """
+ Portions of this software are copyright © <year> The FreeType
+ Project (www.freetype.org). All rights reserved.
+ """
+
+ Please replace <year> with the value from the FreeType version you
+ actually use.
+
+
+Legal Terms
+===========
+
+0. Definitions
+--------------
+
+ Throughout this license, the terms `package', `FreeType Project',
+ and `FreeType archive' refer to the set of files originally
+ distributed by the authors (David Turner, Robert Wilhelm, and
+ Werner Lemberg) as the `FreeType Project', be they named as alpha,
+ beta or final release.
+
+ `You' refers to the licensee, or person using the project, where
+ `using' is a generic term including compiling the project's source
+ code as well as linking it to form a `program' or `executable'.
+ This program is referred to as `a program using the FreeType
+ engine'.
+
+ This license applies to all files distributed in the original
+ FreeType Project, including all source code, binaries and
+ documentation, unless otherwise stated in the file in its
+ original, unmodified form as distributed in the original archive.
+ If you are unsure whether or not a particular file is covered by
+ this license, you must contact us to verify this.
+
+ The FreeType Project is copyright (C) 1996-2000 by David Turner,
+ Robert Wilhelm, and Werner Lemberg. All rights reserved except as
+ specified below.
+
+1. No Warranty
+--------------
+
+ THE FREETYPE PROJECT IS PROVIDED `AS IS' WITHOUT WARRANTY OF ANY
+ KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO
+ USE, OF THE FREETYPE PROJECT.
+
+2. Redistribution
+-----------------
+
+ This license grants a worldwide, royalty-free, perpetual and
+ irrevocable right and license to use, execute, perform, compile,
+ display, copy, create derivative works of, distribute and
+ sublicense the FreeType Project (in both source and object code
+ forms) and derivative works thereof for any purpose; and to
+ authorize others to exercise some or all of the rights granted
+ herein, subject to the following conditions:
+
+ o Redistribution of source code must retain this license file
+ (`FTL.TXT') unaltered; any additions, deletions or changes to
+ the original files must be clearly indicated in accompanying
+ documentation. The copyright notices of the unaltered,
+ original files must be preserved in all copies of source
+ files.
+
+ o Redistribution in binary form must provide a disclaimer that
+ states that the software is based in part of the work of the
+ FreeType Team, in the distribution documentation. We also
+ encourage you to put an URL to the FreeType web page in your
+ documentation, though this isn't mandatory.
+
+ These conditions apply to any software derived from or based on
+ the FreeType Project, not just the unmodified files. If you use
+ our work, you must acknowledge us. However, no fee need be paid
+ to us.
+
+3. Advertising
+--------------
+
+ Neither the FreeType authors and contributors nor you shall use
+ the name of the other for commercial, advertising, or promotional
+ purposes without specific prior written permission.
+
+ We suggest, but do not require, that you use one or more of the
+ following phrases to refer to this software in your documentation
+ or advertising materials: `FreeType Project', `FreeType Engine',
+ `FreeType library', or `FreeType Distribution'.
+
+ As you have not signed this license, you are not required to
+ accept it. However, as the FreeType Project is copyrighted
+ material, only this license, or another one contracted with the
+ authors, grants you the right to use, distribute, and modify it.
+ Therefore, by using, distributing, or modifying the FreeType
+ Project, you indicate that you understand and accept all the terms
+ of this license.
+
+4. Contacts
+-----------
+
+ There are two mailing lists related to FreeType:
+
+ o freetype@nongnu.org
+
+ Discusses general use and applications of FreeType, as well as
+ future and wanted additions to the library and distribution.
+ If you are looking for support, start in this list if you
+ haven't found anything to help you in the documentation.
+
+ o freetype-devel@nongnu.org
+
+ Discusses bugs, as well as engine internals, design issues,
+ specific licenses, porting, etc.
+
+ Our home page can be found at
+
+ http://www.freetype.org
+
+
+--- end of FTL.TXT ---
diff --git a/drivers/freetype/LICENSE.TXT b/drivers/freetype/LICENSE.TXT
new file mode 100644
index 0000000000..af5a1c50f6
--- /dev/null
+++ b/drivers/freetype/LICENSE.TXT
@@ -0,0 +1,39 @@
+
+The FreeType 2 font engine is copyrighted work and cannot be used
+legally without a software license. In order to make this project
+usable to a vast majority of developers, we distribute it under two
+mutually exclusive open-source licenses.
+
+This means that *you* must choose *one* of the two licenses described
+below, then obey all its terms and conditions when using FreeType 2 in
+any of your projects or products.
+
+ - The FreeType License, found in the file `FTL.TXT', which is similar
+ to the original BSD license *with* an advertising clause that forces
+ you to explicitly cite the FreeType project in your product's
+ documentation. All details are in the license file. This license
+ is suited to products which don't use the GNU General Public
+ License.
+
+ Note that this license is compatible to the GNU General Public
+ License version 3, but not version 2.
+
+ - The GNU General Public License version 2, found in `GPLv2.TXT' (any
+ later version can be used also), for programs which already use the
+ GPL. Note that the FTL is incompatible with GPLv2 due to its
+ advertisement clause.
+
+The contributed BDF and PCF drivers come with a license similar to that
+of the X Window System. It is compatible to the above two licenses (see
+file src/bdf/README and src/pcf/README). The same holds for the files
+`fthash.c' and `fthash.h'; their code was part of the BDF driver in
+earlier FreeType versions.
+
+The gzip module uses the zlib license (see src/gzip/zlib.h) which too is
+compatible to the above two licenses.
+
+The MD5 checksum support (only used for debugging in development builds)
+is in the public domain.
+
+
+--- end of LICENSE.TXT ---
diff --git a/drivers/freetype/SCsub b/drivers/freetype/SCsub
new file mode 100644
index 0000000000..c0921c683a
--- /dev/null
+++ b/drivers/freetype/SCsub
@@ -0,0 +1,71 @@
+Import('env')
+
+ft_sources=[\
+"freetype/src/pfr/pfr.c",\
+"freetype/src/psaux/psaux.c",\
+"freetype/src/pcf/pcf.c",\
+"freetype/src/otvalid/otvalid.c",\
+"freetype/src/raster/raster.c",\
+"freetype/src/type1/type1.c",\
+"freetype/src/pshinter/pshinter.c",\
+"freetype/src/cff/cff.c",\
+"freetype/src/truetype/truetype.c",\
+"freetype/src/bdf/bdf.c",\
+"freetype/src/cache/ftcache.c",\
+"freetype/src/sfnt/sfnt.c",\
+"freetype/src/winfonts/winfnt.c",\
+"freetype/src/psnames/psnames.c",\
+"freetype/src/cid/type1cid.c",\
+"freetype/src/autofit/autofit.c",\
+"freetype/src/gxvalid/gxvalid.c",\
+"freetype/src/smooth/smooth.c",\
+"freetype/src/type42/type42.c",\
+"freetype/src/base/ftapi.c",\
+"freetype/src/base/ftbase.c",\
+"freetype/src/base/ftbbox.c",\
+"freetype/src/base/ftbdf.c",\
+"freetype/src/base/ftbitmap.c",\
+"freetype/src/base/ftcid.c",\
+"freetype/src/base/ftdebug.c",\
+"freetype/src/base/ftfstype.c",\
+"freetype/src/base/ftgasp.c",\
+"freetype/src/base/ftglyph.c",\
+"freetype/src/base/ftgxval.c",\
+"freetype/src/base/ftinit.c",\
+"freetype/src/base/ftlcdfil.c",\
+"freetype/src/base/ftmm.c",\
+"freetype/src/base/ftotval.c",\
+"freetype/src/base/ftpatent.c",\
+"freetype/src/base/ftpfr.c",\
+"freetype/src/base/ftpic.c",\
+"freetype/src/base/ftstroke.c",\
+"freetype/src/base/ftsynth.c",\
+"freetype/src/base/ftsystem.c",\
+"freetype/src/base/fttype1.c",\
+"freetype/src/base/ftwinfnt.c",\
+"freetype/src/base/ftxf86.c",\
+
+]
+
+
+if (env["freetype"]=="builtin"):
+#fix for windows command line i too long, split in two libraries
+ half1=[]
+ half2=[]
+ for x in ft_sources:
+ if (x.find("freetype/src/base")==0):
+ half2.append(x)
+ else:
+ half1.append(x)
+
+ lib = env.Library("freetype_builtin1",half2)
+ env.Append(LIBS=[lib])
+ lib = env.Library("freetype_builtin2",half1)
+ env.Append(LIBS=[lib])
+
+# lib = env.Library("freetype_builtin",ft_sources)
+# env.Prepend(LIBS=[lib])
+
+
+
+Export('env')
diff --git a/tools/freetype/freetype/include/freetype/config/ftconfig.h b/drivers/freetype/freetype/include/freetype/config/ftconfig.h
index 5dce30ef3e..5dce30ef3e 100644
--- a/tools/freetype/freetype/include/freetype/config/ftconfig.h
+++ b/drivers/freetype/freetype/include/freetype/config/ftconfig.h
diff --git a/tools/freetype/freetype/include/freetype/config/ftheader.h b/drivers/freetype/freetype/include/freetype/config/ftheader.h
index 8371a31611..8371a31611 100644
--- a/tools/freetype/freetype/include/freetype/config/ftheader.h
+++ b/drivers/freetype/freetype/include/freetype/config/ftheader.h
diff --git a/tools/freetype/freetype/include/freetype/config/ftmodule.h b/drivers/freetype/freetype/include/freetype/config/ftmodule.h
index 76d271a74b..76d271a74b 100644
--- a/tools/freetype/freetype/include/freetype/config/ftmodule.h
+++ b/drivers/freetype/freetype/include/freetype/config/ftmodule.h
diff --git a/tools/freetype/freetype/include/freetype/config/ftoption.h b/drivers/freetype/freetype/include/freetype/config/ftoption.h
index d162780665..d162780665 100644
--- a/tools/freetype/freetype/include/freetype/config/ftoption.h
+++ b/drivers/freetype/freetype/include/freetype/config/ftoption.h
diff --git a/tools/freetype/freetype/include/freetype/config/ftstdlib.h b/drivers/freetype/freetype/include/freetype/config/ftstdlib.h
index b940efc427..b940efc427 100644
--- a/tools/freetype/freetype/include/freetype/config/ftstdlib.h
+++ b/drivers/freetype/freetype/include/freetype/config/ftstdlib.h
diff --git a/tools/freetype/freetype/include/freetype/freetype.h b/drivers/freetype/freetype/include/freetype/freetype.h
index fe46d22978..fe46d22978 100644
--- a/tools/freetype/freetype/include/freetype/freetype.h
+++ b/drivers/freetype/freetype/include/freetype/freetype.h
diff --git a/tools/freetype/freetype/include/freetype/ftadvanc.h b/drivers/freetype/freetype/include/freetype/ftadvanc.h
index 012b74b812..012b74b812 100644
--- a/tools/freetype/freetype/include/freetype/ftadvanc.h
+++ b/drivers/freetype/freetype/include/freetype/ftadvanc.h
diff --git a/tools/freetype/freetype/include/freetype/ftautoh.h b/drivers/freetype/freetype/include/freetype/ftautoh.h
index 5e1153a1c1..5e1153a1c1 100644
--- a/tools/freetype/freetype/include/freetype/ftautoh.h
+++ b/drivers/freetype/freetype/include/freetype/ftautoh.h
diff --git a/tools/freetype/freetype/include/freetype/ftbbox.h b/drivers/freetype/freetype/include/freetype/ftbbox.h
index 976691956f..976691956f 100644
--- a/tools/freetype/freetype/include/freetype/ftbbox.h
+++ b/drivers/freetype/freetype/include/freetype/ftbbox.h
diff --git a/tools/freetype/freetype/include/freetype/ftbdf.h b/drivers/freetype/freetype/include/freetype/ftbdf.h
index 4f8baf8401..4f8baf8401 100644
--- a/tools/freetype/freetype/include/freetype/ftbdf.h
+++ b/drivers/freetype/freetype/include/freetype/ftbdf.h
diff --git a/tools/freetype/freetype/include/freetype/ftbitmap.h b/drivers/freetype/freetype/include/freetype/ftbitmap.h
index 7dbf5ba3fe..7dbf5ba3fe 100644
--- a/tools/freetype/freetype/include/freetype/ftbitmap.h
+++ b/drivers/freetype/freetype/include/freetype/ftbitmap.h
diff --git a/tools/freetype/freetype/include/freetype/ftbzip2.h b/drivers/freetype/freetype/include/freetype/ftbzip2.h
index 1bf81b15e8..1bf81b15e8 100644
--- a/tools/freetype/freetype/include/freetype/ftbzip2.h
+++ b/drivers/freetype/freetype/include/freetype/ftbzip2.h
diff --git a/tools/freetype/freetype/include/freetype/ftcache.h b/drivers/freetype/freetype/include/freetype/ftcache.h
index 4ec9587cf6..4ec9587cf6 100644
--- a/tools/freetype/freetype/include/freetype/ftcache.h
+++ b/drivers/freetype/freetype/include/freetype/ftcache.h
diff --git a/tools/freetype/freetype/include/freetype/ftcffdrv.h b/drivers/freetype/freetype/include/freetype/ftcffdrv.h
index ccbcbccaa8..ccbcbccaa8 100644
--- a/tools/freetype/freetype/include/freetype/ftcffdrv.h
+++ b/drivers/freetype/freetype/include/freetype/ftcffdrv.h
diff --git a/tools/freetype/freetype/include/freetype/ftchapters.h b/drivers/freetype/freetype/include/freetype/ftchapters.h
index c55670d1d2..c55670d1d2 100644
--- a/tools/freetype/freetype/include/freetype/ftchapters.h
+++ b/drivers/freetype/freetype/include/freetype/ftchapters.h
diff --git a/tools/freetype/freetype/include/freetype/ftcid.h b/drivers/freetype/freetype/include/freetype/ftcid.h
index 203a30caf8..203a30caf8 100644
--- a/tools/freetype/freetype/include/freetype/ftcid.h
+++ b/drivers/freetype/freetype/include/freetype/ftcid.h
diff --git a/tools/freetype/freetype/include/freetype/fterrdef.h b/drivers/freetype/freetype/include/freetype/fterrdef.h
index 76c7b9e36f..76c7b9e36f 100644
--- a/tools/freetype/freetype/include/freetype/fterrdef.h
+++ b/drivers/freetype/freetype/include/freetype/fterrdef.h
diff --git a/tools/freetype/freetype/include/freetype/fterrors.h b/drivers/freetype/freetype/include/freetype/fterrors.h
index 0fa3e4dce1..0fa3e4dce1 100644
--- a/tools/freetype/freetype/include/freetype/fterrors.h
+++ b/drivers/freetype/freetype/include/freetype/fterrors.h
diff --git a/tools/freetype/freetype/include/freetype/ftgasp.h b/drivers/freetype/freetype/include/freetype/ftgasp.h
index 453d4fa42c..453d4fa42c 100644
--- a/tools/freetype/freetype/include/freetype/ftgasp.h
+++ b/drivers/freetype/freetype/include/freetype/ftgasp.h
diff --git a/tools/freetype/freetype/include/freetype/ftglyph.h b/drivers/freetype/freetype/include/freetype/ftglyph.h
index 31dc33187d..31dc33187d 100644
--- a/tools/freetype/freetype/include/freetype/ftglyph.h
+++ b/drivers/freetype/freetype/include/freetype/ftglyph.h
diff --git a/tools/freetype/freetype/include/freetype/ftgxval.h b/drivers/freetype/freetype/include/freetype/ftgxval.h
index 497015c101..497015c101 100644
--- a/tools/freetype/freetype/include/freetype/ftgxval.h
+++ b/drivers/freetype/freetype/include/freetype/ftgxval.h
diff --git a/tools/freetype/freetype/include/freetype/ftgzip.h b/drivers/freetype/freetype/include/freetype/ftgzip.h
index acbc4f0327..acbc4f0327 100644
--- a/tools/freetype/freetype/include/freetype/ftgzip.h
+++ b/drivers/freetype/freetype/include/freetype/ftgzip.h
diff --git a/tools/freetype/freetype/include/freetype/ftimage.h b/drivers/freetype/freetype/include/freetype/ftimage.h
index 3b826b1d32..3b826b1d32 100644
--- a/tools/freetype/freetype/include/freetype/ftimage.h
+++ b/drivers/freetype/freetype/include/freetype/ftimage.h
diff --git a/tools/freetype/freetype/include/freetype/ftincrem.h b/drivers/freetype/freetype/include/freetype/ftincrem.h
index aaf689ff16..aaf689ff16 100644
--- a/tools/freetype/freetype/include/freetype/ftincrem.h
+++ b/drivers/freetype/freetype/include/freetype/ftincrem.h
diff --git a/tools/freetype/freetype/include/freetype/ftlcdfil.h b/drivers/freetype/freetype/include/freetype/ftlcdfil.h
index 8b253f118b..8b253f118b 100644
--- a/tools/freetype/freetype/include/freetype/ftlcdfil.h
+++ b/drivers/freetype/freetype/include/freetype/ftlcdfil.h
diff --git a/tools/freetype/freetype/include/freetype/ftlist.h b/drivers/freetype/freetype/include/freetype/ftlist.h
index bb6f7f119d..bb6f7f119d 100644
--- a/tools/freetype/freetype/include/freetype/ftlist.h
+++ b/drivers/freetype/freetype/include/freetype/ftlist.h
diff --git a/tools/freetype/freetype/include/freetype/ftlzw.h b/drivers/freetype/freetype/include/freetype/ftlzw.h
index 00d40169a7..00d40169a7 100644
--- a/tools/freetype/freetype/include/freetype/ftlzw.h
+++ b/drivers/freetype/freetype/include/freetype/ftlzw.h
diff --git a/tools/freetype/freetype/include/freetype/ftmac.h b/drivers/freetype/freetype/include/freetype/ftmac.h
index ab5bab5170..ab5bab5170 100644
--- a/tools/freetype/freetype/include/freetype/ftmac.h
+++ b/drivers/freetype/freetype/include/freetype/ftmac.h
diff --git a/tools/freetype/freetype/include/freetype/ftmm.h b/drivers/freetype/freetype/include/freetype/ftmm.h
index 3aefb9e4f2..3aefb9e4f2 100644
--- a/tools/freetype/freetype/include/freetype/ftmm.h
+++ b/drivers/freetype/freetype/include/freetype/ftmm.h
diff --git a/tools/freetype/freetype/include/freetype/ftmodapi.h b/drivers/freetype/freetype/include/freetype/ftmodapi.h
index 8abffb558f..8abffb558f 100644
--- a/tools/freetype/freetype/include/freetype/ftmodapi.h
+++ b/drivers/freetype/freetype/include/freetype/ftmodapi.h
diff --git a/tools/freetype/freetype/include/freetype/ftmoderr.h b/drivers/freetype/freetype/include/freetype/ftmoderr.h
index 5a27db151a..5a27db151a 100644
--- a/tools/freetype/freetype/include/freetype/ftmoderr.h
+++ b/drivers/freetype/freetype/include/freetype/ftmoderr.h
diff --git a/tools/freetype/freetype/include/freetype/ftotval.h b/drivers/freetype/freetype/include/freetype/ftotval.h
index 027f2e8865..027f2e8865 100644
--- a/tools/freetype/freetype/include/freetype/ftotval.h
+++ b/drivers/freetype/freetype/include/freetype/ftotval.h
diff --git a/tools/freetype/freetype/include/freetype/ftoutln.h b/drivers/freetype/freetype/include/freetype/ftoutln.h
index fd69f28292..fd69f28292 100644
--- a/tools/freetype/freetype/include/freetype/ftoutln.h
+++ b/drivers/freetype/freetype/include/freetype/ftoutln.h
diff --git a/tools/freetype/freetype/include/freetype/ftpfr.h b/drivers/freetype/freetype/include/freetype/ftpfr.h
index 0b7b7d427c..0b7b7d427c 100644
--- a/tools/freetype/freetype/include/freetype/ftpfr.h
+++ b/drivers/freetype/freetype/include/freetype/ftpfr.h
diff --git a/tools/freetype/freetype/include/freetype/ftrender.h b/drivers/freetype/freetype/include/freetype/ftrender.h
index dd0229b815..dd0229b815 100644
--- a/tools/freetype/freetype/include/freetype/ftrender.h
+++ b/drivers/freetype/freetype/include/freetype/ftrender.h
diff --git a/tools/freetype/freetype/include/freetype/ftsizes.h b/drivers/freetype/freetype/include/freetype/ftsizes.h
index 3e548cc39f..3e548cc39f 100644
--- a/tools/freetype/freetype/include/freetype/ftsizes.h
+++ b/drivers/freetype/freetype/include/freetype/ftsizes.h
diff --git a/tools/freetype/freetype/include/freetype/ftsnames.h b/drivers/freetype/freetype/include/freetype/ftsnames.h
index 485e4e162e..485e4e162e 100644
--- a/tools/freetype/freetype/include/freetype/ftsnames.h
+++ b/drivers/freetype/freetype/include/freetype/ftsnames.h
diff --git a/tools/freetype/freetype/include/freetype/ftstroke.h b/drivers/freetype/freetype/include/freetype/ftstroke.h
index a498e4a883..a498e4a883 100644
--- a/tools/freetype/freetype/include/freetype/ftstroke.h
+++ b/drivers/freetype/freetype/include/freetype/ftstroke.h
diff --git a/tools/freetype/freetype/include/freetype/ftsynth.h b/drivers/freetype/freetype/include/freetype/ftsynth.h
index 2074503cf6..2074503cf6 100644
--- a/tools/freetype/freetype/include/freetype/ftsynth.h
+++ b/drivers/freetype/freetype/include/freetype/ftsynth.h
diff --git a/tools/freetype/freetype/include/freetype/ftsystem.h b/drivers/freetype/freetype/include/freetype/ftsystem.h
index e07460c55d..e07460c55d 100644
--- a/tools/freetype/freetype/include/freetype/ftsystem.h
+++ b/drivers/freetype/freetype/include/freetype/ftsystem.h
diff --git a/tools/freetype/freetype/include/freetype/fttrigon.h b/drivers/freetype/freetype/include/freetype/fttrigon.h
index 65143cb8c8..65143cb8c8 100644
--- a/tools/freetype/freetype/include/freetype/fttrigon.h
+++ b/drivers/freetype/freetype/include/freetype/fttrigon.h
diff --git a/tools/freetype/freetype/include/freetype/ftttdrv.h b/drivers/freetype/freetype/include/freetype/ftttdrv.h
index d5d3f1ccc1..d5d3f1ccc1 100644
--- a/tools/freetype/freetype/include/freetype/ftttdrv.h
+++ b/drivers/freetype/freetype/include/freetype/ftttdrv.h
diff --git a/tools/freetype/freetype/include/freetype/fttypes.h b/drivers/freetype/freetype/include/freetype/fttypes.h
index 027e59ce11..027e59ce11 100644
--- a/tools/freetype/freetype/include/freetype/fttypes.h
+++ b/drivers/freetype/freetype/include/freetype/fttypes.h
diff --git a/tools/freetype/freetype/include/freetype/ftwinfnt.h b/drivers/freetype/freetype/include/freetype/ftwinfnt.h
index ea33353536..ea33353536 100644
--- a/tools/freetype/freetype/include/freetype/ftwinfnt.h
+++ b/drivers/freetype/freetype/include/freetype/ftwinfnt.h
diff --git a/tools/freetype/freetype/include/freetype/ftxf86.h b/drivers/freetype/freetype/include/freetype/ftxf86.h
index 8c68afdcc5..8c68afdcc5 100644
--- a/tools/freetype/freetype/include/freetype/ftxf86.h
+++ b/drivers/freetype/freetype/include/freetype/ftxf86.h
diff --git a/tools/freetype/freetype/include/freetype/internal/autohint.h b/drivers/freetype/freetype/include/freetype/internal/autohint.h
index 545de938c2..545de938c2 100644
--- a/tools/freetype/freetype/include/freetype/internal/autohint.h
+++ b/drivers/freetype/freetype/include/freetype/internal/autohint.h
diff --git a/tools/freetype/freetype/include/freetype/internal/ftcalc.h b/drivers/freetype/freetype/include/freetype/internal/ftcalc.h
index faac3a3867..faac3a3867 100644
--- a/tools/freetype/freetype/include/freetype/internal/ftcalc.h
+++ b/drivers/freetype/freetype/include/freetype/internal/ftcalc.h
diff --git a/tools/freetype/freetype/include/freetype/internal/ftdebug.h b/drivers/freetype/freetype/include/freetype/internal/ftdebug.h
index 58a3916d7e..58a3916d7e 100644
--- a/tools/freetype/freetype/include/freetype/internal/ftdebug.h
+++ b/drivers/freetype/freetype/include/freetype/internal/ftdebug.h
diff --git a/tools/freetype/freetype/include/freetype/internal/ftdriver.h b/drivers/freetype/freetype/include/freetype/internal/ftdriver.h
index 940218e62d..940218e62d 100644
--- a/tools/freetype/freetype/include/freetype/internal/ftdriver.h
+++ b/drivers/freetype/freetype/include/freetype/internal/ftdriver.h
diff --git a/tools/freetype/freetype/include/freetype/internal/ftgloadr.h b/drivers/freetype/freetype/include/freetype/internal/ftgloadr.h
index ce4dc6c9cc..ce4dc6c9cc 100644
--- a/tools/freetype/freetype/include/freetype/internal/ftgloadr.h
+++ b/drivers/freetype/freetype/include/freetype/internal/ftgloadr.h
diff --git a/tools/freetype/freetype/include/freetype/internal/ftmemory.h b/drivers/freetype/freetype/include/freetype/internal/ftmemory.h
index 3d51aeec69..3d51aeec69 100644
--- a/tools/freetype/freetype/include/freetype/internal/ftmemory.h
+++ b/drivers/freetype/freetype/include/freetype/internal/ftmemory.h
diff --git a/tools/freetype/freetype/include/freetype/internal/ftobjs.h b/drivers/freetype/freetype/include/freetype/internal/ftobjs.h
index 701c850eb7..701c850eb7 100644
--- a/tools/freetype/freetype/include/freetype/internal/ftobjs.h
+++ b/drivers/freetype/freetype/include/freetype/internal/ftobjs.h
diff --git a/tools/freetype/freetype/include/freetype/internal/ftpic.h b/drivers/freetype/freetype/include/freetype/internal/ftpic.h
index 485ce7a24e..485ce7a24e 100644
--- a/tools/freetype/freetype/include/freetype/internal/ftpic.h
+++ b/drivers/freetype/freetype/include/freetype/internal/ftpic.h
diff --git a/tools/freetype/freetype/include/freetype/internal/ftrfork.h b/drivers/freetype/freetype/include/freetype/internal/ftrfork.h
index 6307f2d0c5..6307f2d0c5 100644
--- a/tools/freetype/freetype/include/freetype/internal/ftrfork.h
+++ b/drivers/freetype/freetype/include/freetype/internal/ftrfork.h
diff --git a/tools/freetype/freetype/include/freetype/internal/ftserv.h b/drivers/freetype/freetype/include/freetype/internal/ftserv.h
index cd5fbd0fac..cd5fbd0fac 100644
--- a/tools/freetype/freetype/include/freetype/internal/ftserv.h
+++ b/drivers/freetype/freetype/include/freetype/internal/ftserv.h
diff --git a/tools/freetype/freetype/include/freetype/internal/ftstream.h b/drivers/freetype/freetype/include/freetype/internal/ftstream.h
index 2661858320..2661858320 100644
--- a/tools/freetype/freetype/include/freetype/internal/ftstream.h
+++ b/drivers/freetype/freetype/include/freetype/internal/ftstream.h
diff --git a/tools/freetype/freetype/include/freetype/internal/fttrace.h b/drivers/freetype/freetype/include/freetype/internal/fttrace.h
index a9d98b60aa..a9d98b60aa 100644
--- a/tools/freetype/freetype/include/freetype/internal/fttrace.h
+++ b/drivers/freetype/freetype/include/freetype/internal/fttrace.h
diff --git a/tools/freetype/freetype/include/freetype/internal/ftvalid.h b/drivers/freetype/freetype/include/freetype/internal/ftvalid.h
index 12ad03685a..12ad03685a 100644
--- a/tools/freetype/freetype/include/freetype/internal/ftvalid.h
+++ b/drivers/freetype/freetype/include/freetype/internal/ftvalid.h
diff --git a/tools/freetype/freetype/include/freetype/internal/internal.h b/drivers/freetype/freetype/include/freetype/internal/internal.h
index 262afcfa8a..262afcfa8a 100644
--- a/tools/freetype/freetype/include/freetype/internal/internal.h
+++ b/drivers/freetype/freetype/include/freetype/internal/internal.h
diff --git a/tools/freetype/freetype/include/freetype/internal/psaux.h b/drivers/freetype/freetype/include/freetype/internal/psaux.h
index e903114f84..e903114f84 100644
--- a/tools/freetype/freetype/include/freetype/internal/psaux.h
+++ b/drivers/freetype/freetype/include/freetype/internal/psaux.h
diff --git a/tools/freetype/freetype/include/freetype/internal/pshints.h b/drivers/freetype/freetype/include/freetype/internal/pshints.h
index 3fb18dc2d5..3fb18dc2d5 100644
--- a/tools/freetype/freetype/include/freetype/internal/pshints.h
+++ b/drivers/freetype/freetype/include/freetype/internal/pshints.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svbdf.h b/drivers/freetype/freetype/include/freetype/internal/services/svbdf.h
index 0974752a79..0974752a79 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svbdf.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svbdf.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svcid.h b/drivers/freetype/freetype/include/freetype/internal/services/svcid.h
index 6be3f9374d..6be3f9374d 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svcid.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svcid.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svgldict.h b/drivers/freetype/freetype/include/freetype/internal/services/svgldict.h
index 1d12534725..1d12534725 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svgldict.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svgldict.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svgxval.h b/drivers/freetype/freetype/include/freetype/internal/services/svgxval.h
index 2cdab50655..2cdab50655 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svgxval.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svgxval.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svkern.h b/drivers/freetype/freetype/include/freetype/internal/services/svkern.h
index 1488adf493..1488adf493 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svkern.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svkern.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svmm.h b/drivers/freetype/freetype/include/freetype/internal/services/svmm.h
index b08a663d66..b08a663d66 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svmm.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svmm.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svotval.h b/drivers/freetype/freetype/include/freetype/internal/services/svotval.h
index 970bbd5759..970bbd5759 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svotval.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svotval.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svpfr.h b/drivers/freetype/freetype/include/freetype/internal/services/svpfr.h
index 462786f9ce..462786f9ce 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svpfr.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svpfr.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svpostnm.h b/drivers/freetype/freetype/include/freetype/internal/services/svpostnm.h
index a76b4fe057..a76b4fe057 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svpostnm.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svpostnm.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svprop.h b/drivers/freetype/freetype/include/freetype/internal/services/svprop.h
index 22da0bbc69..22da0bbc69 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svprop.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svprop.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svpscmap.h b/drivers/freetype/freetype/include/freetype/internal/services/svpscmap.h
index 030948ea64..030948ea64 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svpscmap.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svpscmap.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svpsinfo.h b/drivers/freetype/freetype/include/freetype/internal/services/svpsinfo.h
index 4bfb506711..4bfb506711 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svpsinfo.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svpsinfo.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svsfnt.h b/drivers/freetype/freetype/include/freetype/internal/services/svsfnt.h
index d3835aa1c2..d3835aa1c2 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svsfnt.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svsfnt.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svttcmap.h b/drivers/freetype/freetype/include/freetype/internal/services/svttcmap.h
index 83994aaf8a..83994aaf8a 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svttcmap.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svttcmap.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svtteng.h b/drivers/freetype/freetype/include/freetype/internal/services/svtteng.h
index 58e02a6f9d..58e02a6f9d 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svtteng.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svtteng.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svttglyf.h b/drivers/freetype/freetype/include/freetype/internal/services/svttglyf.h
index 369eb8421b..369eb8421b 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svttglyf.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svttglyf.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svwinfnt.h b/drivers/freetype/freetype/include/freetype/internal/services/svwinfnt.h
index 57f7765d92..57f7765d92 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svwinfnt.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svwinfnt.h
diff --git a/tools/freetype/freetype/include/freetype/internal/services/svxf86nm.h b/drivers/freetype/freetype/include/freetype/internal/services/svxf86nm.h
index ca5d884a83..ca5d884a83 100644
--- a/tools/freetype/freetype/include/freetype/internal/services/svxf86nm.h
+++ b/drivers/freetype/freetype/include/freetype/internal/services/svxf86nm.h
diff --git a/tools/freetype/freetype/include/freetype/internal/sfnt.h b/drivers/freetype/freetype/include/freetype/internal/sfnt.h
index 6b5e41f1ad..6b5e41f1ad 100644
--- a/tools/freetype/freetype/include/freetype/internal/sfnt.h
+++ b/drivers/freetype/freetype/include/freetype/internal/sfnt.h
diff --git a/tools/freetype/freetype/include/freetype/internal/t1types.h b/drivers/freetype/freetype/include/freetype/internal/t1types.h
index e20237c14d..e20237c14d 100644
--- a/tools/freetype/freetype/include/freetype/internal/t1types.h
+++ b/drivers/freetype/freetype/include/freetype/internal/t1types.h
diff --git a/tools/freetype/freetype/include/freetype/internal/tttypes.h b/drivers/freetype/freetype/include/freetype/internal/tttypes.h
index 1bbfe499c5..1bbfe499c5 100644
--- a/tools/freetype/freetype/include/freetype/internal/tttypes.h
+++ b/drivers/freetype/freetype/include/freetype/internal/tttypes.h
diff --git a/tools/freetype/freetype/include/freetype/t1tables.h b/drivers/freetype/freetype/include/freetype/t1tables.h
index a14255e5f5..a14255e5f5 100644
--- a/tools/freetype/freetype/include/freetype/t1tables.h
+++ b/drivers/freetype/freetype/include/freetype/t1tables.h
diff --git a/tools/freetype/freetype/include/freetype/ttnameid.h b/drivers/freetype/freetype/include/freetype/ttnameid.h
index 173f88c950..173f88c950 100644
--- a/tools/freetype/freetype/include/freetype/ttnameid.h
+++ b/drivers/freetype/freetype/include/freetype/ttnameid.h
diff --git a/tools/freetype/freetype/include/freetype/tttables.h b/drivers/freetype/freetype/include/freetype/tttables.h
index fe07117b0b..fe07117b0b 100644
--- a/tools/freetype/freetype/include/freetype/tttables.h
+++ b/drivers/freetype/freetype/include/freetype/tttables.h
diff --git a/tools/freetype/freetype/include/freetype/tttags.h b/drivers/freetype/freetype/include/freetype/tttags.h
index be8c524edb..be8c524edb 100644
--- a/tools/freetype/freetype/include/freetype/tttags.h
+++ b/drivers/freetype/freetype/include/freetype/tttags.h
diff --git a/tools/freetype/freetype/include/freetype/ttunpat.h b/drivers/freetype/freetype/include/freetype/ttunpat.h
index a0162759b7..a0162759b7 100644
--- a/tools/freetype/freetype/include/freetype/ttunpat.h
+++ b/drivers/freetype/freetype/include/freetype/ttunpat.h
diff --git a/tools/freetype/freetype/include/ftoption.h b/drivers/freetype/freetype/include/ftoption.h
index c9f4708691..c9f4708691 100644
--- a/tools/freetype/freetype/include/ftoption.h
+++ b/drivers/freetype/freetype/include/ftoption.h
diff --git a/tools/freetype/freetype/src/Jamfile b/drivers/freetype/freetype/src/Jamfile
index 76ee0f46e6..76ee0f46e6 100644
--- a/tools/freetype/freetype/src/Jamfile
+++ b/drivers/freetype/freetype/src/Jamfile
diff --git a/tools/freetype/freetype/src/autofit/Jamfile b/drivers/freetype/freetype/src/autofit/Jamfile
index 2714765b5b..2714765b5b 100644
--- a/tools/freetype/freetype/src/autofit/Jamfile
+++ b/drivers/freetype/freetype/src/autofit/Jamfile
diff --git a/tools/freetype/freetype/src/autofit/afangles.c b/drivers/freetype/freetype/src/autofit/afangles.c
index b44a5ba2c6..b44a5ba2c6 100644
--- a/tools/freetype/freetype/src/autofit/afangles.c
+++ b/drivers/freetype/freetype/src/autofit/afangles.c
diff --git a/tools/freetype/freetype/src/autofit/afangles.h b/drivers/freetype/freetype/src/autofit/afangles.h
index f33f9e108e..f33f9e108e 100644
--- a/tools/freetype/freetype/src/autofit/afangles.h
+++ b/drivers/freetype/freetype/src/autofit/afangles.h
diff --git a/tools/freetype/freetype/src/autofit/afcjk.c b/drivers/freetype/freetype/src/autofit/afcjk.c
index f69a528e3b..f69a528e3b 100644
--- a/tools/freetype/freetype/src/autofit/afcjk.c
+++ b/drivers/freetype/freetype/src/autofit/afcjk.c
diff --git a/tools/freetype/freetype/src/autofit/afcjk.h b/drivers/freetype/freetype/src/autofit/afcjk.h
index ab816f20b1..ab816f20b1 100644
--- a/tools/freetype/freetype/src/autofit/afcjk.h
+++ b/drivers/freetype/freetype/src/autofit/afcjk.h
diff --git a/tools/freetype/freetype/src/autofit/afdummy.c b/drivers/freetype/freetype/src/autofit/afdummy.c
index 22944559da..22944559da 100644
--- a/tools/freetype/freetype/src/autofit/afdummy.c
+++ b/drivers/freetype/freetype/src/autofit/afdummy.c
diff --git a/tools/freetype/freetype/src/autofit/afdummy.h b/drivers/freetype/freetype/src/autofit/afdummy.h
index 95d8f8cf19..95d8f8cf19 100644
--- a/tools/freetype/freetype/src/autofit/afdummy.h
+++ b/drivers/freetype/freetype/src/autofit/afdummy.h
diff --git a/tools/freetype/freetype/src/autofit/aferrors.h b/drivers/freetype/freetype/src/autofit/aferrors.h
index 50e1a22dd5..50e1a22dd5 100644
--- a/tools/freetype/freetype/src/autofit/aferrors.h
+++ b/drivers/freetype/freetype/src/autofit/aferrors.h
diff --git a/tools/freetype/freetype/src/autofit/afglobal.c b/drivers/freetype/freetype/src/autofit/afglobal.c
index 3e41465756..3e41465756 100644
--- a/tools/freetype/freetype/src/autofit/afglobal.c
+++ b/drivers/freetype/freetype/src/autofit/afglobal.c
diff --git a/tools/freetype/freetype/src/autofit/afglobal.h b/drivers/freetype/freetype/src/autofit/afglobal.h
index 2e24900822..2e24900822 100644
--- a/tools/freetype/freetype/src/autofit/afglobal.h
+++ b/drivers/freetype/freetype/src/autofit/afglobal.h
diff --git a/tools/freetype/freetype/src/autofit/afhints.c b/drivers/freetype/freetype/src/autofit/afhints.c
index e8defaa88d..e8defaa88d 100644
--- a/tools/freetype/freetype/src/autofit/afhints.c
+++ b/drivers/freetype/freetype/src/autofit/afhints.c
diff --git a/tools/freetype/freetype/src/autofit/afhints.h b/drivers/freetype/freetype/src/autofit/afhints.h
index 776b3c844e..776b3c844e 100644
--- a/tools/freetype/freetype/src/autofit/afhints.h
+++ b/drivers/freetype/freetype/src/autofit/afhints.h
diff --git a/tools/freetype/freetype/src/autofit/afindic.c b/drivers/freetype/freetype/src/autofit/afindic.c
index 8c24972598..8c24972598 100644
--- a/tools/freetype/freetype/src/autofit/afindic.c
+++ b/drivers/freetype/freetype/src/autofit/afindic.c
diff --git a/tools/freetype/freetype/src/autofit/afindic.h b/drivers/freetype/freetype/src/autofit/afindic.h
index c252cf20da..c252cf20da 100644
--- a/tools/freetype/freetype/src/autofit/afindic.h
+++ b/drivers/freetype/freetype/src/autofit/afindic.h
diff --git a/tools/freetype/freetype/src/autofit/aflatin.c b/drivers/freetype/freetype/src/autofit/aflatin.c
index ef0157a13e..ef0157a13e 100644
--- a/tools/freetype/freetype/src/autofit/aflatin.c
+++ b/drivers/freetype/freetype/src/autofit/aflatin.c
diff --git a/tools/freetype/freetype/src/autofit/aflatin.h b/drivers/freetype/freetype/src/autofit/aflatin.h
index d9170b3dcc..d9170b3dcc 100644
--- a/tools/freetype/freetype/src/autofit/aflatin.h
+++ b/drivers/freetype/freetype/src/autofit/aflatin.h
diff --git a/tools/freetype/freetype/src/autofit/aflatin2.c b/drivers/freetype/freetype/src/autofit/aflatin2.c
index b1e9658d5d..b1e9658d5d 100644
--- a/tools/freetype/freetype/src/autofit/aflatin2.c
+++ b/drivers/freetype/freetype/src/autofit/aflatin2.c
diff --git a/tools/freetype/freetype/src/autofit/aflatin2.h b/drivers/freetype/freetype/src/autofit/aflatin2.h
index cbfa395522..cbfa395522 100644
--- a/tools/freetype/freetype/src/autofit/aflatin2.h
+++ b/drivers/freetype/freetype/src/autofit/aflatin2.h
diff --git a/tools/freetype/freetype/src/autofit/afloader.c b/drivers/freetype/freetype/src/autofit/afloader.c
index 17a6fb7c3b..17a6fb7c3b 100644
--- a/tools/freetype/freetype/src/autofit/afloader.c
+++ b/drivers/freetype/freetype/src/autofit/afloader.c
diff --git a/tools/freetype/freetype/src/autofit/afloader.h b/drivers/freetype/freetype/src/autofit/afloader.h
index 1f34d17cce..1f34d17cce 100644
--- a/tools/freetype/freetype/src/autofit/afloader.h
+++ b/drivers/freetype/freetype/src/autofit/afloader.h
diff --git a/tools/freetype/freetype/src/autofit/afmodule.c b/drivers/freetype/freetype/src/autofit/afmodule.c
index b1bb5ee0ed..b1bb5ee0ed 100644
--- a/tools/freetype/freetype/src/autofit/afmodule.c
+++ b/drivers/freetype/freetype/src/autofit/afmodule.c
diff --git a/tools/freetype/freetype/src/autofit/afmodule.h b/drivers/freetype/freetype/src/autofit/afmodule.h
index c4e8f8f66a..c4e8f8f66a 100644
--- a/tools/freetype/freetype/src/autofit/afmodule.h
+++ b/drivers/freetype/freetype/src/autofit/afmodule.h
diff --git a/tools/freetype/freetype/src/autofit/afpic.c b/drivers/freetype/freetype/src/autofit/afpic.c
index 45e1448c08..45e1448c08 100644
--- a/tools/freetype/freetype/src/autofit/afpic.c
+++ b/drivers/freetype/freetype/src/autofit/afpic.c
diff --git a/tools/freetype/freetype/src/autofit/afpic.h b/drivers/freetype/freetype/src/autofit/afpic.h
index 0acf803894..0acf803894 100644
--- a/tools/freetype/freetype/src/autofit/afpic.h
+++ b/drivers/freetype/freetype/src/autofit/afpic.h
diff --git a/tools/freetype/freetype/src/autofit/aftypes.h b/drivers/freetype/freetype/src/autofit/aftypes.h
index 9acd7ad6d2..9acd7ad6d2 100644
--- a/tools/freetype/freetype/src/autofit/aftypes.h
+++ b/drivers/freetype/freetype/src/autofit/aftypes.h
diff --git a/tools/freetype/freetype/src/autofit/afwarp.c b/drivers/freetype/freetype/src/autofit/afwarp.c
index 34a97ffc57..34a97ffc57 100644
--- a/tools/freetype/freetype/src/autofit/afwarp.c
+++ b/drivers/freetype/freetype/src/autofit/afwarp.c
diff --git a/tools/freetype/freetype/src/autofit/afwarp.h b/drivers/freetype/freetype/src/autofit/afwarp.h
index 7343fdd5ef..7343fdd5ef 100644
--- a/tools/freetype/freetype/src/autofit/afwarp.h
+++ b/drivers/freetype/freetype/src/autofit/afwarp.h
diff --git a/tools/freetype/freetype/src/autofit/autofit.c b/drivers/freetype/freetype/src/autofit/autofit.c
index 3883a0a706..3883a0a706 100644
--- a/tools/freetype/freetype/src/autofit/autofit.c
+++ b/drivers/freetype/freetype/src/autofit/autofit.c
diff --git a/tools/freetype/freetype/src/autofit/module.mk b/drivers/freetype/freetype/src/autofit/module.mk
index 6ec60912ab..6ec60912ab 100644
--- a/tools/freetype/freetype/src/autofit/module.mk
+++ b/drivers/freetype/freetype/src/autofit/module.mk
diff --git a/tools/freetype/freetype/src/autofit/rules.mk b/drivers/freetype/freetype/src/autofit/rules.mk
index b76bb79ab4..b76bb79ab4 100644
--- a/tools/freetype/freetype/src/autofit/rules.mk
+++ b/drivers/freetype/freetype/src/autofit/rules.mk
diff --git a/tools/freetype/freetype/src/base/Jamfile b/drivers/freetype/freetype/src/base/Jamfile
index 832e8b8424..832e8b8424 100644
--- a/tools/freetype/freetype/src/base/Jamfile
+++ b/drivers/freetype/freetype/src/base/Jamfile
diff --git a/tools/freetype/freetype/src/base/basepic.c b/drivers/freetype/freetype/src/base/basepic.c
index 0af770ebc2..0af770ebc2 100644
--- a/tools/freetype/freetype/src/base/basepic.c
+++ b/drivers/freetype/freetype/src/base/basepic.c
diff --git a/tools/freetype/freetype/src/base/basepic.h b/drivers/freetype/freetype/src/base/basepic.h
index 329d7c8fd6..329d7c8fd6 100644
--- a/tools/freetype/freetype/src/base/basepic.h
+++ b/drivers/freetype/freetype/src/base/basepic.h
diff --git a/tools/freetype/freetype/src/base/ftadvanc.c b/drivers/freetype/freetype/src/base/ftadvanc.c
index 52078478df..52078478df 100644
--- a/tools/freetype/freetype/src/base/ftadvanc.c
+++ b/drivers/freetype/freetype/src/base/ftadvanc.c
diff --git a/tools/freetype/freetype/src/base/ftapi.c b/drivers/freetype/freetype/src/base/ftapi.c
index 8914d1f4e9..8914d1f4e9 100644
--- a/tools/freetype/freetype/src/base/ftapi.c
+++ b/drivers/freetype/freetype/src/base/ftapi.c
diff --git a/tools/freetype/freetype/src/base/ftbase.c b/drivers/freetype/freetype/src/base/ftbase.c
index 5e5d70ec4b..5e5d70ec4b 100644
--- a/tools/freetype/freetype/src/base/ftbase.c
+++ b/drivers/freetype/freetype/src/base/ftbase.c
diff --git a/tools/freetype/freetype/src/base/ftbase.h b/drivers/freetype/freetype/src/base/ftbase.h
index 51a1db18b8..51a1db18b8 100644
--- a/tools/freetype/freetype/src/base/ftbase.h
+++ b/drivers/freetype/freetype/src/base/ftbase.h
diff --git a/tools/freetype/freetype/src/base/ftbbox.c b/drivers/freetype/freetype/src/base/ftbbox.c
index 6d1c44cb2e..6d1c44cb2e 100644
--- a/tools/freetype/freetype/src/base/ftbbox.c
+++ b/drivers/freetype/freetype/src/base/ftbbox.c
diff --git a/tools/freetype/freetype/src/base/ftbdf.c b/drivers/freetype/freetype/src/base/ftbdf.c
index 5755f8558d..5755f8558d 100644
--- a/tools/freetype/freetype/src/base/ftbdf.c
+++ b/drivers/freetype/freetype/src/base/ftbdf.c
diff --git a/tools/freetype/freetype/src/base/ftbitmap.c b/drivers/freetype/freetype/src/base/ftbitmap.c
index 975818e14f..975818e14f 100644
--- a/tools/freetype/freetype/src/base/ftbitmap.c
+++ b/drivers/freetype/freetype/src/base/ftbitmap.c
diff --git a/tools/freetype/freetype/src/base/ftcalc.c b/drivers/freetype/freetype/src/base/ftcalc.c
index 0ec0d78930..0ec0d78930 100644
--- a/tools/freetype/freetype/src/base/ftcalc.c
+++ b/drivers/freetype/freetype/src/base/ftcalc.c
diff --git a/tools/freetype/freetype/src/base/ftcid.c b/drivers/freetype/freetype/src/base/ftcid.c
index 741879d922..741879d922 100644
--- a/tools/freetype/freetype/src/base/ftcid.c
+++ b/drivers/freetype/freetype/src/base/ftcid.c
diff --git a/tools/freetype/freetype/src/base/ftdbgmem.c b/drivers/freetype/freetype/src/base/ftdbgmem.c
index 6fb86fe77d..6fb86fe77d 100644
--- a/tools/freetype/freetype/src/base/ftdbgmem.c
+++ b/drivers/freetype/freetype/src/base/ftdbgmem.c
diff --git a/tools/freetype/freetype/src/base/ftdebug.c b/drivers/freetype/freetype/src/base/ftdebug.c
index b9156d15ee..b9156d15ee 100644
--- a/tools/freetype/freetype/src/base/ftdebug.c
+++ b/drivers/freetype/freetype/src/base/ftdebug.c
diff --git a/tools/freetype/freetype/src/base/ftfstype.c b/drivers/freetype/freetype/src/base/ftfstype.c
index d0ef7b7c1b..d0ef7b7c1b 100644
--- a/tools/freetype/freetype/src/base/ftfstype.c
+++ b/drivers/freetype/freetype/src/base/ftfstype.c
diff --git a/tools/freetype/freetype/src/base/ftgasp.c b/drivers/freetype/freetype/src/base/ftgasp.c
index 8485d29259..8485d29259 100644
--- a/tools/freetype/freetype/src/base/ftgasp.c
+++ b/drivers/freetype/freetype/src/base/ftgasp.c
diff --git a/tools/freetype/freetype/src/base/ftgloadr.c b/drivers/freetype/freetype/src/base/ftgloadr.c
index 3cc5c7a805..3cc5c7a805 100644
--- a/tools/freetype/freetype/src/base/ftgloadr.c
+++ b/drivers/freetype/freetype/src/base/ftgloadr.c
diff --git a/tools/freetype/freetype/src/base/ftglyph.c b/drivers/freetype/freetype/src/base/ftglyph.c
index 5dd28a8c52..5dd28a8c52 100644
--- a/tools/freetype/freetype/src/base/ftglyph.c
+++ b/drivers/freetype/freetype/src/base/ftglyph.c
diff --git a/tools/freetype/freetype/src/base/ftgxval.c b/drivers/freetype/freetype/src/base/ftgxval.c
index a8ec44ac00..a8ec44ac00 100644
--- a/tools/freetype/freetype/src/base/ftgxval.c
+++ b/drivers/freetype/freetype/src/base/ftgxval.c
diff --git a/tools/freetype/freetype/src/base/ftinit.c b/drivers/freetype/freetype/src/base/ftinit.c
index 85f321fd2d..85f321fd2d 100644
--- a/tools/freetype/freetype/src/base/ftinit.c
+++ b/drivers/freetype/freetype/src/base/ftinit.c
diff --git a/tools/freetype/freetype/src/base/ftlcdfil.c b/drivers/freetype/freetype/src/base/ftlcdfil.c
index 852fb32982..852fb32982 100644
--- a/tools/freetype/freetype/src/base/ftlcdfil.c
+++ b/drivers/freetype/freetype/src/base/ftlcdfil.c
diff --git a/tools/freetype/freetype/src/base/ftmac.c b/drivers/freetype/freetype/src/base/ftmac.c
index 5b5aae61cc..5b5aae61cc 100644
--- a/tools/freetype/freetype/src/base/ftmac.c
+++ b/drivers/freetype/freetype/src/base/ftmac.c
diff --git a/tools/freetype/freetype/src/base/ftmm.c b/drivers/freetype/freetype/src/base/ftmm.c
index 18ff879bfc..18ff879bfc 100644
--- a/tools/freetype/freetype/src/base/ftmm.c
+++ b/drivers/freetype/freetype/src/base/ftmm.c
diff --git a/tools/freetype/freetype/src/base/ftobjs.c b/drivers/freetype/freetype/src/base/ftobjs.c
index 157bf45634..157bf45634 100644
--- a/tools/freetype/freetype/src/base/ftobjs.c
+++ b/drivers/freetype/freetype/src/base/ftobjs.c
diff --git a/tools/freetype/freetype/src/base/ftotval.c b/drivers/freetype/freetype/src/base/ftotval.c
index 5fc73d76ab..5fc73d76ab 100644
--- a/tools/freetype/freetype/src/base/ftotval.c
+++ b/drivers/freetype/freetype/src/base/ftotval.c
diff --git a/tools/freetype/freetype/src/base/ftoutln.c b/drivers/freetype/freetype/src/base/ftoutln.c
index 54ca5cdcf6..54ca5cdcf6 100644
--- a/tools/freetype/freetype/src/base/ftoutln.c
+++ b/drivers/freetype/freetype/src/base/ftoutln.c
diff --git a/tools/freetype/freetype/src/base/ftpatent.c b/drivers/freetype/freetype/src/base/ftpatent.c
index 82b42f0343..82b42f0343 100644
--- a/tools/freetype/freetype/src/base/ftpatent.c
+++ b/drivers/freetype/freetype/src/base/ftpatent.c
diff --git a/tools/freetype/freetype/src/base/ftpfr.c b/drivers/freetype/freetype/src/base/ftpfr.c
index 0ba955f01f..0ba955f01f 100644
--- a/tools/freetype/freetype/src/base/ftpfr.c
+++ b/drivers/freetype/freetype/src/base/ftpfr.c
diff --git a/tools/freetype/freetype/src/base/ftpic.c b/drivers/freetype/freetype/src/base/ftpic.c
index 1c87101696..1c87101696 100644
--- a/tools/freetype/freetype/src/base/ftpic.c
+++ b/drivers/freetype/freetype/src/base/ftpic.c
diff --git a/tools/freetype/freetype/src/base/ftrfork.c b/drivers/freetype/freetype/src/base/ftrfork.c
index 804911721d..804911721d 100644
--- a/tools/freetype/freetype/src/base/ftrfork.c
+++ b/drivers/freetype/freetype/src/base/ftrfork.c
diff --git a/tools/freetype/freetype/src/base/ftsnames.c b/drivers/freetype/freetype/src/base/ftsnames.c
index 260e91c148..260e91c148 100644
--- a/tools/freetype/freetype/src/base/ftsnames.c
+++ b/drivers/freetype/freetype/src/base/ftsnames.c
diff --git a/tools/freetype/freetype/src/base/ftstream.c b/drivers/freetype/freetype/src/base/ftstream.c
index d965333daa..d965333daa 100644
--- a/tools/freetype/freetype/src/base/ftstream.c
+++ b/drivers/freetype/freetype/src/base/ftstream.c
diff --git a/tools/freetype/freetype/src/base/ftstroke.c b/drivers/freetype/freetype/src/base/ftstroke.c
index ee61ceca0e..ee61ceca0e 100644
--- a/tools/freetype/freetype/src/base/ftstroke.c
+++ b/drivers/freetype/freetype/src/base/ftstroke.c
diff --git a/tools/freetype/freetype/src/base/ftsynth.c b/drivers/freetype/freetype/src/base/ftsynth.c
index 241d37f426..241d37f426 100644
--- a/tools/freetype/freetype/src/base/ftsynth.c
+++ b/drivers/freetype/freetype/src/base/ftsynth.c
diff --git a/tools/freetype/freetype/src/base/ftsystem.c b/drivers/freetype/freetype/src/base/ftsystem.c
index 2c6ddac10c..2c6ddac10c 100644
--- a/tools/freetype/freetype/src/base/ftsystem.c
+++ b/drivers/freetype/freetype/src/base/ftsystem.c
diff --git a/tools/freetype/freetype/src/base/fttrigon.c b/drivers/freetype/freetype/src/base/fttrigon.c
index 4ffdcb77f1..4ffdcb77f1 100644
--- a/tools/freetype/freetype/src/base/fttrigon.c
+++ b/drivers/freetype/freetype/src/base/fttrigon.c
diff --git a/tools/freetype/freetype/src/base/fttype1.c b/drivers/freetype/freetype/src/base/fttype1.c
index c1f9931dbb..c1f9931dbb 100644
--- a/tools/freetype/freetype/src/base/fttype1.c
+++ b/drivers/freetype/freetype/src/base/fttype1.c
diff --git a/tools/freetype/freetype/src/base/ftutil.c b/drivers/freetype/freetype/src/base/ftutil.c
index 879d027529..879d027529 100644
--- a/tools/freetype/freetype/src/base/ftutil.c
+++ b/drivers/freetype/freetype/src/base/ftutil.c
diff --git a/tools/freetype/freetype/src/base/ftwinfnt.c b/drivers/freetype/freetype/src/base/ftwinfnt.c
index 463ae761d8..463ae761d8 100644
--- a/tools/freetype/freetype/src/base/ftwinfnt.c
+++ b/drivers/freetype/freetype/src/base/ftwinfnt.c
diff --git a/tools/freetype/freetype/src/base/ftxf86.c b/drivers/freetype/freetype/src/base/ftxf86.c
index a4bf767dfa..a4bf767dfa 100644
--- a/tools/freetype/freetype/src/base/ftxf86.c
+++ b/drivers/freetype/freetype/src/base/ftxf86.c
diff --git a/tools/freetype/freetype/src/base/md5.c b/drivers/freetype/freetype/src/base/md5.c
index 2f01c9302c..2f01c9302c 100644
--- a/tools/freetype/freetype/src/base/md5.c
+++ b/drivers/freetype/freetype/src/base/md5.c
diff --git a/tools/freetype/freetype/src/base/md5.h b/drivers/freetype/freetype/src/base/md5.h
index f1a6857640..f1a6857640 100644
--- a/tools/freetype/freetype/src/base/md5.h
+++ b/drivers/freetype/freetype/src/base/md5.h
diff --git a/tools/freetype/freetype/src/base/rules.mk b/drivers/freetype/freetype/src/base/rules.mk
index e932191157..e932191157 100644
--- a/tools/freetype/freetype/src/base/rules.mk
+++ b/drivers/freetype/freetype/src/base/rules.mk
diff --git a/tools/freetype/freetype/src/bdf/Jamfile b/drivers/freetype/freetype/src/bdf/Jamfile
index da23ccd0ad..da23ccd0ad 100644
--- a/tools/freetype/freetype/src/bdf/Jamfile
+++ b/drivers/freetype/freetype/src/bdf/Jamfile
diff --git a/tools/freetype/freetype/src/bdf/README b/drivers/freetype/freetype/src/bdf/README
index b761aba2b2..b761aba2b2 100644
--- a/tools/freetype/freetype/src/bdf/README
+++ b/drivers/freetype/freetype/src/bdf/README
diff --git a/tools/freetype/freetype/src/bdf/bdf.c b/drivers/freetype/freetype/src/bdf/bdf.c
index f95fb76225..f95fb76225 100644
--- a/tools/freetype/freetype/src/bdf/bdf.c
+++ b/drivers/freetype/freetype/src/bdf/bdf.c
diff --git a/tools/freetype/freetype/src/bdf/bdf.h b/drivers/freetype/freetype/src/bdf/bdf.h
index d11be6f147..d11be6f147 100644
--- a/tools/freetype/freetype/src/bdf/bdf.h
+++ b/drivers/freetype/freetype/src/bdf/bdf.h
diff --git a/tools/freetype/freetype/src/bdf/bdfdrivr.c b/drivers/freetype/freetype/src/bdf/bdfdrivr.c
index 0ea0a5ea5e..0ea0a5ea5e 100644
--- a/tools/freetype/freetype/src/bdf/bdfdrivr.c
+++ b/drivers/freetype/freetype/src/bdf/bdfdrivr.c
diff --git a/tools/freetype/freetype/src/bdf/bdfdrivr.h b/drivers/freetype/freetype/src/bdf/bdfdrivr.h
index ca0dae50d2..ca0dae50d2 100644
--- a/tools/freetype/freetype/src/bdf/bdfdrivr.h
+++ b/drivers/freetype/freetype/src/bdf/bdfdrivr.h
diff --git a/tools/freetype/freetype/src/bdf/bdferror.h b/drivers/freetype/freetype/src/bdf/bdferror.h
index ea545aca06..ea545aca06 100644
--- a/tools/freetype/freetype/src/bdf/bdferror.h
+++ b/drivers/freetype/freetype/src/bdf/bdferror.h
diff --git a/tools/freetype/freetype/src/bdf/bdflib.c b/drivers/freetype/freetype/src/bdf/bdflib.c
index 0b8412d9eb..0b8412d9eb 100644
--- a/tools/freetype/freetype/src/bdf/bdflib.c
+++ b/drivers/freetype/freetype/src/bdf/bdflib.c
diff --git a/tools/freetype/freetype/src/bdf/module.mk b/drivers/freetype/freetype/src/bdf/module.mk
index fe06ae8e06..fe06ae8e06 100644
--- a/tools/freetype/freetype/src/bdf/module.mk
+++ b/drivers/freetype/freetype/src/bdf/module.mk
diff --git a/tools/freetype/freetype/src/bdf/rules.mk b/drivers/freetype/freetype/src/bdf/rules.mk
index 6ff1614dde..6ff1614dde 100644
--- a/tools/freetype/freetype/src/bdf/rules.mk
+++ b/drivers/freetype/freetype/src/bdf/rules.mk
diff --git a/tools/freetype/freetype/src/cache/Jamfile b/drivers/freetype/freetype/src/cache/Jamfile
index 340cff7742..340cff7742 100644
--- a/tools/freetype/freetype/src/cache/Jamfile
+++ b/drivers/freetype/freetype/src/cache/Jamfile
diff --git a/tools/freetype/freetype/src/cache/ftcache.c b/drivers/freetype/freetype/src/cache/ftcache.c
index d41e91e5ec..d41e91e5ec 100644
--- a/tools/freetype/freetype/src/cache/ftcache.c
+++ b/drivers/freetype/freetype/src/cache/ftcache.c
diff --git a/tools/freetype/freetype/src/cache/ftcbasic.c b/drivers/freetype/freetype/src/cache/ftcbasic.c
index 84d336d5d6..84d336d5d6 100644
--- a/tools/freetype/freetype/src/cache/ftcbasic.c
+++ b/drivers/freetype/freetype/src/cache/ftcbasic.c
diff --git a/tools/freetype/freetype/src/cache/ftccache.c b/drivers/freetype/freetype/src/cache/ftccache.c
index f20dd4502c..f20dd4502c 100644
--- a/tools/freetype/freetype/src/cache/ftccache.c
+++ b/drivers/freetype/freetype/src/cache/ftccache.c
diff --git a/tools/freetype/freetype/src/cache/ftccache.h b/drivers/freetype/freetype/src/cache/ftccache.h
index 4155f320e0..4155f320e0 100644
--- a/tools/freetype/freetype/src/cache/ftccache.h
+++ b/drivers/freetype/freetype/src/cache/ftccache.h
diff --git a/tools/freetype/freetype/src/cache/ftccback.h b/drivers/freetype/freetype/src/cache/ftccback.h
index 9528279273..9528279273 100644
--- a/tools/freetype/freetype/src/cache/ftccback.h
+++ b/drivers/freetype/freetype/src/cache/ftccback.h
diff --git a/tools/freetype/freetype/src/cache/ftccmap.c b/drivers/freetype/freetype/src/cache/ftccmap.c
index 848349be2d..848349be2d 100644
--- a/tools/freetype/freetype/src/cache/ftccmap.c
+++ b/drivers/freetype/freetype/src/cache/ftccmap.c
diff --git a/tools/freetype/freetype/src/cache/ftcerror.h b/drivers/freetype/freetype/src/cache/ftcerror.h
index 0e055709bb..0e055709bb 100644
--- a/tools/freetype/freetype/src/cache/ftcerror.h
+++ b/drivers/freetype/freetype/src/cache/ftcerror.h
diff --git a/tools/freetype/freetype/src/cache/ftcglyph.c b/drivers/freetype/freetype/src/cache/ftcglyph.c
index 441e177238..441e177238 100644
--- a/tools/freetype/freetype/src/cache/ftcglyph.c
+++ b/drivers/freetype/freetype/src/cache/ftcglyph.c
diff --git a/tools/freetype/freetype/src/cache/ftcglyph.h b/drivers/freetype/freetype/src/cache/ftcglyph.h
index 5fed19cb8f..5fed19cb8f 100644
--- a/tools/freetype/freetype/src/cache/ftcglyph.h
+++ b/drivers/freetype/freetype/src/cache/ftcglyph.h
diff --git a/tools/freetype/freetype/src/cache/ftcimage.c b/drivers/freetype/freetype/src/cache/ftcimage.c
index c242ece021..c242ece021 100644
--- a/tools/freetype/freetype/src/cache/ftcimage.c
+++ b/drivers/freetype/freetype/src/cache/ftcimage.c
diff --git a/tools/freetype/freetype/src/cache/ftcimage.h b/drivers/freetype/freetype/src/cache/ftcimage.h
index 20d5d3e07d..20d5d3e07d 100644
--- a/tools/freetype/freetype/src/cache/ftcimage.h
+++ b/drivers/freetype/freetype/src/cache/ftcimage.h
diff --git a/tools/freetype/freetype/src/cache/ftcmanag.c b/drivers/freetype/freetype/src/cache/ftcmanag.c
index 4eb2c5bfd6..4eb2c5bfd6 100644
--- a/tools/freetype/freetype/src/cache/ftcmanag.c
+++ b/drivers/freetype/freetype/src/cache/ftcmanag.c
diff --git a/tools/freetype/freetype/src/cache/ftcmanag.h b/drivers/freetype/freetype/src/cache/ftcmanag.h
index 0aec33c584..0aec33c584 100644
--- a/tools/freetype/freetype/src/cache/ftcmanag.h
+++ b/drivers/freetype/freetype/src/cache/ftcmanag.h
diff --git a/tools/freetype/freetype/src/cache/ftcmru.c b/drivers/freetype/freetype/src/cache/ftcmru.c
index dc8b4cc397..dc8b4cc397 100644
--- a/tools/freetype/freetype/src/cache/ftcmru.c
+++ b/drivers/freetype/freetype/src/cache/ftcmru.c
diff --git a/tools/freetype/freetype/src/cache/ftcmru.h b/drivers/freetype/freetype/src/cache/ftcmru.h
index 6fccf11781..6fccf11781 100644
--- a/tools/freetype/freetype/src/cache/ftcmru.h
+++ b/drivers/freetype/freetype/src/cache/ftcmru.h
diff --git a/tools/freetype/freetype/src/cache/ftcsbits.c b/drivers/freetype/freetype/src/cache/ftcsbits.c
index 6df1c19930..6df1c19930 100644
--- a/tools/freetype/freetype/src/cache/ftcsbits.c
+++ b/drivers/freetype/freetype/src/cache/ftcsbits.c
diff --git a/tools/freetype/freetype/src/cache/ftcsbits.h b/drivers/freetype/freetype/src/cache/ftcsbits.h
index df55dca806..df55dca806 100644
--- a/tools/freetype/freetype/src/cache/ftcsbits.h
+++ b/drivers/freetype/freetype/src/cache/ftcsbits.h
diff --git a/tools/freetype/freetype/src/cache/rules.mk b/drivers/freetype/freetype/src/cache/rules.mk
index ed75a6a91f..ed75a6a91f 100644
--- a/tools/freetype/freetype/src/cache/rules.mk
+++ b/drivers/freetype/freetype/src/cache/rules.mk
diff --git a/tools/freetype/freetype/src/cff/Jamfile b/drivers/freetype/freetype/src/cff/Jamfile
index 6705d3cfdb..6705d3cfdb 100644
--- a/tools/freetype/freetype/src/cff/Jamfile
+++ b/drivers/freetype/freetype/src/cff/Jamfile
diff --git a/tools/freetype/freetype/src/cff/cf2arrst.c b/drivers/freetype/freetype/src/cff/cf2arrst.c
index c8d6f13098..c8d6f13098 100644
--- a/tools/freetype/freetype/src/cff/cf2arrst.c
+++ b/drivers/freetype/freetype/src/cff/cf2arrst.c
diff --git a/tools/freetype/freetype/src/cff/cf2arrst.h b/drivers/freetype/freetype/src/cff/cf2arrst.h
index ff5ad8b126..ff5ad8b126 100644
--- a/tools/freetype/freetype/src/cff/cf2arrst.h
+++ b/drivers/freetype/freetype/src/cff/cf2arrst.h
diff --git a/tools/freetype/freetype/src/cff/cf2blues.c b/drivers/freetype/freetype/src/cff/cf2blues.c
index 5b348398af..5b348398af 100644
--- a/tools/freetype/freetype/src/cff/cf2blues.c
+++ b/drivers/freetype/freetype/src/cff/cf2blues.c
diff --git a/tools/freetype/freetype/src/cff/cf2blues.h b/drivers/freetype/freetype/src/cff/cf2blues.h
index 2f38fcad8f..2f38fcad8f 100644
--- a/tools/freetype/freetype/src/cff/cf2blues.h
+++ b/drivers/freetype/freetype/src/cff/cf2blues.h
diff --git a/tools/freetype/freetype/src/cff/cf2error.c b/drivers/freetype/freetype/src/cff/cf2error.c
index b5595a3d1f..b5595a3d1f 100644
--- a/tools/freetype/freetype/src/cff/cf2error.c
+++ b/drivers/freetype/freetype/src/cff/cf2error.c
diff --git a/tools/freetype/freetype/src/cff/cf2error.h b/drivers/freetype/freetype/src/cff/cf2error.h
index 6453ebcb7b..6453ebcb7b 100644
--- a/tools/freetype/freetype/src/cff/cf2error.h
+++ b/drivers/freetype/freetype/src/cff/cf2error.h
diff --git a/tools/freetype/freetype/src/cff/cf2fixed.h b/drivers/freetype/freetype/src/cff/cf2fixed.h
index ed1452a7da..ed1452a7da 100644
--- a/tools/freetype/freetype/src/cff/cf2fixed.h
+++ b/drivers/freetype/freetype/src/cff/cf2fixed.h
diff --git a/tools/freetype/freetype/src/cff/cf2font.c b/drivers/freetype/freetype/src/cff/cf2font.c
index 479d9125d1..479d9125d1 100644
--- a/tools/freetype/freetype/src/cff/cf2font.c
+++ b/drivers/freetype/freetype/src/cff/cf2font.c
diff --git a/tools/freetype/freetype/src/cff/cf2font.h b/drivers/freetype/freetype/src/cff/cf2font.h
index f9dd1bbd40..f9dd1bbd40 100644
--- a/tools/freetype/freetype/src/cff/cf2font.h
+++ b/drivers/freetype/freetype/src/cff/cf2font.h
diff --git a/tools/freetype/freetype/src/cff/cf2ft.c b/drivers/freetype/freetype/src/cff/cf2ft.c
index c09a0244a8..c09a0244a8 100644
--- a/tools/freetype/freetype/src/cff/cf2ft.c
+++ b/drivers/freetype/freetype/src/cff/cf2ft.c
diff --git a/tools/freetype/freetype/src/cff/cf2ft.h b/drivers/freetype/freetype/src/cff/cf2ft.h
index 731da3ca8c..731da3ca8c 100644
--- a/tools/freetype/freetype/src/cff/cf2ft.h
+++ b/drivers/freetype/freetype/src/cff/cf2ft.h
diff --git a/tools/freetype/freetype/src/cff/cf2glue.h b/drivers/freetype/freetype/src/cff/cf2glue.h
index a24da39e93..a24da39e93 100644
--- a/tools/freetype/freetype/src/cff/cf2glue.h
+++ b/drivers/freetype/freetype/src/cff/cf2glue.h
diff --git a/tools/freetype/freetype/src/cff/cf2hints.c b/drivers/freetype/freetype/src/cff/cf2hints.c
index 96bd49f186..96bd49f186 100644
--- a/tools/freetype/freetype/src/cff/cf2hints.c
+++ b/drivers/freetype/freetype/src/cff/cf2hints.c
diff --git a/tools/freetype/freetype/src/cff/cf2hints.h b/drivers/freetype/freetype/src/cff/cf2hints.h
index c4fa922a39..c4fa922a39 100644
--- a/tools/freetype/freetype/src/cff/cf2hints.h
+++ b/drivers/freetype/freetype/src/cff/cf2hints.h
diff --git a/tools/freetype/freetype/src/cff/cf2intrp.c b/drivers/freetype/freetype/src/cff/cf2intrp.c
index 5610917cc3..5610917cc3 100644
--- a/tools/freetype/freetype/src/cff/cf2intrp.c
+++ b/drivers/freetype/freetype/src/cff/cf2intrp.c
diff --git a/tools/freetype/freetype/src/cff/cf2intrp.h b/drivers/freetype/freetype/src/cff/cf2intrp.h
index b5d8947838..b5d8947838 100644
--- a/tools/freetype/freetype/src/cff/cf2intrp.h
+++ b/drivers/freetype/freetype/src/cff/cf2intrp.h
diff --git a/tools/freetype/freetype/src/cff/cf2read.c b/drivers/freetype/freetype/src/cff/cf2read.c
index 2b429e3eeb..2b429e3eeb 100644
--- a/tools/freetype/freetype/src/cff/cf2read.c
+++ b/drivers/freetype/freetype/src/cff/cf2read.c
diff --git a/tools/freetype/freetype/src/cff/cf2read.h b/drivers/freetype/freetype/src/cff/cf2read.h
index 7ef7c8c149..7ef7c8c149 100644
--- a/tools/freetype/freetype/src/cff/cf2read.h
+++ b/drivers/freetype/freetype/src/cff/cf2read.h
diff --git a/tools/freetype/freetype/src/cff/cf2stack.c b/drivers/freetype/freetype/src/cff/cf2stack.c
index 8332b5d91a..8332b5d91a 100644
--- a/tools/freetype/freetype/src/cff/cf2stack.c
+++ b/drivers/freetype/freetype/src/cff/cf2stack.c
diff --git a/tools/freetype/freetype/src/cff/cf2stack.h b/drivers/freetype/freetype/src/cff/cf2stack.h
index 7d6d1961fe..7d6d1961fe 100644
--- a/tools/freetype/freetype/src/cff/cf2stack.h
+++ b/drivers/freetype/freetype/src/cff/cf2stack.h
diff --git a/tools/freetype/freetype/src/cff/cf2types.h b/drivers/freetype/freetype/src/cff/cf2types.h
index ac6a02266e..ac6a02266e 100644
--- a/tools/freetype/freetype/src/cff/cf2types.h
+++ b/drivers/freetype/freetype/src/cff/cf2types.h
diff --git a/tools/freetype/freetype/src/cff/cff.c b/drivers/freetype/freetype/src/cff/cff.c
index c3840b5838..c3840b5838 100644
--- a/tools/freetype/freetype/src/cff/cff.c
+++ b/drivers/freetype/freetype/src/cff/cff.c
diff --git a/tools/freetype/freetype/src/cff/cffcmap.c b/drivers/freetype/freetype/src/cff/cffcmap.c
index f6e03c6420..f6e03c6420 100644
--- a/tools/freetype/freetype/src/cff/cffcmap.c
+++ b/drivers/freetype/freetype/src/cff/cffcmap.c
diff --git a/tools/freetype/freetype/src/cff/cffcmap.h b/drivers/freetype/freetype/src/cff/cffcmap.h
index 3f7f67bbe0..3f7f67bbe0 100644
--- a/tools/freetype/freetype/src/cff/cffcmap.h
+++ b/drivers/freetype/freetype/src/cff/cffcmap.h
diff --git a/tools/freetype/freetype/src/cff/cffdrivr.c b/drivers/freetype/freetype/src/cff/cffdrivr.c
index c8ca96ba49..c8ca96ba49 100644
--- a/tools/freetype/freetype/src/cff/cffdrivr.c
+++ b/drivers/freetype/freetype/src/cff/cffdrivr.c
diff --git a/tools/freetype/freetype/src/cff/cffdrivr.h b/drivers/freetype/freetype/src/cff/cffdrivr.h
index 50e8138701..50e8138701 100644
--- a/tools/freetype/freetype/src/cff/cffdrivr.h
+++ b/drivers/freetype/freetype/src/cff/cffdrivr.h
diff --git a/tools/freetype/freetype/src/cff/cfferrs.h b/drivers/freetype/freetype/src/cff/cfferrs.h
index 801d73ec6b..801d73ec6b 100644
--- a/tools/freetype/freetype/src/cff/cfferrs.h
+++ b/drivers/freetype/freetype/src/cff/cfferrs.h
diff --git a/tools/freetype/freetype/src/cff/cffgload.c b/drivers/freetype/freetype/src/cff/cffgload.c
index 6a8494fa9f..6a8494fa9f 100644
--- a/tools/freetype/freetype/src/cff/cffgload.c
+++ b/drivers/freetype/freetype/src/cff/cffgload.c
diff --git a/tools/freetype/freetype/src/cff/cffgload.h b/drivers/freetype/freetype/src/cff/cffgload.h
index 41df7db692..41df7db692 100644
--- a/tools/freetype/freetype/src/cff/cffgload.h
+++ b/drivers/freetype/freetype/src/cff/cffgload.h
diff --git a/tools/freetype/freetype/src/cff/cffload.c b/drivers/freetype/freetype/src/cff/cffload.c
index 64b497168d..64b497168d 100644
--- a/tools/freetype/freetype/src/cff/cffload.c
+++ b/drivers/freetype/freetype/src/cff/cffload.c
diff --git a/tools/freetype/freetype/src/cff/cffload.h b/drivers/freetype/freetype/src/cff/cffload.h
index 804961964b..804961964b 100644
--- a/tools/freetype/freetype/src/cff/cffload.h
+++ b/drivers/freetype/freetype/src/cff/cffload.h
diff --git a/tools/freetype/freetype/src/cff/cffobjs.c b/drivers/freetype/freetype/src/cff/cffobjs.c
index dd750d1041..dd750d1041 100644
--- a/tools/freetype/freetype/src/cff/cffobjs.c
+++ b/drivers/freetype/freetype/src/cff/cffobjs.c
diff --git a/tools/freetype/freetype/src/cff/cffobjs.h b/drivers/freetype/freetype/src/cff/cffobjs.h
index b375c20c74..b375c20c74 100644
--- a/tools/freetype/freetype/src/cff/cffobjs.h
+++ b/drivers/freetype/freetype/src/cff/cffobjs.h
diff --git a/tools/freetype/freetype/src/cff/cffparse.c b/drivers/freetype/freetype/src/cff/cffparse.c
index 96222120b0..96222120b0 100644
--- a/tools/freetype/freetype/src/cff/cffparse.c
+++ b/drivers/freetype/freetype/src/cff/cffparse.c
diff --git a/tools/freetype/freetype/src/cff/cffparse.h b/drivers/freetype/freetype/src/cff/cffparse.h
index 61d91ed2e2..61d91ed2e2 100644
--- a/tools/freetype/freetype/src/cff/cffparse.h
+++ b/drivers/freetype/freetype/src/cff/cffparse.h
diff --git a/tools/freetype/freetype/src/cff/cffpic.c b/drivers/freetype/freetype/src/cff/cffpic.c
index f22e4f0d53..f22e4f0d53 100644
--- a/tools/freetype/freetype/src/cff/cffpic.c
+++ b/drivers/freetype/freetype/src/cff/cffpic.c
diff --git a/tools/freetype/freetype/src/cff/cffpic.h b/drivers/freetype/freetype/src/cff/cffpic.h
index 50bab4c173..50bab4c173 100644
--- a/tools/freetype/freetype/src/cff/cffpic.h
+++ b/drivers/freetype/freetype/src/cff/cffpic.h
diff --git a/tools/freetype/freetype/src/cff/cfftoken.h b/drivers/freetype/freetype/src/cff/cfftoken.h
index bcb4276a78..bcb4276a78 100644
--- a/tools/freetype/freetype/src/cff/cfftoken.h
+++ b/drivers/freetype/freetype/src/cff/cfftoken.h
diff --git a/tools/freetype/freetype/src/cff/cfftypes.h b/drivers/freetype/freetype/src/cff/cfftypes.h
index 8727446664..8727446664 100644
--- a/tools/freetype/freetype/src/cff/cfftypes.h
+++ b/drivers/freetype/freetype/src/cff/cfftypes.h
diff --git a/tools/freetype/freetype/src/cff/module.mk b/drivers/freetype/freetype/src/cff/module.mk
index ef1391c279..ef1391c279 100644
--- a/tools/freetype/freetype/src/cff/module.mk
+++ b/drivers/freetype/freetype/src/cff/module.mk
diff --git a/tools/freetype/freetype/src/cff/rules.mk b/drivers/freetype/freetype/src/cff/rules.mk
index 13115c2550..13115c2550 100644
--- a/tools/freetype/freetype/src/cff/rules.mk
+++ b/drivers/freetype/freetype/src/cff/rules.mk
diff --git a/tools/freetype/freetype/src/cid/Jamfile b/drivers/freetype/freetype/src/cid/Jamfile
index ebeaed54ea..ebeaed54ea 100644
--- a/tools/freetype/freetype/src/cid/Jamfile
+++ b/drivers/freetype/freetype/src/cid/Jamfile
diff --git a/tools/freetype/freetype/src/cid/ciderrs.h b/drivers/freetype/freetype/src/cid/ciderrs.h
index ef13155504..ef13155504 100644
--- a/tools/freetype/freetype/src/cid/ciderrs.h
+++ b/drivers/freetype/freetype/src/cid/ciderrs.h
diff --git a/tools/freetype/freetype/src/cid/cidgload.c b/drivers/freetype/freetype/src/cid/cidgload.c
index a1a8658693..a1a8658693 100644
--- a/tools/freetype/freetype/src/cid/cidgload.c
+++ b/drivers/freetype/freetype/src/cid/cidgload.c
diff --git a/tools/freetype/freetype/src/cid/cidgload.h b/drivers/freetype/freetype/src/cid/cidgload.h
index a0a91bfea8..a0a91bfea8 100644
--- a/tools/freetype/freetype/src/cid/cidgload.h
+++ b/drivers/freetype/freetype/src/cid/cidgload.h
diff --git a/tools/freetype/freetype/src/cid/cidload.c b/drivers/freetype/freetype/src/cid/cidload.c
index f2a18ea510..f2a18ea510 100644
--- a/tools/freetype/freetype/src/cid/cidload.c
+++ b/drivers/freetype/freetype/src/cid/cidload.c
diff --git a/tools/freetype/freetype/src/cid/cidload.h b/drivers/freetype/freetype/src/cid/cidload.h
index 8c172ffee2..8c172ffee2 100644
--- a/tools/freetype/freetype/src/cid/cidload.h
+++ b/drivers/freetype/freetype/src/cid/cidload.h
diff --git a/tools/freetype/freetype/src/cid/cidobjs.c b/drivers/freetype/freetype/src/cid/cidobjs.c
index 46555e2dc8..46555e2dc8 100644
--- a/tools/freetype/freetype/src/cid/cidobjs.c
+++ b/drivers/freetype/freetype/src/cid/cidobjs.c
diff --git a/tools/freetype/freetype/src/cid/cidobjs.h b/drivers/freetype/freetype/src/cid/cidobjs.h
index aee346d1c8..aee346d1c8 100644
--- a/tools/freetype/freetype/src/cid/cidobjs.h
+++ b/drivers/freetype/freetype/src/cid/cidobjs.h
diff --git a/tools/freetype/freetype/src/cid/cidparse.c b/drivers/freetype/freetype/src/cid/cidparse.c
index 53df3155d1..53df3155d1 100644
--- a/tools/freetype/freetype/src/cid/cidparse.c
+++ b/drivers/freetype/freetype/src/cid/cidparse.c
diff --git a/tools/freetype/freetype/src/cid/cidparse.h b/drivers/freetype/freetype/src/cid/cidparse.h
index ca37deab93..ca37deab93 100644
--- a/tools/freetype/freetype/src/cid/cidparse.h
+++ b/drivers/freetype/freetype/src/cid/cidparse.h
diff --git a/tools/freetype/freetype/src/cid/cidriver.c b/drivers/freetype/freetype/src/cid/cidriver.c
index 6132a27763..6132a27763 100644
--- a/tools/freetype/freetype/src/cid/cidriver.c
+++ b/drivers/freetype/freetype/src/cid/cidriver.c
diff --git a/tools/freetype/freetype/src/cid/cidriver.h b/drivers/freetype/freetype/src/cid/cidriver.h
index 3c45e06886..3c45e06886 100644
--- a/tools/freetype/freetype/src/cid/cidriver.h
+++ b/drivers/freetype/freetype/src/cid/cidriver.h
diff --git a/tools/freetype/freetype/src/cid/cidtoken.h b/drivers/freetype/freetype/src/cid/cidtoken.h
index 904cb09cf4..904cb09cf4 100644
--- a/tools/freetype/freetype/src/cid/cidtoken.h
+++ b/drivers/freetype/freetype/src/cid/cidtoken.h
diff --git a/tools/freetype/freetype/src/cid/module.mk b/drivers/freetype/freetype/src/cid/module.mk
index ce30bfd7ae..ce30bfd7ae 100644
--- a/tools/freetype/freetype/src/cid/module.mk
+++ b/drivers/freetype/freetype/src/cid/module.mk
diff --git a/tools/freetype/freetype/src/cid/rules.mk b/drivers/freetype/freetype/src/cid/rules.mk
index f362744612..f362744612 100644
--- a/tools/freetype/freetype/src/cid/rules.mk
+++ b/drivers/freetype/freetype/src/cid/rules.mk
diff --git a/tools/freetype/freetype/src/cid/type1cid.c b/drivers/freetype/freetype/src/cid/type1cid.c
index 0b866e97c4..0b866e97c4 100644
--- a/tools/freetype/freetype/src/cid/type1cid.c
+++ b/drivers/freetype/freetype/src/cid/type1cid.c
diff --git a/tools/freetype/freetype/src/gxvalid/Jamfile b/drivers/freetype/freetype/src/gxvalid/Jamfile
index 88049a625d..88049a625d 100644
--- a/tools/freetype/freetype/src/gxvalid/Jamfile
+++ b/drivers/freetype/freetype/src/gxvalid/Jamfile
diff --git a/tools/freetype/freetype/src/gxvalid/README b/drivers/freetype/freetype/src/gxvalid/README
index 28e535b0bc..28e535b0bc 100644
--- a/tools/freetype/freetype/src/gxvalid/README
+++ b/drivers/freetype/freetype/src/gxvalid/README
diff --git a/tools/freetype/freetype/src/gxvalid/gxvalid.c b/drivers/freetype/freetype/src/gxvalid/gxvalid.c
index bc36e675d1..bc36e675d1 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvalid.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvalid.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvalid.h b/drivers/freetype/freetype/src/gxvalid/gxvalid.h
index 27be9ecca8..27be9ecca8 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvalid.h
+++ b/drivers/freetype/freetype/src/gxvalid/gxvalid.h
diff --git a/tools/freetype/freetype/src/gxvalid/gxvbsln.c b/drivers/freetype/freetype/src/gxvalid/gxvbsln.c
index 3d10031563..3d10031563 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvbsln.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvbsln.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvcommn.c b/drivers/freetype/freetype/src/gxvalid/gxvcommn.c
index 2ac80be8c7..2ac80be8c7 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvcommn.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvcommn.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvcommn.h b/drivers/freetype/freetype/src/gxvalid/gxvcommn.h
index 1ff87e4423..1ff87e4423 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvcommn.h
+++ b/drivers/freetype/freetype/src/gxvalid/gxvcommn.h
diff --git a/tools/freetype/freetype/src/gxvalid/gxverror.h b/drivers/freetype/freetype/src/gxvalid/gxverror.h
index c573b72de7..c573b72de7 100644
--- a/tools/freetype/freetype/src/gxvalid/gxverror.h
+++ b/drivers/freetype/freetype/src/gxvalid/gxverror.h
diff --git a/tools/freetype/freetype/src/gxvalid/gxvfeat.c b/drivers/freetype/freetype/src/gxvalid/gxvfeat.c
index 6f75650991..6f75650991 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvfeat.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvfeat.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvfeat.h b/drivers/freetype/freetype/src/gxvalid/gxvfeat.h
index 049d23a0b9..049d23a0b9 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvfeat.h
+++ b/drivers/freetype/freetype/src/gxvalid/gxvfeat.h
diff --git a/tools/freetype/freetype/src/gxvalid/gxvfgen.c b/drivers/freetype/freetype/src/gxvalid/gxvfgen.c
index e48778a2a1..e48778a2a1 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvfgen.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvfgen.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvjust.c b/drivers/freetype/freetype/src/gxvalid/gxvjust.c
index 7816e0b7fb..7816e0b7fb 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvjust.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvjust.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvkern.c b/drivers/freetype/freetype/src/gxvalid/gxvkern.c
index 557c5f1fe4..557c5f1fe4 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvkern.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvkern.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvlcar.c b/drivers/freetype/freetype/src/gxvalid/gxvlcar.c
index f14fa5b131..f14fa5b131 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvlcar.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvlcar.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmod.c b/drivers/freetype/freetype/src/gxvalid/gxvmod.c
index 278d47688a..278d47688a 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmod.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmod.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmod.h b/drivers/freetype/freetype/src/gxvalid/gxvmod.h
index 22732ba992..22732ba992 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmod.h
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmod.h
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmort.c b/drivers/freetype/freetype/src/gxvalid/gxvmort.c
index 5356e67ca7..5356e67ca7 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmort.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmort.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmort.h b/drivers/freetype/freetype/src/gxvalid/gxvmort.h
index 1e5a1f5ab6..1e5a1f5ab6 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmort.h
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmort.h
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmort0.c b/drivers/freetype/freetype/src/gxvalid/gxvmort0.c
index b136ceda27..b136ceda27 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmort0.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmort0.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmort1.c b/drivers/freetype/freetype/src/gxvalid/gxvmort1.c
index 1c17a5d92a..1c17a5d92a 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmort1.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmort1.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmort2.c b/drivers/freetype/freetype/src/gxvalid/gxvmort2.c
index 9e08fb792a..9e08fb792a 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmort2.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmort2.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmort4.c b/drivers/freetype/freetype/src/gxvalid/gxvmort4.c
index 83470988c0..83470988c0 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmort4.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmort4.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmort5.c b/drivers/freetype/freetype/src/gxvalid/gxvmort5.c
index 32cfb03639..32cfb03639 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmort5.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmort5.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmorx.c b/drivers/freetype/freetype/src/gxvalid/gxvmorx.c
index 5ae04d3212..5ae04d3212 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmorx.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmorx.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmorx.h b/drivers/freetype/freetype/src/gxvalid/gxvmorx.h
index 28c1a44f6f..28c1a44f6f 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmorx.h
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmorx.h
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmorx0.c b/drivers/freetype/freetype/src/gxvalid/gxvmorx0.c
index 6a736c1775..6a736c1775 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmorx0.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmorx0.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmorx1.c b/drivers/freetype/freetype/src/gxvalid/gxvmorx1.c
index ce0009a16f..ce0009a16f 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmorx1.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmorx1.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmorx2.c b/drivers/freetype/freetype/src/gxvalid/gxvmorx2.c
index 9d2b0bc4af..9d2b0bc4af 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmorx2.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmorx2.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmorx4.c b/drivers/freetype/freetype/src/gxvalid/gxvmorx4.c
index c0d2f78e39..c0d2f78e39 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmorx4.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmorx4.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvmorx5.c b/drivers/freetype/freetype/src/gxvalid/gxvmorx5.c
index d8cf700797..d8cf700797 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvmorx5.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvmorx5.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvopbd.c b/drivers/freetype/freetype/src/gxvalid/gxvopbd.c
index e125060946..e125060946 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvopbd.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvopbd.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvprop.c b/drivers/freetype/freetype/src/gxvalid/gxvprop.c
index 0be21336f8..0be21336f8 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvprop.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvprop.c
diff --git a/tools/freetype/freetype/src/gxvalid/gxvtrak.c b/drivers/freetype/freetype/src/gxvalid/gxvtrak.c
index 11fbd7ccfb..11fbd7ccfb 100644
--- a/tools/freetype/freetype/src/gxvalid/gxvtrak.c
+++ b/drivers/freetype/freetype/src/gxvalid/gxvtrak.c
diff --git a/tools/freetype/freetype/src/gxvalid/module.mk b/drivers/freetype/freetype/src/gxvalid/module.mk
index 9fd098e2c5..9fd098e2c5 100644
--- a/tools/freetype/freetype/src/gxvalid/module.mk
+++ b/drivers/freetype/freetype/src/gxvalid/module.mk
diff --git a/tools/freetype/freetype/src/gxvalid/rules.mk b/drivers/freetype/freetype/src/gxvalid/rules.mk
index 57bc0823db..57bc0823db 100644
--- a/tools/freetype/freetype/src/gxvalid/rules.mk
+++ b/drivers/freetype/freetype/src/gxvalid/rules.mk
diff --git a/tools/freetype/freetype/src/otvalid/Jamfile b/drivers/freetype/freetype/src/otvalid/Jamfile
index b457143de4..b457143de4 100644
--- a/tools/freetype/freetype/src/otvalid/Jamfile
+++ b/drivers/freetype/freetype/src/otvalid/Jamfile
diff --git a/tools/freetype/freetype/src/otvalid/module.mk b/drivers/freetype/freetype/src/otvalid/module.mk
index 9cadde55e4..9cadde55e4 100644
--- a/tools/freetype/freetype/src/otvalid/module.mk
+++ b/drivers/freetype/freetype/src/otvalid/module.mk
diff --git a/tools/freetype/freetype/src/otvalid/otvalid.c b/drivers/freetype/freetype/src/otvalid/otvalid.c
index d5c2b75abb..d5c2b75abb 100644
--- a/tools/freetype/freetype/src/otvalid/otvalid.c
+++ b/drivers/freetype/freetype/src/otvalid/otvalid.c
diff --git a/tools/freetype/freetype/src/otvalid/otvalid.h b/drivers/freetype/freetype/src/otvalid/otvalid.h
index eb99b9cc48..eb99b9cc48 100644
--- a/tools/freetype/freetype/src/otvalid/otvalid.h
+++ b/drivers/freetype/freetype/src/otvalid/otvalid.h
diff --git a/tools/freetype/freetype/src/otvalid/otvbase.c b/drivers/freetype/freetype/src/otvalid/otvbase.c
index d742d2dc95..d742d2dc95 100644
--- a/tools/freetype/freetype/src/otvalid/otvbase.c
+++ b/drivers/freetype/freetype/src/otvalid/otvbase.c
diff --git a/tools/freetype/freetype/src/otvalid/otvcommn.c b/drivers/freetype/freetype/src/otvalid/otvcommn.c
index a4f885b51f..a4f885b51f 100644
--- a/tools/freetype/freetype/src/otvalid/otvcommn.c
+++ b/drivers/freetype/freetype/src/otvalid/otvcommn.c
diff --git a/tools/freetype/freetype/src/otvalid/otvcommn.h b/drivers/freetype/freetype/src/otvalid/otvcommn.h
index 898887fc95..898887fc95 100644
--- a/tools/freetype/freetype/src/otvalid/otvcommn.h
+++ b/drivers/freetype/freetype/src/otvalid/otvcommn.h
diff --git a/tools/freetype/freetype/src/otvalid/otverror.h b/drivers/freetype/freetype/src/otvalid/otverror.h
index b6f00c9dba..b6f00c9dba 100644
--- a/tools/freetype/freetype/src/otvalid/otverror.h
+++ b/drivers/freetype/freetype/src/otvalid/otverror.h
diff --git a/tools/freetype/freetype/src/otvalid/otvgdef.c b/drivers/freetype/freetype/src/otvalid/otvgdef.c
index 3633ad0de1..3633ad0de1 100644
--- a/tools/freetype/freetype/src/otvalid/otvgdef.c
+++ b/drivers/freetype/freetype/src/otvalid/otvgdef.c
diff --git a/tools/freetype/freetype/src/otvalid/otvgpos.c b/drivers/freetype/freetype/src/otvalid/otvgpos.c
index 49b46183a3..49b46183a3 100644
--- a/tools/freetype/freetype/src/otvalid/otvgpos.c
+++ b/drivers/freetype/freetype/src/otvalid/otvgpos.c
diff --git a/tools/freetype/freetype/src/otvalid/otvgpos.h b/drivers/freetype/freetype/src/otvalid/otvgpos.h
index 14ca408261..14ca408261 100644
--- a/tools/freetype/freetype/src/otvalid/otvgpos.h
+++ b/drivers/freetype/freetype/src/otvalid/otvgpos.h
diff --git a/tools/freetype/freetype/src/otvalid/otvgsub.c b/drivers/freetype/freetype/src/otvalid/otvgsub.c
index ed499d1e92..ed499d1e92 100644
--- a/tools/freetype/freetype/src/otvalid/otvgsub.c
+++ b/drivers/freetype/freetype/src/otvalid/otvgsub.c
diff --git a/tools/freetype/freetype/src/otvalid/otvjstf.c b/drivers/freetype/freetype/src/otvalid/otvjstf.c
index a616a23432..a616a23432 100644
--- a/tools/freetype/freetype/src/otvalid/otvjstf.c
+++ b/drivers/freetype/freetype/src/otvalid/otvjstf.c
diff --git a/tools/freetype/freetype/src/otvalid/otvmath.c b/drivers/freetype/freetype/src/otvalid/otvmath.c
index 96f841f2a9..96f841f2a9 100644
--- a/tools/freetype/freetype/src/otvalid/otvmath.c
+++ b/drivers/freetype/freetype/src/otvalid/otvmath.c
diff --git a/tools/freetype/freetype/src/otvalid/otvmod.c b/drivers/freetype/freetype/src/otvalid/otvmod.c
index 37c6e869dd..37c6e869dd 100644
--- a/tools/freetype/freetype/src/otvalid/otvmod.c
+++ b/drivers/freetype/freetype/src/otvalid/otvmod.c
diff --git a/tools/freetype/freetype/src/otvalid/otvmod.h b/drivers/freetype/freetype/src/otvalid/otvmod.h
index f7e1550787..f7e1550787 100644
--- a/tools/freetype/freetype/src/otvalid/otvmod.h
+++ b/drivers/freetype/freetype/src/otvalid/otvmod.h
diff --git a/tools/freetype/freetype/src/otvalid/rules.mk b/drivers/freetype/freetype/src/otvalid/rules.mk
index 53bd41e5e7..53bd41e5e7 100644
--- a/tools/freetype/freetype/src/otvalid/rules.mk
+++ b/drivers/freetype/freetype/src/otvalid/rules.mk
diff --git a/tools/freetype/freetype/src/pcf/Jamfile b/drivers/freetype/freetype/src/pcf/Jamfile
index 752fcac2a1..752fcac2a1 100644
--- a/tools/freetype/freetype/src/pcf/Jamfile
+++ b/drivers/freetype/freetype/src/pcf/Jamfile
diff --git a/tools/freetype/freetype/src/pcf/README b/drivers/freetype/freetype/src/pcf/README
index 10eff15fbe..10eff15fbe 100644
--- a/tools/freetype/freetype/src/pcf/README
+++ b/drivers/freetype/freetype/src/pcf/README
diff --git a/tools/freetype/freetype/src/pcf/module.mk b/drivers/freetype/freetype/src/pcf/module.mk
index df383ff0fb..df383ff0fb 100644
--- a/tools/freetype/freetype/src/pcf/module.mk
+++ b/drivers/freetype/freetype/src/pcf/module.mk
diff --git a/tools/freetype/freetype/src/pcf/pcf.c b/drivers/freetype/freetype/src/pcf/pcf.c
index 11d5b7b2a0..11d5b7b2a0 100644
--- a/tools/freetype/freetype/src/pcf/pcf.c
+++ b/drivers/freetype/freetype/src/pcf/pcf.c
diff --git a/tools/freetype/freetype/src/pcf/pcf.h b/drivers/freetype/freetype/src/pcf/pcf.h
index af0ffc3378..af0ffc3378 100644
--- a/tools/freetype/freetype/src/pcf/pcf.h
+++ b/drivers/freetype/freetype/src/pcf/pcf.h
diff --git a/tools/freetype/freetype/src/pcf/pcfdrivr.c b/drivers/freetype/freetype/src/pcf/pcfdrivr.c
index df25a645a0..df25a645a0 100644
--- a/tools/freetype/freetype/src/pcf/pcfdrivr.c
+++ b/drivers/freetype/freetype/src/pcf/pcfdrivr.c
diff --git a/tools/freetype/freetype/src/pcf/pcfdrivr.h b/drivers/freetype/freetype/src/pcf/pcfdrivr.h
index 54614951b5..54614951b5 100644
--- a/tools/freetype/freetype/src/pcf/pcfdrivr.h
+++ b/drivers/freetype/freetype/src/pcf/pcfdrivr.h
diff --git a/tools/freetype/freetype/src/pcf/pcferror.h b/drivers/freetype/freetype/src/pcf/pcferror.h
index e51fff8ea6..e51fff8ea6 100644
--- a/tools/freetype/freetype/src/pcf/pcferror.h
+++ b/drivers/freetype/freetype/src/pcf/pcferror.h
diff --git a/tools/freetype/freetype/src/pcf/pcfread.c b/drivers/freetype/freetype/src/pcf/pcfread.c
index 3c1bb7dfa2..3c1bb7dfa2 100644
--- a/tools/freetype/freetype/src/pcf/pcfread.c
+++ b/drivers/freetype/freetype/src/pcf/pcfread.c
diff --git a/tools/freetype/freetype/src/pcf/pcfread.h b/drivers/freetype/freetype/src/pcf/pcfread.h
index c9524f1346..c9524f1346 100644
--- a/tools/freetype/freetype/src/pcf/pcfread.h
+++ b/drivers/freetype/freetype/src/pcf/pcfread.h
diff --git a/tools/freetype/freetype/src/pcf/pcfutil.c b/drivers/freetype/freetype/src/pcf/pcfutil.c
index b91274f935..b91274f935 100644
--- a/tools/freetype/freetype/src/pcf/pcfutil.c
+++ b/drivers/freetype/freetype/src/pcf/pcfutil.c
diff --git a/tools/freetype/freetype/src/pcf/pcfutil.h b/drivers/freetype/freetype/src/pcf/pcfutil.h
index ce10fb541d..ce10fb541d 100644
--- a/tools/freetype/freetype/src/pcf/pcfutil.h
+++ b/drivers/freetype/freetype/src/pcf/pcfutil.h
diff --git a/tools/freetype/freetype/src/pcf/rules.mk b/drivers/freetype/freetype/src/pcf/rules.mk
index 78641528fa..78641528fa 100644
--- a/tools/freetype/freetype/src/pcf/rules.mk
+++ b/drivers/freetype/freetype/src/pcf/rules.mk
diff --git a/tools/freetype/freetype/src/pfr/Jamfile b/drivers/freetype/freetype/src/pfr/Jamfile
index 9e2f2b8d05..9e2f2b8d05 100644
--- a/tools/freetype/freetype/src/pfr/Jamfile
+++ b/drivers/freetype/freetype/src/pfr/Jamfile
diff --git a/tools/freetype/freetype/src/pfr/module.mk b/drivers/freetype/freetype/src/pfr/module.mk
index 8d1d28a9d2..8d1d28a9d2 100644
--- a/tools/freetype/freetype/src/pfr/module.mk
+++ b/drivers/freetype/freetype/src/pfr/module.mk
diff --git a/tools/freetype/freetype/src/pfr/pfr.c b/drivers/freetype/freetype/src/pfr/pfr.c
index eb2c4edb7e..eb2c4edb7e 100644
--- a/tools/freetype/freetype/src/pfr/pfr.c
+++ b/drivers/freetype/freetype/src/pfr/pfr.c
diff --git a/tools/freetype/freetype/src/pfr/pfrcmap.c b/drivers/freetype/freetype/src/pfr/pfrcmap.c
index 740c433d66..740c433d66 100644
--- a/tools/freetype/freetype/src/pfr/pfrcmap.c
+++ b/drivers/freetype/freetype/src/pfr/pfrcmap.c
diff --git a/tools/freetype/freetype/src/pfr/pfrcmap.h b/drivers/freetype/freetype/src/pfr/pfrcmap.h
index a626953054..a626953054 100644
--- a/tools/freetype/freetype/src/pfr/pfrcmap.h
+++ b/drivers/freetype/freetype/src/pfr/pfrcmap.h
diff --git a/tools/freetype/freetype/src/pfr/pfrdrivr.c b/drivers/freetype/freetype/src/pfr/pfrdrivr.c
index 4c43947bf4..4c43947bf4 100644
--- a/tools/freetype/freetype/src/pfr/pfrdrivr.c
+++ b/drivers/freetype/freetype/src/pfr/pfrdrivr.c
diff --git a/tools/freetype/freetype/src/pfr/pfrdrivr.h b/drivers/freetype/freetype/src/pfr/pfrdrivr.h
index 75f86c5cdd..75f86c5cdd 100644
--- a/tools/freetype/freetype/src/pfr/pfrdrivr.h
+++ b/drivers/freetype/freetype/src/pfr/pfrdrivr.h
diff --git a/tools/freetype/freetype/src/pfr/pfrerror.h b/drivers/freetype/freetype/src/pfr/pfrerror.h
index 94dc8c5e1c..94dc8c5e1c 100644
--- a/tools/freetype/freetype/src/pfr/pfrerror.h
+++ b/drivers/freetype/freetype/src/pfr/pfrerror.h
diff --git a/tools/freetype/freetype/src/pfr/pfrgload.c b/drivers/freetype/freetype/src/pfr/pfrgload.c
index 88b4d66a13..88b4d66a13 100644
--- a/tools/freetype/freetype/src/pfr/pfrgload.c
+++ b/drivers/freetype/freetype/src/pfr/pfrgload.c
diff --git a/tools/freetype/freetype/src/pfr/pfrgload.h b/drivers/freetype/freetype/src/pfr/pfrgload.h
index 7cc7a8702a..7cc7a8702a 100644
--- a/tools/freetype/freetype/src/pfr/pfrgload.h
+++ b/drivers/freetype/freetype/src/pfr/pfrgload.h
diff --git a/tools/freetype/freetype/src/pfr/pfrload.c b/drivers/freetype/freetype/src/pfr/pfrload.c
index c19fceb1ee..c19fceb1ee 100644
--- a/tools/freetype/freetype/src/pfr/pfrload.c
+++ b/drivers/freetype/freetype/src/pfr/pfrload.c
diff --git a/tools/freetype/freetype/src/pfr/pfrload.h b/drivers/freetype/freetype/src/pfr/pfrload.h
index ed010715d1..ed010715d1 100644
--- a/tools/freetype/freetype/src/pfr/pfrload.h
+++ b/drivers/freetype/freetype/src/pfr/pfrload.h
diff --git a/tools/freetype/freetype/src/pfr/pfrobjs.c b/drivers/freetype/freetype/src/pfr/pfrobjs.c
index 75fc4c3f1f..75fc4c3f1f 100644
--- a/tools/freetype/freetype/src/pfr/pfrobjs.c
+++ b/drivers/freetype/freetype/src/pfr/pfrobjs.c
diff --git a/tools/freetype/freetype/src/pfr/pfrobjs.h b/drivers/freetype/freetype/src/pfr/pfrobjs.h
index f6aa8b44cc..f6aa8b44cc 100644
--- a/tools/freetype/freetype/src/pfr/pfrobjs.h
+++ b/drivers/freetype/freetype/src/pfr/pfrobjs.h
diff --git a/tools/freetype/freetype/src/pfr/pfrsbit.c b/drivers/freetype/freetype/src/pfr/pfrsbit.c
index 2da1500707..2da1500707 100644
--- a/tools/freetype/freetype/src/pfr/pfrsbit.c
+++ b/drivers/freetype/freetype/src/pfr/pfrsbit.c
diff --git a/tools/freetype/freetype/src/pfr/pfrsbit.h b/drivers/freetype/freetype/src/pfr/pfrsbit.h
index 015e9e6dad..015e9e6dad 100644
--- a/tools/freetype/freetype/src/pfr/pfrsbit.h
+++ b/drivers/freetype/freetype/src/pfr/pfrsbit.h
diff --git a/tools/freetype/freetype/src/pfr/pfrtypes.h b/drivers/freetype/freetype/src/pfr/pfrtypes.h
index 918310814c..918310814c 100644
--- a/tools/freetype/freetype/src/pfr/pfrtypes.h
+++ b/drivers/freetype/freetype/src/pfr/pfrtypes.h
diff --git a/tools/freetype/freetype/src/pfr/rules.mk b/drivers/freetype/freetype/src/pfr/rules.mk
index 60b96c7415..60b96c7415 100644
--- a/tools/freetype/freetype/src/pfr/rules.mk
+++ b/drivers/freetype/freetype/src/pfr/rules.mk
diff --git a/tools/freetype/freetype/src/psaux/Jamfile b/drivers/freetype/freetype/src/psaux/Jamfile
index faeded9044..faeded9044 100644
--- a/tools/freetype/freetype/src/psaux/Jamfile
+++ b/drivers/freetype/freetype/src/psaux/Jamfile
diff --git a/tools/freetype/freetype/src/psaux/afmparse.c b/drivers/freetype/freetype/src/psaux/afmparse.c
index 6a40e110dc..6a40e110dc 100644
--- a/tools/freetype/freetype/src/psaux/afmparse.c
+++ b/drivers/freetype/freetype/src/psaux/afmparse.c
diff --git a/tools/freetype/freetype/src/psaux/afmparse.h b/drivers/freetype/freetype/src/psaux/afmparse.h
index 35d96046c5..35d96046c5 100644
--- a/tools/freetype/freetype/src/psaux/afmparse.h
+++ b/drivers/freetype/freetype/src/psaux/afmparse.h
diff --git a/tools/freetype/freetype/src/psaux/module.mk b/drivers/freetype/freetype/src/psaux/module.mk
index 42bf6f5199..42bf6f5199 100644
--- a/tools/freetype/freetype/src/psaux/module.mk
+++ b/drivers/freetype/freetype/src/psaux/module.mk
diff --git a/tools/freetype/freetype/src/psaux/psaux.c b/drivers/freetype/freetype/src/psaux/psaux.c
index a4b9c5c6e4..a4b9c5c6e4 100644
--- a/tools/freetype/freetype/src/psaux/psaux.c
+++ b/drivers/freetype/freetype/src/psaux/psaux.c
diff --git a/tools/freetype/freetype/src/psaux/psauxerr.h b/drivers/freetype/freetype/src/psaux/psauxerr.h
index d52375f8cb..d52375f8cb 100644
--- a/tools/freetype/freetype/src/psaux/psauxerr.h
+++ b/drivers/freetype/freetype/src/psaux/psauxerr.h
diff --git a/tools/freetype/freetype/src/psaux/psauxmod.c b/drivers/freetype/freetype/src/psaux/psauxmod.c
index 4b1249d49b..4b1249d49b 100644
--- a/tools/freetype/freetype/src/psaux/psauxmod.c
+++ b/drivers/freetype/freetype/src/psaux/psauxmod.c
diff --git a/tools/freetype/freetype/src/psaux/psauxmod.h b/drivers/freetype/freetype/src/psaux/psauxmod.h
index 1217236924..1217236924 100644
--- a/tools/freetype/freetype/src/psaux/psauxmod.h
+++ b/drivers/freetype/freetype/src/psaux/psauxmod.h
diff --git a/tools/freetype/freetype/src/psaux/psconv.c b/drivers/freetype/freetype/src/psaux/psconv.c
index d0d8861c22..d0d8861c22 100644
--- a/tools/freetype/freetype/src/psaux/psconv.c
+++ b/drivers/freetype/freetype/src/psaux/psconv.c
diff --git a/tools/freetype/freetype/src/psaux/psconv.h b/drivers/freetype/freetype/src/psaux/psconv.h
index d91c762210..d91c762210 100644
--- a/tools/freetype/freetype/src/psaux/psconv.h
+++ b/drivers/freetype/freetype/src/psaux/psconv.h
diff --git a/tools/freetype/freetype/src/psaux/psobjs.c b/drivers/freetype/freetype/src/psaux/psobjs.c
index dd976d3a96..dd976d3a96 100644
--- a/tools/freetype/freetype/src/psaux/psobjs.c
+++ b/drivers/freetype/freetype/src/psaux/psobjs.c
diff --git a/tools/freetype/freetype/src/psaux/psobjs.h b/drivers/freetype/freetype/src/psaux/psobjs.h
index e380c60dab..e380c60dab 100644
--- a/tools/freetype/freetype/src/psaux/psobjs.h
+++ b/drivers/freetype/freetype/src/psaux/psobjs.h
diff --git a/tools/freetype/freetype/src/psaux/rules.mk b/drivers/freetype/freetype/src/psaux/rules.mk
index 7a1be37b69..7a1be37b69 100644
--- a/tools/freetype/freetype/src/psaux/rules.mk
+++ b/drivers/freetype/freetype/src/psaux/rules.mk
diff --git a/tools/freetype/freetype/src/psaux/t1cmap.c b/drivers/freetype/freetype/src/psaux/t1cmap.c
index 9e5bd34ffe..9e5bd34ffe 100644
--- a/tools/freetype/freetype/src/psaux/t1cmap.c
+++ b/drivers/freetype/freetype/src/psaux/t1cmap.c
diff --git a/tools/freetype/freetype/src/psaux/t1cmap.h b/drivers/freetype/freetype/src/psaux/t1cmap.h
index 7ae65d2fa1..7ae65d2fa1 100644
--- a/tools/freetype/freetype/src/psaux/t1cmap.h
+++ b/drivers/freetype/freetype/src/psaux/t1cmap.h
diff --git a/tools/freetype/freetype/src/psaux/t1decode.c b/drivers/freetype/freetype/src/psaux/t1decode.c
index 6ce370bfaa..6ce370bfaa 100644
--- a/tools/freetype/freetype/src/psaux/t1decode.c
+++ b/drivers/freetype/freetype/src/psaux/t1decode.c
diff --git a/tools/freetype/freetype/src/psaux/t1decode.h b/drivers/freetype/freetype/src/psaux/t1decode.h
index 00728db501..00728db501 100644
--- a/tools/freetype/freetype/src/psaux/t1decode.h
+++ b/drivers/freetype/freetype/src/psaux/t1decode.h
diff --git a/tools/freetype/freetype/src/pshinter/Jamfile b/drivers/freetype/freetype/src/pshinter/Jamfile
index 779f1b0b82..779f1b0b82 100644
--- a/tools/freetype/freetype/src/pshinter/Jamfile
+++ b/drivers/freetype/freetype/src/pshinter/Jamfile
diff --git a/tools/freetype/freetype/src/pshinter/module.mk b/drivers/freetype/freetype/src/pshinter/module.mk
index ed24eb7fa8..ed24eb7fa8 100644
--- a/tools/freetype/freetype/src/pshinter/module.mk
+++ b/drivers/freetype/freetype/src/pshinter/module.mk
diff --git a/tools/freetype/freetype/src/pshinter/pshalgo.c b/drivers/freetype/freetype/src/pshinter/pshalgo.c
index 343472ddb3..343472ddb3 100644
--- a/tools/freetype/freetype/src/pshinter/pshalgo.c
+++ b/drivers/freetype/freetype/src/pshinter/pshalgo.c
diff --git a/tools/freetype/freetype/src/pshinter/pshalgo.h b/drivers/freetype/freetype/src/pshinter/pshalgo.h
index c70f31ea94..c70f31ea94 100644
--- a/tools/freetype/freetype/src/pshinter/pshalgo.h
+++ b/drivers/freetype/freetype/src/pshinter/pshalgo.h
diff --git a/tools/freetype/freetype/src/pshinter/pshglob.c b/drivers/freetype/freetype/src/pshinter/pshglob.c
index 9285efc9e1..9285efc9e1 100644
--- a/tools/freetype/freetype/src/pshinter/pshglob.c
+++ b/drivers/freetype/freetype/src/pshinter/pshglob.c
diff --git a/tools/freetype/freetype/src/pshinter/pshglob.h b/drivers/freetype/freetype/src/pshinter/pshglob.h
index c511626157..c511626157 100644
--- a/tools/freetype/freetype/src/pshinter/pshglob.h
+++ b/drivers/freetype/freetype/src/pshinter/pshglob.h
diff --git a/tools/freetype/freetype/src/pshinter/pshinter.c b/drivers/freetype/freetype/src/pshinter/pshinter.c
index b35a2a91c5..b35a2a91c5 100644
--- a/tools/freetype/freetype/src/pshinter/pshinter.c
+++ b/drivers/freetype/freetype/src/pshinter/pshinter.c
diff --git a/tools/freetype/freetype/src/pshinter/pshmod.c b/drivers/freetype/freetype/src/pshinter/pshmod.c
index cdeaca18c9..cdeaca18c9 100644
--- a/tools/freetype/freetype/src/pshinter/pshmod.c
+++ b/drivers/freetype/freetype/src/pshinter/pshmod.c
diff --git a/tools/freetype/freetype/src/pshinter/pshmod.h b/drivers/freetype/freetype/src/pshinter/pshmod.h
index 0ae7e96f54..0ae7e96f54 100644
--- a/tools/freetype/freetype/src/pshinter/pshmod.h
+++ b/drivers/freetype/freetype/src/pshinter/pshmod.h
diff --git a/tools/freetype/freetype/src/pshinter/pshnterr.h b/drivers/freetype/freetype/src/pshinter/pshnterr.h
index 7cc180f0ca..7cc180f0ca 100644
--- a/tools/freetype/freetype/src/pshinter/pshnterr.h
+++ b/drivers/freetype/freetype/src/pshinter/pshnterr.h
diff --git a/tools/freetype/freetype/src/pshinter/pshpic.c b/drivers/freetype/freetype/src/pshinter/pshpic.c
index 568f4ac4b0..568f4ac4b0 100644
--- a/tools/freetype/freetype/src/pshinter/pshpic.c
+++ b/drivers/freetype/freetype/src/pshinter/pshpic.c
diff --git a/tools/freetype/freetype/src/pshinter/pshpic.h b/drivers/freetype/freetype/src/pshinter/pshpic.h
index b46f853113..b46f853113 100644
--- a/tools/freetype/freetype/src/pshinter/pshpic.h
+++ b/drivers/freetype/freetype/src/pshinter/pshpic.h
diff --git a/tools/freetype/freetype/src/pshinter/pshrec.c b/drivers/freetype/freetype/src/pshinter/pshrec.c
index cd66ea869a..cd66ea869a 100644
--- a/tools/freetype/freetype/src/pshinter/pshrec.c
+++ b/drivers/freetype/freetype/src/pshinter/pshrec.c
diff --git a/tools/freetype/freetype/src/pshinter/pshrec.h b/drivers/freetype/freetype/src/pshinter/pshrec.h
index dcb3197f94..dcb3197f94 100644
--- a/tools/freetype/freetype/src/pshinter/pshrec.h
+++ b/drivers/freetype/freetype/src/pshinter/pshrec.h
diff --git a/tools/freetype/freetype/src/pshinter/rules.mk b/drivers/freetype/freetype/src/pshinter/rules.mk
index 888ece1058..888ece1058 100644
--- a/tools/freetype/freetype/src/pshinter/rules.mk
+++ b/drivers/freetype/freetype/src/pshinter/rules.mk
diff --git a/tools/freetype/freetype/src/psnames/Jamfile b/drivers/freetype/freetype/src/psnames/Jamfile
index 06c0dda66f..06c0dda66f 100644
--- a/tools/freetype/freetype/src/psnames/Jamfile
+++ b/drivers/freetype/freetype/src/psnames/Jamfile
diff --git a/tools/freetype/freetype/src/psnames/module.mk b/drivers/freetype/freetype/src/psnames/module.mk
index a6e908257c..a6e908257c 100644
--- a/tools/freetype/freetype/src/psnames/module.mk
+++ b/drivers/freetype/freetype/src/psnames/module.mk
diff --git a/tools/freetype/freetype/src/psnames/psmodule.c b/drivers/freetype/freetype/src/psnames/psmodule.c
index 0a5bcb7d2a..0a5bcb7d2a 100644
--- a/tools/freetype/freetype/src/psnames/psmodule.c
+++ b/drivers/freetype/freetype/src/psnames/psmodule.c
diff --git a/tools/freetype/freetype/src/psnames/psmodule.h b/drivers/freetype/freetype/src/psnames/psmodule.h
index 28fa14807c..28fa14807c 100644
--- a/tools/freetype/freetype/src/psnames/psmodule.h
+++ b/drivers/freetype/freetype/src/psnames/psmodule.h
diff --git a/tools/freetype/freetype/src/psnames/psnamerr.h b/drivers/freetype/freetype/src/psnames/psnamerr.h
index acda7f967e..acda7f967e 100644
--- a/tools/freetype/freetype/src/psnames/psnamerr.h
+++ b/drivers/freetype/freetype/src/psnames/psnamerr.h
diff --git a/tools/freetype/freetype/src/psnames/psnames.c b/drivers/freetype/freetype/src/psnames/psnames.c
index 1ede225dc9..1ede225dc9 100644
--- a/tools/freetype/freetype/src/psnames/psnames.c
+++ b/drivers/freetype/freetype/src/psnames/psnames.c
diff --git a/tools/freetype/freetype/src/psnames/pspic.c b/drivers/freetype/freetype/src/psnames/pspic.c
index 3820f65a74..3820f65a74 100644
--- a/tools/freetype/freetype/src/psnames/pspic.c
+++ b/drivers/freetype/freetype/src/psnames/pspic.c
diff --git a/tools/freetype/freetype/src/psnames/pspic.h b/drivers/freetype/freetype/src/psnames/pspic.h
index 6ff002c603..6ff002c603 100644
--- a/tools/freetype/freetype/src/psnames/pspic.h
+++ b/drivers/freetype/freetype/src/psnames/pspic.h
diff --git a/tools/freetype/freetype/src/psnames/pstables.h b/drivers/freetype/freetype/src/psnames/pstables.h
index 0a6637f985..0a6637f985 100644
--- a/tools/freetype/freetype/src/psnames/pstables.h
+++ b/drivers/freetype/freetype/src/psnames/pstables.h
diff --git a/tools/freetype/freetype/src/psnames/rules.mk b/drivers/freetype/freetype/src/psnames/rules.mk
index 4cd39a8ccf..4cd39a8ccf 100644
--- a/tools/freetype/freetype/src/psnames/rules.mk
+++ b/drivers/freetype/freetype/src/psnames/rules.mk
diff --git a/tools/freetype/freetype/src/raster/Jamfile b/drivers/freetype/freetype/src/raster/Jamfile
index 4f60e87c78..4f60e87c78 100644
--- a/tools/freetype/freetype/src/raster/Jamfile
+++ b/drivers/freetype/freetype/src/raster/Jamfile
diff --git a/tools/freetype/freetype/src/raster/ftmisc.h b/drivers/freetype/freetype/src/raster/ftmisc.h
index 703155a429..703155a429 100644
--- a/tools/freetype/freetype/src/raster/ftmisc.h
+++ b/drivers/freetype/freetype/src/raster/ftmisc.h
diff --git a/tools/freetype/freetype/src/raster/ftraster.c b/drivers/freetype/freetype/src/raster/ftraster.c
index bbd503d97d..bbd503d97d 100644
--- a/tools/freetype/freetype/src/raster/ftraster.c
+++ b/drivers/freetype/freetype/src/raster/ftraster.c
diff --git a/tools/freetype/freetype/src/raster/ftraster.h b/drivers/freetype/freetype/src/raster/ftraster.h
index 80fe46deba..80fe46deba 100644
--- a/tools/freetype/freetype/src/raster/ftraster.h
+++ b/drivers/freetype/freetype/src/raster/ftraster.h
diff --git a/tools/freetype/freetype/src/raster/ftrend1.c b/drivers/freetype/freetype/src/raster/ftrend1.c
index aa7f6d5664..aa7f6d5664 100644
--- a/tools/freetype/freetype/src/raster/ftrend1.c
+++ b/drivers/freetype/freetype/src/raster/ftrend1.c
diff --git a/tools/freetype/freetype/src/raster/ftrend1.h b/drivers/freetype/freetype/src/raster/ftrend1.h
index 4cf128622a..4cf128622a 100644
--- a/tools/freetype/freetype/src/raster/ftrend1.h
+++ b/drivers/freetype/freetype/src/raster/ftrend1.h
diff --git a/tools/freetype/freetype/src/raster/module.mk b/drivers/freetype/freetype/src/raster/module.mk
index cbff5df96e..cbff5df96e 100644
--- a/tools/freetype/freetype/src/raster/module.mk
+++ b/drivers/freetype/freetype/src/raster/module.mk
diff --git a/tools/freetype/freetype/src/raster/raster.c b/drivers/freetype/freetype/src/raster/raster.c
index 1202a116cd..1202a116cd 100644
--- a/tools/freetype/freetype/src/raster/raster.c
+++ b/drivers/freetype/freetype/src/raster/raster.c
diff --git a/tools/freetype/freetype/src/raster/rasterrs.h b/drivers/freetype/freetype/src/raster/rasterrs.h
index ab85c002a3..ab85c002a3 100644
--- a/tools/freetype/freetype/src/raster/rasterrs.h
+++ b/drivers/freetype/freetype/src/raster/rasterrs.h
diff --git a/tools/freetype/freetype/src/raster/rastpic.c b/drivers/freetype/freetype/src/raster/rastpic.c
index 5e9f7cc9c4..5e9f7cc9c4 100644
--- a/tools/freetype/freetype/src/raster/rastpic.c
+++ b/drivers/freetype/freetype/src/raster/rastpic.c
diff --git a/tools/freetype/freetype/src/raster/rastpic.h b/drivers/freetype/freetype/src/raster/rastpic.h
index e0ddba624e..e0ddba624e 100644
--- a/tools/freetype/freetype/src/raster/rastpic.h
+++ b/drivers/freetype/freetype/src/raster/rastpic.h
diff --git a/tools/freetype/freetype/src/raster/rules.mk b/drivers/freetype/freetype/src/raster/rules.mk
index 0e0b5e4ebd..0e0b5e4ebd 100644
--- a/tools/freetype/freetype/src/raster/rules.mk
+++ b/drivers/freetype/freetype/src/raster/rules.mk
diff --git a/tools/freetype/freetype/src/sfnt/Jamfile b/drivers/freetype/freetype/src/sfnt/Jamfile
index cb20b1b04b..cb20b1b04b 100644
--- a/tools/freetype/freetype/src/sfnt/Jamfile
+++ b/drivers/freetype/freetype/src/sfnt/Jamfile
diff --git a/tools/freetype/freetype/src/sfnt/module.mk b/drivers/freetype/freetype/src/sfnt/module.mk
index 95fd6a3143..95fd6a3143 100644
--- a/tools/freetype/freetype/src/sfnt/module.mk
+++ b/drivers/freetype/freetype/src/sfnt/module.mk
diff --git a/tools/freetype/freetype/src/sfnt/pngshim.c b/drivers/freetype/freetype/src/sfnt/pngshim.c
index 408f879c34..408f879c34 100644
--- a/tools/freetype/freetype/src/sfnt/pngshim.c
+++ b/drivers/freetype/freetype/src/sfnt/pngshim.c
diff --git a/tools/freetype/freetype/src/sfnt/pngshim.h b/drivers/freetype/freetype/src/sfnt/pngshim.h
index 8a2e69ccf9..8a2e69ccf9 100644
--- a/tools/freetype/freetype/src/sfnt/pngshim.h
+++ b/drivers/freetype/freetype/src/sfnt/pngshim.h
diff --git a/tools/freetype/freetype/src/sfnt/rules.mk b/drivers/freetype/freetype/src/sfnt/rules.mk
index a6c956ab65..a6c956ab65 100644
--- a/tools/freetype/freetype/src/sfnt/rules.mk
+++ b/drivers/freetype/freetype/src/sfnt/rules.mk
diff --git a/tools/freetype/freetype/src/sfnt/sfdriver.c b/drivers/freetype/freetype/src/sfnt/sfdriver.c
index a368b8caea..a368b8caea 100644
--- a/tools/freetype/freetype/src/sfnt/sfdriver.c
+++ b/drivers/freetype/freetype/src/sfnt/sfdriver.c
diff --git a/tools/freetype/freetype/src/sfnt/sfdriver.h b/drivers/freetype/freetype/src/sfnt/sfdriver.h
index 5de25d51ca..5de25d51ca 100644
--- a/tools/freetype/freetype/src/sfnt/sfdriver.h
+++ b/drivers/freetype/freetype/src/sfnt/sfdriver.h
diff --git a/tools/freetype/freetype/src/sfnt/sferrors.h b/drivers/freetype/freetype/src/sfnt/sferrors.h
index e981e1d26f..e981e1d26f 100644
--- a/tools/freetype/freetype/src/sfnt/sferrors.h
+++ b/drivers/freetype/freetype/src/sfnt/sferrors.h
diff --git a/tools/freetype/freetype/src/sfnt/sfnt.c b/drivers/freetype/freetype/src/sfnt/sfnt.c
index d62ed4e0b5..d62ed4e0b5 100644
--- a/tools/freetype/freetype/src/sfnt/sfnt.c
+++ b/drivers/freetype/freetype/src/sfnt/sfnt.c
diff --git a/tools/freetype/freetype/src/sfnt/sfntpic.c b/drivers/freetype/freetype/src/sfnt/sfntpic.c
index b3fb24b3f0..b3fb24b3f0 100644
--- a/tools/freetype/freetype/src/sfnt/sfntpic.c
+++ b/drivers/freetype/freetype/src/sfnt/sfntpic.c
diff --git a/tools/freetype/freetype/src/sfnt/sfntpic.h b/drivers/freetype/freetype/src/sfnt/sfntpic.h
index b09a9141e0..b09a9141e0 100644
--- a/tools/freetype/freetype/src/sfnt/sfntpic.h
+++ b/drivers/freetype/freetype/src/sfnt/sfntpic.h
diff --git a/tools/freetype/freetype/src/sfnt/sfobjs.c b/drivers/freetype/freetype/src/sfnt/sfobjs.c
index f975e71c3b..f975e71c3b 100644
--- a/tools/freetype/freetype/src/sfnt/sfobjs.c
+++ b/drivers/freetype/freetype/src/sfnt/sfobjs.c
diff --git a/tools/freetype/freetype/src/sfnt/sfobjs.h b/drivers/freetype/freetype/src/sfnt/sfobjs.h
index 6241c93b39..6241c93b39 100644
--- a/tools/freetype/freetype/src/sfnt/sfobjs.h
+++ b/drivers/freetype/freetype/src/sfnt/sfobjs.h
diff --git a/tools/freetype/freetype/src/sfnt/ttbdf.c b/drivers/freetype/freetype/src/sfnt/ttbdf.c
index 9401dae5f8..9401dae5f8 100644
--- a/tools/freetype/freetype/src/sfnt/ttbdf.c
+++ b/drivers/freetype/freetype/src/sfnt/ttbdf.c
diff --git a/tools/freetype/freetype/src/sfnt/ttbdf.h b/drivers/freetype/freetype/src/sfnt/ttbdf.h
index 48a10d6e9b..48a10d6e9b 100644
--- a/tools/freetype/freetype/src/sfnt/ttbdf.h
+++ b/drivers/freetype/freetype/src/sfnt/ttbdf.h
diff --git a/tools/freetype/freetype/src/sfnt/ttcmap.c b/drivers/freetype/freetype/src/sfnt/ttcmap.c
index 1507202ea8..1507202ea8 100644
--- a/tools/freetype/freetype/src/sfnt/ttcmap.c
+++ b/drivers/freetype/freetype/src/sfnt/ttcmap.c
diff --git a/tools/freetype/freetype/src/sfnt/ttcmap.h b/drivers/freetype/freetype/src/sfnt/ttcmap.h
index 0fde1676bf..0fde1676bf 100644
--- a/tools/freetype/freetype/src/sfnt/ttcmap.h
+++ b/drivers/freetype/freetype/src/sfnt/ttcmap.h
diff --git a/tools/freetype/freetype/src/sfnt/ttcmapc.h b/drivers/freetype/freetype/src/sfnt/ttcmapc.h
index 2ea204309c..2ea204309c 100644
--- a/tools/freetype/freetype/src/sfnt/ttcmapc.h
+++ b/drivers/freetype/freetype/src/sfnt/ttcmapc.h
diff --git a/tools/freetype/freetype/src/sfnt/ttkern.c b/drivers/freetype/freetype/src/sfnt/ttkern.c
index 60ee546d79..60ee546d79 100644
--- a/tools/freetype/freetype/src/sfnt/ttkern.c
+++ b/drivers/freetype/freetype/src/sfnt/ttkern.c
diff --git a/tools/freetype/freetype/src/sfnt/ttkern.h b/drivers/freetype/freetype/src/sfnt/ttkern.h
index df1da9b273..df1da9b273 100644
--- a/tools/freetype/freetype/src/sfnt/ttkern.h
+++ b/drivers/freetype/freetype/src/sfnt/ttkern.h
diff --git a/tools/freetype/freetype/src/sfnt/ttload.c b/drivers/freetype/freetype/src/sfnt/ttload.c
index fbe70f7974..fbe70f7974 100644
--- a/tools/freetype/freetype/src/sfnt/ttload.c
+++ b/drivers/freetype/freetype/src/sfnt/ttload.c
diff --git a/tools/freetype/freetype/src/sfnt/ttload.h b/drivers/freetype/freetype/src/sfnt/ttload.h
index 49a1aee163..49a1aee163 100644
--- a/tools/freetype/freetype/src/sfnt/ttload.h
+++ b/drivers/freetype/freetype/src/sfnt/ttload.h
diff --git a/tools/freetype/freetype/src/sfnt/ttmtx.c b/drivers/freetype/freetype/src/sfnt/ttmtx.c
index 371a9edabe..371a9edabe 100644
--- a/tools/freetype/freetype/src/sfnt/ttmtx.c
+++ b/drivers/freetype/freetype/src/sfnt/ttmtx.c
diff --git a/tools/freetype/freetype/src/sfnt/ttmtx.h b/drivers/freetype/freetype/src/sfnt/ttmtx.h
index 8b91a113d8..8b91a113d8 100644
--- a/tools/freetype/freetype/src/sfnt/ttmtx.h
+++ b/drivers/freetype/freetype/src/sfnt/ttmtx.h
diff --git a/tools/freetype/freetype/src/sfnt/ttpost.c b/drivers/freetype/freetype/src/sfnt/ttpost.c
index 47a85c0c9f..47a85c0c9f 100644
--- a/tools/freetype/freetype/src/sfnt/ttpost.c
+++ b/drivers/freetype/freetype/src/sfnt/ttpost.c
diff --git a/tools/freetype/freetype/src/sfnt/ttpost.h b/drivers/freetype/freetype/src/sfnt/ttpost.h
index 6f06d75a71..6f06d75a71 100644
--- a/tools/freetype/freetype/src/sfnt/ttpost.h
+++ b/drivers/freetype/freetype/src/sfnt/ttpost.h
diff --git a/tools/freetype/freetype/src/sfnt/ttsbit.c b/drivers/freetype/freetype/src/sfnt/ttsbit.c
index cd3e5a4a00..cd3e5a4a00 100644
--- a/tools/freetype/freetype/src/sfnt/ttsbit.c
+++ b/drivers/freetype/freetype/src/sfnt/ttsbit.c
diff --git a/tools/freetype/freetype/src/sfnt/ttsbit.h b/drivers/freetype/freetype/src/sfnt/ttsbit.h
index ea0b5f8ada..ea0b5f8ada 100644
--- a/tools/freetype/freetype/src/sfnt/ttsbit.h
+++ b/drivers/freetype/freetype/src/sfnt/ttsbit.h
diff --git a/tools/freetype/freetype/src/smooth/Jamfile b/drivers/freetype/freetype/src/smooth/Jamfile
index a8496aa2c2..a8496aa2c2 100644
--- a/tools/freetype/freetype/src/smooth/Jamfile
+++ b/drivers/freetype/freetype/src/smooth/Jamfile
diff --git a/tools/freetype/freetype/src/smooth/ftgrays.c b/drivers/freetype/freetype/src/smooth/ftgrays.c
index 7532a35829..7532a35829 100644
--- a/tools/freetype/freetype/src/smooth/ftgrays.c
+++ b/drivers/freetype/freetype/src/smooth/ftgrays.c
diff --git a/tools/freetype/freetype/src/smooth/ftgrays.h b/drivers/freetype/freetype/src/smooth/ftgrays.h
index f20f55f14b..f20f55f14b 100644
--- a/tools/freetype/freetype/src/smooth/ftgrays.h
+++ b/drivers/freetype/freetype/src/smooth/ftgrays.h
diff --git a/tools/freetype/freetype/src/smooth/ftsmerrs.h b/drivers/freetype/freetype/src/smooth/ftsmerrs.h
index 413d2f1f70..413d2f1f70 100644
--- a/tools/freetype/freetype/src/smooth/ftsmerrs.h
+++ b/drivers/freetype/freetype/src/smooth/ftsmerrs.h
diff --git a/tools/freetype/freetype/src/smooth/ftsmooth.c b/drivers/freetype/freetype/src/smooth/ftsmooth.c
index 89088cd091..89088cd091 100644
--- a/tools/freetype/freetype/src/smooth/ftsmooth.c
+++ b/drivers/freetype/freetype/src/smooth/ftsmooth.c
diff --git a/tools/freetype/freetype/src/smooth/ftsmooth.h b/drivers/freetype/freetype/src/smooth/ftsmooth.h
index 3708790df1..3708790df1 100644
--- a/tools/freetype/freetype/src/smooth/ftsmooth.h
+++ b/drivers/freetype/freetype/src/smooth/ftsmooth.h
diff --git a/tools/freetype/freetype/src/smooth/ftspic.c b/drivers/freetype/freetype/src/smooth/ftspic.c
index 67a2b8310c..67a2b8310c 100644
--- a/tools/freetype/freetype/src/smooth/ftspic.c
+++ b/drivers/freetype/freetype/src/smooth/ftspic.c
diff --git a/tools/freetype/freetype/src/smooth/ftspic.h b/drivers/freetype/freetype/src/smooth/ftspic.h
index 334b51c3f1..334b51c3f1 100644
--- a/tools/freetype/freetype/src/smooth/ftspic.h
+++ b/drivers/freetype/freetype/src/smooth/ftspic.h
diff --git a/tools/freetype/freetype/src/smooth/module.mk b/drivers/freetype/freetype/src/smooth/module.mk
index 47f6c04076..47f6c04076 100644
--- a/tools/freetype/freetype/src/smooth/module.mk
+++ b/drivers/freetype/freetype/src/smooth/module.mk
diff --git a/tools/freetype/freetype/src/smooth/rules.mk b/drivers/freetype/freetype/src/smooth/rules.mk
index 88d0aa53ac..88d0aa53ac 100644
--- a/tools/freetype/freetype/src/smooth/rules.mk
+++ b/drivers/freetype/freetype/src/smooth/rules.mk
diff --git a/tools/freetype/freetype/src/smooth/smooth.c b/drivers/freetype/freetype/src/smooth/smooth.c
index a8ac51f9f8..a8ac51f9f8 100644
--- a/tools/freetype/freetype/src/smooth/smooth.c
+++ b/drivers/freetype/freetype/src/smooth/smooth.c
diff --git a/tools/freetype/freetype/src/truetype/Jamfile b/drivers/freetype/freetype/src/truetype/Jamfile
index a8cccfe137..a8cccfe137 100644
--- a/tools/freetype/freetype/src/truetype/Jamfile
+++ b/drivers/freetype/freetype/src/truetype/Jamfile
diff --git a/tools/freetype/freetype/src/truetype/module.mk b/drivers/freetype/freetype/src/truetype/module.mk
index baee81a773..baee81a773 100644
--- a/tools/freetype/freetype/src/truetype/module.mk
+++ b/drivers/freetype/freetype/src/truetype/module.mk
diff --git a/tools/freetype/freetype/src/truetype/rules.mk b/drivers/freetype/freetype/src/truetype/rules.mk
index d4b69f578b..d4b69f578b 100644
--- a/tools/freetype/freetype/src/truetype/rules.mk
+++ b/drivers/freetype/freetype/src/truetype/rules.mk
diff --git a/tools/freetype/freetype/src/truetype/truetype.c b/drivers/freetype/freetype/src/truetype/truetype.c
index 576912b219..576912b219 100644
--- a/tools/freetype/freetype/src/truetype/truetype.c
+++ b/drivers/freetype/freetype/src/truetype/truetype.c
diff --git a/tools/freetype/freetype/src/truetype/ttdriver.c b/drivers/freetype/freetype/src/truetype/ttdriver.c
index fb25706ab8..fb25706ab8 100644
--- a/tools/freetype/freetype/src/truetype/ttdriver.c
+++ b/drivers/freetype/freetype/src/truetype/ttdriver.c
diff --git a/tools/freetype/freetype/src/truetype/ttdriver.h b/drivers/freetype/freetype/src/truetype/ttdriver.h
index aae00f2617..aae00f2617 100644
--- a/tools/freetype/freetype/src/truetype/ttdriver.h
+++ b/drivers/freetype/freetype/src/truetype/ttdriver.h
diff --git a/tools/freetype/freetype/src/truetype/tterrors.h b/drivers/freetype/freetype/src/truetype/tterrors.h
index 78d138fab2..78d138fab2 100644
--- a/tools/freetype/freetype/src/truetype/tterrors.h
+++ b/drivers/freetype/freetype/src/truetype/tterrors.h
diff --git a/tools/freetype/freetype/src/truetype/ttgload.c b/drivers/freetype/freetype/src/truetype/ttgload.c
index f640a6c78e..f640a6c78e 100644
--- a/tools/freetype/freetype/src/truetype/ttgload.c
+++ b/drivers/freetype/freetype/src/truetype/ttgload.c
diff --git a/tools/freetype/freetype/src/truetype/ttgload.h b/drivers/freetype/freetype/src/truetype/ttgload.h
index 05f75882dc..05f75882dc 100644
--- a/tools/freetype/freetype/src/truetype/ttgload.h
+++ b/drivers/freetype/freetype/src/truetype/ttgload.h
diff --git a/tools/freetype/freetype/src/truetype/ttgxvar.c b/drivers/freetype/freetype/src/truetype/ttgxvar.c
index 7899d3671d..7899d3671d 100644
--- a/tools/freetype/freetype/src/truetype/ttgxvar.c
+++ b/drivers/freetype/freetype/src/truetype/ttgxvar.c
diff --git a/tools/freetype/freetype/src/truetype/ttgxvar.h b/drivers/freetype/freetype/src/truetype/ttgxvar.h
index 82dfc4431f..82dfc4431f 100644
--- a/tools/freetype/freetype/src/truetype/ttgxvar.h
+++ b/drivers/freetype/freetype/src/truetype/ttgxvar.h
diff --git a/tools/freetype/freetype/src/truetype/ttinterp.c b/drivers/freetype/freetype/src/truetype/ttinterp.c
index e7ffb987ce..e7ffb987ce 100644
--- a/tools/freetype/freetype/src/truetype/ttinterp.c
+++ b/drivers/freetype/freetype/src/truetype/ttinterp.c
diff --git a/tools/freetype/freetype/src/truetype/ttinterp.h b/drivers/freetype/freetype/src/truetype/ttinterp.h
index 69f5011ed4..69f5011ed4 100644
--- a/tools/freetype/freetype/src/truetype/ttinterp.h
+++ b/drivers/freetype/freetype/src/truetype/ttinterp.h
diff --git a/tools/freetype/freetype/src/truetype/ttobjs.c b/drivers/freetype/freetype/src/truetype/ttobjs.c
index 7897efa77a..7897efa77a 100644
--- a/tools/freetype/freetype/src/truetype/ttobjs.c
+++ b/drivers/freetype/freetype/src/truetype/ttobjs.c
diff --git a/tools/freetype/freetype/src/truetype/ttobjs.h b/drivers/freetype/freetype/src/truetype/ttobjs.h
index a11dd3752a..a11dd3752a 100644
--- a/tools/freetype/freetype/src/truetype/ttobjs.h
+++ b/drivers/freetype/freetype/src/truetype/ttobjs.h
diff --git a/tools/freetype/freetype/src/truetype/ttpic.c b/drivers/freetype/freetype/src/truetype/ttpic.c
index edefae72c5..edefae72c5 100644
--- a/tools/freetype/freetype/src/truetype/ttpic.c
+++ b/drivers/freetype/freetype/src/truetype/ttpic.c
diff --git a/tools/freetype/freetype/src/truetype/ttpic.h b/drivers/freetype/freetype/src/truetype/ttpic.h
index cfb4ee6281..cfb4ee6281 100644
--- a/tools/freetype/freetype/src/truetype/ttpic.h
+++ b/drivers/freetype/freetype/src/truetype/ttpic.h
diff --git a/tools/freetype/freetype/src/truetype/ttpload.c b/drivers/freetype/freetype/src/truetype/ttpload.c
index 9723a515b9..9723a515b9 100644
--- a/tools/freetype/freetype/src/truetype/ttpload.c
+++ b/drivers/freetype/freetype/src/truetype/ttpload.c
diff --git a/tools/freetype/freetype/src/truetype/ttpload.h b/drivers/freetype/freetype/src/truetype/ttpload.h
index f61ac079ce..f61ac079ce 100644
--- a/tools/freetype/freetype/src/truetype/ttpload.h
+++ b/drivers/freetype/freetype/src/truetype/ttpload.h
diff --git a/tools/freetype/freetype/src/truetype/ttsubpix.c b/drivers/freetype/freetype/src/truetype/ttsubpix.c
index 28470ad655..28470ad655 100644
--- a/tools/freetype/freetype/src/truetype/ttsubpix.c
+++ b/drivers/freetype/freetype/src/truetype/ttsubpix.c
diff --git a/tools/freetype/freetype/src/truetype/ttsubpix.h b/drivers/freetype/freetype/src/truetype/ttsubpix.h
index 8a54fc7cc7..8a54fc7cc7 100644
--- a/tools/freetype/freetype/src/truetype/ttsubpix.h
+++ b/drivers/freetype/freetype/src/truetype/ttsubpix.h
diff --git a/tools/freetype/freetype/src/type1/Jamfile b/drivers/freetype/freetype/src/type1/Jamfile
index 8e366baae5..8e366baae5 100644
--- a/tools/freetype/freetype/src/type1/Jamfile
+++ b/drivers/freetype/freetype/src/type1/Jamfile
diff --git a/tools/freetype/freetype/src/type1/module.mk b/drivers/freetype/freetype/src/type1/module.mk
index ade0210d76..ade0210d76 100644
--- a/tools/freetype/freetype/src/type1/module.mk
+++ b/drivers/freetype/freetype/src/type1/module.mk
diff --git a/tools/freetype/freetype/src/type1/rules.mk b/drivers/freetype/freetype/src/type1/rules.mk
index 15087b0304..15087b0304 100644
--- a/tools/freetype/freetype/src/type1/rules.mk
+++ b/drivers/freetype/freetype/src/type1/rules.mk
diff --git a/tools/freetype/freetype/src/type1/t1afm.c b/drivers/freetype/freetype/src/type1/t1afm.c
index de9c1997c4..de9c1997c4 100644
--- a/tools/freetype/freetype/src/type1/t1afm.c
+++ b/drivers/freetype/freetype/src/type1/t1afm.c
diff --git a/tools/freetype/freetype/src/type1/t1afm.h b/drivers/freetype/freetype/src/type1/t1afm.h
index 8eb1764de7..8eb1764de7 100644
--- a/tools/freetype/freetype/src/type1/t1afm.h
+++ b/drivers/freetype/freetype/src/type1/t1afm.h
diff --git a/tools/freetype/freetype/src/type1/t1driver.c b/drivers/freetype/freetype/src/type1/t1driver.c
index 697288d66d..697288d66d 100644
--- a/tools/freetype/freetype/src/type1/t1driver.c
+++ b/drivers/freetype/freetype/src/type1/t1driver.c
diff --git a/tools/freetype/freetype/src/type1/t1driver.h b/drivers/freetype/freetype/src/type1/t1driver.h
index 639cd4a7ad..639cd4a7ad 100644
--- a/tools/freetype/freetype/src/type1/t1driver.h
+++ b/drivers/freetype/freetype/src/type1/t1driver.h
diff --git a/tools/freetype/freetype/src/type1/t1errors.h b/drivers/freetype/freetype/src/type1/t1errors.h
index 8740530eef..8740530eef 100644
--- a/tools/freetype/freetype/src/type1/t1errors.h
+++ b/drivers/freetype/freetype/src/type1/t1errors.h
diff --git a/tools/freetype/freetype/src/type1/t1gload.c b/drivers/freetype/freetype/src/type1/t1gload.c
index 23478d1288..23478d1288 100644
--- a/tools/freetype/freetype/src/type1/t1gload.c
+++ b/drivers/freetype/freetype/src/type1/t1gload.c
diff --git a/tools/freetype/freetype/src/type1/t1gload.h b/drivers/freetype/freetype/src/type1/t1gload.h
index 0bdea3a8d5..0bdea3a8d5 100644
--- a/tools/freetype/freetype/src/type1/t1gload.h
+++ b/drivers/freetype/freetype/src/type1/t1gload.h
diff --git a/tools/freetype/freetype/src/type1/t1load.c b/drivers/freetype/freetype/src/type1/t1load.c
index 1c834a17bb..1c834a17bb 100644
--- a/tools/freetype/freetype/src/type1/t1load.c
+++ b/drivers/freetype/freetype/src/type1/t1load.c
diff --git a/tools/freetype/freetype/src/type1/t1load.h b/drivers/freetype/freetype/src/type1/t1load.h
index 546fc33530..546fc33530 100644
--- a/tools/freetype/freetype/src/type1/t1load.h
+++ b/drivers/freetype/freetype/src/type1/t1load.h
diff --git a/tools/freetype/freetype/src/type1/t1objs.c b/drivers/freetype/freetype/src/type1/t1objs.c
index 837b7911d4..837b7911d4 100644
--- a/tools/freetype/freetype/src/type1/t1objs.c
+++ b/drivers/freetype/freetype/src/type1/t1objs.c
diff --git a/tools/freetype/freetype/src/type1/t1objs.h b/drivers/freetype/freetype/src/type1/t1objs.h
index 54ccbb996a..54ccbb996a 100644
--- a/tools/freetype/freetype/src/type1/t1objs.h
+++ b/drivers/freetype/freetype/src/type1/t1objs.h
diff --git a/tools/freetype/freetype/src/type1/t1parse.c b/drivers/freetype/freetype/src/type1/t1parse.c
index 106e4e7ecd..106e4e7ecd 100644
--- a/tools/freetype/freetype/src/type1/t1parse.c
+++ b/drivers/freetype/freetype/src/type1/t1parse.c
diff --git a/tools/freetype/freetype/src/type1/t1parse.h b/drivers/freetype/freetype/src/type1/t1parse.h
index fb1c8a8830..fb1c8a8830 100644
--- a/tools/freetype/freetype/src/type1/t1parse.h
+++ b/drivers/freetype/freetype/src/type1/t1parse.h
diff --git a/tools/freetype/freetype/src/type1/t1tokens.h b/drivers/freetype/freetype/src/type1/t1tokens.h
index e37276b908..e37276b908 100644
--- a/tools/freetype/freetype/src/type1/t1tokens.h
+++ b/drivers/freetype/freetype/src/type1/t1tokens.h
diff --git a/tools/freetype/freetype/src/type1/type1.c b/drivers/freetype/freetype/src/type1/type1.c
index ccc12be103..ccc12be103 100644
--- a/tools/freetype/freetype/src/type1/type1.c
+++ b/drivers/freetype/freetype/src/type1/type1.c
diff --git a/tools/freetype/freetype/src/type42/Jamfile b/drivers/freetype/freetype/src/type42/Jamfile
index 00371d54f3..00371d54f3 100644
--- a/tools/freetype/freetype/src/type42/Jamfile
+++ b/drivers/freetype/freetype/src/type42/Jamfile
diff --git a/tools/freetype/freetype/src/type42/module.mk b/drivers/freetype/freetype/src/type42/module.mk
index b3f10a8d3c..b3f10a8d3c 100644
--- a/tools/freetype/freetype/src/type42/module.mk
+++ b/drivers/freetype/freetype/src/type42/module.mk
diff --git a/tools/freetype/freetype/src/type42/rules.mk b/drivers/freetype/freetype/src/type42/rules.mk
index eac1081eb1..eac1081eb1 100644
--- a/tools/freetype/freetype/src/type42/rules.mk
+++ b/drivers/freetype/freetype/src/type42/rules.mk
diff --git a/tools/freetype/freetype/src/type42/t42drivr.c b/drivers/freetype/freetype/src/type42/t42drivr.c
index 3ad1bde79f..3ad1bde79f 100644
--- a/tools/freetype/freetype/src/type42/t42drivr.c
+++ b/drivers/freetype/freetype/src/type42/t42drivr.c
diff --git a/tools/freetype/freetype/src/type42/t42drivr.h b/drivers/freetype/freetype/src/type42/t42drivr.h
index 9a1e97e30e..9a1e97e30e 100644
--- a/tools/freetype/freetype/src/type42/t42drivr.h
+++ b/drivers/freetype/freetype/src/type42/t42drivr.h
diff --git a/tools/freetype/freetype/src/type42/t42error.h b/drivers/freetype/freetype/src/type42/t42error.h
index 217ae8bd52..217ae8bd52 100644
--- a/tools/freetype/freetype/src/type42/t42error.h
+++ b/drivers/freetype/freetype/src/type42/t42error.h
diff --git a/tools/freetype/freetype/src/type42/t42objs.c b/drivers/freetype/freetype/src/type42/t42objs.c
index 18e2c0b625..18e2c0b625 100644
--- a/tools/freetype/freetype/src/type42/t42objs.c
+++ b/drivers/freetype/freetype/src/type42/t42objs.c
diff --git a/tools/freetype/freetype/src/type42/t42objs.h b/drivers/freetype/freetype/src/type42/t42objs.h
index 02d13259be..02d13259be 100644
--- a/tools/freetype/freetype/src/type42/t42objs.h
+++ b/drivers/freetype/freetype/src/type42/t42objs.h
diff --git a/tools/freetype/freetype/src/type42/t42parse.c b/drivers/freetype/freetype/src/type42/t42parse.c
index 3cdd8a1acf..3cdd8a1acf 100644
--- a/tools/freetype/freetype/src/type42/t42parse.c
+++ b/drivers/freetype/freetype/src/type42/t42parse.c
diff --git a/tools/freetype/freetype/src/type42/t42parse.h b/drivers/freetype/freetype/src/type42/t42parse.h
index f77ec4af4f..f77ec4af4f 100644
--- a/tools/freetype/freetype/src/type42/t42parse.h
+++ b/drivers/freetype/freetype/src/type42/t42parse.h
diff --git a/tools/freetype/freetype/src/type42/t42types.h b/drivers/freetype/freetype/src/type42/t42types.h
index c7c2db490d..c7c2db490d 100644
--- a/tools/freetype/freetype/src/type42/t42types.h
+++ b/drivers/freetype/freetype/src/type42/t42types.h
diff --git a/tools/freetype/freetype/src/type42/type42.c b/drivers/freetype/freetype/src/type42/type42.c
index d13df56b10..d13df56b10 100644
--- a/tools/freetype/freetype/src/type42/type42.c
+++ b/drivers/freetype/freetype/src/type42/type42.c
diff --git a/tools/freetype/freetype/src/winfonts/Jamfile b/drivers/freetype/freetype/src/winfonts/Jamfile
index 71cf5678e8..71cf5678e8 100644
--- a/tools/freetype/freetype/src/winfonts/Jamfile
+++ b/drivers/freetype/freetype/src/winfonts/Jamfile
diff --git a/tools/freetype/freetype/src/winfonts/fnterrs.h b/drivers/freetype/freetype/src/winfonts/fnterrs.h
index 463ba77ee2..463ba77ee2 100644
--- a/tools/freetype/freetype/src/winfonts/fnterrs.h
+++ b/drivers/freetype/freetype/src/winfonts/fnterrs.h
diff --git a/tools/freetype/freetype/src/winfonts/module.mk b/drivers/freetype/freetype/src/winfonts/module.mk
index b44d7f0570..b44d7f0570 100644
--- a/tools/freetype/freetype/src/winfonts/module.mk
+++ b/drivers/freetype/freetype/src/winfonts/module.mk
diff --git a/tools/freetype/freetype/src/winfonts/rules.mk b/drivers/freetype/freetype/src/winfonts/rules.mk
index 71a7df2d8a..71a7df2d8a 100644
--- a/tools/freetype/freetype/src/winfonts/rules.mk
+++ b/drivers/freetype/freetype/src/winfonts/rules.mk
diff --git a/tools/freetype/freetype/src/winfonts/winfnt.c b/drivers/freetype/freetype/src/winfonts/winfnt.c
index e8055c0898..e8055c0898 100644
--- a/tools/freetype/freetype/src/winfonts/winfnt.c
+++ b/drivers/freetype/freetype/src/winfonts/winfnt.c
diff --git a/tools/freetype/freetype/src/winfonts/winfnt.h b/drivers/freetype/freetype/src/winfonts/winfnt.h
index b7a80736d8..b7a80736d8 100644
--- a/tools/freetype/freetype/src/winfonts/winfnt.h
+++ b/drivers/freetype/freetype/src/winfonts/winfnt.h
diff --git a/tools/freetype/ft2build.h b/drivers/freetype/ft2build.h
index 5137b50f38..5137b50f38 100644
--- a/tools/freetype/ft2build.h
+++ b/drivers/freetype/ft2build.h
diff --git a/drivers/gl_context/context_gl.h b/drivers/gl_context/context_gl.h
index 1ea3662ada..fd3bbee5de 100644
--- a/drivers/gl_context/context_gl.h
+++ b/drivers/gl_context/context_gl.h
@@ -52,7 +52,11 @@ public:
virtual void swap_buffers()=0;
virtual Error initialize()=0;
-
+
+ virtual void set_use_vsync(bool p_use)=0;
+ virtual bool is_using_vsync() const=0;
+
+
ContextGL();
diff --git a/drivers/gles2/rasterizer_gles2.cpp b/drivers/gles2/rasterizer_gles2.cpp
index c7b2d65a13..8bd2fe3862 100644
--- a/drivers/gles2/rasterizer_gles2.cpp
+++ b/drivers/gles2/rasterizer_gles2.cpp
@@ -4737,10 +4737,10 @@ void RasterizerGLES2::_update_shader( Shader* p_shader) const {
}
-void RasterizerGLES2::_add_geometry( const Geometry* p_geometry, const InstanceData *p_instance, const Geometry *p_geometry_cmp, const GeometryOwner *p_owner) {
+void RasterizerGLES2::_add_geometry( const Geometry* p_geometry, const InstanceData *p_instance, const Geometry *p_geometry_cmp, const GeometryOwner *p_owner,int p_material) {
Material *m=NULL;
- RID m_src=p_instance->material_override.is_valid() ? p_instance->material_override : p_geometry->material;
+ RID m_src=p_instance->material_override.is_valid() ? p_instance->material_override :(p_material>=0?p_instance->materials[p_material]:p_geometry->material);
#ifdef DEBUG_ENABLED
if (current_debug==VS::SCENARIO_DEBUG_OVERDRAW) {
@@ -4988,8 +4988,9 @@ void RasterizerGLES2::add_mesh( const RID& p_mesh, const InstanceData *p_data) {
for (int i=0;i<ssize;i++) {
+ int mat_idx = p_data->materials[i].is_valid() ? i : -1;
Surface *s = mesh->surfaces[i];
- _add_geometry(s,p_data,s,NULL);
+ _add_geometry(s,p_data,s,NULL,mat_idx);
}
mesh->last_pass=frame;
@@ -6496,7 +6497,7 @@ void RasterizerGLES2::_render_list_forward(RenderList *p_render_list,const Trans
if (!*e->additive_ptr) {
additive=false;
- *e->additive_ptr=true;
+ *e->additive_ptr=true;
} else {
additive=true;
}
@@ -6683,7 +6684,7 @@ void RasterizerGLES2::_render_list_forward(RenderList *p_render_list,const Trans
}
rebind=true;
}
-
+
if (use_hw_skeleton_xform && (skeleton!=prev_skeleton||morph_values!=prev_morph_values)) {
if (!prev_skeleton || !skeleton)
rebind=true; //went from skeleton <-> no skeleton, needs rebind
@@ -6717,7 +6718,7 @@ void RasterizerGLES2::_render_list_forward(RenderList *p_render_list,const Trans
DEBUG_TEST_ERROR("Setup geometry");
};
- if (i==0 || light!=prev_light || rebind) {
+ if (i==0 || light!=prev_light || rebind) {
if (e->light!=0xFFFF) {
_setup_light(e->light);
@@ -6957,7 +6958,7 @@ void RasterizerGLES2::_process_glow_bloom() {
_copy_screen_quad();
copy_shader.set_conditional(CopyShaderGLES2::USE_GLOW_COPY,false);
- copy_shader.set_conditional(CopyShaderGLES2::USE_HDR,false);
+ copy_shader.set_conditional(CopyShaderGLES2::USE_HDR,false);
int passes = current_env->fx_param[VS::ENV_FX_PARAM_GLOW_BLUR_PASSES];
Vector2 psize(1.0/framebuffer.blur_size,1.0/framebuffer.blur_size);
float pscale = current_env->fx_param[VS::ENV_FX_PARAM_GLOW_BLUR_SCALE];
@@ -7426,7 +7427,7 @@ void RasterizerGLES2::end_scene() {
_process_hdr();
}
if (current_env && current_env->fx_enabled[VS::ENV_FX_GLOW]) {
- _process_glow_bloom();
+ _process_glow_bloom();
int glow_transfer_mode=current_env->fx_param[VS::ENV_FX_PARAM_GLOW_BLUR_BLEND_MODE];
if (glow_transfer_mode==1)
copy_shader.set_conditional(CopyShaderGLES2::USE_GLOW_SCREEN,true);
@@ -8437,7 +8438,7 @@ void RasterizerGLES2::canvas_draw_rect(const Rect2& p_rect, int p_flags, const R
}
-void RasterizerGLES2::canvas_draw_style_box(const Rect2& p_rect, RID p_texture,const float *p_margin, bool p_draw_center,const Color& p_modulate) {
+void RasterizerGLES2::canvas_draw_style_box(const Rect2& p_rect, const Rect2& p_src_region, RID p_texture,const float *p_margin, bool p_draw_center,const Color& p_modulate) {
Color m = p_modulate;
m.a*=canvas_opacity;
@@ -8445,52 +8446,57 @@ void RasterizerGLES2::canvas_draw_style_box(const Rect2& p_rect, RID p_texture,c
Texture* texture=_bind_canvas_texture(p_texture);
ERR_FAIL_COND(!texture);
- /* CORNERS */
+ Rect2 region = p_src_region;
+ if (region.size.width <= 0 )
+ region.size.width = texture->width;
+ if (region.size.height <= 0)
+ region.size.height = texture->height;
+ /* CORNERS */
_draw_textured_quad( // top left
Rect2( p_rect.pos, Size2(p_margin[MARGIN_LEFT],p_margin[MARGIN_TOP])),
- Rect2( Point2(), Size2(p_margin[MARGIN_LEFT],p_margin[MARGIN_TOP])),
+ Rect2( region.pos, Size2(p_margin[MARGIN_LEFT],p_margin[MARGIN_TOP])),
Size2( texture->width, texture->height ) );
_draw_textured_quad( // top right
Rect2( Point2( p_rect.pos.x + p_rect.size.width - p_margin[MARGIN_RIGHT], p_rect.pos.y), Size2(p_margin[MARGIN_RIGHT],p_margin[MARGIN_TOP])),
- Rect2( Point2(texture->width-p_margin[MARGIN_RIGHT],0), Size2(p_margin[MARGIN_RIGHT],p_margin[MARGIN_TOP])),
+ Rect2( Point2(region.pos.x+region.size.width-p_margin[MARGIN_RIGHT], region.pos.y), Size2(p_margin[MARGIN_RIGHT],p_margin[MARGIN_TOP])),
Size2( texture->width, texture->height ) );
_draw_textured_quad( // bottom left
Rect2( Point2(p_rect.pos.x,p_rect.pos.y + p_rect.size.height - p_margin[MARGIN_BOTTOM]), Size2(p_margin[MARGIN_LEFT],p_margin[MARGIN_BOTTOM])),
- Rect2( Point2(0,texture->height-p_margin[MARGIN_BOTTOM]), Size2(p_margin[MARGIN_LEFT],p_margin[MARGIN_BOTTOM])),
+ Rect2( Point2(region.pos.x, region.pos.y+region.size.height-p_margin[MARGIN_BOTTOM]), Size2(p_margin[MARGIN_LEFT],p_margin[MARGIN_BOTTOM])),
Size2( texture->width, texture->height ) );
_draw_textured_quad( // bottom right
Rect2( Point2( p_rect.pos.x + p_rect.size.width - p_margin[MARGIN_RIGHT], p_rect.pos.y + p_rect.size.height - p_margin[MARGIN_BOTTOM]), Size2(p_margin[MARGIN_RIGHT],p_margin[MARGIN_BOTTOM])),
- Rect2( Point2(texture->width-p_margin[MARGIN_RIGHT],texture->height-p_margin[MARGIN_BOTTOM]), Size2(p_margin[MARGIN_RIGHT],p_margin[MARGIN_BOTTOM])),
+ Rect2( Point2(region.pos.x+region.size.width-p_margin[MARGIN_RIGHT], region.pos.y+region.size.height-p_margin[MARGIN_BOTTOM]), Size2(p_margin[MARGIN_RIGHT],p_margin[MARGIN_BOTTOM])),
Size2( texture->width, texture->height ) );
Rect2 rect_center( p_rect.pos+Point2( p_margin[MARGIN_LEFT], p_margin[MARGIN_TOP]), Size2( p_rect.size.width - p_margin[MARGIN_LEFT] - p_margin[MARGIN_RIGHT], p_rect.size.height - p_margin[MARGIN_TOP] - p_margin[MARGIN_BOTTOM] ));
- Rect2 src_center( Point2( p_margin[MARGIN_LEFT], p_margin[MARGIN_TOP]), Size2( texture->width - p_margin[MARGIN_LEFT] - p_margin[MARGIN_RIGHT], texture->height - p_margin[MARGIN_TOP] - p_margin[MARGIN_BOTTOM] ));
+ Rect2 src_center( Point2(region.pos.x+p_margin[MARGIN_LEFT], region.pos.y+p_margin[MARGIN_TOP]), Size2(region.size.width - p_margin[MARGIN_LEFT] - p_margin[MARGIN_RIGHT], region.size.height - p_margin[MARGIN_TOP] - p_margin[MARGIN_BOTTOM] ));
_draw_textured_quad( // top
Rect2( Point2(rect_center.pos.x,p_rect.pos.y),Size2(rect_center.size.width,p_margin[MARGIN_TOP])),
- Rect2( Point2(p_margin[MARGIN_LEFT],0), Size2(src_center.size.width,p_margin[MARGIN_TOP])),
+ Rect2( Point2(src_center.pos.x,region.pos.y), Size2(src_center.size.width,p_margin[MARGIN_TOP])),
Size2( texture->width, texture->height ) );
_draw_textured_quad( // bottom
Rect2( Point2(rect_center.pos.x,rect_center.pos.y+rect_center.size.height),Size2(rect_center.size.width,p_margin[MARGIN_BOTTOM])),
- Rect2( Point2(p_margin[MARGIN_LEFT],src_center.pos.y+src_center.size.height), Size2(src_center.size.width,p_margin[MARGIN_BOTTOM])),
+ Rect2( Point2(src_center.pos.x,src_center.pos.y+src_center.size.height), Size2(src_center.size.width,p_margin[MARGIN_BOTTOM])),
Size2( texture->width, texture->height ) );
_draw_textured_quad( // left
Rect2( Point2(p_rect.pos.x,rect_center.pos.y),Size2(p_margin[MARGIN_LEFT],rect_center.size.height)),
- Rect2( Point2(0,p_margin[MARGIN_TOP]), Size2(p_margin[MARGIN_LEFT],src_center.size.height)),
+ Rect2( Point2(region.pos.x,region.pos.y+p_margin[MARGIN_TOP]), Size2(p_margin[MARGIN_LEFT],src_center.size.height)),
Size2( texture->width, texture->height ) );
_draw_textured_quad( // right
Rect2( Point2(rect_center.pos.x+rect_center.size.width,rect_center.pos.y),Size2(p_margin[MARGIN_RIGHT],rect_center.size.height)),
- Rect2( Point2(src_center.pos.x+src_center.size.width,p_margin[MARGIN_TOP]), Size2(p_margin[MARGIN_RIGHT],src_center.size.height)),
+ Rect2( Point2(src_center.pos.x+src_center.size.width,region.pos.y+p_margin[MARGIN_TOP]), Size2(p_margin[MARGIN_RIGHT],src_center.size.height)),
Size2( texture->width, texture->height ) );
if (p_draw_center) {
@@ -8568,7 +8574,7 @@ void RasterizerGLES2::canvas_draw_polygon(int p_vertex_count, const int* p_indic
#else //WebGL specific impl.
- glBindBuffer(GL_ARRAY_BUFFER, gui_quad_buffer);
+ glBindBuffer(GL_ARRAY_BUFFER, gui_quad_buffer);
float *b = GlobalVertexBuffer;
int ofs = 0;
if(p_vertex_count > MAX_POLYGON_VERTICES){
@@ -9183,7 +9189,7 @@ void RasterizerGLES2::_canvas_item_render_commands(CanvasItem *p_item,CanvasItem
CanvasItem::CommandStyle* style = static_cast<CanvasItem::CommandStyle*>(c);
if (use_normalmap)
_canvas_normal_set_flip(Vector2(1,1));
- canvas_draw_style_box(style->rect,style->texture,style->margin,style->draw_center,style->color);
+ canvas_draw_style_box(style->rect,style->source,style->texture,style->margin,style->draw_center,style->color);
} break;
case CanvasItem::Command::TYPE_PRIMITIVE: {
@@ -9429,7 +9435,7 @@ void RasterizerGLES2::canvas_render_items(CanvasItem *p_item_list,int p_z,const
draw_viewport_func(ci->vp_render->owner,ci->vp_render->udata,ci->vp_render->rect);
}
memdelete(ci->vp_render);
- ci->vp_render=NULL;
+ ci->vp_render=NULL;
canvas_last_material=NULL;
canvas_use_modulate=p_modulate!=Color(1,1,1,1);
canvas_modulate=p_modulate;
@@ -11423,7 +11429,7 @@ RasterizerGLES2::RasterizerGLES2(bool p_compress_arrays,bool p_keep_ram_copy,boo
void RasterizerGLES2::restore_framebuffer() {
glBindFramebuffer(GL_FRAMEBUFFER, base_framebuffer);
-
+
}
RasterizerGLES2::~RasterizerGLES2() {
diff --git a/drivers/gles2/rasterizer_gles2.h b/drivers/gles2/rasterizer_gles2.h
index b52918c02f..c9fc0c247d 100644
--- a/drivers/gles2/rasterizer_gles2.h
+++ b/drivers/gles2/rasterizer_gles2.h
@@ -1070,7 +1070,7 @@ class RasterizerGLES2 : public Rasterizer {
Plane camera_plane;
- void _add_geometry( const Geometry* p_geometry, const InstanceData *p_instance, const Geometry *p_geometry_cmp, const GeometryOwner *p_owner);
+ void _add_geometry( const Geometry* p_geometry, const InstanceData *p_instance, const Geometry *p_geometry_cmp, const GeometryOwner *p_owner,int p_material=-1);
void _render_list_forward(RenderList *p_render_list,const Transform& p_view_transform,const Transform& p_view_transform_inverse, const CameraMatrix& p_projection,bool p_reverse_cull=false,bool p_fragment_light=false,bool p_alpha_pass=false);
//void _setup_light(LightInstance* p_instance, int p_idx);
@@ -1635,7 +1635,7 @@ public:
virtual void canvas_end_rect();
virtual void canvas_draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width);
virtual void canvas_draw_rect(const Rect2& p_rect, int p_flags, const Rect2& p_source,RID p_texture,const Color& p_modulate);
- virtual void canvas_draw_style_box(const Rect2& p_rect, RID p_texture,const float *p_margins, bool p_draw_center=true,const Color& p_modulate=Color(1,1,1));
+ virtual void canvas_draw_style_box(const Rect2& p_rect, const Rect2& p_src_region, RID p_texture,const float *p_margins, bool p_draw_center=true,const Color& p_modulate=Color(1,1,1));
virtual void canvas_draw_primitive(const Vector<Point2>& p_points, const Vector<Color>& p_colors,const Vector<Point2>& p_uvs, RID p_texture,float p_width);
virtual void canvas_draw_polygon(int p_vertex_count, const int* p_indices, const Vector2* p_vertices, const Vector2* p_uvs, const Color* p_colors,const RID& p_texture,bool p_singlecolor);
virtual void canvas_set_transform(const Matrix32& p_transform);
diff --git a/drivers/ogg/COPYING b/drivers/ogg/COPYING
new file mode 100644
index 0000000000..6111c6c5a6
--- /dev/null
+++ b/drivers/ogg/COPYING
@@ -0,0 +1,28 @@
+Copyright (c) 2002, Xiph.org Foundation
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+- Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+- Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+- Neither the name of the Xiph.org Foundation nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/drivers/openssl/SCsub b/drivers/openssl/SCsub
index b7a84cd122..40e3d0c0f0 100644
--- a/drivers/openssl/SCsub
+++ b/drivers/openssl/SCsub
@@ -1,6 +1,6 @@
-Import('env_ssl')
+Import('env_drivers')
Import('env')
-env_ssl.add_source_files(env.drivers_sources,"*.cpp")
-env_ssl.add_source_files(env.drivers_sources,"*.c")
+env_drivers.add_source_files(env.drivers_sources,"*.cpp")
+env_drivers.add_source_files(env.drivers_sources,"*.c")
diff --git a/drivers/opus/COPYING b/drivers/opus/COPYING
new file mode 100644
index 0000000000..7b53d665df
--- /dev/null
+++ b/drivers/opus/COPYING
@@ -0,0 +1,28 @@
+Copyright (c) 1994-2013 Xiph.Org Foundation and contributors
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+- Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+- Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+- Neither the name of the Xiph.Org Foundation nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/drivers/png/SCsub b/drivers/png/SCsub
index df521de3eb..9dbffeed1f 100644
--- a/drivers/png/SCsub
+++ b/drivers/png/SCsub
@@ -1,4 +1,5 @@
Import('env')
+Import('env_drivers')
png_sources = [
@@ -25,15 +26,15 @@ png_sources = [
# Currently .ASM filter_neon.S does not compile on NT.
import os
if ("neon_enabled" in env and env["neon_enabled"]) and os.name!="nt":
- env.Append(CPPFLAGS=["-DPNG_ARM_NEON_OPT=2"])
- env_neon = env.Clone();
+ env_drivers.Append(CPPFLAGS=["-DPNG_ARM_NEON_OPT=2"])
+ env_neon = env_drivers.Clone();
if "S_compiler" in env:
env_neon['CC'] = env['S_compiler']
#env_neon.Append(CPPFLAGS=["-DPNG_ARM_NEON"])
png_sources.append(env_neon.Object("#drivers/png/arm/arm_init.c"))
png_sources.append(env_neon.Object("#drivers/png/arm/filter_neon.S"))
else:
- env.Append(CPPFLAGS=["-DPNG_ARM_NEON_OPT=0"])
+ env_drivers.Append(CPPFLAGS=["-DPNG_ARM_NEON_OPT=0"])
env.drivers_sources+=png_sources
diff --git a/drivers/png/png.c b/drivers/png/png.c
index cd7da59222..711b7c4629 100644
--- a/drivers/png/png.c
+++ b/drivers/png/png.c
@@ -14,7 +14,7 @@
#include "pngpriv.h"
/* Generate a compiler error if there is an old png.h in the search path. */
-typedef png_libpng_version_1_5_26 Your_png_h_is_not_version_1_5_26;
+typedef png_libpng_version_1_5_27 Your_png_h_is_not_version_1_5_27;
/* Tells libpng that we have already handled the first "num_bytes" bytes
* of the PNG file signature. If the PNG data is embedded into another
@@ -655,15 +655,15 @@ png_get_copyright(png_const_structp png_ptr)
#else
# ifdef __STDC__
return PNG_STRING_NEWLINE \
- "libpng version 1.5.26 - December 17, 2015" PNG_STRING_NEWLINE \
- "Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson" \
+ "libpng version 1.5.27 - May 26, 2016" PNG_STRING_NEWLINE \
+ "Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson" \
PNG_STRING_NEWLINE \
"Copyright (c) 1996-1997 Andreas Dilger" PNG_STRING_NEWLINE \
"Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc." \
PNG_STRING_NEWLINE;
# else
- return "libpng version 1.5.26 - December 17, 2015\
- Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson\
+ return "libpng version 1.5.27 - May 26, 2016\
+ Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson\
Copyright (c) 1996-1997 Andreas Dilger\
Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.";
# endif
diff --git a/drivers/png/png.h b/drivers/png/png.h
index c4f2bab15e..f726c7282f 100644
--- a/drivers/png/png.h
+++ b/drivers/png/png.h
@@ -1,9 +1,9 @@
/* png.h - header file for PNG reference library
*
- * libpng version 1.5.26, December 17, 2015
+ * libpng version 1.5.27, May 26, 2016
*
- * Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
+ * Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
*
@@ -12,7 +12,7 @@
* Authors and maintainers:
* libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
* libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger
- * libpng versions 0.97, January 1998, through 1.5.26, December 17, 2015:
+ * libpng versions 0.97, January 1998, through 1.5.27, May 26, 2016:
* Glenn Randers-Pehrson.
* See also "Contributing Authors", below.
*/
@@ -25,8 +25,8 @@
*
* This code is released under the libpng license.
*
- * libpng versions 1.0.7, July 1, 2000, through 1.5.26, December 17, 2015, are
- * Copyright (c) 2000-2002, 2004, 2006-2015 Glenn Randers-Pehrson, are
+ * libpng versions 1.0.7, July 1, 2000, through 1.5.27, May 26, 2016, are
+ * Copyright (c) 2000-2002, 2004, 2006-2016 Glenn Randers-Pehrson, are
* derived from libpng-1.0.6, and are distributed according to the same
* disclaimer and license as libpng-1.0.6 with the following individuals
* added to the list of Contributing Authors:
@@ -108,6 +108,29 @@
* appreciated.
*
* END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE.
+ *
+ * TRADEMARK:
+ *
+ * The name "libpng" has not been registered by the Copyright owner
+ * as a trademark in any jurisdiction. However, because libpng has
+ * been distributed and maintained world-wide, continually since 1995,
+ * the Copyright owner claims "common-law trademark protection" in any
+ * jurisdiction where common-law trademark is recognized.
+ *
+ * OSI CERTIFICATION:
+ *
+ * Libpng is OSI Certified Open Source Software. OSI Certified Open Source is
+ * a certification mark of the Open Source Initiative. OSI has not addressed
+ * the additional disclaimers inserted at version 1.0.7.
+ *
+ * EXPORT CONTROL:
+ *
+ * The Copyright owner believes that the Export Control Classification
+ * Number (ECCN) for libpng is EAR99, which means not subject to export
+ * controls or International Traffic in Arms Regulations (ITAR) because
+ * it is open source, publicly available software, that does not contain
+ * any encryption software. See the EAR, paragraphs 734.3(b)(3) and
+ * 734.7(b).
*/
/*
@@ -121,12 +144,6 @@
*/
/*
- * Libpng is OSI Certified Open Source Software. OSI Certified Open Source is
- * a certification mark of the Open Source Initiative. OSI has not addressed
- * the additional disclaimers inserted at version 1.0.7.
- */
-
-/*
* The contributing authors would like to thank all those who helped
* with testing, bug fixes, and patience. This wouldn't have been
* possible without all of you.
@@ -181,9 +198,9 @@
* ...
* 1.0.19 10 10019 10.so.0.19[.0]
* ...
- * 1.2.53 13 10253 12.so.0.53[.0]
+ * 1.2.56 13 10256 12.so.0.56[.0]
* ...
- * 1.5.25 15 10525 15.so.15.25[.0]
+ * 1.5.27 15 10527 15.so.15.27[.0]
*
* Henceforth the source version will match the shared-library major
* and minor numbers; the shared-library major version number will be
@@ -211,13 +228,13 @@
* Y2K compliance in libpng:
* =========================
*
- * December 17, 2015
+ * May 26, 2016
*
* Since the PNG Development group is an ad-hoc body, we can't make
* an official declaration.
*
* This is your unofficial assurance that libpng from version 0.71 and
- * upward through 1.5.26 are Y2K compliant. It is my belief that
+ * upward through 1.5.27 are Y2K compliant. It is my belief that
* earlier versions were also Y2K compliant.
*
* Libpng only has two year fields. One is a 2-byte unsigned integer
@@ -278,9 +295,9 @@
*/
/* Version information for png.h - this should match the version in png.c */
-#define PNG_LIBPNG_VER_STRING "1.5.26"
+#define PNG_LIBPNG_VER_STRING "1.5.27"
#define PNG_HEADER_VERSION_STRING \
- " libpng version 1.5.26 - December 17, 2015\n"
+ " libpng version 1.5.27 - May 26, 2016\n"
#define PNG_LIBPNG_VER_SONUM 15
#define PNG_LIBPNG_VER_DLLNUM 15
@@ -288,7 +305,7 @@
/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
#define PNG_LIBPNG_VER_MAJOR 1
#define PNG_LIBPNG_VER_MINOR 5
-#define PNG_LIBPNG_VER_RELEASE 26
+#define PNG_LIBPNG_VER_RELEASE 27
/* This should match the numeric part of the final component of
* PNG_LIBPNG_VER_STRING, omitting any leading zero:
@@ -319,7 +336,7 @@
* version 1.0.0 was mis-numbered 100 instead of 10000). From
* version 1.0.1 it's xxyyzz, where x=major, y=minor, z=release
*/
-#define PNG_LIBPNG_VER 10526 /* 1.5.26 */
+#define PNG_LIBPNG_VER 10527 /* 1.5.27 */
/* Library configuration: these options cannot be changed after
* the library has been built.
@@ -441,7 +458,7 @@ extern "C" {
/* This triggers a compiler error in png.c, if png.c and png.h
* do not agree upon the version number.
*/
-typedef char* png_libpng_version_1_5_26;
+typedef char* png_libpng_version_1_5_27;
/* Three color definitions. The order of the red, green, and blue, (and the
* exact size) is not important, although the size of the fields need to
@@ -705,22 +722,22 @@ typedef png_info FAR * FAR * png_infopp;
* data in the info_struct to be written into the output file. The values
* of the PNG_INFO_<chunk> defines should NOT be changed.
*/
-#define PNG_INFO_gAMA 0x0001
-#define PNG_INFO_sBIT 0x0002
-#define PNG_INFO_cHRM 0x0004
-#define PNG_INFO_PLTE 0x0008
-#define PNG_INFO_tRNS 0x0010
-#define PNG_INFO_bKGD 0x0020
-#define PNG_INFO_hIST 0x0040
-#define PNG_INFO_pHYs 0x0080
-#define PNG_INFO_oFFs 0x0100
-#define PNG_INFO_tIME 0x0200
-#define PNG_INFO_pCAL 0x0400
-#define PNG_INFO_sRGB 0x0800 /* GR-P, 0.96a */
-#define PNG_INFO_iCCP 0x1000 /* ESR, 1.0.6 */
-#define PNG_INFO_sPLT 0x2000 /* ESR, 1.0.6 */
-#define PNG_INFO_sCAL 0x4000 /* ESR, 1.0.6 */
-#define PNG_INFO_IDAT 0x8000 /* ESR, 1.0.6 */
+#define PNG_INFO_gAMA 0x0001U
+#define PNG_INFO_sBIT 0x0002U
+#define PNG_INFO_cHRM 0x0004U
+#define PNG_INFO_PLTE 0x0008U
+#define PNG_INFO_tRNS 0x0010U
+#define PNG_INFO_bKGD 0x0020U
+#define PNG_INFO_hIST 0x0040U
+#define PNG_INFO_pHYs 0x0080U
+#define PNG_INFO_oFFs 0x0100U
+#define PNG_INFO_tIME 0x0200U
+#define PNG_INFO_pCAL 0x0400U
+#define PNG_INFO_sRGB 0x0800U /* GR-P, 0.96a */
+#define PNG_INFO_iCCP 0x1000U /* ESR, 1.0.6 */
+#define PNG_INFO_sPLT 0x2000U /* ESR, 1.0.6 */
+#define PNG_INFO_sCAL 0x4000U /* ESR, 1.0.6 */
+#define PNG_INFO_IDAT 0x8000U /* ESR, 1.0.6 */
/* This is used for the transformation routines, as some of them
* change these values for the row. It also should enable using
@@ -1365,7 +1382,7 @@ PNG_EXPORT(229, void, png_set_scale_16, (png_structp png_ptr));
#endif
#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
-#define PNG_READ_16_TO_8 SUPPORTED /* Name prior to 1.5.4 */
+#define PNG_READ_16_TO_8_SUPPORTED /* Name prior to 1.5.4 */
/* Strip the second byte of information from a 16-bit depth file. */
PNG_EXPORT(48, void, png_set_strip_16, (png_structp png_ptr));
#endif
@@ -1517,8 +1534,8 @@ PNG_EXPORT(67, void, png_set_filter,
#define PNG_FILTER_UP 0x20
#define PNG_FILTER_AVG 0x40
#define PNG_FILTER_PAETH 0x80
-#define PNG_ALL_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP | \
- PNG_FILTER_AVG | PNG_FILTER_PAETH)
+#define PNG_FAST_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP)
+#define PNG_ALL_FILTERS (PNG_FAST_FILTERS | PNG_FILTER_AVG | PNG_FILTER_PAETH)
/* Filter values (not flags) - used in pngwrite.c, pngwutil.c for now.
* These defines should NOT be changed.
diff --git a/drivers/png/pngconf.h b/drivers/png/pngconf.h
index 62588337d0..ce1ff5853f 100644
--- a/drivers/png/pngconf.h
+++ b/drivers/png/pngconf.h
@@ -1,7 +1,7 @@
/* pngconf.h - machine configurable file for libpng
*
- * libpng version 1.5.26, December 17, 2015
+ * libpng version 1.5.27, May 26, 2016
*
* Copyright (c) 1998-2002,2004,2006-2013 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
diff --git a/drivers/png/pnglibconf.h b/drivers/png/pnglibconf.h
index 37f63f2721..1df6146f29 100644
--- a/drivers/png/pnglibconf.h
+++ b/drivers/png/pnglibconf.h
@@ -1,9 +1,9 @@
-/* 1.5.26 STANDARD API DEFINITION */
+/* 1.5.27 STANDARD API DEFINITION */
/* pnglibconf.h - library build configuration */
-/* libpng version 1.5.26 - December 17, 2015 */
+/* libpng version 1.5.27 - May 26, 2016 */
-/* Copyright (c) 1998-2015 Glenn Randers-Pehrson */
+/* Copyright (c) 2011-2015 Glenn Randers-Pehrson */
/* This code is released under the libpng license. */
/* For conditions of distribution and use, see the disclaimer */
diff --git a/drivers/png/pngrutil.c b/drivers/png/pngrutil.c
index 632c5c8e02..6061651fef 100644
--- a/drivers/png/pngrutil.c
+++ b/drivers/png/pngrutil.c
@@ -1,7 +1,7 @@
/* pngrutil.c - utilities to read a PNG file
*
- * Last changed in libpng 1.5.25 [December 17, 2015]
+ * Last changed in libpng 1.5.25 [December 3, 2015]
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
diff --git a/drivers/register_driver_types.cpp b/drivers/register_driver_types.cpp
index 235438f126..2f9767440e 100644
--- a/drivers/register_driver_types.cpp
+++ b/drivers/register_driver_types.cpp
@@ -16,6 +16,7 @@
#include "png/resource_saver_png.h"
#include "jpegd/image_loader_jpegd.h"
#include "dds/texture_loader_dds.h"
+#include "etc1/texture_loader_pkm.h"
#include "pvr/texture_loader_pvr.h"
#include "etc1/image_etc.h"
#include "chibi/event_stream_chibi.h"
@@ -79,6 +80,10 @@ static ImageLoaderJPG *image_loader_jpg=NULL;
static ResourceFormatDDS *resource_loader_dds=NULL;
#endif
+#ifdef ETC1_ENABLED
+static ResourceFormatPKM *resource_loader_pkm=NULL;
+#endif
+
#ifdef PVR_ENABLED
static ResourceFormatPVR *resource_loader_pvr=NULL;
@@ -113,6 +118,7 @@ static ResourceFormatLoaderAudioStreamMPC * mpc_stream_loader=NULL;
#endif
+
static ResourceFormatPBM * pbm_loader=NULL;
void register_core_driver_types() {
@@ -141,6 +147,7 @@ void register_core_driver_types() {
ImageLoader::add_image_format_loader( image_loader_jpg );
#endif
+
pbm_loader = memnew( ResourceFormatPBM );
ResourceLoader::add_resource_format_loader(pbm_loader);
@@ -197,6 +204,11 @@ void register_driver_types() {
ResourceLoader::add_resource_format_loader(resource_loader_dds );
#endif
+#ifdef ETC1_ENABLED
+ resource_loader_pkm = memnew( ResourceFormatPKM );
+ ResourceLoader::add_resource_format_loader(resource_loader_pkm);
+#endif
+
#ifdef PVR_ENABLED
resource_loader_pvr = memnew( ResourceFormatPVR );
ResourceLoader::add_resource_format_loader(resource_loader_pvr );
@@ -250,6 +262,7 @@ void register_driver_types() {
void unregister_driver_types() {
+
#ifdef TREMOR_ENABLED
memdelete( vorbis_stream_loader );
#endif
@@ -280,6 +293,10 @@ void unregister_driver_types() {
memdelete(resource_loader_dds);
#endif
+#ifdef ETC1_ENABLED
+ memdelete(resource_loader_pkm);
+#endif
+
#ifdef PVR_ENABLED
memdelete(resource_loader_pvr);
#endif
diff --git a/drivers/theora/COPYING b/drivers/theora/COPYING
new file mode 100644
index 0000000000..c8ccce4ffb
--- /dev/null
+++ b/drivers/theora/COPYING
@@ -0,0 +1,28 @@
+Copyright (C) 2002-2009 Xiph.org Foundation
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+- Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+- Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+- Neither the name of the Xiph.org Foundation nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/drivers/theora/LICENSE b/drivers/theora/LICENSE
new file mode 100644
index 0000000000..5e5ec08469
--- /dev/null
+++ b/drivers/theora/LICENSE
@@ -0,0 +1,18 @@
+Please see the file COPYING for the copyright license for this software.
+
+In addition to and irrespective of the copyright license associated
+with this software, On2 Technologies, Inc. makes the following statement
+regarding technology used in this software:
+
+ On2 represents and warrants that it shall not assert any rights
+ relating to infringement of On2's registered patents, nor initiate
+ any litigation asserting such rights, against any person who, or
+ entity which utilizes the On2 VP3 Codec Software, including any
+ use, distribution, and sale of said Software; which make changes,
+ modifications, and improvements in said Software; and to use,
+ distribute, and sell said changes as well as applications for other
+ fields of use.
+
+This reference implementation is originally derived from the On2 VP3
+Codec Software, and the Theora video format is essentially compatible
+with the VP3 video format, consisting of a backward-compatible superset.
diff --git a/drivers/unix/os_unix.cpp b/drivers/unix/os_unix.cpp
index 4fa46b16cd..8cb7c7b698 100644
--- a/drivers/unix/os_unix.cpp
+++ b/drivers/unix/os_unix.cpp
@@ -464,7 +464,7 @@ int OS_Unix::get_processor_count() const {
String OS_Unix::get_data_dir() const {
- String an = Globals::get_singleton()->get("application/name");
+ String an = get_safe_application_name();
if (an!="") {
diff --git a/drivers/vorbis/COPYING b/drivers/vorbis/COPYING
new file mode 100644
index 0000000000..28de72a970
--- /dev/null
+++ b/drivers/vorbis/COPYING
@@ -0,0 +1,28 @@
+Copyright (c) 2002-2008 Xiph.org Foundation
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+- Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+- Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+- Neither the name of the Xiph.org Foundation nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/drivers/webp/AUTHORS b/drivers/webp/AUTHORS
new file mode 100644
index 0000000000..70423cb4dd
--- /dev/null
+++ b/drivers/webp/AUTHORS
@@ -0,0 +1,26 @@
+Contributors:
+- Charles Munger (clm at google dot com)
+- Christian Duvivier (cduvivier at google dot com)
+- Djordje Pesut (djordje dot pesut at imgtec dot com)
+- James Zern (jzern at google dot com)
+- Jan Engelhardt (jengelh at medozas dot de)
+- Johann (johann dot koenig at duck dot com)
+- Jovan Zelincevic (jovan dot zelincevic at imgtec dot com)
+- Jyrki Alakuijala (jyrki at google dot com)
+- levytamar82 (tamar dot levy at intel dot com)
+- Lou Quillio (louquillio at google dot com)
+- Mans Rullgard (mans at mansr dot com)
+- Martin Olsson (mnemo at minimum dot se)
+- Mikołaj Zalewski (mikolajz at google dot com)
+- Noel Chromium (noel at chromium dot org)
+- Pascal Massimino (pascal dot massimino at gmail dot com)
+- Paweł Hajdan, Jr (phajdan dot jr at chromium dot org)
+- Pierre Joye (pierre dot php at gmail dot com)
+- Sam Clegg (sbc at chromium dot org)
+- Scott LaVarnway (slavarnway at google dot com)
+- Scott Talbot (s at chikachow dot org)
+- Slobodan Prijic (slobodan dot prijic at imgtec dot com)
+- Somnath Banerjee (somnath dot banerjee at gmail dot com)
+- Timothy Gu (timothygu99 at gmail dot com)
+- Urvang Joshi (urvang at google dot com)
+- Vikas Arora (vikasa at google dot com)
diff --git a/drivers/webp/COPYING b/drivers/webp/COPYING
new file mode 100644
index 0000000000..7a6f99547d
--- /dev/null
+++ b/drivers/webp/COPYING
@@ -0,0 +1,30 @@
+Copyright (c) 2010, Google Inc. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ * Neither the name of Google nor the names of its contributors may
+ be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/drivers/webp/PATENTS b/drivers/webp/PATENTS
new file mode 100644
index 0000000000..caedf607e9
--- /dev/null
+++ b/drivers/webp/PATENTS
@@ -0,0 +1,23 @@
+Additional IP Rights Grant (Patents)
+------------------------------------
+
+"These implementations" means the copyrightable works that implement the WebM
+codecs distributed by Google as part of the WebM Project.
+
+Google hereby grants to you a perpetual, worldwide, non-exclusive, no-charge,
+royalty-free, irrevocable (except as stated in this section) patent license to
+make, have made, use, offer to sell, sell, import, transfer, and otherwise
+run, modify and propagate the contents of these implementations of WebM, where
+such license applies only to those patent claims, both currently owned by
+Google and acquired in the future, licensable by Google that are necessarily
+infringed by these implementations of WebM. This grant does not include claims
+that would be infringed only as a consequence of further modification of these
+implementations. If you or your agent or exclusive licensee institute or order
+or agree to the institution of patent litigation or any other patent
+enforcement activity against any entity (including a cross-claim or
+counterclaim in a lawsuit) alleging that any of these implementations of WebM
+or any code incorporated within any of these implementations of WebM
+constitute direct or contributory patent infringement, or inducement of
+patent infringement, then any patent rights granted to you under this License
+for these implementations of WebM shall terminate as of the date such
+litigation is filed.
diff --git a/drivers/windows/dir_access_windows.cpp b/drivers/windows/dir_access_windows.cpp
index b9476b870b..913ba1eb2b 100644
--- a/drivers/windows/dir_access_windows.cpp
+++ b/drivers/windows/dir_access_windows.cpp
@@ -69,7 +69,7 @@ bool DirAccessWindows::list_dir_begin() {
_cisdir=false;
_cishidden=false;
-
+
list_dir_end();
p->h = FindFirstFileExW((current_dir+"\\*").c_str(), FindExInfoStandard, &p->fu, FindExSearchNameMatch, NULL, 0);
@@ -83,7 +83,7 @@ String DirAccessWindows::get_next() {
if (p->h==INVALID_HANDLE_VALUE)
return "";
-
+
_cisdir=(p->fu.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY);
_cishidden=(p->fu.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN);
@@ -192,7 +192,7 @@ Error DirAccessWindows::make_dir(String p_dir) {
#else
p_dir=fix_path(p_dir);
-
+
//p_dir.replace("/","\\");
bool success;
@@ -249,7 +249,7 @@ bool DirAccessWindows::file_exists(String p_file) {
p_file=get_current_dir().plus_file(p_file);
p_file=fix_path(p_file);
-
+
//p_file.replace("/","\\");
//WIN32_FILE_ATTRIBUTE_DATA fileInfo;
@@ -359,8 +359,12 @@ FileType DirAccessWindows::get_file_type(const String& p_file) const {
*/
size_t DirAccessWindows::get_space_left() {
- return -1;
-};
+ uint64_t bytes = 0;
+ GetDiskFreeSpaceEx(NULL,(PULARGE_INTEGER)&bytes,NULL,NULL);
+
+ //this is either 0 or a value in bytes.
+ return (size_t)bytes;
+}
DirAccessWindows::DirAccessWindows() {
diff --git a/main/input_default.cpp b/main/input_default.cpp
index c8b8062eee..5b4ae7f2cb 100644
--- a/main/input_default.cpp
+++ b/main/input_default.cpp
@@ -200,6 +200,12 @@ Vector3 InputDefault::get_accelerometer() {
return accelerometer;
}
+Vector3 InputDefault::get_magnetometer() {
+
+ _THREAD_SAFE_METHOD_
+ return magnetometer;
+}
+
void InputDefault::parse_input_event(const InputEvent& p_event) {
_THREAD_SAFE_METHOD_
@@ -296,6 +302,14 @@ void InputDefault::set_accelerometer(const Vector3& p_accel) {
}
+void InputDefault::set_magnetometer(const Vector3& p_magnetometer) {
+
+ _THREAD_SAFE_METHOD_
+
+ magnetometer=p_magnetometer;
+
+}
+
void InputDefault::set_main_loop(MainLoop *p_main_loop) {
main_loop=p_main_loop;
diff --git a/main/input_default.h b/main/input_default.h
index 471ae9e692..8f6a430436 100644
--- a/main/input_default.h
+++ b/main/input_default.h
@@ -14,6 +14,7 @@ class InputDefault : public Input {
Map<int,float> _joy_axis;
Map<StringName,int> custom_action_press;
Vector3 accelerometer;
+ Vector3 magnetometer;
Vector2 mouse_pos;
MainLoop *main_loop;
@@ -132,6 +133,7 @@ public:
void parse_joystick_mapping(String p_mapping, bool p_update_existing);
virtual Vector3 get_accelerometer();
+ virtual Vector3 get_magnetometer();
virtual Point2 get_mouse_pos() const;
virtual Point2 get_mouse_speed() const;
@@ -142,6 +144,7 @@ public:
void parse_input_event(const InputEvent& p_event);
void set_accelerometer(const Vector3& p_accel);
+ void set_magnetometer(const Vector3& p_magnetometer);
void set_joy_axis(int p_device,int p_axis,float p_value);
void set_main_loop(MainLoop *main_loop);
diff --git a/main/main.cpp b/main/main.cpp
index 532e8708a6..6cddea823a 100644
--- a/main/main.cpp
+++ b/main/main.cpp
@@ -101,13 +101,15 @@ static bool init_fullscreen=false;
static bool init_use_custom_pos=false;
static bool debug_collisions=false;
static bool debug_navigation=false;
+static bool allow_hidpi=true;
static Vector2 init_custom_pos;
static int video_driver_idx=-1;
static int audio_driver_idx=-1;
static String locale;
-
-
+static bool use_debug_profiler=false;
+static bool force_lowdpi=false;
static int init_screen=-1;
+static bool use_vsync=true;
static String unescape_cmdline(const String& p_str) {
@@ -157,6 +159,8 @@ void Main::print_help(const char* p_binary) {
OS::get_singleton()->print("%s",OS::get_singleton()->get_video_driver_name(i));
}
OS::get_singleton()->print(")\n");
+ OS::get_singleton()->print("\t-ldpi\t : Force low-dpi mode (OSX Only)");
+
OS::get_singleton()->print("\t-ad DRIVER\t : Audio Driver (");
for (int i=0;i<OS::get_singleton()->get_audio_driver_count();i++) {
@@ -257,6 +261,7 @@ Error Main::setup(const char *execpath,int argc, char *argv[],bool p_second_phas
Vector<String> breakpoints;
bool use_custom_res=true;
bool force_res=false;
+ bool profile=false;
I=args.front();
@@ -360,6 +365,9 @@ Error Main::setup(const char *execpath,int argc, char *argv[],bool p_second_phas
} else if (I->get()=="-w") { // video driver
init_windowed=true;
+ } else if (I->get()=="-profile") { // video driver
+
+ use_debug_profiler=true;
} else if (I->get()=="-vd") { // video driver
if (I->next()) {
@@ -382,6 +390,9 @@ Error Main::setup(const char *execpath,int argc, char *argv[],bool p_second_phas
goto error;
}
+ } else if (I->get()=="-ldpi") { // language
+
+ force_lowdpi=true;
} else if (I->get()=="-rfs") { // language
if (I->next()) {
@@ -588,11 +599,11 @@ Error Main::setup(const char *execpath,int argc, char *argv[],bool p_second_phas
memdelete(sdr);
} else {
script_debugger=sdr;
-
}
} else if (debug_mode=="local") {
script_debugger = memnew( ScriptDebuggerLocal );
+
}
@@ -678,7 +689,10 @@ Error Main::setup(const char *execpath,int argc, char *argv[],bool p_second_phas
#endif
- input_map->load_from_globals();
+ if (editor)
+ input_map->load_default(); //keys for editor
+ else
+ input_map->load_from_globals(); //keys for game
if (video_driver=="") // specified in engine.cfg
video_driver=_GLOBAL_DEF("display/driver",Variant((const char*)OS::get_singleton()->get_video_driver_name(0)));
@@ -687,6 +701,9 @@ Error Main::setup(const char *execpath,int argc, char *argv[],bool p_second_phas
video_mode.width=globals->get("display/width");
if (!force_res &&use_custom_res && globals->has("display/height"))
video_mode.height=globals->get("display/height");
+ if (!editor && (!bool(globals->get("display/allow_hidpi")) || force_lowdpi)) {
+ OS::get_singleton()->_allow_hidpi=false;
+ }
if (use_custom_res && globals->has("display/fullscreen"))
video_mode.fullscreen=globals->get("display/fullscreen");
if (use_custom_res && globals->has("display/resizable"))
@@ -706,9 +723,11 @@ Error Main::setup(const char *execpath,int argc, char *argv[],bool p_second_phas
GLOBAL_DEF("display/width",video_mode.width);
GLOBAL_DEF("display/height",video_mode.height);
+ GLOBAL_DEF("display/allow_hidpi",false);
GLOBAL_DEF("display/fullscreen",video_mode.fullscreen);
GLOBAL_DEF("display/resizable",video_mode.resizable);
GLOBAL_DEF("display/borderless_window", video_mode.borderless_window);
+ use_vsync = GLOBAL_DEF("display/use_vsync", use_vsync);
GLOBAL_DEF("display/test_width",0);
GLOBAL_DEF("display/test_height",0);
OS::get_singleton()->_pixel_snap=GLOBAL_DEF("display/use_2d_pixel_snap",false);
@@ -859,6 +878,7 @@ Error Main::setup2() {
OS::get_singleton()->set_window_position(init_custom_pos);
}
+ OS::get_singleton()->set_use_vsync(use_vsync);
register_core_singletons();
@@ -987,6 +1007,9 @@ Error Main::setup2() {
+ if (use_debug_profiler && script_debugger) {
+ script_debugger->profiling_start();
+ }
_start_success=true;
locale=String();
@@ -1494,6 +1517,7 @@ uint32_t Main::frames=0;
uint32_t Main::frame=0;
bool Main::force_redraw_requested = false;
+//for performance metrics
static uint64_t fixed_process_max=0;
static uint64_t idle_process_max=0;
@@ -1509,6 +1533,10 @@ bool Main::iteration() {
// if (time_accum+step < frame_slice)
// return false;
+
+ uint64_t fixed_process_ticks=0;
+ uint64_t idle_process_ticks=0;
+
frame+=ticks_elapsed;
last_ticks=ticks;
@@ -1551,6 +1579,7 @@ bool Main::iteration() {
//if (AudioServer::get_singleton())
// AudioServer::get_singleton()->update();
+ fixed_process_ticks=MAX(fixed_process_ticks,OS::get_singleton()->get_ticks_usec()-fixed_begin); // keep the largest one for reference
fixed_process_max=MAX(OS::get_singleton()->get_ticks_usec()-fixed_begin,fixed_process_max);
iters++;
}
@@ -1585,14 +1614,20 @@ bool Main::iteration() {
if (AudioServer::get_singleton())
AudioServer::get_singleton()->update();
+ idle_process_ticks=OS::get_singleton()->get_ticks_usec()-idle_begin;
+ idle_process_max=MAX(idle_process_ticks,idle_process_max);
+ uint64_t frame_time = OS::get_singleton()->get_ticks_usec() - ticks;
+
for(int i=0;i<ScriptServer::get_language_count();i++) {
ScriptServer::get_language(i)->frame();
}
- idle_process_max=MAX(OS::get_singleton()->get_ticks_usec()-idle_begin,idle_process_max);
-
- if (script_debugger)
+ if (script_debugger) {
+ if (script_debugger->is_profiling()) {
+ script_debugger->profiling_set_frame_times(USEC_TO_SEC(frame_time),USEC_TO_SEC(idle_process_ticks),USEC_TO_SEC(fixed_process_ticks),frame_slice);
+ }
script_debugger->idle_poll();
+ }
// x11_delay_usec(10000);
@@ -1605,8 +1640,8 @@ bool Main::iteration() {
};
OS::get_singleton()->_fps=frames;
- performance->set_process_time(idle_process_max/1000000.0);
- performance->set_fixed_process_time(fixed_process_max/1000000.0);
+ performance->set_process_time(USEC_TO_SEC(idle_process_max));
+ performance->set_fixed_process_time(USEC_TO_SEC(fixed_process_max));
idle_process_max=0;
fixed_process_max=0;
@@ -1620,7 +1655,7 @@ bool Main::iteration() {
}
if (OS::get_singleton()->is_in_low_processor_usage_mode() || !OS::get_singleton()->can_draw())
- OS::get_singleton()->delay_usec(25000); //apply some delay to force idle time
+ OS::get_singleton()->delay_usec(16600); //apply some delay to force idle time (results in about 60 FPS max)
else {
uint32_t frame_delay = OS::get_singleton()->get_frame_delay();
if (frame_delay)
@@ -1650,8 +1685,13 @@ void Main::cleanup() {
ERR_FAIL_COND(!_start_success);
- if (script_debugger)
+ if (script_debugger) {
+ if (use_debug_profiler) {
+ script_debugger->profiling_end();
+ }
+
memdelete(script_debugger);
+ }
OS::get_singleton()->delete_main_loop();
diff --git a/modules/gdscript/gd_compiler.cpp b/modules/gdscript/gd_compiler.cpp
index d38f5f3e35..d51f1a4ddc 100644
--- a/modules/gdscript/gd_compiler.cpp
+++ b/modules/gdscript/gd_compiler.cpp
@@ -1290,8 +1290,8 @@ Error GDCompiler::_parse_function(GDScript *p_script,const GDParser::ClassNode *
// gdfunc = &p_script->initializer;
//} else { //regular func
- p_script->member_functions[func_name]=GDFunction();
- gdfunc = &p_script->member_functions[func_name];
+ p_script->member_functions[func_name]=memnew(GDFunction);
+ gdfunc = p_script->member_functions[func_name];
//}
if (p_func)
@@ -1358,6 +1358,32 @@ Error GDCompiler::_parse_function(GDScript *p_script,const GDParser::ClassNode *
gdfunc->_stack_size=codegen.stack_max;
gdfunc->_call_size=codegen.call_max;
gdfunc->name=func_name;
+#ifdef DEBUG_ENABLED
+ if (ScriptDebugger::get_singleton()){
+ String signature;
+ //path
+ if (p_script->get_path()!=String())
+ signature+=p_script->get_path();
+ //loc
+ if (p_func) {
+ signature+="::"+itos(p_func->body->line);
+ } else {
+ signature+="::0";
+ }
+
+ //funciton and class
+
+ if (p_class->name) {
+ signature+="::"+String(p_class->name)+"."+String(func_name);;
+ } else {
+ signature+="::"+String(func_name);
+ }
+
+
+
+ gdfunc->profile.signature=signature;
+ }
+#endif
gdfunc->_script=p_script;
gdfunc->source=source;
@@ -1388,18 +1414,27 @@ Error GDCompiler::_parse_function(GDScript *p_script,const GDParser::ClassNode *
-Error GDCompiler::_parse_class(GDScript *p_script,GDScript *p_owner,const GDParser::ClassNode *p_class) {
+Error GDCompiler::_parse_class(GDScript *p_script, GDScript *p_owner, const GDParser::ClassNode *p_class, bool p_keep_state) {
+ Map<StringName,Ref<GDScript> > old_subclasses;
+
+ if (p_keep_state) {
+ old_subclasses=p_script->subclasses;
+ }
p_script->native=Ref<GDNativeClass>();
p_script->base=Ref<GDScript>();
p_script->_base=NULL;
p_script->members.clear();
p_script->constants.clear();
+ for (Map<StringName,GDFunction*>::Element *E=p_script->member_functions.front();E;E=E->next()) {
+ memdelete(E->get());
+ }
p_script->member_functions.clear();
p_script->member_indices.clear();
p_script->member_info.clear();
p_script->initializer=NULL;
+
p_script->subclasses.clear();
p_script->_owner=p_owner;
p_script->tool=p_class->tool;
@@ -1633,9 +1668,15 @@ Error GDCompiler::_parse_class(GDScript *p_script,GDScript *p_owner,const GDPars
for(int i=0;i<p_class->subclasses.size();i++) {
StringName name = p_class->subclasses[i]->name;
- Ref<GDScript> subclass = memnew( GDScript );
+ Ref<GDScript> subclass;
+
+ if (old_subclasses.has(name)) {
+ subclass=old_subclasses[name];
+ } else {
+ subclass.instance();
+ }
- Error err = _parse_class(subclass.ptr(),p_script,p_class->subclasses[i]);
+ Error err = _parse_class(subclass.ptr(),p_script,p_class->subclasses[i],p_keep_state);
if (err)
return err;
@@ -1690,7 +1731,7 @@ Error GDCompiler::_parse_class(GDScript *p_script,GDScript *p_owner,const GDPars
for(int i=0;i<p_class->variables.size();i++) {
if (p_class->variables[i].setter) {
- const Map<StringName,GDFunction>::Element *E=p_script->get_member_functions().find(p_class->variables[i].setter);
+ const Map<StringName,GDFunction*>::Element *E=p_script->get_member_functions().find(p_class->variables[i].setter);
if (!E) {
_set_error("Setter function '"+String(p_class->variables[i].setter)+"' not found in class.",NULL);
err_line=p_class->variables[i].line;
@@ -1698,7 +1739,7 @@ Error GDCompiler::_parse_class(GDScript *p_script,GDScript *p_owner,const GDPars
return ERR_PARSE_ERROR;
}
- if (E->get().is_static()) {
+ if (E->get()->is_static()) {
_set_error("Setter function '"+String(p_class->variables[i].setter)+"' is static.",NULL);
err_line=p_class->variables[i].line;
@@ -1708,7 +1749,7 @@ Error GDCompiler::_parse_class(GDScript *p_script,GDScript *p_owner,const GDPars
}
if (p_class->variables[i].getter) {
- const Map<StringName,GDFunction>::Element *E=p_script->get_member_functions().find(p_class->variables[i].getter);
+ const Map<StringName,GDFunction*>::Element *E=p_script->get_member_functions().find(p_class->variables[i].getter);
if (!E) {
_set_error("Getter function '"+String(p_class->variables[i].getter)+"' not found in class.",NULL);
err_line=p_class->variables[i].line;
@@ -1716,7 +1757,7 @@ Error GDCompiler::_parse_class(GDScript *p_script,GDScript *p_owner,const GDPars
return ERR_PARSE_ERROR;
}
- if (E->get().is_static()) {
+ if (E->get()->is_static()) {
_set_error("Getter function '"+String(p_class->variables[i].getter)+"' is static.",NULL);
err_line=p_class->variables[i].line;
@@ -1726,13 +1767,67 @@ Error GDCompiler::_parse_class(GDScript *p_script,GDScript *p_owner,const GDPars
}
}
+
+ //validate instances if keeping state
+
+ if (p_keep_state) {
+
+ print_line("RELOAD KEEP "+p_script->path);
+ for (Set<Object*>::Element *E=p_script->instances.front();E;) {
+
+ Set<Object*>::Element *N = E->next();
+
+ ScriptInstance *si = E->get()->get_script_instance();
+ if (si->is_placeholder()) {
+#ifdef TOOLS_ENABLED
+ PlaceHolderScriptInstance *psi = static_cast<PlaceHolderScriptInstance*>(si);
+
+ if (p_script->is_tool()) {
+ //re-create as an instance
+ p_script->placeholders.erase(psi); //remove placeholder
+
+ GDInstance* instance = memnew( GDInstance );
+ instance->base_ref=E->get()->cast_to<Reference>();
+ instance->members.resize(p_script->member_indices.size());
+ instance->script=Ref<GDScript>(p_script);
+ instance->owner=E->get();
+
+ //needed for hot reloading
+ for(Map<StringName,GDScript::MemberInfo>::Element *E=p_script->member_indices.front();E;E=E->next()) {
+ instance->member_indices_cache[E->key()]=E->get().index;
+ }
+ instance->owner->set_script_instance(instance);
+
+
+ /* STEP 2, INITIALIZE AND CONSRTUCT */
+
+ Variant::CallError ce;
+ p_script->initializer->call(instance,NULL,0,ce);
+
+ if (ce.error!=Variant::CallError::CALL_OK) {
+ //well, tough luck, not goinna do anything here
+ }
+ }
+#endif
+ } else {
+
+ GDInstance *gi = static_cast<GDInstance*>(si);
+ gi->reload_members();
+ }
+
+ E=N;
+
+ }
+
+
+ }
#endif
p_script->valid=true;
return OK;
}
-Error GDCompiler::compile(const GDParser *p_parser,GDScript *p_script) {
+Error GDCompiler::compile(const GDParser *p_parser,GDScript *p_script,bool p_keep_state) {
err_line=-1;
err_column=-1;
@@ -1743,9 +1838,7 @@ Error GDCompiler::compile(const GDParser *p_parser,GDScript *p_script) {
source=p_script->get_path();
-
-
- Error err = _parse_class(p_script,NULL,static_cast<const GDParser::ClassNode*>(root));
+ Error err = _parse_class(p_script,NULL,static_cast<const GDParser::ClassNode*>(root),p_keep_state);
if (err)
return err;
diff --git a/modules/gdscript/gd_compiler.h b/modules/gdscript/gd_compiler.h
index 32e18c6dcf..7cf575e3d6 100644
--- a/modules/gdscript/gd_compiler.h
+++ b/modules/gdscript/gd_compiler.h
@@ -144,7 +144,7 @@ class GDCompiler {
int _parse_expression(CodeGen& codegen,const GDParser::Node *p_expression, int p_stack_level,bool p_root=false,bool p_initializer=false);
Error _parse_block(CodeGen& codegen,const GDParser::BlockNode *p_block,int p_stack_level=0,int p_break_addr=-1,int p_continue_addr=-1);
Error _parse_function(GDScript *p_script,const GDParser::ClassNode *p_class,const GDParser::FunctionNode *p_func,bool p_for_ready=false);
- Error _parse_class(GDScript *p_script,GDScript *p_owner,const GDParser::ClassNode *p_class);
+ Error _parse_class(GDScript *p_script,GDScript *p_owner,const GDParser::ClassNode *p_class,bool p_keep_state);
int err_line;
int err_column;
StringName source;
@@ -152,7 +152,7 @@ class GDCompiler {
public:
- Error compile(const GDParser *p_parser,GDScript *p_script);
+ Error compile(const GDParser *p_parser, GDScript *p_script, bool p_keep_state=false);
String get_error() const;
int get_error_line() const;
diff --git a/modules/gdscript/gd_editor.cpp b/modules/gdscript/gd_editor.cpp
index ff19518ad5..7e5ff620c9 100644
--- a/modules/gdscript/gd_editor.cpp
+++ b/modules/gdscript/gd_editor.cpp
@@ -1310,9 +1310,9 @@ static void _find_identifiers_in_class(GDCompletionContext& context,bool p_stati
}
}
- for (const Map<StringName,GDFunction>::Element *E=script->get_member_functions().front();E;E=E->next()) {
- if (!p_static || E->get().is_static()) {
- if (E->get().get_argument_count())
+ for (const Map<StringName,GDFunction*>::Element *E=script->get_member_functions().front();E;E=E->next()) {
+ if (!p_static || E->get()->is_static()) {
+ if (E->get()->get_argument_count())
result.insert(E->key().operator String()+"(");
else
result.insert(E->key().operator String()+"()");
@@ -1536,10 +1536,10 @@ static void _find_type_arguments(const GDParser::Node*p_node,int p_line,const St
if (scr) {
while (scr) {
- for (const Map<StringName,GDFunction>::Element *E=scr->get_member_functions().front();E;E=E->next()) {
- if (E->get().is_static() && p_method==E->get().get_name()) {
+ for (const Map<StringName,GDFunction*>::Element *E=scr->get_member_functions().front();E;E=E->next()) {
+ if (E->get()->is_static() && p_method==E->get()->get_name()) {
arghint="static func "+String(p_method)+"(";
- for(int i=0;i<E->get().get_argument_count();i++) {
+ for(int i=0;i<E->get()->get_argument_count();i++) {
if (i>0)
arghint+=", ";
else
@@ -1547,12 +1547,12 @@ static void _find_type_arguments(const GDParser::Node*p_node,int p_line,const St
if (i==p_argidx) {
arghint+=String::chr(0xFFFF);
}
- arghint+="var "+E->get().get_argument_name(i);
- int deffrom = E->get().get_argument_count()-E->get().get_default_argument_count();
+ arghint+="var "+E->get()->get_argument_name(i);
+ int deffrom = E->get()->get_argument_count()-E->get()->get_default_argument_count();
if (i>=deffrom) {
int defidx = deffrom-i;
- if (defidx>=0 && defidx<E->get().get_default_argument_count()) {
- arghint+="="+E->get().get_default_argument(defidx).get_construct_string();
+ if (defidx>=0 && defidx<E->get()->get_default_argument_count()) {
+ arghint+="="+E->get()->get_default_argument(defidx).get_construct_string();
}
}
if (i==p_argidx) {
@@ -1670,10 +1670,10 @@ static void _find_type_arguments(const GDParser::Node*p_node,int p_line,const St
if (code=="") {
- for (const Map<StringName,GDFunction>::Element *E=scr->get_member_functions().front();E;E=E->next()) {
- if (p_method==E->get().get_name()) {
+ for (const Map<StringName,GDFunction*>::Element *E=scr->get_member_functions().front();E;E=E->next()) {
+ if (p_method==E->get()->get_name()) {
arghint="func "+String(p_method)+"(";
- for(int i=0;i<E->get().get_argument_count();i++) {
+ for(int i=0;i<E->get()->get_argument_count();i++) {
if (i>0)
arghint+=", ";
else
@@ -1681,12 +1681,12 @@ static void _find_type_arguments(const GDParser::Node*p_node,int p_line,const St
if (i==p_argidx) {
arghint+=String::chr(0xFFFF);
}
- arghint+="var "+E->get().get_argument_name(i);
- int deffrom = E->get().get_argument_count()-E->get().get_default_argument_count();
+ arghint+="var "+E->get()->get_argument_name(i);
+ int deffrom = E->get()->get_argument_count()-E->get()->get_default_argument_count();
if (i>=deffrom) {
int defidx = deffrom-i;
- if (defidx>=0 && defidx<E->get().get_default_argument_count()) {
- arghint+="="+E->get().get_default_argument(defidx).get_construct_string();
+ if (defidx>=0 && defidx<E->get()->get_default_argument_count()) {
+ arghint+="="+E->get()->get_default_argument(defidx).get_construct_string();
}
}
if (i==p_argidx) {
@@ -1926,16 +1926,16 @@ static void _find_call_arguments(GDCompletionContext& context,const GDParser::No
if (script.is_valid()) {
- for (const Map<StringName,GDFunction>::Element *E=script->get_member_functions().front();E;E=E->next()) {
+ for (const Map<StringName,GDFunction*>::Element *E=script->get_member_functions().front();E;E=E->next()) {
if (E->key()==id->name) {
- if (context.function && context.function->_static && !E->get().is_static())
+ if (context.function && context.function->_static && !E->get()->is_static())
continue;
arghint = "func "+id->name.operator String()+String("(");
- for(int i=0;i<E->get().get_argument_count();i++) {
+ for(int i=0;i<E->get()->get_argument_count();i++) {
if (i>0)
arghint+=", ";
else
@@ -1943,12 +1943,12 @@ static void _find_call_arguments(GDCompletionContext& context,const GDParser::No
if (i==p_argidx) {
arghint+=String::chr(0xFFFF);
}
- arghint+=E->get().get_argument_name(i);
- int deffrom = E->get().get_argument_count()-E->get().get_default_argument_count();
+ arghint+=E->get()->get_argument_name(i);
+ int deffrom = E->get()->get_argument_count()-E->get()->get_default_argument_count();
if (i>=deffrom) {
int defidx = deffrom-i;
- if (defidx>=0 && defidx<E->get().get_default_argument_count()) {
- arghint+="="+E->get().get_default_argument(defidx).get_construct_string();
+ if (defidx>=0 && defidx<E->get()->get_default_argument_count()) {
+ arghint+="="+E->get()->get_default_argument(defidx).get_construct_string();
}
}
if (i==p_argidx) {
@@ -1956,7 +1956,7 @@ static void _find_call_arguments(GDCompletionContext& context,const GDParser::No
}
}
- if (E->get().get_argument_count()>0)
+ if (E->get()->get_argument_count()>0)
arghint+=" ";
arghint+=")";
return;
@@ -2178,8 +2178,8 @@ Error GDScriptLanguage::complete_code(const String& p_code, const String& p_base
options.insert(E->key());
}
}
- for (const Map<StringName,GDFunction>::Element *E=scr->get_member_functions().front();E;E=E->next()) {
- if (E->get().is_static())
+ for (const Map<StringName,GDFunction*>::Element *E=scr->get_member_functions().front();E;E=E->next()) {
+ if (E->get()->is_static())
options.insert(E->key());
}
@@ -2266,8 +2266,8 @@ Error GDScriptLanguage::complete_code(const String& p_code, const String& p_base
options.insert(E->key());
}
}
- for (const Map<StringName,GDFunction>::Element *E=scr->get_member_functions().front();E;E=E->next()) {
- if (E->get().get_argument_count())
+ for (const Map<StringName,GDFunction*>::Element *E=scr->get_member_functions().front();E;E=E->next()) {
+ if (E->get()->get_argument_count())
options.insert(String(E->key())+"()");
else
options.insert(String(E->key())+"(");
diff --git a/modules/gdscript/gd_function.cpp b/modules/gdscript/gd_function.cpp
new file mode 100644
index 0000000000..04522aadc2
--- /dev/null
+++ b/modules/gdscript/gd_function.cpp
@@ -0,0 +1,1429 @@
+#include "gd_function.h"
+#include "gd_script.h"
+#include "os/os.h"
+#include "gd_functions.h"
+
+Variant *GDFunction::_get_variant(int p_address,GDInstance *p_instance,GDScript *p_script,Variant &self, Variant *p_stack,String& r_error) const{
+
+ int address = p_address&ADDR_MASK;
+
+ //sequential table (jump table generated by compiler)
+ switch((p_address&ADDR_TYPE_MASK)>>ADDR_BITS) {
+
+ case ADDR_TYPE_SELF: {
+
+ if (!p_instance) {
+ r_error="Cannot access self without instance.";
+ return NULL;
+ }
+ return &self;
+ } break;
+ case ADDR_TYPE_CLASS: {
+
+ return &p_script->_static_ref;
+ } break;
+ case ADDR_TYPE_MEMBER: {
+ //member indexing is O(1)
+ if (!p_instance) {
+ r_error="Cannot access member without instance.";
+ return NULL;
+ }
+ return &p_instance->members[address];
+ } break;
+ case ADDR_TYPE_CLASS_CONSTANT: {
+
+ //todo change to index!
+ GDScript *o=p_script;
+ ERR_FAIL_INDEX_V(address,_global_names_count,NULL);
+ const StringName *sn = &_global_names_ptr[address];
+
+ while(o) {
+ GDScript *s=o;
+ while(s) {
+
+ Map<StringName,Variant>::Element *E=s->constants.find(*sn);
+ if (E) {
+ return &E->get();
+ }
+ s=s->_base;
+ }
+ o=o->_owner;
+ }
+
+
+ ERR_EXPLAIN("GDCompiler bug..");
+ ERR_FAIL_V(NULL);
+ } break;
+ case ADDR_TYPE_LOCAL_CONSTANT: {
+ ERR_FAIL_INDEX_V(address,_constant_count,NULL);
+ return &_constants_ptr[address];
+ } break;
+ case ADDR_TYPE_STACK:
+ case ADDR_TYPE_STACK_VARIABLE: {
+ ERR_FAIL_INDEX_V(address,_stack_size,NULL);
+ return &p_stack[address];
+ } break;
+ case ADDR_TYPE_GLOBAL: {
+
+
+ ERR_FAIL_INDEX_V(address,GDScriptLanguage::get_singleton()->get_global_array_size(),NULL);
+
+
+ return &GDScriptLanguage::get_singleton()->get_global_array()[address];
+ } break;
+ case ADDR_TYPE_NIL: {
+ return &nil;
+ } break;
+ }
+
+ ERR_EXPLAIN("Bad Code! (Addressing Mode)");
+ ERR_FAIL_V(NULL);
+ return NULL;
+}
+
+
+String GDFunction::_get_call_error(const Variant::CallError& p_err, const String& p_where,const Variant**argptrs) const {
+
+
+
+ String err_text;
+
+ if (p_err.error==Variant::CallError::CALL_ERROR_INVALID_ARGUMENT) {
+ int errorarg=p_err.argument;
+ err_text="Invalid type in "+p_where+". Cannot convert argument "+itos(errorarg+1)+" from "+Variant::get_type_name(argptrs[errorarg]->get_type())+" to "+Variant::get_type_name(p_err.expected)+".";
+ } else if (p_err.error==Variant::CallError::CALL_ERROR_TOO_MANY_ARGUMENTS) {
+ err_text="Invalid call to "+p_where+". Expected "+itos(p_err.argument)+" arguments.";
+ } else if (p_err.error==Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS) {
+ err_text="Invalid call to "+p_where+". Expected "+itos(p_err.argument)+" arguments.";
+ } else if (p_err.error==Variant::CallError::CALL_ERROR_INVALID_METHOD) {
+ err_text="Invalid call. Nonexistent "+p_where+".";
+ } else if (p_err.error==Variant::CallError::CALL_ERROR_INSTANCE_IS_NULL) {
+ err_text="Attempt to call "+p_where+" on a null instance.";
+ } else {
+ err_text="Bug, call error: #"+itos(p_err.error);
+ }
+
+ return err_text;
+
+}
+
+static String _get_var_type(const Variant* p_type) {
+
+ String basestr;
+
+ if (p_type->get_type()==Variant::OBJECT) {
+ Object *bobj = *p_type;
+ if (!bobj) {
+ basestr = "null instance";
+ } else {
+#ifdef DEBUG_ENABLED
+ if (ObjectDB::instance_validate(bobj)) {
+ if (bobj->get_script_instance())
+ basestr= bobj->get_type()+" ("+bobj->get_script_instance()->get_script()->get_path().get_file()+")";
+ else
+ basestr = bobj->get_type();
+ } else {
+ basestr="previously freed instance";
+ }
+
+#else
+ basestr="Object";
+#endif
+ }
+
+ } else {
+ basestr = Variant::get_type_name(p_type->get_type());
+ }
+
+ return basestr;
+
+}
+
+Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_argcount, Variant::CallError& r_err, CallState *p_state) {
+
+
+ if (!_code_ptr) {
+
+ return Variant();
+ }
+
+ r_err.error=Variant::CallError::CALL_OK;
+
+ Variant self;
+ Variant retvalue;
+ Variant *stack = NULL;
+ Variant **call_args;
+ int defarg=0;
+
+#ifdef DEBUG_ENABLED
+
+ //GDScriptLanguage::get_singleton()->calls++;
+
+#endif
+
+ uint32_t alloca_size=0;
+ GDScript *_class;
+ int ip=0;
+ int line=_initial_line;
+
+
+
+ if (p_state) {
+ //use existing (supplied) state (yielded)
+ stack=(Variant*)p_state->stack.ptr();
+ call_args=(Variant**)&p_state->stack[sizeof(Variant)*p_state->stack_size];
+ line=p_state->line;
+ ip=p_state->ip;
+ alloca_size=p_state->stack.size();
+ _class=p_state->_class;
+ p_instance=p_state->instance;
+ defarg=p_state->defarg;
+ self=p_state->self;
+ //stack[p_state->result_pos]=p_state->result; //assign stack with result
+
+ } else {
+
+ if (p_argcount!=_argument_count) {
+
+ if (p_argcount>_argument_count) {
+
+ r_err.error=Variant::CallError::CALL_ERROR_TOO_MANY_ARGUMENTS;
+ r_err.argument=_argument_count;
+
+
+ return Variant();
+ } else if (p_argcount < _argument_count - _default_arg_count) {
+
+ r_err.error=Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;
+ r_err.argument=_argument_count - _default_arg_count;
+ return Variant();
+ } else {
+
+ defarg=_argument_count-p_argcount;
+ }
+ }
+
+ alloca_size = sizeof(Variant*)*_call_size + sizeof(Variant)*_stack_size;
+
+ if (alloca_size) {
+
+ uint8_t *aptr = (uint8_t*)alloca(alloca_size);
+
+ if (_stack_size) {
+
+ stack=(Variant*)aptr;
+ for(int i=0;i<p_argcount;i++)
+ memnew_placement(&stack[i],Variant(*p_args[i]));
+ for(int i=p_argcount;i<_stack_size;i++)
+ memnew_placement(&stack[i],Variant);
+ } else {
+ stack=NULL;
+ }
+
+ if (_call_size) {
+
+ call_args = (Variant**)&aptr[sizeof(Variant)*_stack_size];
+ } else {
+
+ call_args=NULL;
+ }
+
+
+ } else {
+ stack=NULL;
+ call_args=NULL;
+ }
+
+ if (p_instance) {
+ if (p_instance->base_ref && static_cast<Reference*>(p_instance->owner)->is_referenced()) {
+
+ self=REF(static_cast<Reference*>(p_instance->owner));
+ } else {
+ self=p_instance->owner;
+ }
+ _class=p_instance->script.ptr();
+ } else {
+ _class=_script;
+ }
+ }
+
+ String err_text;
+
+#ifdef DEBUG_ENABLED
+
+ if (ScriptDebugger::get_singleton())
+ GDScriptLanguage::get_singleton()->enter_function(p_instance,this,stack,&ip,&line);
+
+#define CHECK_SPACE(m_space)\
+ ERR_BREAK((ip+m_space)>_code_size)
+
+#define GET_VARIANT_PTR(m_v,m_code_ofs) \
+ Variant *m_v; \
+ m_v = _get_variant(_code_ptr[ip+m_code_ofs],p_instance,_class,self,stack,err_text);\
+ if (!m_v)\
+ break;
+
+
+#else
+#define CHECK_SPACE(m_space)
+#define GET_VARIANT_PTR(m_v,m_code_ofs) \
+ Variant *m_v; \
+ m_v = _get_variant(_code_ptr[ip+m_code_ofs],p_instance,_class,self,stack,err_text);
+
+#endif
+
+
+#ifdef DEBUG_ENABLED
+
+ uint64_t function_start_time;
+ uint64_t function_call_time;
+
+ if (GDScriptLanguage::get_singleton()->profiling) {
+ function_start_time=OS::get_singleton()->get_ticks_usec();
+ function_call_time=0;
+ profile.call_count++;
+ profile.frame_call_count++;
+ }
+#endif
+ bool exit_ok=false;
+
+ while(ip<_code_size) {
+
+
+ int last_opcode=_code_ptr[ip];
+ switch(_code_ptr[ip]) {
+
+ case OPCODE_OPERATOR: {
+
+ CHECK_SPACE(5);
+
+ bool valid;
+ Variant::Operator op = (Variant::Operator)_code_ptr[ip+1];
+ ERR_BREAK(op>=Variant::OP_MAX);
+
+ GET_VARIANT_PTR(a,2);
+ GET_VARIANT_PTR(b,3);
+ GET_VARIANT_PTR(dst,4);
+
+#ifdef DEBUG_ENABLED
+ Variant ret;
+ Variant::evaluate(op,*a,*b,ret,valid);
+#else
+ Variant::evaluate(op,*a,*b,*dst,valid);
+#endif
+
+ if (!valid) {
+#ifdef DEBUG_ENABLED
+
+ if (ret.get_type()==Variant::STRING) {
+ //return a string when invalid with the error
+ err_text=ret;
+ err_text += " in operator '"+Variant::get_operator_name(op)+"'.";
+ } else {
+ err_text="Invalid operands '"+Variant::get_type_name(a->get_type())+"' and '"+Variant::get_type_name(b->get_type())+"' in operator '"+Variant::get_operator_name(op)+"'.";
+ }
+#endif
+ break;
+
+ }
+#ifdef DEBUG_ENABLED
+ *dst=ret;
+#endif
+
+ ip+=5;
+
+ } continue;
+ case OPCODE_EXTENDS_TEST: {
+
+ CHECK_SPACE(4);
+
+ GET_VARIANT_PTR(a,1);
+ GET_VARIANT_PTR(b,2);
+ GET_VARIANT_PTR(dst,3);
+
+#ifdef DEBUG_ENABLED
+
+ if (a->get_type()!=Variant::OBJECT || a->operator Object*()==NULL) {
+
+ err_text="Left operand of 'extends' is not an instance of anything.";
+ break;
+
+ }
+ if (b->get_type()!=Variant::OBJECT || b->operator Object*()==NULL) {
+
+ err_text="Right operand of 'extends' is not a class.";
+ break;
+
+ }
+#endif
+
+
+ Object *obj_A = *a;
+ Object *obj_B = *b;
+
+
+ GDScript *scr_B = obj_B->cast_to<GDScript>();
+
+ bool extends_ok=false;
+
+ if (scr_B) {
+ //if B is a script, the only valid condition is that A has an instance which inherits from the script
+ //in other situation, this shoul return false.
+
+ if (obj_A->get_script_instance() && obj_A->get_script_instance()->get_language()==GDScriptLanguage::get_singleton()) {
+
+ GDInstance *ins = static_cast<GDInstance*>(obj_A->get_script_instance());
+ GDScript *cmp = ins->script.ptr();
+ //bool found=false;
+ while(cmp) {
+
+ if (cmp==scr_B) {
+ //inherits from script, all ok
+ extends_ok=true;
+ break;
+
+ }
+
+ cmp=cmp->_base;
+ }
+
+ }
+
+
+ } else {
+
+ GDNativeClass *nc= obj_B->cast_to<GDNativeClass>();
+
+ if (!nc) {
+
+ err_text="Right operand of 'extends' is not a class (type: '"+obj_B->get_type()+"').";
+ break;
+ }
+
+ extends_ok=ObjectTypeDB::is_type(obj_A->get_type_name(),nc->get_name());
+ }
+
+ *dst=extends_ok;
+ ip+=4;
+
+ } continue;
+ case OPCODE_SET: {
+
+ CHECK_SPACE(3);
+
+ GET_VARIANT_PTR(dst,1);
+ GET_VARIANT_PTR(index,2);
+ GET_VARIANT_PTR(value,3);
+
+ bool valid;
+ dst->set(*index,*value,&valid);
+
+ if (!valid) {
+ String v = index->operator String();
+ if (v!="") {
+ v="'"+v+"'";
+ } else {
+ v="of type '"+_get_var_type(index)+"'";
+ }
+ err_text="Invalid set index "+v+" (on base: '"+_get_var_type(dst)+"').";
+ break;
+ }
+
+ ip+=4;
+ } continue;
+ case OPCODE_GET: {
+
+ CHECK_SPACE(3);
+
+ GET_VARIANT_PTR(src,1);
+ GET_VARIANT_PTR(index,2);
+ GET_VARIANT_PTR(dst,3);
+
+ bool valid;
+#ifdef DEBUG_ENABLED
+ //allow better error message in cases where src and dst are the same stack position
+ Variant ret = src->get(*index,&valid);
+#else
+ *dst = src->get(*index,&valid);
+
+#endif
+ if (!valid) {
+ String v = index->operator String();
+ if (v!="") {
+ v="'"+v+"'";
+ } else {
+ v="of type '"+_get_var_type(index)+"'";
+ }
+ err_text="Invalid get index "+v+" (on base: '"+_get_var_type(src)+"').";
+ break;
+ }
+#ifdef DEBUG_ENABLED
+ *dst=ret;
+#endif
+ ip+=4;
+ } continue;
+ case OPCODE_SET_NAMED: {
+
+ CHECK_SPACE(3);
+
+ GET_VARIANT_PTR(dst,1);
+ GET_VARIANT_PTR(value,3);
+
+ int indexname = _code_ptr[ip+2];
+
+ ERR_BREAK(indexname<0 || indexname>=_global_names_count);
+ const StringName *index = &_global_names_ptr[indexname];
+
+ bool valid;
+ dst->set_named(*index,*value,&valid);
+
+ if (!valid) {
+ String err_type;
+ err_text="Invalid set index '"+String(*index)+"' (on base: '"+_get_var_type(dst)+"').";
+ break;
+ }
+
+ ip+=4;
+ } continue;
+ case OPCODE_GET_NAMED: {
+
+
+ CHECK_SPACE(3);
+
+ GET_VARIANT_PTR(src,1);
+ GET_VARIANT_PTR(dst,3);
+
+ int indexname = _code_ptr[ip+2];
+
+ ERR_BREAK(indexname<0 || indexname>=_global_names_count);
+ const StringName *index = &_global_names_ptr[indexname];
+
+ bool valid;
+#ifdef DEBUG_ENABLED
+ //allow better error message in cases where src and dst are the same stack position
+ Variant ret = src->get_named(*index,&valid);
+
+#else
+ *dst = src->get_named(*index,&valid);
+#endif
+
+ if (!valid) {
+ if (src->has_method(*index)) {
+ err_text="Invalid get index '"+index->operator String()+"' (on base: '"+_get_var_type(src)+"'). Did you mean '."+index->operator String()+"()' ?";
+ } else {
+ err_text="Invalid get index '"+index->operator String()+"' (on base: '"+_get_var_type(src)+"').";
+ }
+ break;
+ }
+#ifdef DEBUG_ENABLED
+ *dst=ret;
+#endif
+ ip+=4;
+ } continue;
+ case OPCODE_ASSIGN: {
+
+ CHECK_SPACE(3);
+ GET_VARIANT_PTR(dst,1);
+ GET_VARIANT_PTR(src,2);
+
+ *dst = *src;
+
+ ip+=3;
+
+ } continue;
+ case OPCODE_ASSIGN_TRUE: {
+
+ CHECK_SPACE(2);
+ GET_VARIANT_PTR(dst,1);
+
+ *dst = true;
+
+ ip+=2;
+ } continue;
+ case OPCODE_ASSIGN_FALSE: {
+
+ CHECK_SPACE(2);
+ GET_VARIANT_PTR(dst,1);
+
+ *dst = false;
+
+ ip+=2;
+ } continue;
+ case OPCODE_CONSTRUCT: {
+
+ CHECK_SPACE(2);
+ Variant::Type t=Variant::Type(_code_ptr[ip+1]);
+ int argc=_code_ptr[ip+2];
+ CHECK_SPACE(argc+2);
+ Variant **argptrs = call_args;
+ for(int i=0;i<argc;i++) {
+ GET_VARIANT_PTR(v,3+i);
+ argptrs[i]=v;
+ }
+
+ GET_VARIANT_PTR(dst,3+argc);
+ Variant::CallError err;
+ *dst = Variant::construct(t,(const Variant**)argptrs,argc,err);
+
+ if (err.error!=Variant::CallError::CALL_OK) {
+
+ err_text=_get_call_error(err,"'"+Variant::get_type_name(t)+"' constructor",(const Variant**)argptrs);
+ break;
+ }
+
+ ip+=4+argc;
+ //construct a basic type
+ } continue;
+ case OPCODE_CONSTRUCT_ARRAY: {
+
+ CHECK_SPACE(1);
+ int argc=_code_ptr[ip+1];
+ Array array(true); //arrays are always shared
+ array.resize(argc);
+ CHECK_SPACE(argc+2);
+
+ for(int i=0;i<argc;i++) {
+ GET_VARIANT_PTR(v,2+i);
+ array[i]=*v;
+
+ }
+
+ GET_VARIANT_PTR(dst,2+argc);
+
+ *dst=array;
+
+ ip+=3+argc;
+
+ } continue;
+ case OPCODE_CONSTRUCT_DICTIONARY: {
+
+ CHECK_SPACE(1);
+ int argc=_code_ptr[ip+1];
+ Dictionary dict(true); //arrays are always shared
+
+ CHECK_SPACE(argc*2+2);
+
+ for(int i=0;i<argc;i++) {
+
+ GET_VARIANT_PTR(k,2+i*2+0);
+ GET_VARIANT_PTR(v,2+i*2+1);
+ dict[*k]=*v;
+
+ }
+
+ GET_VARIANT_PTR(dst,2+argc*2);
+
+ *dst=dict;
+
+ ip+=3+argc*2;
+
+ } continue;
+ case OPCODE_CALL_RETURN:
+ case OPCODE_CALL: {
+
+
+ CHECK_SPACE(4);
+ bool call_ret = _code_ptr[ip]==OPCODE_CALL_RETURN;
+
+ int argc=_code_ptr[ip+1];
+ GET_VARIANT_PTR(base,2);
+ int nameg=_code_ptr[ip+3];
+
+ ERR_BREAK(nameg<0 || nameg>=_global_names_count);
+ const StringName *methodname = &_global_names_ptr[nameg];
+
+ ERR_BREAK(argc<0);
+ ip+=4;
+ CHECK_SPACE(argc+1);
+ Variant **argptrs = call_args;
+
+ for(int i=0;i<argc;i++) {
+ GET_VARIANT_PTR(v,i);
+ argptrs[i]=v;
+ }
+
+#ifdef DEBUG_ENABLED
+ uint64_t call_time;
+
+ if (GDScriptLanguage::get_singleton()->profiling) {
+ call_time=OS::get_singleton()->get_ticks_usec();
+ }
+
+#endif
+ Variant::CallError err;
+ if (call_ret) {
+
+ GET_VARIANT_PTR(ret,argc);
+ *ret = base->call(*methodname,(const Variant**)argptrs,argc,err);
+ } else {
+
+ base->call(*methodname,(const Variant**)argptrs,argc,err);
+ }
+#ifdef DEBUG_ENABLED
+ if (GDScriptLanguage::get_singleton()->profiling) {
+ function_call_time+=OS::get_singleton()->get_ticks_usec() - call_time;
+ }
+#endif
+
+ if (err.error!=Variant::CallError::CALL_OK) {
+
+
+ String methodstr = *methodname;
+ String basestr = _get_var_type(base);
+
+ if (methodstr=="call") {
+ if (argc>=1) {
+ methodstr=String(*argptrs[0])+" (via call)";
+ if (err.error==Variant::CallError::CALL_ERROR_INVALID_ARGUMENT) {
+ err.argument-=1;
+ }
+ }
+ } if (methodstr=="free") {
+
+ if (err.error==Variant::CallError::CALL_ERROR_INVALID_METHOD) {
+
+ if (base->is_ref()) {
+ err_text="Attempted to free a reference.";
+ break;
+ } else if (base->get_type()==Variant::OBJECT) {
+
+ err_text="Attempted to free a locked object (calling or emitting).";
+ break;
+ }
+ }
+ }
+ err_text=_get_call_error(err,"function '"+methodstr+"' in base '"+basestr+"'",(const Variant**)argptrs);
+ break;
+ }
+
+ //_call_func(NULL,base,*methodname,ip,argc,p_instance,stack);
+ ip+=argc+1;
+
+ } continue;
+ case OPCODE_CALL_BUILT_IN: {
+
+ CHECK_SPACE(4);
+
+ GDFunctions::Function func = GDFunctions::Function(_code_ptr[ip+1]);
+ int argc=_code_ptr[ip+2];
+ ERR_BREAK(argc<0);
+
+ ip+=3;
+ CHECK_SPACE(argc+1);
+ Variant **argptrs = call_args;
+
+ for(int i=0;i<argc;i++) {
+ GET_VARIANT_PTR(v,i);
+ argptrs[i]=v;
+ }
+
+ GET_VARIANT_PTR(dst,argc);
+
+ Variant::CallError err;
+
+ GDFunctions::call(func,(const Variant**)argptrs,argc,*dst,err);
+
+ if (err.error!=Variant::CallError::CALL_OK) {
+
+
+ String methodstr = GDFunctions::get_func_name(func);
+ err_text=_get_call_error(err,"built-in function '"+methodstr+"'",(const Variant**)argptrs);
+ break;
+ }
+ ip+=argc+1;
+
+ } continue;
+ case OPCODE_CALL_SELF: {
+
+
+ } break;
+ case OPCODE_CALL_SELF_BASE: {
+
+ CHECK_SPACE(2);
+ int self_fun = _code_ptr[ip+1];
+#ifdef DEBUG_ENABLED
+
+ if (self_fun<0 || self_fun>=_global_names_count) {
+
+ err_text="compiler bug, function name not found";
+ break;
+ }
+#endif
+ const StringName *methodname = &_global_names_ptr[self_fun];
+
+ int argc=_code_ptr[ip+2];
+
+ CHECK_SPACE(2+argc+1);
+
+ Variant **argptrs = call_args;
+
+ for(int i=0;i<argc;i++) {
+ GET_VARIANT_PTR(v,i+3);
+ argptrs[i]=v;
+ }
+
+ GET_VARIANT_PTR(dst,argc+3);
+
+ const GDScript *gds = _script;
+
+
+ const Map<StringName,GDFunction*>::Element *E=NULL;
+ while (gds->base.ptr()) {
+ gds=gds->base.ptr();
+ E=gds->member_functions.find(*methodname);
+ if (E)
+ break;
+ }
+
+ Variant::CallError err;
+
+ if (E) {
+
+ *dst=E->get()->call(p_instance,(const Variant**)argptrs,argc,err);
+ } else if (gds->native.ptr()) {
+
+ if (*methodname!=GDScriptLanguage::get_singleton()->strings._init) {
+
+ MethodBind *mb = ObjectTypeDB::get_method(gds->native->get_name(),*methodname);
+ if (!mb) {
+ err.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
+ } else {
+ *dst=mb->call(p_instance->owner,(const Variant**)argptrs,argc,err);
+ }
+ } else {
+ err.error=Variant::CallError::CALL_OK;
+ }
+ } else {
+
+ if (*methodname!=GDScriptLanguage::get_singleton()->strings._init) {
+ err.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
+ } else {
+ err.error=Variant::CallError::CALL_OK;
+ }
+ }
+
+
+ if (err.error!=Variant::CallError::CALL_OK) {
+
+
+ String methodstr = *methodname;
+ err_text=_get_call_error(err,"function '"+methodstr+"'",(const Variant**)argptrs);
+
+ break;
+ }
+
+ ip+=4+argc;
+
+ } continue;
+ case OPCODE_YIELD:
+ case OPCODE_YIELD_SIGNAL: {
+
+ int ipofs=1;
+ if (_code_ptr[ip]==OPCODE_YIELD_SIGNAL) {
+ CHECK_SPACE(4);
+ ipofs+=2;
+ } else {
+ CHECK_SPACE(2);
+
+ }
+
+ Ref<GDFunctionState> gdfs = memnew( GDFunctionState );
+ gdfs->function=this;
+
+ gdfs->state.stack.resize(alloca_size);
+ //copy variant stack
+ for(int i=0;i<_stack_size;i++) {
+ memnew_placement(&gdfs->state.stack[sizeof(Variant)*i],Variant(stack[i]));
+ }
+ gdfs->state.stack_size=_stack_size;
+ gdfs->state.self=self;
+ gdfs->state.alloca_size=alloca_size;
+ gdfs->state._class=_class;
+ gdfs->state.ip=ip+ipofs;
+ gdfs->state.line=line;
+ //gdfs->state.result_pos=ip+ipofs-1;
+ gdfs->state.defarg=defarg;
+ gdfs->state.instance=p_instance;
+ gdfs->function=this;
+
+ retvalue=gdfs;
+
+ if (_code_ptr[ip]==OPCODE_YIELD_SIGNAL) {
+ GET_VARIANT_PTR(argobj,1);
+ GET_VARIANT_PTR(argname,2);
+ //do the oneshot connect
+
+ if (argobj->get_type()!=Variant::OBJECT) {
+ err_text="First argument of yield() not of type object.";
+ break;
+ }
+ if (argname->get_type()!=Variant::STRING) {
+ err_text="Second argument of yield() not a string (for signal name).";
+ break;
+ }
+ Object *obj=argobj->operator Object *();
+ String signal = argname->operator String();
+#ifdef DEBUG_ENABLED
+
+ if (!obj) {
+ err_text="First argument of yield() is null.";
+ break;
+ }
+ if (ScriptDebugger::get_singleton()) {
+ if (!ObjectDB::instance_validate(obj)) {
+ err_text="First argument of yield() is a previously freed instance.";
+ break;
+ }
+ }
+ if (signal.length()==0) {
+
+ err_text="Second argument of yield() is an empty string (for signal name).";
+ break;
+ }
+
+#endif
+ Error err = obj->connect(signal,gdfs.ptr(),"_signal_callback",varray(gdfs),Object::CONNECT_ONESHOT);
+ if (err!=OK) {
+ err_text="Error connecting to signal: "+signal+" during yield().";
+ break;
+ }
+
+
+ }
+
+ exit_ok=true;
+
+ } break;
+ case OPCODE_YIELD_RESUME: {
+
+ CHECK_SPACE(2);
+ if (!p_state) {
+ err_text=("Invalid Resume (bug?)");
+ break;
+ }
+ GET_VARIANT_PTR(result,1);
+ *result=p_state->result;
+ ip+=2;
+
+ } continue;
+ case OPCODE_JUMP: {
+
+ CHECK_SPACE(2);
+ int to = _code_ptr[ip+1];
+
+ ERR_BREAK(to<0 || to>_code_size);
+ ip=to;
+
+ } continue;
+ case OPCODE_JUMP_IF: {
+
+ CHECK_SPACE(3);
+
+ GET_VARIANT_PTR(test,1);
+
+ bool valid;
+ bool result = test->booleanize(valid);
+#ifdef DEBUG_ENABLED
+ if (!valid) {
+
+ err_text="cannot evaluate conditional expression of type: "+Variant::get_type_name(test->get_type());
+ break;
+ }
+#endif
+ if (result) {
+ int to = _code_ptr[ip+2];
+ ERR_BREAK(to<0 || to>_code_size);
+ ip=to;
+ continue;
+ }
+ ip+=3;
+ } continue;
+ case OPCODE_JUMP_IF_NOT: {
+
+ CHECK_SPACE(3);
+
+ GET_VARIANT_PTR(test,1);
+
+ bool valid;
+ bool result = test->booleanize(valid);
+#ifdef DEBUG_ENABLED
+ if (!valid) {
+
+ err_text="cannot evaluate conditional expression of type: "+Variant::get_type_name(test->get_type());
+ break;
+ }
+#endif
+ if (!result) {
+ int to = _code_ptr[ip+2];
+ ERR_BREAK(to<0 || to>_code_size);
+ ip=to;
+ continue;
+ }
+ ip+=3;
+ } continue;
+ case OPCODE_JUMP_TO_DEF_ARGUMENT: {
+
+ CHECK_SPACE(2);
+ ip=_default_arg_ptr[defarg];
+
+ } continue;
+ case OPCODE_RETURN: {
+
+ CHECK_SPACE(2);
+ GET_VARIANT_PTR(r,1);
+ retvalue=*r;
+ exit_ok=true;
+
+ } break;
+ case OPCODE_ITERATE_BEGIN: {
+
+ CHECK_SPACE(8); //space for this an regular iterate
+
+ GET_VARIANT_PTR(counter,1);
+ GET_VARIANT_PTR(container,2);
+
+ bool valid;
+ if (!container->iter_init(*counter,valid)) {
+ if (!valid) {
+ err_text="Unable to iterate on object of type "+Variant::get_type_name(container->get_type())+"'.";
+ break;
+ }
+ int jumpto=_code_ptr[ip+3];
+ ERR_BREAK(jumpto<0 || jumpto>_code_size);
+ ip=jumpto;
+ continue;
+ }
+ GET_VARIANT_PTR(iterator,4);
+
+
+ *iterator=container->iter_get(*counter,valid);
+ if (!valid) {
+ err_text="Unable to obtain iterator object of type "+Variant::get_type_name(container->get_type())+"'.";
+ break;
+ }
+
+
+ ip+=5; //skip regular iterate which is always next
+
+ } continue;
+ case OPCODE_ITERATE: {
+
+ CHECK_SPACE(4);
+
+ GET_VARIANT_PTR(counter,1);
+ GET_VARIANT_PTR(container,2);
+
+ bool valid;
+ if (!container->iter_next(*counter,valid)) {
+ if (!valid) {
+ err_text="Unable to iterate on object of type "+Variant::get_type_name(container->get_type())+"' (type changed since first iteration?).";
+ break;
+ }
+ int jumpto=_code_ptr[ip+3];
+ ERR_BREAK(jumpto<0 || jumpto>_code_size);
+ ip=jumpto;
+ continue;
+ }
+ GET_VARIANT_PTR(iterator,4);
+
+ *iterator=container->iter_get(*counter,valid);
+ if (!valid) {
+ err_text="Unable to obtain iterator object of type "+Variant::get_type_name(container->get_type())+"' (but was obtained on first iteration?).";
+ break;
+ }
+
+ ip+=5; //loop again
+ } continue;
+ case OPCODE_ASSERT: {
+ CHECK_SPACE(2);
+ GET_VARIANT_PTR(test,1);
+
+#ifdef DEBUG_ENABLED
+ bool valid;
+ bool result = test->booleanize(valid);
+
+
+ if (!valid) {
+
+ err_text="cannot evaluate conditional expression of type: "+Variant::get_type_name(test->get_type());
+ break;
+ }
+
+
+ if (!result) {
+
+ err_text="Assertion failed.";
+ break;
+ }
+
+#endif
+
+ ip+=2;
+ } continue;
+ case OPCODE_BREAKPOINT: {
+#ifdef DEBUG_ENABLED
+ if (ScriptDebugger::get_singleton()) {
+ GDScriptLanguage::get_singleton()->debug_break("Breakpoint Statement",true);
+ }
+#endif
+ ip+=1;
+ } continue;
+ case OPCODE_LINE: {
+ CHECK_SPACE(2);
+
+ line=_code_ptr[ip+1];
+ ip+=2;
+
+ if (ScriptDebugger::get_singleton()) {
+ // line
+ bool do_break=false;
+
+ if (ScriptDebugger::get_singleton()->get_lines_left()>0) {
+
+ if (ScriptDebugger::get_singleton()->get_depth()<=0)
+ ScriptDebugger::get_singleton()->set_lines_left( ScriptDebugger::get_singleton()->get_lines_left() -1 );
+ if (ScriptDebugger::get_singleton()->get_lines_left()<=0)
+ do_break=true;
+ }
+
+ if (ScriptDebugger::get_singleton()->is_breakpoint(line,source))
+ do_break=true;
+
+ if (do_break) {
+ GDScriptLanguage::get_singleton()->debug_break("Breakpoint",true);
+ }
+
+ ScriptDebugger::get_singleton()->line_poll();
+
+ }
+ } continue;
+ case OPCODE_END: {
+
+ exit_ok=true;
+ break;
+
+ } break;
+ default: {
+
+ err_text="Illegal opcode "+itos(_code_ptr[ip])+" at address "+itos(ip);
+ } break;
+
+ }
+
+ if (exit_ok)
+ break;
+ //error
+ // function, file, line, error, explanation
+ String err_file;
+ if (p_instance)
+ err_file=p_instance->script->path;
+ else if (_class)
+ err_file=_class->path;
+ if (err_file=="")
+ err_file="<built-in>";
+ String err_func = name;
+ if (p_instance && p_instance->script->name!="")
+ err_func=p_instance->script->name+"."+err_func;
+ int err_line=line;
+ if (err_text=="") {
+ err_text="Internal Script Error! - opcode #"+itos(last_opcode)+" (report please).";
+ }
+
+ if (!GDScriptLanguage::get_singleton()->debug_break(err_text,false)) {
+ // debugger break did not happen
+
+ _err_print_error(err_func.utf8().get_data(),err_file.utf8().get_data(),err_line,err_text.utf8().get_data(),ERR_HANDLER_SCRIPT);
+ }
+
+
+ break;
+ }
+
+#ifdef DEBUG_ENABLED
+ if (GDScriptLanguage::get_singleton()->profiling) {
+ uint64_t time_taken = OS::get_singleton()->get_ticks_usec() - function_start_time;
+ profile.total_time+=time_taken;
+ profile.self_time+=time_taken-function_call_time;
+ profile.frame_total_time+=time_taken;
+ profile.frame_self_time+=time_taken-function_call_time;
+ GDScriptLanguage::get_singleton()->script_frame_time+=time_taken-function_call_time;
+
+ }
+
+#endif
+ if (ScriptDebugger::get_singleton())
+ GDScriptLanguage::get_singleton()->exit_function();
+
+
+ if (_stack_size) {
+ //free stack
+ for(int i=0;i<_stack_size;i++)
+ stack[i].~Variant();
+ }
+
+ return retvalue;
+
+}
+
+const int* GDFunction::get_code() const {
+
+ return _code_ptr;
+}
+int GDFunction::get_code_size() const{
+
+ return _code_size;
+}
+
+Variant GDFunction::get_constant(int p_idx) const {
+
+ ERR_FAIL_INDEX_V(p_idx,constants.size(),"<errconst>");
+ return constants[p_idx];
+}
+
+StringName GDFunction::get_global_name(int p_idx) const {
+
+ ERR_FAIL_INDEX_V(p_idx,global_names.size(),"<errgname>");
+ return global_names[p_idx];
+}
+
+int GDFunction::get_default_argument_count() const {
+
+ return default_arguments.size();
+}
+int GDFunction::get_default_argument_addr(int p_arg) const{
+
+ ERR_FAIL_INDEX_V(p_arg,default_arguments.size(),-1);
+ return default_arguments[p_arg];
+}
+
+
+StringName GDFunction::get_name() const {
+
+ return name;
+}
+
+int GDFunction::get_max_stack_size() const {
+
+ return _stack_size;
+}
+
+struct _GDFKC {
+
+ int order;
+ List<int> pos;
+};
+
+struct _GDFKCS {
+
+ int order;
+ StringName id;
+ int pos;
+
+ bool operator<(const _GDFKCS &p_r) const {
+
+ return order<p_r.order;
+ }
+};
+
+void GDFunction::debug_get_stack_member_state(int p_line,List<Pair<StringName,int> > *r_stackvars) const {
+
+
+ int oc=0;
+ Map<StringName,_GDFKC> sdmap;
+ for( const List<StackDebug>::Element *E=stack_debug.front();E;E=E->next()) {
+
+ const StackDebug &sd=E->get();
+ if (sd.line>p_line)
+ break;
+
+ if (sd.added) {
+
+ if (!sdmap.has(sd.identifier)) {
+ _GDFKC d;
+ d.order=oc++;
+ d.pos.push_back(sd.pos);
+ sdmap[sd.identifier]=d;
+
+ } else {
+ sdmap[sd.identifier].pos.push_back(sd.pos);
+ }
+ } else {
+
+
+ ERR_CONTINUE(!sdmap.has(sd.identifier));
+
+ sdmap[sd.identifier].pos.pop_back();
+ if (sdmap[sd.identifier].pos.empty())
+ sdmap.erase(sd.identifier);
+ }
+
+ }
+
+
+ List<_GDFKCS> stackpositions;
+ for(Map<StringName,_GDFKC>::Element *E=sdmap.front();E;E=E->next() ) {
+
+ _GDFKCS spp;
+ spp.id=E->key();
+ spp.order=E->get().order;
+ spp.pos=E->get().pos.back()->get();
+ stackpositions.push_back(spp);
+ }
+
+ stackpositions.sort();
+
+ for(List<_GDFKCS>::Element *E=stackpositions.front();E;E=E->next()) {
+
+ Pair<StringName,int> p;
+ p.first=E->get().id;
+ p.second=E->get().pos;
+ r_stackvars->push_back(p);
+ }
+
+
+}
+
+#if 0
+void GDFunction::clear() {
+
+ name=StringName();
+ constants.clear();
+ _stack_size=0;
+ code.clear();
+ _constants_ptr=NULL;
+ _constant_count=0;
+ _global_names_ptr=NULL;
+ _global_names_count=0;
+ _code_ptr=NULL;
+ _code_size=0;
+
+}
+#endif
+GDFunction::GDFunction() : function_list(this) {
+
+ _stack_size=0;
+ _call_size=0;
+ name="<anonymous>";
+#ifdef DEBUG_ENABLED
+ _func_cname=NULL;
+
+ if (GDScriptLanguage::get_singleton()->lock) {
+ GDScriptLanguage::get_singleton()->lock->lock();
+ }
+ GDScriptLanguage::get_singleton()->function_list.add(&function_list);
+
+ if (GDScriptLanguage::get_singleton()->lock) {
+ GDScriptLanguage::get_singleton()->lock->unlock();
+ }
+
+ profile.call_count=0;
+ profile.self_time=0;
+ profile.total_time=0;
+ profile.frame_call_count=0;
+ profile.frame_self_time=0;
+ profile.frame_total_time=0;
+ profile.last_frame_call_count=0;
+ profile.last_frame_self_time=0;
+ profile.last_frame_total_time=0;
+
+#endif
+}
+
+GDFunction::~GDFunction() {
+#ifdef DEBUG_ENABLED
+ if (GDScriptLanguage::get_singleton()->lock) {
+ GDScriptLanguage::get_singleton()->lock->lock();
+ }
+ GDScriptLanguage::get_singleton()->function_list.remove(&function_list);
+
+ if (GDScriptLanguage::get_singleton()->lock) {
+ GDScriptLanguage::get_singleton()->lock->unlock();
+ }
+#endif
+}
+
+/////////////////////
+
+
+Variant GDFunctionState::_signal_callback(const Variant** p_args, int p_argcount, Variant::CallError& r_error) {
+
+ Variant arg;
+ r_error.error=Variant::CallError::CALL_OK;
+
+ ERR_FAIL_COND_V(!function,Variant());
+
+ if (p_argcount==0) {
+ r_error.error=Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;
+ r_error.argument=1;
+ return Variant();
+ } else if (p_argcount==1) {
+ //noooneee
+ } else if (p_argcount==2) {
+ arg=*p_args[0];
+ } else {
+ Array extra_args;
+ for(int i=0;i<p_argcount-1;i++) {
+ extra_args.push_back(*p_args[i]);
+ }
+ arg=extra_args;
+ }
+
+ Ref<GDFunctionState> self = *p_args[p_argcount-1];
+
+ if (self.is_null()) {
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
+ r_error.argument=p_argcount-1;
+ r_error.expected=Variant::OBJECT;
+ return Variant();
+ }
+
+ state.result=arg;
+ Variant ret = function->call(NULL,NULL,0,r_error,&state);
+ function=NULL; //cleaned up;
+ state.result=Variant();
+ return ret;
+}
+
+
+bool GDFunctionState::is_valid() const {
+
+ return function!=NULL;
+}
+
+Variant GDFunctionState::resume(const Variant& p_arg) {
+
+ ERR_FAIL_COND_V(!function,Variant());
+
+ state.result=p_arg;
+ Variant::CallError err;
+ Variant ret = function->call(NULL,NULL,0,err,&state);
+ function=NULL; //cleaned up;
+ state.result=Variant();
+ return ret;
+}
+
+
+void GDFunctionState::_bind_methods() {
+
+ ObjectTypeDB::bind_method(_MD("resume:Variant","arg"),&GDFunctionState::resume,DEFVAL(Variant()));
+ ObjectTypeDB::bind_method(_MD("is_valid"),&GDFunctionState::is_valid);
+ ObjectTypeDB::bind_native_method(METHOD_FLAGS_DEFAULT,"_signal_callback",&GDFunctionState::_signal_callback,MethodInfo("_signal_callback"));
+
+}
+
+GDFunctionState::GDFunctionState() {
+
+ function=NULL;
+}
+
+GDFunctionState::~GDFunctionState() {
+
+ if (function!=NULL) {
+ //never called, deinitialize stack
+ for(int i=0;i<state.stack_size;i++) {
+ Variant *v=(Variant*)&state.stack[sizeof(Variant)*i];
+ v->~Variant();
+ }
+ }
+}
+
diff --git a/modules/gdscript/gd_function.h b/modules/gdscript/gd_function.h
new file mode 100644
index 0000000000..1f790eaadc
--- /dev/null
+++ b/modules/gdscript/gd_function.h
@@ -0,0 +1,207 @@
+#ifndef GD_FUNCTION_H
+#define GD_FUNCTION_H
+
+#include "self_list.h"
+#include "os/thread.h"
+#include "pair.h"
+#include "variant.h"
+#include "string_db.h"
+#include "reference.h"
+
+class GDInstance;
+class GDScript;
+
+
+class GDFunction {
+public:
+
+ enum Opcode {
+ OPCODE_OPERATOR,
+ OPCODE_EXTENDS_TEST,
+ OPCODE_SET,
+ OPCODE_GET,
+ OPCODE_SET_NAMED,
+ OPCODE_GET_NAMED,
+ OPCODE_ASSIGN,
+ OPCODE_ASSIGN_TRUE,
+ OPCODE_ASSIGN_FALSE,
+ OPCODE_CONSTRUCT, //only for basic types!!
+ OPCODE_CONSTRUCT_ARRAY,
+ OPCODE_CONSTRUCT_DICTIONARY,
+ OPCODE_CALL,
+ OPCODE_CALL_RETURN,
+ OPCODE_CALL_BUILT_IN,
+ OPCODE_CALL_SELF,
+ OPCODE_CALL_SELF_BASE,
+ OPCODE_YIELD,
+ OPCODE_YIELD_SIGNAL,
+ OPCODE_YIELD_RESUME,
+ OPCODE_JUMP,
+ OPCODE_JUMP_IF,
+ OPCODE_JUMP_IF_NOT,
+ OPCODE_JUMP_TO_DEF_ARGUMENT,
+ OPCODE_RETURN,
+ OPCODE_ITERATE_BEGIN,
+ OPCODE_ITERATE,
+ OPCODE_ASSERT,
+ OPCODE_BREAKPOINT,
+ OPCODE_LINE,
+ OPCODE_END
+ };
+
+ enum Address {
+ ADDR_BITS=24,
+ ADDR_MASK=((1<<ADDR_BITS)-1),
+ ADDR_TYPE_MASK=~ADDR_MASK,
+ ADDR_TYPE_SELF=0,
+ ADDR_TYPE_CLASS=1,
+ ADDR_TYPE_MEMBER=2,
+ ADDR_TYPE_CLASS_CONSTANT=3,
+ ADDR_TYPE_LOCAL_CONSTANT=4,
+ ADDR_TYPE_STACK=5,
+ ADDR_TYPE_STACK_VARIABLE=6,
+ ADDR_TYPE_GLOBAL=7,
+ ADDR_TYPE_NIL=8
+ };
+
+ struct StackDebug {
+
+ int line;
+ int pos;
+ bool added;
+ StringName identifier;
+ };
+
+private:
+friend class GDCompiler;
+
+ StringName source;
+
+ mutable Variant nil;
+ mutable Variant *_constants_ptr;
+ int _constant_count;
+ const StringName *_global_names_ptr;
+ int _global_names_count;
+ const int *_default_arg_ptr;
+ int _default_arg_count;
+ const int *_code_ptr;
+ int _code_size;
+ int _argument_count;
+ int _stack_size;
+ int _call_size;
+ int _initial_line;
+ bool _static;
+ GDScript *_script;
+
+ StringName name;
+ Vector<Variant> constants;
+ Vector<StringName> global_names;
+ Vector<int> default_arguments;
+ Vector<int> code;
+
+#ifdef TOOLS_ENABLED
+ Vector<StringName> arg_names;
+#endif
+
+ List<StackDebug> stack_debug;
+
+ _FORCE_INLINE_ Variant *_get_variant(int p_address,GDInstance *p_instance,GDScript *p_script,Variant &self,Variant *p_stack,String& r_error) const;
+ _FORCE_INLINE_ String _get_call_error(const Variant::CallError& p_err, const String& p_where,const Variant**argptrs) const;
+
+friend class GDScriptLanguage;
+
+ SelfList<GDFunction> function_list;
+#ifdef DEBUG_ENABLED
+ CharString func_cname;
+ const char*_func_cname;
+
+ struct Profile {
+ StringName signature;
+ uint64_t call_count;
+ uint64_t self_time;
+ uint64_t total_time;
+ uint64_t frame_call_count;
+ uint64_t frame_self_time;
+ uint64_t frame_total_time;
+ uint64_t last_frame_call_count;
+ uint64_t last_frame_self_time;
+ uint64_t last_frame_total_time;
+ } profile;
+
+#endif
+
+public:
+
+
+
+ struct CallState {
+
+ GDInstance *instance;
+ Vector<uint8_t> stack;
+ int stack_size;
+ Variant self;
+ uint32_t alloca_size;
+ GDScript *_class;
+ int ip;
+ int line;
+ int defarg;
+ Variant result;
+
+ };
+
+ _FORCE_INLINE_ bool is_static() const { return _static; }
+
+ const int* get_code() const; //used for debug
+ int get_code_size() const;
+ Variant get_constant(int p_idx) const;
+ StringName get_global_name(int p_idx) const;
+ StringName get_name() const;
+ int get_max_stack_size() const;
+ int get_default_argument_count() const;
+ int get_default_argument_addr(int p_idx) const;
+ GDScript *get_script() const { return _script; }
+
+ void debug_get_stack_member_state(int p_line,List<Pair<StringName,int> > *r_stackvars) const;
+
+ _FORCE_INLINE_ bool is_empty() const { return _code_size==0; }
+
+ int get_argument_count() const { return _argument_count; }
+ StringName get_argument_name(int p_idx) const {
+#ifdef TOOLS_ENABLED
+ ERR_FAIL_INDEX_V(p_idx,arg_names.size(),StringName());
+ return arg_names[p_idx];
+#endif
+ return StringName();
+
+ }
+ Variant get_default_argument(int p_idx) const {
+ ERR_FAIL_INDEX_V(p_idx,default_arguments.size(),Variant());
+ return default_arguments[p_idx];
+ }
+
+ Variant call(GDInstance *p_instance,const Variant **p_args, int p_argcount,Variant::CallError& r_err,CallState *p_state=NULL);
+
+ GDFunction();
+ ~GDFunction();
+};
+
+
+class GDFunctionState : public Reference {
+
+ OBJ_TYPE(GDFunctionState,Reference);
+friend class GDFunction;
+ GDFunction *function;
+ GDFunction::CallState state;
+ Variant _signal_callback(const Variant** p_args, int p_argcount, Variant::CallError& r_error);
+protected:
+ static void _bind_methods();
+public:
+
+ bool is_valid() const;
+ Variant resume(const Variant& p_arg=Variant());
+ GDFunctionState();
+ ~GDFunctionState();
+};
+
+
+#endif // GD_FUNCTION_H
diff --git a/modules/gdscript/gd_functions.cpp b/modules/gdscript/gd_functions.cpp
index 1c05a71d01..5ea5908c5f 100644
--- a/modules/gdscript/gd_functions.cpp
+++ b/modules/gdscript/gd_functions.cpp
@@ -1010,11 +1010,11 @@ void GDFunctions::call(Function p_func,const Variant **p_args,int p_arg_count,Va
VALIDATE_ARG_NUM(1);
VALIDATE_ARG_NUM(2);
- Color color(*p_args[0],*p_args[1],*p_args[2]);
+ Color color((float)*p_args[0]/255.0f,(float)*p_args[1]/255.0f,(float)*p_args[2]/255.0f);
if (p_arg_count==4) {
VALIDATE_ARG_NUM(3);
- color.a=*p_args[3];
+ color.a=(float)*p_args[3]/255.0f;
}
r_ret=color;
diff --git a/modules/gdscript/gd_parser.cpp b/modules/gdscript/gd_parser.cpp
index b713dc318f..9e90027a70 100644
--- a/modules/gdscript/gd_parser.cpp
+++ b/modules/gdscript/gd_parser.cpp
@@ -86,7 +86,7 @@ bool GDParser::_enter_indent_block(BlockNode* p_block) {
while(true) {
if (tokenizer->get_token()!=GDTokenizer::TK_NEWLINE) {
- print_line("no newline");
+
return false; //wtf
} else if (tokenizer->get_token(1)!=GDTokenizer::TK_NEWLINE) {
diff --git a/modules/gdscript/gd_script.cpp b/modules/gdscript/gd_script.cpp
index beec314e44..dcd0641f76 100644
--- a/modules/gdscript/gd_script.cpp
+++ b/modules/gdscript/gd_script.cpp
@@ -32,1363 +32,7 @@
#include "gd_compiler.h"
#include "os/file_access.h"
#include "io/file_access_encrypted.h"
-
-
-
-
-Variant *GDFunction::_get_variant(int p_address,GDInstance *p_instance,GDScript *p_script,Variant &self, Variant *p_stack,String& r_error) const{
-
- int address = p_address&ADDR_MASK;
-
- //sequential table (jump table generated by compiler)
- switch((p_address&ADDR_TYPE_MASK)>>ADDR_BITS) {
-
- case ADDR_TYPE_SELF: {
-
- if (!p_instance) {
- r_error="Cannot access self without instance.";
- return NULL;
- }
- return &self;
- } break;
- case ADDR_TYPE_CLASS: {
-
- return &p_script->_static_ref;
- } break;
- case ADDR_TYPE_MEMBER: {
- //member indexing is O(1)
- if (!p_instance) {
- r_error="Cannot access member without instance.";
- return NULL;
- }
- return &p_instance->members[address];
- } break;
- case ADDR_TYPE_CLASS_CONSTANT: {
-
- //todo change to index!
- GDScript *o=p_script;
- ERR_FAIL_INDEX_V(address,_global_names_count,NULL);
- const StringName *sn = &_global_names_ptr[address];
-
- while(o) {
- GDScript *s=o;
- while(s) {
-
- Map<StringName,Variant>::Element *E=s->constants.find(*sn);
- if (E) {
- return &E->get();
- }
- s=s->_base;
- }
- o=o->_owner;
- }
-
-
- ERR_EXPLAIN("GDCompiler bug..");
- ERR_FAIL_V(NULL);
- } break;
- case ADDR_TYPE_LOCAL_CONSTANT: {
- ERR_FAIL_INDEX_V(address,_constant_count,NULL);
- return &_constants_ptr[address];
- } break;
- case ADDR_TYPE_STACK:
- case ADDR_TYPE_STACK_VARIABLE: {
- ERR_FAIL_INDEX_V(address,_stack_size,NULL);
- return &p_stack[address];
- } break;
- case ADDR_TYPE_GLOBAL: {
-
-
- ERR_FAIL_INDEX_V(address,GDScriptLanguage::get_singleton()->get_global_array_size(),NULL);
-
-
- return &GDScriptLanguage::get_singleton()->get_global_array()[address];
- } break;
- case ADDR_TYPE_NIL: {
- return &nil;
- } break;
- }
-
- ERR_EXPLAIN("Bad Code! (Addressing Mode)");
- ERR_FAIL_V(NULL);
- return NULL;
-}
-
-
-String GDFunction::_get_call_error(const Variant::CallError& p_err, const String& p_where,const Variant**argptrs) const {
-
-
-
- String err_text;
-
- if (p_err.error==Variant::CallError::CALL_ERROR_INVALID_ARGUMENT) {
- int errorarg=p_err.argument;
- err_text="Invalid type in "+p_where+". Cannot convert argument "+itos(errorarg+1)+" from "+Variant::get_type_name(argptrs[errorarg]->get_type())+" to "+Variant::get_type_name(p_err.expected)+".";
- } else if (p_err.error==Variant::CallError::CALL_ERROR_TOO_MANY_ARGUMENTS) {
- err_text="Invalid call to "+p_where+". Expected "+itos(p_err.argument)+" arguments.";
- } else if (p_err.error==Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS) {
- err_text="Invalid call to "+p_where+". Expected "+itos(p_err.argument)+" arguments.";
- } else if (p_err.error==Variant::CallError::CALL_ERROR_INVALID_METHOD) {
- err_text="Invalid call. Nonexistent "+p_where+".";
- } else if (p_err.error==Variant::CallError::CALL_ERROR_INSTANCE_IS_NULL) {
- err_text="Attempt to call "+p_where+" on a null instance.";
- } else {
- err_text="Bug, call error: #"+itos(p_err.error);
- }
-
- return err_text;
-
-}
-
-static String _get_var_type(const Variant* p_type) {
-
- String basestr;
-
- if (p_type->get_type()==Variant::OBJECT) {
- Object *bobj = *p_type;
- if (!bobj) {
- basestr = "null instance";
- } else {
-#ifdef DEBUG_ENABLED
- if (ObjectDB::instance_validate(bobj)) {
- if (bobj->get_script_instance())
- basestr= bobj->get_type()+" ("+bobj->get_script_instance()->get_script()->get_path().get_file()+")";
- else
- basestr = bobj->get_type();
- } else {
- basestr="previously freed instance";
- }
-
-#else
- basestr="Object";
-#endif
- }
-
- } else {
- basestr = Variant::get_type_name(p_type->get_type());
- }
-
- return basestr;
-
-}
-
-Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_argcount, Variant::CallError& r_err, CallState *p_state) {
-
-
- if (!_code_ptr) {
-
- return Variant();
- }
-
- r_err.error=Variant::CallError::CALL_OK;
-
- Variant self;
- Variant retvalue;
- Variant *stack = NULL;
- Variant **call_args;
- int defarg=0;
-
-#ifdef DEBUG_ENABLED
-
- //GDScriptLanguage::get_singleton()->calls++;
-
-#endif
-
- uint32_t alloca_size=0;
- GDScript *_class;
- int ip=0;
- int line=_initial_line;
-
- if (p_state) {
- //use existing (supplied) state (yielded)
- stack=(Variant*)p_state->stack.ptr();
- call_args=(Variant**)&p_state->stack[sizeof(Variant)*p_state->stack_size];
- line=p_state->line;
- ip=p_state->ip;
- alloca_size=p_state->stack.size();
- _class=p_state->_class;
- p_instance=p_state->instance;
- defarg=p_state->defarg;
- self=p_state->self;
- //stack[p_state->result_pos]=p_state->result; //assign stack with result
-
- } else {
-
- if (p_argcount!=_argument_count) {
-
- if (p_argcount>_argument_count) {
-
- r_err.error=Variant::CallError::CALL_ERROR_TOO_MANY_ARGUMENTS;
- r_err.argument=_argument_count;
-
-
- return Variant();
- } else if (p_argcount < _argument_count - _default_arg_count) {
-
- r_err.error=Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;
- r_err.argument=_argument_count - _default_arg_count;
- return Variant();
- } else {
-
- defarg=_argument_count-p_argcount;
- }
- }
-
- alloca_size = sizeof(Variant*)*_call_size + sizeof(Variant)*_stack_size;
-
- if (alloca_size) {
-
- uint8_t *aptr = (uint8_t*)alloca(alloca_size);
-
- if (_stack_size) {
-
- stack=(Variant*)aptr;
- for(int i=0;i<p_argcount;i++)
- memnew_placement(&stack[i],Variant(*p_args[i]));
- for(int i=p_argcount;i<_stack_size;i++)
- memnew_placement(&stack[i],Variant);
- } else {
- stack=NULL;
- }
-
- if (_call_size) {
-
- call_args = (Variant**)&aptr[sizeof(Variant)*_stack_size];
- } else {
-
- call_args=NULL;
- }
-
-
- } else {
- stack=NULL;
- call_args=NULL;
- }
-
- if (p_instance) {
- if (p_instance->base_ref && static_cast<Reference*>(p_instance->owner)->is_referenced()) {
-
- self=REF(static_cast<Reference*>(p_instance->owner));
- } else {
- self=p_instance->owner;
- }
- _class=p_instance->script.ptr();
- } else {
- _class=_script;
- }
- }
-
- String err_text;
-
-#ifdef DEBUG_ENABLED
-
- if (ScriptDebugger::get_singleton())
- GDScriptLanguage::get_singleton()->enter_function(p_instance,this,stack,&ip,&line);
-
-#define CHECK_SPACE(m_space)\
- ERR_BREAK((ip+m_space)>_code_size)
-
-#define GET_VARIANT_PTR(m_v,m_code_ofs) \
- Variant *m_v; \
- m_v = _get_variant(_code_ptr[ip+m_code_ofs],p_instance,_class,self,stack,err_text);\
- if (!m_v)\
- break;
-
-
-#else
-#define CHECK_SPACE(m_space)
-#define GET_VARIANT_PTR(m_v,m_code_ofs) \
- Variant *m_v; \
- m_v = _get_variant(_code_ptr[ip+m_code_ofs],p_instance,_class,self,stack,err_text);
-
-#endif
-
-
-
- bool exit_ok=false;
-
- while(ip<_code_size) {
-
-
- int last_opcode=_code_ptr[ip];
- switch(_code_ptr[ip]) {
-
- case OPCODE_OPERATOR: {
-
- CHECK_SPACE(5);
-
- bool valid;
- Variant::Operator op = (Variant::Operator)_code_ptr[ip+1];
- ERR_BREAK(op>=Variant::OP_MAX);
-
- GET_VARIANT_PTR(a,2);
- GET_VARIANT_PTR(b,3);
- GET_VARIANT_PTR(dst,4);
-
-#ifdef DEBUG_ENABLED
- Variant ret;
- Variant::evaluate(op,*a,*b,ret,valid);
-#else
- Variant::evaluate(op,*a,*b,*dst,valid);
-#endif
-
- if (!valid) {
-#ifdef DEBUG_ENABLED
-
- if (ret.get_type()==Variant::STRING) {
- //return a string when invalid with the error
- err_text=ret;
- err_text += " in operator '"+Variant::get_operator_name(op)+"'.";
- } else {
- err_text="Invalid operands '"+Variant::get_type_name(a->get_type())+"' and '"+Variant::get_type_name(b->get_type())+"' in operator '"+Variant::get_operator_name(op)+"'.";
- }
-#endif
- break;
-
- }
-#ifdef DEBUG_ENABLED
- *dst=ret;
-#endif
-
- ip+=5;
-
- } continue;
- case OPCODE_EXTENDS_TEST: {
-
- CHECK_SPACE(4);
-
- GET_VARIANT_PTR(a,1);
- GET_VARIANT_PTR(b,2);
- GET_VARIANT_PTR(dst,3);
-
-#ifdef DEBUG_ENABLED
-
- if (a->get_type()!=Variant::OBJECT || a->operator Object*()==NULL) {
-
- err_text="Left operand of 'extends' is not an instance of anything.";
- break;
-
- }
- if (b->get_type()!=Variant::OBJECT || b->operator Object*()==NULL) {
-
- err_text="Right operand of 'extends' is not a class.";
- break;
-
- }
-#endif
-
-
- Object *obj_A = *a;
- Object *obj_B = *b;
-
-
- GDScript *scr_B = obj_B->cast_to<GDScript>();
-
- bool extends_ok=false;
-
- if (scr_B) {
- //if B is a script, the only valid condition is that A has an instance which inherits from the script
- //in other situation, this shoul return false.
-
- if (obj_A->get_script_instance() && obj_A->get_script_instance()->get_language()==GDScriptLanguage::get_singleton()) {
-
- GDInstance *ins = static_cast<GDInstance*>(obj_A->get_script_instance());
- GDScript *cmp = ins->script.ptr();
- //bool found=false;
- while(cmp) {
-
- if (cmp==scr_B) {
- //inherits from script, all ok
- extends_ok=true;
- break;
-
- }
-
- cmp=cmp->_base;
- }
-
- }
-
-
- } else {
-
- GDNativeClass *nc= obj_B->cast_to<GDNativeClass>();
-
- if (!nc) {
-
- err_text="Right operand of 'extends' is not a class (type: '"+obj_B->get_type()+"').";
- break;
- }
-
- extends_ok=ObjectTypeDB::is_type(obj_A->get_type_name(),nc->get_name());
- }
-
- *dst=extends_ok;
- ip+=4;
-
- } continue;
- case OPCODE_SET: {
-
- CHECK_SPACE(3);
-
- GET_VARIANT_PTR(dst,1);
- GET_VARIANT_PTR(index,2);
- GET_VARIANT_PTR(value,3);
-
- bool valid;
- dst->set(*index,*value,&valid);
-
- if (!valid) {
- String v = index->operator String();
- if (v!="") {
- v="'"+v+"'";
- } else {
- v="of type '"+_get_var_type(index)+"'";
- }
- err_text="Invalid set index "+v+" (on base: '"+_get_var_type(dst)+"').";
- break;
- }
-
- ip+=4;
- } continue;
- case OPCODE_GET: {
-
- CHECK_SPACE(3);
-
- GET_VARIANT_PTR(src,1);
- GET_VARIANT_PTR(index,2);
- GET_VARIANT_PTR(dst,3);
-
- bool valid;
-#ifdef DEBUG_ENABLED
-//allow better error message in cases where src and dst are the same stack position
- Variant ret = src->get(*index,&valid);
-#else
- *dst = src->get(*index,&valid);
-
-#endif
- if (!valid) {
- String v = index->operator String();
- if (v!="") {
- v="'"+v+"'";
- } else {
- v="of type '"+_get_var_type(index)+"'";
- }
- err_text="Invalid get index "+v+" (on base: '"+_get_var_type(src)+"').";
- break;
- }
-#ifdef DEBUG_ENABLED
- *dst=ret;
-#endif
- ip+=4;
- } continue;
- case OPCODE_SET_NAMED: {
-
- CHECK_SPACE(3);
-
- GET_VARIANT_PTR(dst,1);
- GET_VARIANT_PTR(value,3);
-
- int indexname = _code_ptr[ip+2];
-
- ERR_BREAK(indexname<0 || indexname>=_global_names_count);
- const StringName *index = &_global_names_ptr[indexname];
-
- bool valid;
- dst->set_named(*index,*value,&valid);
-
- if (!valid) {
- String err_type;
- err_text="Invalid set index '"+String(*index)+"' (on base: '"+_get_var_type(dst)+"').";
- break;
- }
-
- ip+=4;
- } continue;
- case OPCODE_GET_NAMED: {
-
-
- CHECK_SPACE(3);
-
- GET_VARIANT_PTR(src,1);
- GET_VARIANT_PTR(dst,3);
-
- int indexname = _code_ptr[ip+2];
-
- ERR_BREAK(indexname<0 || indexname>=_global_names_count);
- const StringName *index = &_global_names_ptr[indexname];
-
- bool valid;
-#ifdef DEBUG_ENABLED
-//allow better error message in cases where src and dst are the same stack position
- Variant ret = src->get_named(*index,&valid);
-
-#else
- *dst = src->get_named(*index,&valid);
-#endif
-
- if (!valid) {
- if (src->has_method(*index)) {
- err_text="Invalid get index '"+index->operator String()+"' (on base: '"+_get_var_type(src)+"'). Did you mean '."+index->operator String()+"()' ?";
- } else {
- err_text="Invalid get index '"+index->operator String()+"' (on base: '"+_get_var_type(src)+"').";
- }
- break;
- }
-#ifdef DEBUG_ENABLED
- *dst=ret;
-#endif
- ip+=4;
- } continue;
- case OPCODE_ASSIGN: {
-
- CHECK_SPACE(3);
- GET_VARIANT_PTR(dst,1);
- GET_VARIANT_PTR(src,2);
-
- *dst = *src;
-
- ip+=3;
-
- } continue;
- case OPCODE_ASSIGN_TRUE: {
-
- CHECK_SPACE(2);
- GET_VARIANT_PTR(dst,1);
-
- *dst = true;
-
- ip+=2;
- } continue;
- case OPCODE_ASSIGN_FALSE: {
-
- CHECK_SPACE(2);
- GET_VARIANT_PTR(dst,1);
-
- *dst = false;
-
- ip+=2;
- } continue;
- case OPCODE_CONSTRUCT: {
-
- CHECK_SPACE(2);
- Variant::Type t=Variant::Type(_code_ptr[ip+1]);
- int argc=_code_ptr[ip+2];
- CHECK_SPACE(argc+2);
- Variant **argptrs = call_args;
- for(int i=0;i<argc;i++) {
- GET_VARIANT_PTR(v,3+i);
- argptrs[i]=v;
- }
-
- GET_VARIANT_PTR(dst,3+argc);
- Variant::CallError err;
- *dst = Variant::construct(t,(const Variant**)argptrs,argc,err);
-
- if (err.error!=Variant::CallError::CALL_OK) {
-
- err_text=_get_call_error(err,"'"+Variant::get_type_name(t)+"' constructor",(const Variant**)argptrs);
- break;
- }
-
- ip+=4+argc;
- //construct a basic type
- } continue;
- case OPCODE_CONSTRUCT_ARRAY: {
-
- CHECK_SPACE(1);
- int argc=_code_ptr[ip+1];
- Array array(true); //arrays are always shared
- array.resize(argc);
- CHECK_SPACE(argc+2);
-
- for(int i=0;i<argc;i++) {
- GET_VARIANT_PTR(v,2+i);
- array[i]=*v;
-
- }
-
- GET_VARIANT_PTR(dst,2+argc);
-
- *dst=array;
-
- ip+=3+argc;
-
- } continue;
- case OPCODE_CONSTRUCT_DICTIONARY: {
-
- CHECK_SPACE(1);
- int argc=_code_ptr[ip+1];
- Dictionary dict(true); //arrays are always shared
-
- CHECK_SPACE(argc*2+2);
-
- for(int i=0;i<argc;i++) {
-
- GET_VARIANT_PTR(k,2+i*2+0);
- GET_VARIANT_PTR(v,2+i*2+1);
- dict[*k]=*v;
-
- }
-
- GET_VARIANT_PTR(dst,2+argc*2);
-
- *dst=dict;
-
- ip+=3+argc*2;
-
- } continue;
- case OPCODE_CALL_RETURN:
- case OPCODE_CALL: {
-
-
- CHECK_SPACE(4);
- bool call_ret = _code_ptr[ip]==OPCODE_CALL_RETURN;
-
- int argc=_code_ptr[ip+1];
- GET_VARIANT_PTR(base,2);
- int nameg=_code_ptr[ip+3];
-
- ERR_BREAK(nameg<0 || nameg>=_global_names_count);
- const StringName *methodname = &_global_names_ptr[nameg];
-
- ERR_BREAK(argc<0);
- ip+=4;
- CHECK_SPACE(argc+1);
- Variant **argptrs = call_args;
-
- for(int i=0;i<argc;i++) {
- GET_VARIANT_PTR(v,i);
- argptrs[i]=v;
- }
-
- Variant::CallError err;
- if (call_ret) {
-
- GET_VARIANT_PTR(ret,argc);
- *ret = base->call(*methodname,(const Variant**)argptrs,argc,err);
- } else {
-
- base->call(*methodname,(const Variant**)argptrs,argc,err);
- }
-
- if (err.error!=Variant::CallError::CALL_OK) {
-
-
- String methodstr = *methodname;
- String basestr = _get_var_type(base);
-
- if (methodstr=="call") {
- if (argc>=1) {
- methodstr=String(*argptrs[0])+" (via call)";
- if (err.error==Variant::CallError::CALL_ERROR_INVALID_ARGUMENT) {
- err.argument-=1;
- }
- }
- } if (methodstr=="free") {
-
- if (err.error==Variant::CallError::CALL_ERROR_INVALID_METHOD) {
-
- if (base->is_ref()) {
- err_text="Attempted to free a reference.";
- break;
- } else if (base->get_type()==Variant::OBJECT) {
-
- err_text="Attempted to free a locked object (calling or emitting).";
- break;
- }
- }
- }
- err_text=_get_call_error(err,"function '"+methodstr+"' in base '"+basestr+"'",(const Variant**)argptrs);
- break;
- }
-
- //_call_func(NULL,base,*methodname,ip,argc,p_instance,stack);
- ip+=argc+1;
-
- } continue;
- case OPCODE_CALL_BUILT_IN: {
-
- CHECK_SPACE(4);
-
- GDFunctions::Function func = GDFunctions::Function(_code_ptr[ip+1]);
- int argc=_code_ptr[ip+2];
- ERR_BREAK(argc<0);
-
- ip+=3;
- CHECK_SPACE(argc+1);
- Variant **argptrs = call_args;
-
- for(int i=0;i<argc;i++) {
- GET_VARIANT_PTR(v,i);
- argptrs[i]=v;
- }
-
- GET_VARIANT_PTR(dst,argc);
-
- Variant::CallError err;
-
- GDFunctions::call(func,(const Variant**)argptrs,argc,*dst,err);
-
- if (err.error!=Variant::CallError::CALL_OK) {
-
-
- String methodstr = GDFunctions::get_func_name(func);
- err_text=_get_call_error(err,"built-in function '"+methodstr+"'",(const Variant**)argptrs);
- break;
- }
- ip+=argc+1;
-
- } continue;
- case OPCODE_CALL_SELF: {
-
-
- } break;
- case OPCODE_CALL_SELF_BASE: {
-
- CHECK_SPACE(2);
- int self_fun = _code_ptr[ip+1];
-#ifdef DEBUG_ENABLED
-
- if (self_fun<0 || self_fun>=_global_names_count) {
-
- err_text="compiler bug, function name not found";
- break;
- }
-#endif
- const StringName *methodname = &_global_names_ptr[self_fun];
-
- int argc=_code_ptr[ip+2];
-
- CHECK_SPACE(2+argc+1);
-
- Variant **argptrs = call_args;
-
- for(int i=0;i<argc;i++) {
- GET_VARIANT_PTR(v,i+3);
- argptrs[i]=v;
- }
-
- GET_VARIANT_PTR(dst,argc+3);
-
- const GDScript *gds = _script;
-
-
- const Map<StringName,GDFunction>::Element *E=NULL;
- while (gds->base.ptr()) {
- gds=gds->base.ptr();
- E=gds->member_functions.find(*methodname);
- if (E)
- break;
- }
-
- Variant::CallError err;
-
- if (E) {
-
- *dst=((GDFunction*)&E->get())->call(p_instance,(const Variant**)argptrs,argc,err);
- } else if (gds->native.ptr()) {
-
- if (*methodname!=GDScriptLanguage::get_singleton()->strings._init) {
-
- MethodBind *mb = ObjectTypeDB::get_method(gds->native->get_name(),*methodname);
- if (!mb) {
- err.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
- } else {
- *dst=mb->call(p_instance->owner,(const Variant**)argptrs,argc,err);
- }
- } else {
- err.error=Variant::CallError::CALL_OK;
- }
- } else {
-
- if (*methodname!=GDScriptLanguage::get_singleton()->strings._init) {
- err.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
- } else {
- err.error=Variant::CallError::CALL_OK;
- }
- }
-
-
- if (err.error!=Variant::CallError::CALL_OK) {
-
-
- String methodstr = *methodname;
- err_text=_get_call_error(err,"function '"+methodstr+"'",(const Variant**)argptrs);
-
- break;
- }
-
- ip+=4+argc;
-
- } continue;
- case OPCODE_YIELD:
- case OPCODE_YIELD_SIGNAL: {
-
- int ipofs=1;
- if (_code_ptr[ip]==OPCODE_YIELD_SIGNAL) {
- CHECK_SPACE(4);
- ipofs+=2;
- } else {
- CHECK_SPACE(2);
-
- }
-
- Ref<GDFunctionState> gdfs = memnew( GDFunctionState );
- gdfs->function=this;
-
- gdfs->state.stack.resize(alloca_size);
- //copy variant stack
- for(int i=0;i<_stack_size;i++) {
- memnew_placement(&gdfs->state.stack[sizeof(Variant)*i],Variant(stack[i]));
- }
- gdfs->state.stack_size=_stack_size;
- gdfs->state.self=self;
- gdfs->state.alloca_size=alloca_size;
- gdfs->state._class=_class;
- gdfs->state.ip=ip+ipofs;
- gdfs->state.line=line;
- //gdfs->state.result_pos=ip+ipofs-1;
- gdfs->state.defarg=defarg;
- gdfs->state.instance=p_instance;
- gdfs->function=this;
-
- retvalue=gdfs;
-
- if (_code_ptr[ip]==OPCODE_YIELD_SIGNAL) {
- GET_VARIANT_PTR(argobj,1);
- GET_VARIANT_PTR(argname,2);
- //do the oneshot connect
-
- if (argobj->get_type()!=Variant::OBJECT) {
- err_text="First argument of yield() not of type object.";
- break;
- }
- if (argname->get_type()!=Variant::STRING) {
- err_text="Second argument of yield() not a string (for signal name).";
- break;
- }
- Object *obj=argobj->operator Object *();
- String signal = argname->operator String();
-#ifdef DEBUG_ENABLED
-
- if (!obj) {
- err_text="First argument of yield() is null.";
- break;
- }
- if (ScriptDebugger::get_singleton()) {
- if (!ObjectDB::instance_validate(obj)) {
- err_text="First argument of yield() is a previously freed instance.";
- break;
- }
- }
- if (signal.length()==0) {
-
- err_text="Second argument of yield() is an empty string (for signal name).";
- break;
- }
-
-#endif
- Error err = obj->connect(signal,gdfs.ptr(),"_signal_callback",varray(gdfs),Object::CONNECT_ONESHOT);
- if (err!=OK) {
- err_text="Error connecting to signal: "+signal+" during yield().";
- break;
- }
-
-
- }
-
- exit_ok=true;
-
- } break;
- case OPCODE_YIELD_RESUME: {
-
- CHECK_SPACE(2);
- if (!p_state) {
- err_text=("Invalid Resume (bug?)");
- break;
- }
- GET_VARIANT_PTR(result,1);
- *result=p_state->result;
- ip+=2;
-
- } continue;
- case OPCODE_JUMP: {
-
- CHECK_SPACE(2);
- int to = _code_ptr[ip+1];
-
- ERR_BREAK(to<0 || to>_code_size);
- ip=to;
-
- } continue;
- case OPCODE_JUMP_IF: {
-
- CHECK_SPACE(3);
-
- GET_VARIANT_PTR(test,1);
-
- bool valid;
- bool result = test->booleanize(valid);
-#ifdef DEBUG_ENABLED
- if (!valid) {
-
- err_text="cannot evaluate conditional expression of type: "+Variant::get_type_name(test->get_type());
- break;
- }
-#endif
- if (result) {
- int to = _code_ptr[ip+2];
- ERR_BREAK(to<0 || to>_code_size);
- ip=to;
- continue;
- }
- ip+=3;
- } continue;
- case OPCODE_JUMP_IF_NOT: {
-
- CHECK_SPACE(3);
-
- GET_VARIANT_PTR(test,1);
-
- bool valid;
- bool result = test->booleanize(valid);
-#ifdef DEBUG_ENABLED
- if (!valid) {
-
- err_text="cannot evaluate conditional expression of type: "+Variant::get_type_name(test->get_type());
- break;
- }
-#endif
- if (!result) {
- int to = _code_ptr[ip+2];
- ERR_BREAK(to<0 || to>_code_size);
- ip=to;
- continue;
- }
- ip+=3;
- } continue;
- case OPCODE_JUMP_TO_DEF_ARGUMENT: {
-
- CHECK_SPACE(2);
- ip=_default_arg_ptr[defarg];
-
- } continue;
- case OPCODE_RETURN: {
-
- CHECK_SPACE(2);
- GET_VARIANT_PTR(r,1);
- retvalue=*r;
- exit_ok=true;
-
- } break;
- case OPCODE_ITERATE_BEGIN: {
-
- CHECK_SPACE(8); //space for this an regular iterate
-
- GET_VARIANT_PTR(counter,1);
- GET_VARIANT_PTR(container,2);
-
- bool valid;
- if (!container->iter_init(*counter,valid)) {
- if (!valid) {
- err_text="Unable to iterate on object of type "+Variant::get_type_name(container->get_type())+"'.";
- break;
- }
- int jumpto=_code_ptr[ip+3];
- ERR_BREAK(jumpto<0 || jumpto>_code_size);
- ip=jumpto;
- continue;
- }
- GET_VARIANT_PTR(iterator,4);
-
-
- *iterator=container->iter_get(*counter,valid);
- if (!valid) {
- err_text="Unable to obtain iterator object of type "+Variant::get_type_name(container->get_type())+"'.";
- break;
- }
-
-
- ip+=5; //skip regular iterate which is always next
-
- } continue;
- case OPCODE_ITERATE: {
-
- CHECK_SPACE(4);
-
- GET_VARIANT_PTR(counter,1);
- GET_VARIANT_PTR(container,2);
-
- bool valid;
- if (!container->iter_next(*counter,valid)) {
- if (!valid) {
- err_text="Unable to iterate on object of type "+Variant::get_type_name(container->get_type())+"' (type changed since first iteration?).";
- break;
- }
- int jumpto=_code_ptr[ip+3];
- ERR_BREAK(jumpto<0 || jumpto>_code_size);
- ip=jumpto;
- continue;
- }
- GET_VARIANT_PTR(iterator,4);
-
- *iterator=container->iter_get(*counter,valid);
- if (!valid) {
- err_text="Unable to obtain iterator object of type "+Variant::get_type_name(container->get_type())+"' (but was obtained on first iteration?).";
- break;
- }
-
- ip+=5; //loop again
- } continue;
- case OPCODE_ASSERT: {
- CHECK_SPACE(2);
- GET_VARIANT_PTR(test,1);
-
-#ifdef DEBUG_ENABLED
- bool valid;
- bool result = test->booleanize(valid);
-
-
- if (!valid) {
-
- err_text="cannot evaluate conditional expression of type: "+Variant::get_type_name(test->get_type());
- break;
- }
-
-
- if (!result) {
-
- err_text="Assertion failed.";
- break;
- }
-
-#endif
-
- ip+=2;
- } continue;
- case OPCODE_BREAKPOINT: {
-#ifdef DEBUG_ENABLED
- if (ScriptDebugger::get_singleton()) {
- GDScriptLanguage::get_singleton()->debug_break("Breakpoint Statement",true);
- }
-#endif
- ip+=1;
- } continue;
- case OPCODE_LINE: {
- CHECK_SPACE(2);
-
- line=_code_ptr[ip+1];
- ip+=2;
-
- if (ScriptDebugger::get_singleton()) {
- // line
- bool do_break=false;
-
- if (ScriptDebugger::get_singleton()->get_lines_left()>0) {
-
- if (ScriptDebugger::get_singleton()->get_depth()<=0)
- ScriptDebugger::get_singleton()->set_lines_left( ScriptDebugger::get_singleton()->get_lines_left() -1 );
- if (ScriptDebugger::get_singleton()->get_lines_left()<=0)
- do_break=true;
- }
-
- if (ScriptDebugger::get_singleton()->is_breakpoint(line,source))
- do_break=true;
-
- if (do_break) {
- GDScriptLanguage::get_singleton()->debug_break("Breakpoint",true);
- }
-
- ScriptDebugger::get_singleton()->line_poll();
-
- }
- } continue;
- case OPCODE_END: {
-
- exit_ok=true;
- break;
-
- } break;
- default: {
-
- err_text="Illegal opcode "+itos(_code_ptr[ip])+" at address "+itos(ip);
- } break;
-
- }
-
- if (exit_ok)
- break;
- //error
- // function, file, line, error, explanation
- String err_file;
- if (p_instance)
- err_file=p_instance->script->path;
- else if (_class)
- err_file=_class->path;
- if (err_file=="")
- err_file="<built-in>";
- String err_func = name;
- if (p_instance && p_instance->script->name!="")
- err_func=p_instance->script->name+"."+err_func;
- int err_line=line;
- if (err_text=="") {
- err_text="Internal Script Error! - opcode #"+itos(last_opcode)+" (report please).";
- }
-
- if (!GDScriptLanguage::get_singleton()->debug_break(err_text,false)) {
- // debugger break did not happen
-
- _err_print_error(err_func.utf8().get_data(),err_file.utf8().get_data(),err_line,err_text.utf8().get_data(),ERR_HANDLER_SCRIPT);
- }
-
-
- break;
- }
-
- if (ScriptDebugger::get_singleton())
- GDScriptLanguage::get_singleton()->exit_function();
-
-
- if (_stack_size) {
- //free stack
- for(int i=0;i<_stack_size;i++)
- stack[i].~Variant();
- }
-
- return retvalue;
-
-}
-
-const int* GDFunction::get_code() const {
-
- return _code_ptr;
-}
-int GDFunction::get_code_size() const{
-
- return _code_size;
-}
-
-Variant GDFunction::get_constant(int p_idx) const {
-
- ERR_FAIL_INDEX_V(p_idx,constants.size(),"<errconst>");
- return constants[p_idx];
-}
-
-StringName GDFunction::get_global_name(int p_idx) const {
-
- ERR_FAIL_INDEX_V(p_idx,global_names.size(),"<errgname>");
- return global_names[p_idx];
-}
-
-int GDFunction::get_default_argument_count() const {
-
- return default_arguments.size();
-}
-int GDFunction::get_default_argument_addr(int p_arg) const{
-
- ERR_FAIL_INDEX_V(p_arg,default_arguments.size(),-1);
- return default_arguments[p_arg];
-}
-
-
-StringName GDFunction::get_name() const {
-
- return name;
-}
-
-int GDFunction::get_max_stack_size() const {
-
- return _stack_size;
-}
-
-struct _GDFKC {
-
- int order;
- List<int> pos;
-};
-
-struct _GDFKCS {
-
- int order;
- StringName id;
- int pos;
-
- bool operator<(const _GDFKCS &p_r) const {
-
- return order<p_r.order;
- }
-};
-
-void GDFunction::debug_get_stack_member_state(int p_line,List<Pair<StringName,int> > *r_stackvars) const {
-
-
- int oc=0;
- Map<StringName,_GDFKC> sdmap;
- for( const List<StackDebug>::Element *E=stack_debug.front();E;E=E->next()) {
-
- const StackDebug &sd=E->get();
- if (sd.line>p_line)
- break;
-
- if (sd.added) {
-
- if (!sdmap.has(sd.identifier)) {
- _GDFKC d;
- d.order=oc++;
- d.pos.push_back(sd.pos);
- sdmap[sd.identifier]=d;
-
- } else {
- sdmap[sd.identifier].pos.push_back(sd.pos);
- }
- } else {
-
-
- ERR_CONTINUE(!sdmap.has(sd.identifier));
-
- sdmap[sd.identifier].pos.pop_back();
- if (sdmap[sd.identifier].pos.empty())
- sdmap.erase(sd.identifier);
- }
-
- }
-
-
- List<_GDFKCS> stackpositions;
- for(Map<StringName,_GDFKC>::Element *E=sdmap.front();E;E=E->next() ) {
-
- _GDFKCS spp;
- spp.id=E->key();
- spp.order=E->get().order;
- spp.pos=E->get().pos.back()->get();
- stackpositions.push_back(spp);
- }
-
- stackpositions.sort();
-
- for(List<_GDFKCS>::Element *E=stackpositions.front();E;E=E->next()) {
-
- Pair<StringName,int> p;
- p.first=E->get().id;
- p.second=E->get().pos;
- r_stackvars->push_back(p);
- }
-
-
-}
-
-#if 0
-void GDFunction::clear() {
-
- name=StringName();
- constants.clear();
- _stack_size=0;
- code.clear();
- _constants_ptr=NULL;
- _constant_count=0;
- _global_names_ptr=NULL;
- _global_names_count=0;
- _code_ptr=NULL;
- _code_size=0;
-
-}
-#endif
-GDFunction::GDFunction() {
-
- _stack_size=0;
- _call_size=0;
- name="<anonymous>";
-#ifdef DEBUG_ENABLED
- _func_cname=NULL;
-#endif
-
-}
-
-/////////////////////
-
-
-Variant GDFunctionState::_signal_callback(const Variant** p_args, int p_argcount, Variant::CallError& r_error) {
-
- Variant arg;
- r_error.error=Variant::CallError::CALL_OK;
-
- ERR_FAIL_COND_V(!function,Variant());
-
- if (p_argcount==0) {
- r_error.error=Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;
- r_error.argument=1;
- return Variant();
- } else if (p_argcount==1) {
- //noooneee
- } else if (p_argcount==2) {
- arg=*p_args[0];
- } else {
- Array extra_args;
- for(int i=0;i<p_argcount-1;i++) {
- extra_args.push_back(*p_args[i]);
- }
- arg=extra_args;
- }
-
- Ref<GDFunctionState> self = *p_args[p_argcount-1];
-
- if (self.is_null()) {
- r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
- r_error.argument=p_argcount-1;
- r_error.expected=Variant::OBJECT;
- return Variant();
- }
-
- state.result=arg;
- Variant ret = function->call(NULL,NULL,0,r_error,&state);
- function=NULL; //cleaned up;
- state.result=Variant();
- return ret;
-}
-
-
-bool GDFunctionState::is_valid() const {
-
- return function!=NULL;
-}
-
-Variant GDFunctionState::resume(const Variant& p_arg) {
-
- ERR_FAIL_COND_V(!function,Variant());
-
- state.result=p_arg;
- Variant::CallError err;
- Variant ret = function->call(NULL,NULL,0,err,&state);
- function=NULL; //cleaned up;
- state.result=Variant();
- return ret;
-}
-
-
-void GDFunctionState::_bind_methods() {
-
- ObjectTypeDB::bind_method(_MD("resume:Variant","arg"),&GDFunctionState::resume,DEFVAL(Variant()));
- ObjectTypeDB::bind_method(_MD("is_valid"),&GDFunctionState::is_valid);
- ObjectTypeDB::bind_native_method(METHOD_FLAGS_DEFAULT,"_signal_callback",&GDFunctionState::_signal_callback,MethodInfo("_signal_callback"));
-
-}
-
-GDFunctionState::GDFunctionState() {
-
- function=NULL;
-}
-
-GDFunctionState::~GDFunctionState() {
-
- if (function!=NULL) {
- //never called, deinitialize stack
- for(int i=0;i<state.stack_size;i++) {
- Variant *v=(Variant*)&state.stack[sizeof(Variant)*i];
- v->~Variant();
- }
- }
-}
+#include "os/os.h"
///////////////////////////
@@ -1457,6 +101,12 @@ GDInstance* GDScript::_create_instance(const Variant** p_args,int p_argcount,Obj
instance->members.resize(member_indices.size());
instance->script=Ref<GDScript>(this);
instance->owner=p_owner;
+#ifdef DEBUG_ENABLED
+ //needed for hot reloading
+ for(Map<StringName,MemberInfo>::Element *E=member_indices.front();E;E=E->next()) {
+ instance->member_indices_cache[E->key()]=E->get().index;
+ }
+#endif
instance->owner->set_script_instance(instance);
/* STEP 2, INITIALIZE AND CONSRTUCT */
@@ -1856,10 +506,10 @@ void GDScript::_set_subclass_path(Ref<GDScript>& p_sc,const String& p_path) {
}
}
-Error GDScript::reload() {
+Error GDScript::reload(bool p_keep_state) {
- ERR_FAIL_COND_V(instances.size(),ERR_ALREADY_IN_USE);
+ ERR_FAIL_COND_V(!p_keep_state && instances.size(),ERR_ALREADY_IN_USE);
String basedir=path;
@@ -1887,7 +537,7 @@ Error GDScript::reload() {
bool can_run = ScriptServer::is_scripting_enabled() || parser.is_tool_script();
GDCompiler compiler;
- err = compiler.compile(&parser,this);
+ err = compiler.compile(&parser,this,p_keep_state);
if (err) {
@@ -1935,14 +585,14 @@ Variant GDScript::call(const StringName& p_method,const Variant** p_args,int p_a
GDScript *top=this;
while(top) {
- Map<StringName,GDFunction>::Element *E=top->member_functions.find(p_method);
+ Map<StringName,GDFunction*>::Element *E=top->member_functions.find(p_method);
if (E) {
- if (!E->get().is_static()) {
+ if (!E->get()->is_static()) {
WARN_PRINT(String("Can't call non-static function: '"+String(p_method)+"' in script.").utf8().get_data());
}
- return E->get().call(NULL,p_args,p_argcount,r_error);
+ return E->get()->call(NULL,p_args,p_argcount,r_error);
}
top=top->_base;
}
@@ -2127,7 +777,7 @@ Error GDScript::load_source_code(const String& p_path) {
}
-const Map<StringName,GDFunction>& GDScript::debug_get_member_functions() const {
+const Map<StringName,GDFunction*>& GDScript::debug_get_member_functions() const {
return member_functions;
}
@@ -2193,7 +843,7 @@ void GDScript::get_script_signal_list(List<MethodInfo> *r_signals) const {
}
-GDScript::GDScript() {
+GDScript::GDScript() : script_list(this) {
_static_ref=this;
@@ -2207,6 +857,33 @@ GDScript::GDScript() {
source_changed_cache=false;
#endif
+#ifdef DEBUG_ENABLED
+ if (GDScriptLanguage::get_singleton()->lock) {
+ GDScriptLanguage::get_singleton()->lock->lock();
+ }
+ GDScriptLanguage::get_singleton()->script_list.add(&script_list);
+
+ if (GDScriptLanguage::get_singleton()->lock) {
+ GDScriptLanguage::get_singleton()->lock->unlock();
+ }
+#endif
+}
+
+GDScript::~GDScript() {
+ for (Map<StringName,GDFunction*>::Element *E=member_functions.front();E;E=E->next()) {
+ memdelete( E->get() );
+ }
+
+#ifdef DEBUG_ENABLED
+ if (GDScriptLanguage::get_singleton()->lock) {
+ GDScriptLanguage::get_singleton()->lock->lock();
+ }
+ GDScriptLanguage::get_singleton()->script_list.remove(&script_list);
+
+ if (GDScriptLanguage::get_singleton()->lock) {
+ GDScriptLanguage::get_singleton()->lock->unlock();
+ }
+#endif
}
@@ -2242,14 +919,14 @@ bool GDInstance::set(const StringName& p_name, const Variant& p_value) {
while(sptr) {
- Map<StringName,GDFunction>::Element *E = sptr->member_functions.find(GDScriptLanguage::get_singleton()->strings._set);
+ Map<StringName,GDFunction*>::Element *E = sptr->member_functions.find(GDScriptLanguage::get_singleton()->strings._set);
if (E) {
Variant name=p_name;
const Variant *args[2]={&name,&p_value};
Variant::CallError err;
- Variant ret = E->get().call(this,(const Variant**)args,2,err);
+ Variant ret = E->get()->call(this,(const Variant**)args,2,err);
if (err.error==Variant::CallError::CALL_OK && ret.get_type()==Variant::BOOL && ret.operator bool())
return true;
}
@@ -2292,14 +969,14 @@ bool GDInstance::get(const StringName& p_name, Variant &r_ret) const {
}
{
- const Map<StringName,GDFunction>::Element *E = sptr->member_functions.find(GDScriptLanguage::get_singleton()->strings._get);
+ const Map<StringName,GDFunction*>::Element *E = sptr->member_functions.find(GDScriptLanguage::get_singleton()->strings._get);
if (E) {
Variant name=p_name;
const Variant *args[1]={&name};
Variant::CallError err;
- Variant ret = const_cast<GDFunction*>(&E->get())->call(const_cast<GDInstance*>(this),(const Variant**)args,1,err);
+ Variant ret = const_cast<GDFunction*>(E->get())->call(const_cast<GDInstance*>(this),(const Variant**)args,1,err);
if (err.error==Variant::CallError::CALL_OK && ret.get_type()!=Variant::NIL) {
r_ret=ret;
return true;
@@ -2341,12 +1018,12 @@ void GDInstance::get_property_list(List<PropertyInfo> *p_properties) const {
while(sptr) {
- const Map<StringName,GDFunction>::Element *E = sptr->member_functions.find(GDScriptLanguage::get_singleton()->strings._get_property_list);
+ const Map<StringName,GDFunction*>::Element *E = sptr->member_functions.find(GDScriptLanguage::get_singleton()->strings._get_property_list);
if (E) {
Variant::CallError err;
- Variant ret = const_cast<GDFunction*>(&E->get())->call(const_cast<GDInstance*>(this),NULL,0,err);
+ Variant ret = const_cast<GDFunction*>(E->get())->call(const_cast<GDInstance*>(this),NULL,0,err);
if (err.error==Variant::CallError::CALL_OK) {
if (ret.get_type()!=Variant::ARRAY) {
@@ -2403,7 +1080,7 @@ void GDInstance::get_property_list(List<PropertyInfo> *p_properties) const {
if (sptr->member_functions.has("_get_property_list")) {
Variant::CallError err;
- GDFunction *f = const_cast<GDFunction*>(&sptr->member_functions["_get_property_list"]);
+ GDFunction *f = const_cast<GDFunction*>(sptr->member_functions["_get_property_list"]);
Variant plv = f->call(const_cast<GDInstance*>(this),NULL,0,err);
if (plv.get_type()!=Variant::ARRAY) {
@@ -2419,11 +1096,11 @@ void GDInstance::get_property_list(List<PropertyInfo> *p_properties) const {
PropertyInfo pinfo;
if (!p.has("name")) {
ERR_PRINT("_get_property_list: expected 'name' key of type string.")
- continue;
+ continue;
}
if (!p.has("type")) {
ERR_PRINT("_get_property_list: expected 'type' key of type integer.")
- continue;
+ continue;
}
pinfo.name=p["name"];
pinfo.type=Variant::Type(int(p["type"]));
@@ -2457,12 +1134,12 @@ void GDInstance::get_method_list(List<MethodInfo> *p_list) const {
const GDScript *sptr=script.ptr();
while(sptr) {
- for (Map<StringName,GDFunction>::Element *E = sptr->member_functions.front();E;E=E->next()) {
+ for (Map<StringName,GDFunction*>::Element *E = sptr->member_functions.front();E;E=E->next()) {
MethodInfo mi;
mi.name=E->key();
mi.flags|=METHOD_FLAG_FROM_SCRIPT;
- for(int i=0;i<E->get().get_argument_count();i++)
+ for(int i=0;i<E->get()->get_argument_count();i++)
mi.arguments.push_back(PropertyInfo(Variant::NIL,"arg"+itos(i)));
p_list->push_back(mi);
}
@@ -2475,7 +1152,7 @@ bool GDInstance::has_method(const StringName& p_method) const {
const GDScript *sptr=script.ptr();
while(sptr) {
- const Map<StringName,GDFunction>::Element *E = sptr->member_functions.find(p_method);
+ const Map<StringName,GDFunction*>::Element *E = sptr->member_functions.find(p_method);
if (E)
return true;
sptr = sptr->_base;
@@ -2489,9 +1166,9 @@ Variant GDInstance::call(const StringName& p_method,const Variant** p_args,int p
GDScript *sptr=script.ptr();
while(sptr) {
- Map<StringName,GDFunction>::Element *E = sptr->member_functions.find(p_method);
+ Map<StringName,GDFunction*>::Element *E = sptr->member_functions.find(p_method);
if (E) {
- return E->get().call(this,p_args,p_argcount,r_error);
+ return E->get()->call(this,p_args,p_argcount,r_error);
}
sptr = sptr->_base;
}
@@ -2505,9 +1182,9 @@ void GDInstance::call_multilevel(const StringName& p_method,const Variant** p_ar
Variant::CallError ce;
while(sptr) {
- Map<StringName,GDFunction>::Element *E = sptr->member_functions.find(p_method);
+ Map<StringName,GDFunction*>::Element *E = sptr->member_functions.find(p_method);
if (E) {
- E->get().call(this,p_args,p_argcount,ce);
+ E->get()->call(this,p_args,p_argcount,ce);
}
sptr = sptr->_base;
}
@@ -2522,9 +1199,9 @@ void GDInstance::_ml_call_reversed(GDScript *sptr,const StringName& p_method,con
Variant::CallError ce;
- Map<StringName,GDFunction>::Element *E = sptr->member_functions.find(p_method);
+ Map<StringName,GDFunction*>::Element *E = sptr->member_functions.find(p_method);
if (E) {
- E->get().call(this,p_args,p_argcount,ce);
+ E->get()->call(this,p_args,p_argcount,ce);
}
}
@@ -2544,10 +1221,10 @@ void GDInstance::notification(int p_notification) {
GDScript *sptr=script.ptr();
while(sptr) {
- Map<StringName,GDFunction>::Element *E = sptr->member_functions.find(GDScriptLanguage::get_singleton()->strings._notification);
+ Map<StringName,GDFunction*>::Element *E = sptr->member_functions.find(GDScriptLanguage::get_singleton()->strings._notification);
if (E) {
Variant::CallError err;
- E->get().call(this,args,1,err);
+ E->get()->call(this,args,1,err);
if (err.error!=Variant::CallError::CALL_OK) {
//print error about notification call
@@ -2568,6 +1245,37 @@ ScriptLanguage *GDInstance::get_language() {
return GDScriptLanguage::get_singleton();
}
+void GDInstance::reload_members() {
+
+#ifdef DEBUG_ENABLED
+
+ members.resize(script->member_indices.size()); //resize
+
+ Vector<Variant> new_members;
+ new_members.resize(script->member_indices.size());
+
+ //pass the values to the new indices
+ for(Map<StringName,GDScript::MemberInfo>::Element *E=script->member_indices.front();E;E=E->next()) {
+
+ if (member_indices_cache.has(E->key())) {
+ Variant value = members[member_indices_cache[E->key()]];
+ new_members[E->get().index]=value;
+ }
+
+ }
+
+ //apply
+ members=new_members;
+
+ //pass the values to the new indices
+ member_indices_cache.clear();
+ for(Map<StringName,GDScript::MemberInfo>::Element *E=script->member_indices.front();E;E=E->next()) {
+
+ member_indices_cache[E->key()]=E->get().index;
+ }
+
+#endif
+}
GDInstance::GDInstance() {
owner=NULL;
@@ -2672,11 +1380,213 @@ void GDScriptLanguage::finish() {
}
+void GDScriptLanguage::profiling_start() {
+
+#ifdef DEBUG_ENABLED
+ if (lock) {
+ lock->lock();
+ }
+
+ SelfList<GDFunction> *elem=function_list.first();
+ while(elem) {
+ elem->self()->profile.call_count=0;
+ elem->self()->profile.self_time=0;
+ elem->self()->profile.total_time=0;
+ elem->self()->profile.frame_call_count=0;
+ elem->self()->profile.frame_self_time=0;
+ elem->self()->profile.frame_total_time=0;
+ elem->self()->profile.last_frame_call_count=0;
+ elem->self()->profile.last_frame_self_time=0;
+ elem->self()->profile.last_frame_total_time=0;
+ elem=elem->next();
+ }
+
+ profiling=true;
+ if (lock) {
+ lock->unlock();
+ }
+
+#endif
+
+}
+
+void GDScriptLanguage::profiling_stop() {
+
+#ifdef DEBUG_ENABLED
+ if (lock) {
+ lock->lock();
+ }
+
+ profiling=false;
+ if (lock) {
+ lock->unlock();
+ }
+
+#endif
+}
+
+int GDScriptLanguage::profiling_get_accumulated_data(ProfilingInfo *p_info_arr,int p_info_max) {
+
+ int current=0;
+#ifdef DEBUG_ENABLED
+ if (lock) {
+ lock->lock();
+ }
+
+
+ SelfList<GDFunction> *elem=function_list.first();
+ while(elem) {
+ if (current>=p_info_max)
+ break;
+ p_info_arr[current].call_count=elem->self()->profile.call_count;
+ p_info_arr[current].self_time=elem->self()->profile.self_time;
+ p_info_arr[current].total_time=elem->self()->profile.total_time;
+ p_info_arr[current].signature=elem->self()->profile.signature;
+ elem=elem->next();
+ current++;
+ }
+
+
+
+ if (lock) {
+ lock->unlock();
+ }
+
+
+#endif
+
+ return current;
+
+
+}
+
+int GDScriptLanguage::profiling_get_frame_data(ProfilingInfo *p_info_arr,int p_info_max) {
+
+ int current=0;
+
+#ifdef DEBUG_ENABLED
+ if (lock) {
+ lock->lock();
+ }
+
+
+ SelfList<GDFunction> *elem=function_list.first();
+ while(elem) {
+ if (current>=p_info_max)
+ break;
+ if (elem->self()->profile.last_frame_call_count>0) {
+ p_info_arr[current].call_count=elem->self()->profile.last_frame_call_count;
+ p_info_arr[current].self_time=elem->self()->profile.last_frame_self_time;
+ p_info_arr[current].total_time=elem->self()->profile.last_frame_total_time;
+ p_info_arr[current].signature=elem->self()->profile.signature;
+ //print_line(String(elem->self()->profile.signature)+": "+itos(elem->self()->profile.last_frame_call_count));
+ current++;
+ }
+ elem=elem->next();
+
+ }
+
+
+ if (lock) {
+ lock->unlock();
+ }
+
+
+#endif
+
+ return current;
+
+}
+
+
+struct GDScriptDepSort {
+
+ //must support sorting so inheritance works properly (parent must be reloaded first)
+ bool operator()(const Ref<GDScript> &A, const Ref<GDScript>& B) const {
+
+ if (A==B)
+ return false; //shouldn't happen but..
+ const GDScript *I=B->get_base().ptr();
+ while(I) {
+ if (I==A.ptr()) {
+ // A is a base of B
+ return true;
+ }
+
+ I=I->get_base().ptr();
+ }
+
+ return false; //not a base
+ }
+};
+
+void GDScriptLanguage::reload_all_scripts() {
+
+
+
+#ifdef DEBUG_ENABLED
+ print_line("RELOAD ALL SCRIPTS");
+ if (lock) {
+ lock->lock();
+ }
+
+ List<Ref<GDScript> > scripts;
+
+ SelfList<GDScript> *elem=script_list.first();
+ while(elem) {
+ if (elem->self()->get_path().is_resource_file()) {
+ print_line("FOUND: "+elem->self()->get_path());
+ scripts.push_back(Ref<GDScript>(elem->self())); //cast to gdscript to avoid being erased by accident
+ }
+ elem=elem->next();
+ }
+
+ if (lock) {
+ lock->unlock();
+ }
+
+ //as scripts are going to be reloaded, must proceed without locking here
+
+ scripts.sort_custom<GDScriptDepSort>(); //update in inheritance dependency order
+
+ for(List<Ref<GDScript> >::Element *E=scripts.front();E;E=E->next()) {
+
+ print_line("RELOADING: "+E->get()->get_path());
+ E->get()->load_source_code(E->get()->get_path());
+ E->get()->reload(true);
+ }
+#endif
+}
void GDScriptLanguage::frame() {
-// print_line("calls: "+itos(calls));
+ // print_line("calls: "+itos(calls));
calls=0;
+
+#ifdef DEBUG_ENABLED
+ if (profiling) {
+ if (lock) {
+ lock->lock();
+ }
+
+ SelfList<GDFunction> *elem=function_list.first();
+ while(elem) {
+ elem->self()->profile.last_frame_call_count=elem->self()->profile.frame_call_count;
+ elem->self()->profile.last_frame_self_time=elem->self()->profile.frame_self_time;
+ elem->self()->profile.last_frame_total_time=elem->self()->profile.frame_total_time;
+ elem->self()->profile.frame_call_count=0;
+ elem->self()->profile.frame_self_time=0;
+ elem->self()->profile.frame_total_time=0;
+ elem=elem->next();
+ }
+
+
+ if (lock) {
+ lock->unlock();
+ }
+ }
+
+#endif
}
/* EDITOR FUNCTIONS */
@@ -2724,7 +1634,7 @@ void GDScriptLanguage::get_reserved_words(List<String> *p_words) const {
"pass",
"return",
"while",
- 0};
+ 0};
const char **w=_reserved_words;
@@ -2756,30 +1666,43 @@ GDScriptLanguage::GDScriptLanguage() {
_debug_parse_err_line=-1;
_debug_parse_err_file="";
- _debug_call_stack_pos=0;
- int dmcs=GLOBAL_DEF("debug/script_max_call_stack",1024);
- if (ScriptDebugger::get_singleton()) {
- //debugging enabled!
+#ifdef NO_THREADS
+ lock=NULL;
+#else
+ lock = Mutex::create();
+#endif
+ profiling=false;
+ script_frame_time=0;
+
+ _debug_call_stack_pos=0;
+ int dmcs=GLOBAL_DEF("debug/script_max_call_stack",1024);
+ if (ScriptDebugger::get_singleton()) {
+ //debugging enabled!
- _debug_max_call_stack = dmcs;
- if (_debug_max_call_stack<1024)
- _debug_max_call_stack=1024;
- _call_stack = memnew_arr( CallLevel, _debug_max_call_stack+1 );
+ _debug_max_call_stack = dmcs;
+ if (_debug_max_call_stack<1024)
+ _debug_max_call_stack=1024;
+ _call_stack = memnew_arr( CallLevel, _debug_max_call_stack+1 );
- } else {
- _debug_max_call_stack=0;
- _call_stack=NULL;
- }
+ } else {
+ _debug_max_call_stack=0;
+ _call_stack=NULL;
+ }
}
GDScriptLanguage::~GDScriptLanguage() {
- if (_call_stack) {
- memdelete_arr(_call_stack);
- }
- singleton=NULL;
+
+ if (lock) {
+ memdelete(lock);
+ lock=NULL;
+ }
+ if (_call_stack) {
+ memdelete_arr(_call_stack);
+ }
+ singleton=NULL;
}
/*************** RESOURCE ***************/
diff --git a/modules/gdscript/gd_script.h b/modules/gdscript/gd_script.h
index 663fc985a7..f052d13685 100644
--- a/modules/gdscript/gd_script.h
+++ b/modules/gdscript/gd_script.h
@@ -32,185 +32,7 @@
#include "script_language.h"
#include "io/resource_loader.h"
#include "io/resource_saver.h"
-#include "os/thread.h"
-#include "pair.h"
-class GDInstance;
-class GDScript;
-
-
-
-class GDFunction {
-public:
-
- enum Opcode {
- OPCODE_OPERATOR,
- OPCODE_EXTENDS_TEST,
- OPCODE_SET,
- OPCODE_GET,
- OPCODE_SET_NAMED,
- OPCODE_GET_NAMED,
- OPCODE_ASSIGN,
- OPCODE_ASSIGN_TRUE,
- OPCODE_ASSIGN_FALSE,
- OPCODE_CONSTRUCT, //only for basic types!!
- OPCODE_CONSTRUCT_ARRAY,
- OPCODE_CONSTRUCT_DICTIONARY,
- OPCODE_CALL,
- OPCODE_CALL_RETURN,
- OPCODE_CALL_BUILT_IN,
- OPCODE_CALL_SELF,
- OPCODE_CALL_SELF_BASE,
- OPCODE_YIELD,
- OPCODE_YIELD_SIGNAL,
- OPCODE_YIELD_RESUME,
- OPCODE_JUMP,
- OPCODE_JUMP_IF,
- OPCODE_JUMP_IF_NOT,
- OPCODE_JUMP_TO_DEF_ARGUMENT,
- OPCODE_RETURN,
- OPCODE_ITERATE_BEGIN,
- OPCODE_ITERATE,
- OPCODE_ASSERT,
- OPCODE_BREAKPOINT,
- OPCODE_LINE,
- OPCODE_END
- };
-
- enum Address {
- ADDR_BITS=24,
- ADDR_MASK=((1<<ADDR_BITS)-1),
- ADDR_TYPE_MASK=~ADDR_MASK,
- ADDR_TYPE_SELF=0,
- ADDR_TYPE_CLASS=1,
- ADDR_TYPE_MEMBER=2,
- ADDR_TYPE_CLASS_CONSTANT=3,
- ADDR_TYPE_LOCAL_CONSTANT=4,
- ADDR_TYPE_STACK=5,
- ADDR_TYPE_STACK_VARIABLE=6,
- ADDR_TYPE_GLOBAL=7,
- ADDR_TYPE_NIL=8
- };
-
- struct StackDebug {
-
- int line;
- int pos;
- bool added;
- StringName identifier;
- };
-
-private:
-friend class GDCompiler;
-
- StringName source;
-
- mutable Variant nil;
- mutable Variant *_constants_ptr;
- int _constant_count;
- const StringName *_global_names_ptr;
- int _global_names_count;
- const int *_default_arg_ptr;
- int _default_arg_count;
- const int *_code_ptr;
- int _code_size;
- int _argument_count;
- int _stack_size;
- int _call_size;
- int _initial_line;
- bool _static;
- GDScript *_script;
-
- StringName name;
- Vector<Variant> constants;
- Vector<StringName> global_names;
- Vector<int> default_arguments;
- Vector<int> code;
-#ifdef DEBUG_ENABLED
- CharString func_cname;
- const char*_func_cname;
-#endif
-
-#ifdef TOOLS_ENABLED
- Vector<StringName> arg_names;
-#endif
-
- List<StackDebug> stack_debug;
-
- _FORCE_INLINE_ Variant *_get_variant(int p_address,GDInstance *p_instance,GDScript *p_script,Variant &self,Variant *p_stack,String& r_error) const;
- _FORCE_INLINE_ String _get_call_error(const Variant::CallError& p_err, const String& p_where,const Variant**argptrs) const;
-
-
-public:
-
- struct CallState {
-
- GDInstance *instance;
- Vector<uint8_t> stack;
- int stack_size;
- Variant self;
- uint32_t alloca_size;
- GDScript *_class;
- int ip;
- int line;
- int defarg;
- Variant result;
-
- };
-
- _FORCE_INLINE_ bool is_static() const { return _static; }
-
- const int* get_code() const; //used for debug
- int get_code_size() const;
- Variant get_constant(int p_idx) const;
- StringName get_global_name(int p_idx) const;
- StringName get_name() const;
- int get_max_stack_size() const;
- int get_default_argument_count() const;
- int get_default_argument_addr(int p_idx) const;
- GDScript *get_script() const { return _script; }
-
- void debug_get_stack_member_state(int p_line,List<Pair<StringName,int> > *r_stackvars) const;
-
- _FORCE_INLINE_ bool is_empty() const { return _code_size==0; }
-
- int get_argument_count() const { return _argument_count; }
- StringName get_argument_name(int p_idx) const {
-#ifdef TOOLS_ENABLED
- ERR_FAIL_INDEX_V(p_idx,arg_names.size(),StringName());
- return arg_names[p_idx];
-#endif
- return StringName();
-
- }
- Variant get_default_argument(int p_idx) const {
- ERR_FAIL_INDEX_V(p_idx,default_arguments.size(),Variant());
- return default_arguments[p_idx];
- }
-
- Variant call(GDInstance *p_instance,const Variant **p_args, int p_argcount,Variant::CallError& r_err,CallState *p_state=NULL);
-
- GDFunction();
-};
-
-
-class GDFunctionState : public Reference {
-
- OBJ_TYPE(GDFunctionState,Reference);
-friend class GDFunction;
- GDFunction *function;
- GDFunction::CallState state;
- Variant _signal_callback(const Variant** p_args, int p_argcount, Variant::CallError& r_error);
-protected:
- static void _bind_methods();
-public:
-
- bool is_valid() const;
- Variant resume(const Variant& p_arg=Variant());
- GDFunctionState();
- ~GDFunctionState();
-};
-
-
+#include "gd_function.h"
class GDNativeClass : public Reference {
OBJ_TYPE(GDNativeClass,Reference);
@@ -258,7 +80,7 @@ friend class GDScriptLanguage;
Set<StringName> members; //members are just indices to the instanced script.
Map<StringName,Variant> constants;
- Map<StringName,GDFunction> member_functions;
+ Map<StringName,GDFunction*> member_functions;
Map<StringName,MemberInfo> member_indices; //members are just indices to the instanced script.
Map<StringName,Ref<GDScript> > subclasses;
Map<StringName,Vector<StringName> > _signals;
@@ -285,6 +107,7 @@ friend class GDScriptLanguage;
String source;
String path;
String name;
+ SelfList<GDScript> script_list;
GDInstance* _create_instance(const Variant** p_args,int p_argcount,Object *p_owner,bool p_isref,Variant::CallError &r_error);
@@ -317,7 +140,7 @@ public:
const Map<StringName,Ref<GDScript> >& get_subclasses() const { return subclasses; }
const Map<StringName,Variant >& get_constants() const { return constants; }
const Set<StringName>& get_members() const { return members; }
- const Map<StringName,GDFunction>& get_member_functions() const { return member_functions; }
+ const Map<StringName,GDFunction*>& get_member_functions() const { return member_functions; }
const Ref<GDNativeClass>& get_native() const { return native; }
virtual bool has_script_signal(const StringName& p_signal) const;
@@ -328,7 +151,7 @@ public:
Ref<GDScript> get_base() const;
const Map<StringName,MemberInfo>& debug_get_member_indices() const { return member_indices; }
- const Map<StringName,GDFunction>& debug_get_member_functions() const; //this is debug only
+ const Map<StringName,GDFunction*>& debug_get_member_functions() const; //this is debug only
StringName debug_get_member_by_index(int p_idx) const;
Variant _new(const Variant** p_args,int p_argcount,Variant::CallError& r_error);
@@ -343,7 +166,7 @@ public:
virtual void set_source_code(const String& p_code);
virtual void update_exports();
- virtual Error reload();
+ virtual Error reload(bool p_keep_state=false);
virtual String get_node_type() const;
void set_script_path(const String& p_path) { path=p_path; } //because subclasses need a path too...
@@ -357,18 +180,24 @@ public:
virtual ScriptLanguage *get_language() const;
GDScript();
+ ~GDScript();
};
class GDInstance : public ScriptInstance {
friend class GDScript;
friend class GDFunction;
friend class GDFunctions;
+friend class GDCompiler;
Object *owner;
Ref<GDScript> script;
+#ifdef DEBUG_ENABLED
+ Map<StringName,int> member_indices_cache; //used only for hot script reloading
+#endif
Vector<Variant> members;
bool base_ref;
+
void _ml_call_reversed(GDScript *sptr,const StringName& p_method,const Variant** p_args,int p_argcount);
public:
@@ -385,7 +214,7 @@ public:
virtual void call_multilevel(const StringName& p_method,const Variant** p_args,int p_argcount);
virtual void call_multilevel_reversed(const StringName& p_method,const Variant** p_args,int p_argcount);
- Variant debug_get_member_by_index(int p_idx) const { return members[p_idx]; }
+ Variant debug_get_member_by_index(int p_idx) const { return members[p_idx]; }
virtual void notification(int p_notification);
@@ -395,6 +224,7 @@ public:
void set_path(const String& p_path);
+ void reload_members();
GDInstance();
~GDInstance();
@@ -431,8 +261,19 @@ class GDScriptLanguage : public ScriptLanguage {
void _add_global(const StringName& p_name,const Variant& p_value);
+ Mutex *lock;
+
+friend class GDScript;
+
+ SelfList<GDScript>::List script_list;
+friend class GDFunction;
+
+ SelfList<GDFunction>::List function_list;
+ bool profiling;
+ uint64_t script_frame_time;
public:
+
int calls;
bool debug_break(const String& p_error,bool p_allow_continue=true);
@@ -547,11 +388,19 @@ public:
virtual void debug_get_globals(List<String> *p_locals, List<Variant> *p_values, int p_max_subitems=-1,int p_max_depth=-1);
virtual String debug_parse_stack_level_expression(int p_level,const String& p_expression,int p_max_subitems=-1,int p_max_depth=-1);
+ virtual void reload_all_scripts();
+
virtual void frame();
virtual void get_public_functions(List<MethodInfo> *p_functions) const;
virtual void get_public_constants(List<Pair<String,Variant> > *p_constants) const;
+ virtual void profiling_start();
+ virtual void profiling_stop();
+
+ virtual int profiling_get_accumulated_data(ProfilingInfo *p_info_arr,int p_info_max);
+ virtual int profiling_get_frame_data(ProfilingInfo *p_info_arr,int p_info_max);
+
/* LOADER FUNCTIONS */
virtual void get_recognized_extensions(List<String> *p_extensions) const;
diff --git a/platform/android/SCsub b/platform/android/SCsub
index fab8458b26..c8feac8690 100644
--- a/platform/android/SCsub
+++ b/platform/android/SCsub
@@ -65,17 +65,17 @@ for x in env.android_java_dirs:
gradle_res_dirs_text=""
for x in env.android_res_dirs:
- gradle_res_dirs_text+=",'"+x+"'"
+ gradle_res_dirs_text+=",'"+x.replace("\\","/")+"'"
gradle_aidl_dirs_text=""
for x in env.android_aidl_dirs:
- gradle_aidl_dirs_text+=",'"+x+"'"
+ gradle_aidl_dirs_text+=",'"+x.replace("\\","/")+"'"
gradle_jni_dirs_text=""
for x in env.android_jni_dirs:
- gradle_jni_dirs_text+=",'"+x+"'"
+ gradle_jni_dirs_text+=",'"+x.replace("\\","/")+"'"
gradle_asset_dirs_text=""
diff --git a/platform/android/detect.py b/platform/android/detect.py
index 7d7fd174e5..ba6b73a89f 100644
--- a/platform/android/detect.py
+++ b/platform/android/detect.py
@@ -21,7 +21,6 @@ def get_opts():
return [
('ANDROID_NDK_ROOT', 'the path to Android NDK', os.environ.get("ANDROID_NDK_ROOT", 0)),
- ('NDK_TOOLCHAIN', 'toolchain to use for the NDK',"arm-eabi-4.4.0"),
('NDK_TARGET', 'toolchain to use for the NDK',os.environ.get("NDK_TARGET", "arm-linux-androideabi-4.9")),
('NDK_TARGET_X86', 'toolchain to use for the NDK x86',os.environ.get("NDK_TARGET_X86", "x86-4.9")),
('ndk_platform', 'compile for platform: (android-<api> , example: android-15)',"android-15"),
@@ -169,11 +168,11 @@ def configure(env):
env['neon_enabled']=False
if env['android_arch']=='x86':
- env['CCFLAGS'] = string.split('-DNO_STATVFS -MMD -MP -MF -fpic -ffunction-sections -funwind-tables -fstack-protector -fvisibility=hidden -D__GLIBC__ -Wno-psabi -ftree-vectorize -funsafe-math-optimizations -fno-strict-aliasing -DANDROID -Wa,--noexecstack -DGLES2_ENABLED')
+ env['CCFLAGS'] = string.split('-DNO_STATVFS -fpic -ffunction-sections -funwind-tables -fstack-protector -fvisibility=hidden -D__GLIBC__ -Wno-psabi -ftree-vectorize -funsafe-math-optimizations -fno-strict-aliasing -DANDROID -Wa,--noexecstack -DGLES2_ENABLED')
elif env["android_arch"]=="armv6":
- env['CCFLAGS'] = string.split('-DNO_STATVFS -MMD -MP -MF -fpic -ffunction-sections -funwind-tables -fstack-protector -fvisibility=hidden -D__ARM_ARCH_6__ -D__GLIBC__ -Wno-psabi -march=armv6 -mfpu=vfp -mfloat-abi=softfp -funsafe-math-optimizations -fno-strict-aliasing -DANDROID -Wa,--noexecstack -DGLES2_ENABLED')
+ env['CCFLAGS'] = string.split('-DNO_STATVFS -fpic -ffunction-sections -funwind-tables -fstack-protector -fvisibility=hidden -D__ARM_ARCH_6__ -D__GLIBC__ -Wno-psabi -march=armv6 -mfpu=vfp -mfloat-abi=softfp -funsafe-math-optimizations -fno-strict-aliasing -DANDROID -Wa,--noexecstack -DGLES2_ENABLED')
elif env["android_arch"]=="armv7":
- env['CCFLAGS'] = string.split('-DNO_STATVFS -MMD -MP -MF -fpic -ffunction-sections -funwind-tables -fstack-protector -fvisibility=hidden -D__ARM_ARCH_7__ -D__ARM_ARCH_7A__ -D__GLIBC__ -Wno-psabi -march=armv7-a -mfloat-abi=softfp -ftree-vectorize -funsafe-math-optimizations -fno-strict-aliasing -DANDROID -Wa,--noexecstack -DGLES2_ENABLED')
+ env['CCFLAGS'] = string.split('-DNO_STATVFS -fpic -ffunction-sections -funwind-tables -fstack-protector -fvisibility=hidden -D__ARM_ARCH_7__ -D__ARM_ARCH_7A__ -D__GLIBC__ -Wno-psabi -march=armv7-a -mfloat-abi=softfp -ftree-vectorize -funsafe-math-optimizations -fno-strict-aliasing -DANDROID -Wa,--noexecstack -DGLES2_ENABLED')
if env['android_neon']=='yes':
env['neon_enabled']=True
env.Append(CCFLAGS=['-mfpu=neon','-D__ARM_NEON__'])
diff --git a/platform/android/globals/global_defaults.h b/platform/android/globals/global_defaults.h
index 64eb26c482..11617ddfd0 100644
--- a/platform/android/globals/global_defaults.h
+++ b/platform/android/globals/global_defaults.h
@@ -1,3 +1,3 @@
-void register_android_global_defaults(); \ No newline at end of file
+void register_android_global_defaults();
diff --git a/platform/android/godot_android.cpp b/platform/android/godot_android.cpp
index f9feb3481f..edb051575f 100644
--- a/platform/android/godot_android.cpp
+++ b/platform/android/godot_android.cpp
@@ -313,6 +313,7 @@ struct engine {
ASensorManager* sensorManager;
const ASensor* accelerometerSensor;
+ const ASensor* magnetometerSensor;
ASensorEventQueue* sensorEventQueue;
bool display_active;
@@ -736,15 +737,28 @@ static void engine_handle_cmd(struct android_app* app, int32_t cmd) {
engine->accelerometerSensor, (1000L/60)*1000);
}
+ // Also start monitoring the magnetometer.
+ if (engine->magnetometerSensor != NULL) {
+ ASensorEventQueue_enableSensor(engine->sensorEventQueue,
+ engine->magnetometerSensor);
+ // We'd like to get 60 events per second (in us).
+ ASensorEventQueue_setEventRate(engine->sensorEventQueue,
+ engine->magnetometerSensor, (1000L/60)*1000);
+
+ }
engine->animating = 1;
break;
case APP_CMD_LOST_FOCUS:
- // When our app loses focus, we stop monitoring the accelerometer.
+ // When our app loses focus, we stop monitoring the sensors.
// This is to avoid consuming battery while not being used.
if (engine->accelerometerSensor != NULL) {
ASensorEventQueue_disableSensor(engine->sensorEventQueue,
engine->accelerometerSensor);
}
+ if (engine->magnetometerSensor != NULL) {
+ ASensorEventQueue_disableSensor(engine->sensorEventQueue,
+ engine->magnetometerSensor);
+ }
// Also stop animating.
engine->animating = 0;
engine_draw_frame(engine);
@@ -768,10 +782,12 @@ void android_main(struct android_app* state) {
FileAccessAndroid::asset_manager=state->activity->assetManager;
- // Prepare to monitor accelerometer
+ // Prepare to monitor sensors
engine.sensorManager = ASensorManager_getInstance();
engine.accelerometerSensor = ASensorManager_getDefaultSensor(engine.sensorManager,
- ASENSOR_TYPE_ACCELEROMETER);
+ ASENSOR_TYPE_ACCELEROMETER);
+ engine.magnetometerSensor = ASensorManager_getDefaultSensor(engine.sensorManager,
+ ASENSOR_TYPE_MAGNETIC_FIELD);
engine.sensorEventQueue = ASensorManager_createEventQueue(engine.sensorManager,
state->looper, LOOPER_ID_USER, NULL, NULL);
@@ -812,16 +828,21 @@ void android_main(struct android_app* state) {
// If a sensor has data, process it now.
// LOGI("events\n");
if (ident == LOOPER_ID_USER) {
- if (engine.accelerometerSensor != NULL) {
+ if (engine.accelerometerSensor != NULL || engine.magnetometerSensor != NULL) {
ASensorEvent event;
while (ASensorEventQueue_getEvents(engine.sensorEventQueue,
&event, 1) > 0) {
if (engine.os) {
+ if (event.acceleration != NULL) {
engine.os->process_accelerometer(Vector3(event.acceleration.x, event.acceleration.y,
event.acceleration.z));
-
+ }
+ if (event.magnetic != NULL) {
+ engine.os->process_magnetometer(Vector3(event.magnetic.x, event.magnetic.y,
+ event.magnetic.z));
+ }
}
}
diff --git a/platform/android/java/res/drawable/icon.png b/platform/android/java/res/drawable/icon.png
index 013632ddf1..e334f5fa78 100644
--- a/platform/android/java/res/drawable/icon.png
+++ b/platform/android/java/res/drawable/icon.png
Binary files differ
diff --git a/platform/android/java/src/org/godotengine/godot/Godot.java b/platform/android/java/src/org/godotengine/godot/Godot.java
index a28750abae..73d54b6afa 100644
--- a/platform/android/java/src/org/godotengine/godot/Godot.java
+++ b/platform/android/java/src/org/godotengine/godot/Godot.java
@@ -206,6 +206,7 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
private SensorManager mSensorManager;
private Sensor mAccelerometer;
+ private Sensor mMagnetometer;
public FrameLayout layout;
public RelativeLayout adLayout;
@@ -374,6 +375,8 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_GAME);
+ mMagnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
+ mSensorManager.registerListener(this, mMagnetometer, SensorManager.SENSOR_DELAY_GAME);
result_callback = null;
@@ -588,6 +591,7 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
mView.onResume();
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
+ mSensorManager.registerListener(this, mMagnetometer, SensorManager.SENSOR_DELAY_NORMAL);
GodotLib.focusin();
if(use_immersive && Build.VERSION.SDK_INT >= 19.0){ // check if the application runs on an android 4.4+
Window window = getWindow();
@@ -646,7 +650,14 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
float x = adjustedValues[0];
float y = adjustedValues[1];
float z = adjustedValues[2];
- GodotLib.accelerometer(x,y,z);
+
+ int typeOfSensor = event.sensor.getType();
+ if (typeOfSensor == event.sensor.TYPE_ACCELEROMETER) {
+ GodotLib.accelerometer(x,y,z);
+ }
+ if (typeOfSensor == event.sensor.TYPE_MAGNETIC_FIELD) {
+ GodotLib.magnetometer(x,y,z);
+ }
}
@Override public final void onAccuracyChanged(Sensor sensor, int accuracy) {
diff --git a/platform/android/java/src/org/godotengine/godot/GodotLib.java b/platform/android/java/src/org/godotengine/godot/GodotLib.java
index 7c5ac33c85..df181ae1bb 100644
--- a/platform/android/java/src/org/godotengine/godot/GodotLib.java
+++ b/platform/android/java/src/org/godotengine/godot/GodotLib.java
@@ -51,6 +51,7 @@ public class GodotLib {
public static native void step();
public static native void touch(int what,int pointer,int howmany, int[] arr);
public static native void accelerometer(float x, float y, float z);
+ public static native void magnetometer(float x, float y, float z);
public static native void key(int p_scancode, int p_unicode_char, boolean p_pressed);
public static native void joybutton(int p_device, int p_but, boolean p_pressed);
public static native void joyaxis(int p_device, int p_axis, float p_value);
diff --git a/platform/android/java_glue.cpp b/platform/android/java_glue.cpp
index b5beb8fa2c..1ea7cd7ebb 100644
--- a/platform/android/java_glue.cpp
+++ b/platform/android/java_glue.cpp
@@ -650,6 +650,7 @@ static bool resized_reload=false;
static bool quit_request=false;
static Size2 new_size;
static Vector3 accelerometer;
+static Vector3 magnetometer;
static HashMap<String,JNISingleton*> jni_singletons;
static jobject godot_io;
@@ -1088,6 +1089,8 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_step(JNIEnv * env, jo
os_android->process_accelerometer(accelerometer);
+ os_android->process_magnetometer(magnetometer);
+
if (os_android->main_loop_iterate()==true) {
jclass cls = env->FindClass("org/godotengine/godot/Godot");
@@ -1488,6 +1491,14 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_accelerometer(JNIEnv
}
+JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_magnetometer(JNIEnv * env, jobject obj, jfloat x, jfloat y, jfloat z) {
+
+ input_mutex->lock();
+ magnetometer=Vector3(x,y,z);
+ input_mutex->unlock();
+
+}
+
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_focusin(JNIEnv * env, jobject obj){
if (!suspend_mutex)
diff --git a/platform/android/java_glue.h b/platform/android/java_glue.h
index 1d65d21251..f7916efe2c 100644
--- a/platform/android/java_glue.h
+++ b/platform/android/java_glue.h
@@ -49,6 +49,7 @@ extern "C" {
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyconnectionchanged(JNIEnv * env, jobject obj, jint p_device, jboolean p_connected, jstring p_name);
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_audio(JNIEnv * env, jobject obj);
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_accelerometer(JNIEnv * env, jobject obj, jfloat x, jfloat y, jfloat z);
+ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_magnetometer(JNIEnv * env, jobject obj, jfloat x, jfloat y, jfloat z);
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_focusin(JNIEnv * env, jobject obj);
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_focusout(JNIEnv * env, jobject obj);
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_singleton(JNIEnv * env, jobject obj, jstring name,jobject p_object);
diff --git a/platform/android/os_android.cpp b/platform/android/os_android.cpp
index 2ef28333be..4e6dfb2db2 100644
--- a/platform/android/os_android.cpp
+++ b/platform/android/os_android.cpp
@@ -609,6 +609,11 @@ void OS_Android::process_accelerometer(const Vector3& p_accelerometer) {
input->set_accelerometer(p_accelerometer);
}
+void OS_Android::process_magnetometer(const Vector3& p_magnetometer) {
+
+ input->set_magnetometer(p_magnetometer);
+}
+
bool OS_Android::has_touchscreen_ui_hint() const {
return true;
diff --git a/platform/android/os_android.h b/platform/android/os_android.h
index ec1f4119b4..843b3c4788 100644
--- a/platform/android/os_android.h
+++ b/platform/android/os_android.h
@@ -239,6 +239,7 @@ public:
void process_accelerometer(const Vector3& p_accelerometer);
+ void process_magnetometer(const Vector3& p_magnetometer);
void process_touch(int p_what,int p_pointer, const Vector<TouchPos>& p_points);
void process_joy_event(JoystickEvent p_event);
void process_event(InputEvent p_event);
diff --git a/platform/iphone/globals/global_defaults.h b/platform/iphone/globals/global_defaults.h
index 25f1ae687e..305b600b43 100644
--- a/platform/iphone/globals/global_defaults.h
+++ b/platform/iphone/globals/global_defaults.h
@@ -1,3 +1,3 @@
-void register_iphone_global_defaults(); \ No newline at end of file
+void register_iphone_global_defaults();
diff --git a/platform/iphone/rasterizer_iphone.cpp b/platform/iphone/rasterizer_iphone.cpp
index f06f12547f..99e83343d0 100644
--- a/platform/iphone/rasterizer_iphone.cpp
+++ b/platform/iphone/rasterizer_iphone.cpp
@@ -2446,7 +2446,7 @@ void RasterizerIPhone::canvas_draw_rect(const Rect2& p_rect, bool p_region, cons
}
-void RasterizerIPhone::canvas_draw_style_box(const Rect2& p_rect, RID p_texture,const float *p_margin, bool p_draw_center) {
+void RasterizerIPhone::canvas_draw_style_box(const Rect2& p_rect, const Rect2& p_src_region, RID p_texture,const float *p_margin, bool p_draw_center) {
glColor4f(1, 1, 1, 1);
@@ -2458,52 +2458,56 @@ void RasterizerIPhone::canvas_draw_style_box(const Rect2& p_rect, RID p_texture,
glBindTexture( GL_TEXTURE_2D,texture->tex_id );
+ Rect2 region = p_src_region;
+ if (region.size.width <= 0 )
+ region.size.width = texture->width;
+ if (region.size.height <= 0)
+ region.size.height = texture->height;
/* CORNERS */
-
_draw_textured_quad( // top left
Rect2( p_rect.pos, Size2(p_margin[MARGIN_LEFT],p_margin[MARGIN_TOP])),
- Rect2( Point2(), Size2(p_margin[MARGIN_LEFT],p_margin[MARGIN_TOP])),
+ Rect2( region.pos, Size2(p_margin[MARGIN_LEFT],p_margin[MARGIN_TOP])),
Size2( texture->width, texture->height ) );
_draw_textured_quad( // top right
Rect2( Point2( p_rect.pos.x + p_rect.size.width - p_margin[MARGIN_RIGHT], p_rect.pos.y), Size2(p_margin[MARGIN_RIGHT],p_margin[MARGIN_TOP])),
- Rect2( Point2(texture->width-p_margin[MARGIN_RIGHT],0), Size2(p_margin[MARGIN_RIGHT],p_margin[MARGIN_TOP])),
+ Rect2( Point2(region.pos.x+region.size.width-p_margin[MARGIN_RIGHT], region.pos.y), Size2(p_margin[MARGIN_RIGHT],p_margin[MARGIN_TOP])),
Size2( texture->width, texture->height ) );
_draw_textured_quad( // bottom left
Rect2( Point2(p_rect.pos.x,p_rect.pos.y + p_rect.size.height - p_margin[MARGIN_BOTTOM]), Size2(p_margin[MARGIN_LEFT],p_margin[MARGIN_BOTTOM])),
- Rect2( Point2(0,texture->height-p_margin[MARGIN_BOTTOM]), Size2(p_margin[MARGIN_LEFT],p_margin[MARGIN_BOTTOM])),
+ Rect2( Point2(region.pos.x, region.pos.y+region.size.height-p_margin[MARGIN_BOTTOM]), Size2(p_margin[MARGIN_LEFT],p_margin[MARGIN_BOTTOM])),
Size2( texture->width, texture->height ) );
_draw_textured_quad( // bottom right
Rect2( Point2( p_rect.pos.x + p_rect.size.width - p_margin[MARGIN_RIGHT], p_rect.pos.y + p_rect.size.height - p_margin[MARGIN_BOTTOM]), Size2(p_margin[MARGIN_RIGHT],p_margin[MARGIN_BOTTOM])),
- Rect2( Point2(texture->width-p_margin[MARGIN_RIGHT],texture->height-p_margin[MARGIN_BOTTOM]), Size2(p_margin[MARGIN_RIGHT],p_margin[MARGIN_BOTTOM])),
+ Rect2( Point2(region.pos.x+region.size.width-p_margin[MARGIN_RIGHT], region.pos.y+region.size.height-p_margin[MARGIN_BOTTOM]), Size2(p_margin[MARGIN_RIGHT],p_margin[MARGIN_BOTTOM])),
Size2( texture->width, texture->height ) );
Rect2 rect_center( p_rect.pos+Point2( p_margin[MARGIN_LEFT], p_margin[MARGIN_TOP]), Size2( p_rect.size.width - p_margin[MARGIN_LEFT] - p_margin[MARGIN_RIGHT], p_rect.size.height - p_margin[MARGIN_TOP] - p_margin[MARGIN_BOTTOM] ));
- Rect2 src_center( Point2( p_margin[MARGIN_LEFT], p_margin[MARGIN_TOP]), Size2( texture->width - p_margin[MARGIN_LEFT] - p_margin[MARGIN_RIGHT], texture->height - p_margin[MARGIN_TOP] - p_margin[MARGIN_BOTTOM] ));
+ Rect2 src_center( Point2(region.pos.x+p_margin[MARGIN_LEFT], region.pos.y+p_margin[MARGIN_TOP]), Size2(region.size.width - p_margin[MARGIN_LEFT] - p_margin[MARGIN_RIGHT], region.size.height - p_margin[MARGIN_TOP] - p_margin[MARGIN_BOTTOM] ));
_draw_textured_quad( // top
Rect2( Point2(rect_center.pos.x,p_rect.pos.y),Size2(rect_center.size.width,p_margin[MARGIN_TOP])),
- Rect2( Point2(p_margin[MARGIN_LEFT],0), Size2(src_center.size.width,p_margin[MARGIN_TOP])),
+ Rect2( Point2(src_center.pos.x,region.pos.y), Size2(src_center.size.width,p_margin[MARGIN_TOP])),
Size2( texture->width, texture->height ) );
_draw_textured_quad( // bottom
Rect2( Point2(rect_center.pos.x,rect_center.pos.y+rect_center.size.height),Size2(rect_center.size.width,p_margin[MARGIN_BOTTOM])),
- Rect2( Point2(p_margin[MARGIN_LEFT],src_center.pos.y+src_center.size.height), Size2(src_center.size.width,p_margin[MARGIN_BOTTOM])),
+ Rect2( Point2(src_center.pos.x,src_center.pos.y+src_center.size.height), Size2(src_center.size.width,p_margin[MARGIN_BOTTOM])),
Size2( texture->width, texture->height ) );
_draw_textured_quad( // left
Rect2( Point2(p_rect.pos.x,rect_center.pos.y),Size2(p_margin[MARGIN_LEFT],rect_center.size.height)),
- Rect2( Point2(0,p_margin[MARGIN_TOP]), Size2(p_margin[MARGIN_LEFT],src_center.size.height)),
+ Rect2( Point2(region.pos.x,region.pos.y+p_margin[MARGIN_TOP]), Size2(p_margin[MARGIN_LEFT],src_center.size.height)),
Size2( texture->width, texture->height ) );
_draw_textured_quad( // right
Rect2( Point2(rect_center.pos.x+rect_center.size.width,rect_center.pos.y),Size2(p_margin[MARGIN_RIGHT],rect_center.size.height)),
- Rect2( Point2(src_center.pos.x+src_center.size.width,p_margin[MARGIN_TOP]), Size2(p_margin[MARGIN_RIGHT],src_center.size.height)),
+ Rect2( Point2(src_center.pos.x+src_center.size.width,region.pos.y+p_margin[MARGIN_TOP]), Size2(p_margin[MARGIN_RIGHT],src_center.size.height)),
Size2( texture->width, texture->height ) );
if (p_draw_center) {
diff --git a/platform/javascript/dom_keys.h b/platform/javascript/dom_keys.h
index 555c90a529..282b632e93 100644
--- a/platform/javascript/dom_keys.h
+++ b/platform/javascript/dom_keys.h
@@ -220,17 +220,17 @@
#define DOM_VK_WIN_OEM_CLEAR 0xFE
int dom2godot_scancode(int dom_keycode) {
-
+
if (DOM_VK_0 <= dom_keycode && dom_keycode <= DOM_VK_Z) {
// ASCII intersection
return dom_keycode;
}
-
+
if (DOM_VK_NUMPAD0 <= dom_keycode && dom_keycode <= DOM_VK_NUMPAD9) {
// Numpad numbers
return KEY_KP_0 + (dom_keycode - DOM_VK_NUMPAD0);
}
-
+
if (DOM_VK_F1 <= dom_keycode && dom_keycode <= DOM_VK_F16) {
// F1-F16
return KEY_F1 + (dom_keycode - DOM_VK_F1);
@@ -259,7 +259,7 @@ int dom2godot_scancode(int dom_keycode) {
case DOM_VK_PAUSE: return KEY_PAUSE;
case DOM_VK_CAPS_LOCK: return KEY_CAPSLOCK;
-
+
/*
case DOM_VK_KANA: return KEY_UNKNOWN;
case DOM_VK_HANGUL: return KEY_UNKNOWN;
@@ -269,7 +269,7 @@ int dom2godot_scancode(int dom_keycode) {
case DOM_VK_HANJA: return KEY_UNKNOWN;
case DOM_VK_KANJI: return KEY_UNKNOWN;
*/
-
+
case DOM_VK_ESCAPE: return KEY_ESCAPE;
/*
case DOM_VK_CONVERT: return KEY_UNKNOWN;
@@ -277,8 +277,8 @@ int dom2godot_scancode(int dom_keycode) {
case DOM_VK_ACCEPT: return KEY_UNKNOWN;
case DOM_VK_MODECHANGE: return KEY_UNKNOWN;
*/
-
- case DOM_VK_SPACE: return KEY_SPACE;
+
+ case DOM_VK_SPACE: return KEY_SPACE;
case DOM_VK_PAGE_UP: return KEY_PAGEUP;
case DOM_VK_PAGE_DOWN: return KEY_PAGEDOWN;
case DOM_VK_END: return KEY_END;
@@ -287,7 +287,7 @@ int dom2godot_scancode(int dom_keycode) {
case DOM_VK_UP: return KEY_UP;
case DOM_VK_RIGHT: return KEY_RIGHT;
case DOM_VK_DOWN: return KEY_DOWN;
-
+
//case DOM_VK_SELECT: return KEY_UNKNOWN;
case DOM_VK_PRINTSCREEN: // this is the usual printScreen key
@@ -297,7 +297,7 @@ int dom2godot_scancode(int dom_keycode) {
//case DOM_VK_EXECUTE: return KEY_UNKNOWN;
case DOM_VK_INSERT: return KEY_INSERT;
case DOM_VK_DELETE: return KEY_DELETE;
-
+
case DOM_VK_META:
case DOM_VK_WIN:
return KEY_META;
@@ -312,7 +312,7 @@ int dom2godot_scancode(int dom_keycode) {
case DOM_VK_SUBTRACT: return KEY_KP_SUBTRACT;
case DOM_VK_DECIMAL: return KEY_KP_PERIOD;
case DOM_VK_DIVIDE: return KEY_KP_DIVIDE;
-
+
/*
case DOM_VK_F17: return KEY_UNKNOWN;
case DOM_VK_F18: return KEY_UNKNOWN;
@@ -323,7 +323,7 @@ int dom2godot_scancode(int dom_keycode) {
case DOM_VK_F23: return KEY_UNKNOWN;
case DOM_VK_F24: return KEY_UNKNOWN;
*/
-
+
case DOM_VK_NUM_LOCK: return KEY_NUMLOCK;
case DOM_VK_SCROLL_LOCK: return KEY_SCROLLLOCK;
@@ -352,11 +352,11 @@ int dom2godot_scancode(int dom_keycode) {
case DOM_VK_OPEN_CURLY_BRACKET: return KEY_BRACELEFT;
case DOM_VK_CLOSE_CURLY_BRACKET: return KEY_BRACERIGHT;
case DOM_VK_TILDE: return KEY_ASCIITILDE;
-
+
case DOM_VK_VOLUME_MUTE: return KEY_VOLUMEMUTE;
case DOM_VK_VOLUME_DOWN: return KEY_VOLUMEDOWN;
case DOM_VK_VOLUME_UP: return KEY_VOLUMEUP;
-
+
case DOM_VK_COMMA: return KEY_COMMA;
case DOM_VK_PERIOD: return KEY_PERIOD;
case DOM_VK_SLASH: return KEY_SLASH;
@@ -365,9 +365,9 @@ int dom2godot_scancode(int dom_keycode) {
case DOM_VK_BACK_SLASH: return KEY_BACKSLASH;
case DOM_VK_CLOSE_BRACKET: return KEY_BRACKETRIGHT;
case DOM_VK_QUOTE: return KEY_APOSTROPHE;
-
+
// rest is OEM/unusual
-
+
default: return KEY_UNKNOWN;
};
}
diff --git a/platform/osx/detect.py b/platform/osx/detect.py
index 1f176dc22a..d668509b90 100644
--- a/platform/osx/detect.py
+++ b/platform/osx/detect.py
@@ -58,8 +58,8 @@ def configure(env):
if (env["freetype"]!="no"):
env.Append(CCFLAGS=['-DFREETYPE_ENABLED'])
- env.Append(CPPPATH=['#tools/freetype'])
- env.Append(CPPPATH=['#tools/freetype/freetype/include'])
+ env.Append(CPPPATH=['#drivers/freetype'])
+ env.Append(CPPPATH=['#drivers/freetype/freetype/include'])
@@ -68,9 +68,12 @@ def configure(env):
if (env["bits"]=="64"):
env.Append(CCFLAGS=['-arch', 'x86_64'])
env.Append(LINKFLAGS=['-arch', 'x86_64'])
- else:
+ elif (env["bits"]=="32"):
env.Append(CCFLAGS=['-arch', 'i386'])
env.Append(LINKFLAGS=['-arch', 'i386'])
+ else:
+ env.Append(CCFLAGS=['-arch', 'i386', '-arch', 'x86_64'])
+ env.Append(LINKFLAGS=['-arch', 'i386', '-arch', 'x86_64'])
else:
#osxcross build
root=os.environ.get("OSXCROSS_ROOT",0)
diff --git a/platform/osx/dir_access_osx.mm b/platform/osx/dir_access_osx.mm
index 20dc1df8f4..d123c5c648 100644
--- a/platform/osx/dir_access_osx.mm
+++ b/platform/osx/dir_access_osx.mm
@@ -319,10 +319,10 @@ size_t DirAccessOSX::get_space_left() {
struct statvfs vfs;
if (statvfs(current_dir.utf8().get_data(), &vfs) != 0) {
- return -1;
+ return 0;
};
- return vfs.f_bfree * vfs.f_bsize;
+ return (size_t) (vfs.f_bavail * vfs.f_bsize);
#else
#warning THIS IS BROKEN
return 0;
diff --git a/platform/osx/export/export.cpp b/platform/osx/export/export.cpp
index 3bc4ebdb1a..2604c2c15a 100644
--- a/platform/osx/export/export.cpp
+++ b/platform/osx/export/export.cpp
@@ -32,6 +32,7 @@ class EditorExportPlatformOSX : public EditorExportPlatform {
String signature;
String copyright;
bool use64;
+ bool useFat;
bool high_resolution;
Ref<ImageTexture> logo;
@@ -95,6 +96,8 @@ bool EditorExportPlatformOSX::_set(const StringName& p_name, const Variant& p_va
copyright=p_value;
else if (n=="application/64_bits")
use64=p_value;
+ else if (n=="application/fat_bits")
+ useFat=p_value;
else if (n=="display/high_res")
high_resolution=p_value;
else
@@ -129,6 +132,8 @@ bool EditorExportPlatformOSX::_get(const StringName& p_name,Variant &r_ret) cons
r_ret=copyright;
else if (n=="application/64_bits")
r_ret=use64;
+ else if (n=="application/fat_bits")
+ r_ret=useFat;
else if (n=="display/high_res")
r_ret=high_resolution;
else
@@ -150,6 +155,7 @@ void EditorExportPlatformOSX::_get_property_list( List<PropertyInfo> *p_list) co
p_list->push_back( PropertyInfo( Variant::STRING, "application/version") );
p_list->push_back( PropertyInfo( Variant::STRING, "application/copyright") );
p_list->push_back( PropertyInfo( Variant::BOOL, "application/64_bits") );
+ p_list->push_back( PropertyInfo( Variant::BOOL, "application/fat_bits") );
p_list->push_back( PropertyInfo( Variant::BOOL, "display/high_res") );
@@ -287,7 +293,7 @@ Error EditorExportPlatformOSX::export_project(const String& p_path, bool p_debug
io2.opaque=&dst_f;
zipFile dpkg=zipOpen2(p_path.utf8().get_data(),APPEND_STATUS_CREATE,NULL,&io2);
- String binary_to_use="godot_osx_"+String(p_debug?"debug":"release")+"."+String(use64?"64":"32");
+ String binary_to_use="godot_osx_"+String(p_debug?"debug":"release")+"."+String(useFat?"fat":use64?"64":"32");
print_line("binary: "+binary_to_use);
String pkg_name;
@@ -459,6 +465,7 @@ EditorExportPlatformOSX::EditorExportPlatformOSX() {
short_version="1.0";
version="1.0";
use64=false;
+ useFat=false;
high_resolution=false;
}
diff --git a/platform/osx/os_osx.h b/platform/osx/os_osx.h
index d88dd89002..8d64686335 100644
--- a/platform/osx/os_osx.h
+++ b/platform/osx/os_osx.h
@@ -59,7 +59,7 @@ public:
bool force_quit;
Rasterizer *rasterizer;
VisualServer *visual_server;
- VideoMode current_videomode;
+
List<String> args;
MainLoop *main_loop;
unsigned int event_id;
@@ -104,9 +104,22 @@ public:
bool minimized;
bool maximized;
bool zoomed;
+
Vector<Rect2> screens;
+ Vector<int> screen_dpi;
+
+ Size2 window_size;
int current_screen;
Rect2 restore_rect;
+
+ float _mouse_scale(float p_scale) {
+ if (display_scale>1.0)
+ return p_scale;
+ else
+ return 1.0;
+ }
+
+ float display_scale;
protected:
virtual int get_video_driver_count() const;
@@ -173,6 +186,9 @@ public:
virtual int get_current_screen() const;
virtual void set_current_screen(int p_screen);
virtual Point2 get_screen_position(int p_screen=0) const;
+ virtual Size2 get_screen_size(int p_screen=0) const;
+ virtual int get_screen_dpi(int p_screen=0) const;
+
virtual Point2 get_window_position() const;
virtual void set_window_position(const Point2& p_position);
virtual void set_window_size(const Size2 p_size);
@@ -184,7 +200,6 @@ public:
virtual bool is_window_minimized() const;
virtual void set_window_maximized(bool p_enabled);
virtual bool is_window_maximized() const;
- Size2 get_screen_size(int p_screen=0) const;
void run();
diff --git a/platform/osx/os_osx.mm b/platform/osx/os_osx.mm
index c443fc2d0e..b5503fcd73 100644
--- a/platform/osx/os_osx.mm
+++ b/platform/osx/os_osx.mm
@@ -139,12 +139,10 @@ static int button_mask=0;
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
{
-/* _Godotwindow* window;
+ if (OS_OSX::singleton->get_main_loop())
+ OS_OSX::singleton->get_main_loop()->notification(MainLoop::NOTIFICATION_WM_QUIT_REQUEST);
- for (window = _Godot.windowListHead; window; window = window->next)
- _GodotInputWindowCloseRequest(window);
-*/
- return NSTerminateCancel;
+ return NSTerminateCancel;
}
- (void)applicationDidHide:(NSNotification *)notification
@@ -202,10 +200,10 @@ static int button_mask=0;
[OS_OSX::singleton->context update];
const NSRect contentRect = [OS_OSX::singleton->window_view frame];
- const NSRect fbRect = convertRectToBacking(contentRect);
+ const NSRect fbRect = contentRect;//convertRectToBacking(contentRect);
- OS_OSX::singleton->current_videomode.width=fbRect.size.width;
- OS_OSX::singleton->current_videomode.height=fbRect.size.height;
+ OS_OSX::singleton->window_size.width=fbRect.size.width*OS_OSX::singleton->display_scale;
+ OS_OSX::singleton->window_size.height=fbRect.size.height*OS_OSX::singleton->display_scale;
// _GodotInputFramebufferSize(window, fbRect.size.width, fbRect.size.height);
@@ -291,16 +289,52 @@ static int button_mask=0;
self = [super init];
trackingArea = nil;
[self updateTrackingAreas];
-
+ [self registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]];
return self;
}
+
-(void)dealloc
{
[trackingArea release];
[super dealloc];
}
+- (NSDragOperation)draggingEntered:(id < NSDraggingInfo >)sender {
+ return NSDragOperationCopy;
+}
+
+- (NSDragOperation)draggingUpdated:(id<NSDraggingInfo>)sender {
+ return NSDragOperationCopy;
+}
+
+- (BOOL)performDragOperation:(id<NSDraggingInfo>)sender {
+
+
+ NSPasteboard *pboard = [sender draggingPasteboard];
+ NSArray *filenames = [pboard propertyListForType:NSFilenamesPboardType];
+
+ Vector<String> files;
+ for(int i=0;i<filenames.count;i++) {
+ NSString *ns = [filenames objectAtIndex:i];
+ char *utfs = strdup([ns UTF8String]);
+ String ret;
+ ret.parse_utf8(utfs);
+ free(utfs);
+ files.push_back(ret);
+
+
+ }
+
+ if (files.size()) {
+ OS_OSX::singleton->main_loop->drop_files(files,0);
+ OS_OSX::singleton->move_window_to_foreground();
+ }
+
+ return NO;
+}
+
+
- (BOOL)isOpaque
{
return YES;
@@ -324,7 +358,7 @@ static int button_mask=0;
- (void)mouseDown:(NSEvent *)event
{
- print_line("mouse down:");
+ //print_line("mouse down:");
button_mask|=BUTTON_MASK_LEFT;
InputEvent ev;
ev.type=InputEvent::MOUSE_BUTTON;
@@ -383,14 +417,14 @@ static int button_mask=0;
prev_mouse_y=mouse_y;
const NSRect contentRect = [OS_OSX::singleton->window_view frame];
const NSPoint p = [event locationInWindow];
- mouse_x = p.x * [[event window] backingScaleFactor];
- mouse_y = (contentRect.size.height - p.y) * [[event window] backingScaleFactor];
+ mouse_x = p.x * OS_OSX::singleton->_mouse_scale([[event window] backingScaleFactor]);
+ mouse_y = (contentRect.size.height - p.y) * OS_OSX::singleton->_mouse_scale([[event window] backingScaleFactor]);
ev.mouse_motion.x=mouse_x;
ev.mouse_motion.y=mouse_y;
ev.mouse_motion.global_x=mouse_x;
ev.mouse_motion.global_y=mouse_y;
- ev.mouse_motion.relative_x=[event deltaX] * [[event window] backingScaleFactor];
- ev.mouse_motion.relative_y=[event deltaY] * [[event window] backingScaleFactor];
+ ev.mouse_motion.relative_x=[event deltaX] * OS_OSX::singleton->_mouse_scale([[event window] backingScaleFactor]);
+ ev.mouse_motion.relative_y=[event deltaY] * OS_OSX::singleton->_mouse_scale([[event window] backingScaleFactor]);
ev.mouse_motion.mod = translateFlags([event modifierFlags]);
OS_OSX::singleton->input->set_mouse_pos(Point2(mouse_x,mouse_y));
@@ -736,20 +770,48 @@ static int translateKey(unsigned int key)
- (void)flagsChanged:(NSEvent *)event
{
- /* int action;
- unsigned int newModifierFlags =
- [event modifierFlags] & NSDeviceIndependentModifierFlagsMask;
+ InputEvent ev;
+ int key = [event keyCode];
+ int mod = [event modifierFlags];
- if (newModifierFlags > window->ns.modifierFlags)
- action = GLFW_PRESS;
- else
- action = GLFW_RELEASE;
+ ev.type=InputEvent::KEY;
- window->ns.modifierFlags = newModifierFlags;
+ if (key == 0x36 || key == 0x37) {
+ if (mod & NSCommandKeyMask) {
+ mod&= ~NSCommandKeyMask;
+ ev.key.pressed = true;
+ } else {
+ ev.key.pressed = false;
+ }
+ } else if (key == 0x38 || key == 0x3c) {
+ if (mod & NSShiftKeyMask) {
+ mod&= ~NSShiftKeyMask;
+ ev.key.pressed = true;
+ } else {
+ ev.key.pressed = false;
+ }
+ } else if (key == 0x3a || key == 0x3d) {
+ if (mod & NSAlternateKeyMask) {
+ mod&= ~NSAlternateKeyMask;
+ ev.key.pressed = true;
+ } else {
+ ev.key.pressed = false;
+ }
+ } else if (key == 0x3b || key == 0x3e) {
+ if (mod & NSControlKeyMask) {
+ mod&= ~NSControlKeyMask;
+ ev.key.pressed = true;
+ } else {
+ ev.key.pressed = false;
+ }
+ } else {
+ return;
+ }
- const int key = translateKey([event keyCode]);
- const int mods = translateFlags([event modifierFlags]);
- _glfwInputKey(window, key, [event keyCode], action, mods);*/
+ ev.key.mod=translateFlags(mod);
+ ev.key.scancode = latin_keyboard_keycode_convert(translateKey(key));
+
+ OS_OSX::singleton->push_input(ev);
}
- (void)keyUp:(NSEvent *)event
@@ -833,6 +895,7 @@ static int translateKey(unsigned int key)
@implementation GodotWindow
+
- (BOOL)canBecomeKeyWindow
{
// Required for NSBorderlessWindowMask windows
@@ -893,6 +956,15 @@ void OS_OSX::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi
kTISNotifySelectedKeyboardInputSourceChanged, NULL,
CFNotificationSuspensionBehaviorDeliverImmediately);
+ if (is_hidpi_allowed() && [[NSScreen mainScreen] respondsToSelector:@selector(backingScaleFactor)]) {
+ for (NSScreen *screen in [NSScreen screens]) {
+ float s = [screen backingScaleFactor];
+ if (s > display_scale) {
+ display_scale=s;
+ }
+ }
+ }
+
window_delegate = [[GodotWindowDelegate alloc] init];
// Don't use accumulation buffer support; it's not accelerated
@@ -902,7 +974,7 @@ void OS_OSX::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi
window_object = [[GodotWindow alloc]
- initWithContentRect:NSMakeRect(0, 0, p_desired.width, p_desired.height)
+ initWithContentRect:NSMakeRect(0, 0, p_desired.width/display_scale, p_desired.height/display_scale)
styleMask:styleMask
backing:NSBackingStoreBuffered
defer:NO];
@@ -911,15 +983,11 @@ void OS_OSX::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi
window_view = [[GodotContentView alloc] init];
- current_videomode = p_desired;
-
- // Adjust for display density
- const NSRect fbRect = convertRectToBacking(NSMakeRect(0, 0, p_desired.width, p_desired.height));
- current_videomode.width = fbRect.size.width;
- current_videomode.height = fbRect.size.height;
+ window_size.width = p_desired.width;
+ window_size.height = p_desired.height;
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
- if (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_6) {
+ if (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_6 && display_scale>1) {
[window_view setWantsBestResolutionOpenGLSurface:YES];
//if (current_videomode.resizable)
[window_object setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary];
@@ -1062,9 +1130,28 @@ void OS_OSX::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi
printf("nscreen count %i\n", (int)[screenArray count]);
for (int i=0; i<[screenArray count]; i++) {
+ float displayScale = 1.0;
+
+ if (display_scale>1.0 && [[screenArray objectAtIndex: i] respondsToSelector:@selector(backingScaleFactor)]) {
+ displayScale = [[screenArray objectAtIndex: i] backingScaleFactor];
+ }
+
NSRect nsrect = [[screenArray objectAtIndex: i] visibleFrame];
- screens.push_back(Rect2(nsrect.origin.x, nsrect.origin.y, nsrect.size.width, nsrect.size.height));
- printf("added screen %i\n", screens.size());
+ Rect2 rect = Rect2(nsrect.origin.x, nsrect.origin.y, nsrect.size.width, nsrect.size.height);
+ rect.pos*=displayScale;
+ rect.size*=displayScale;
+ screens.push_back(rect);
+
+ NSDictionary *description = [[screenArray objectAtIndex: i] deviceDescription];
+ NSSize displayPixelSize = [[description objectForKey:NSDeviceSize] sizeValue];
+ CGSize displayPhysicalSize = CGDisplayScreenSize(
+ [[description objectForKey:@"NSScreenNumber"] unsignedIntValue]);
+
+ //printf("width: %i pwidth %i rect width %i\n",int(displayPixelSize.width*displayScale),int(displayPhysicalSize.width*displayScale),int(nsrect.size.width));
+ int dpi = (displayPixelSize.width * 25.4f / displayPhysicalSize.width)*displayScale;
+
+ screen_dpi.push_back(dpi);
+
};
restore_rect = Rect2(get_window_position(), get_window_size());
}
@@ -1326,7 +1413,11 @@ void OS_OSX::set_video_mode(const VideoMode& p_video_mode,int p_screen) {
OS::VideoMode OS_OSX::get_video_mode(int p_screen) const {
- return current_videomode;
+ VideoMode vm;
+ vm.width=window_size.width;
+ vm.height=window_size.height;
+
+ return vm;
}
void OS_OSX::get_fullscreen_mode_list(List<VideoMode> *p_list,int p_screen) const {
@@ -1354,6 +1445,12 @@ Point2 OS_OSX::get_screen_position(int p_screen) const {
return screens[p_screen].pos;
};
+int OS_OSX::get_screen_dpi(int p_screen) const {
+
+ ERR_FAIL_INDEX_V(p_screen, screens.size(), 72);
+ return screen_dpi[p_screen];
+}
+
Size2 OS_OSX::get_screen_size(int p_screen) const {
ERR_FAIL_INDEX_V(p_screen, screens.size(), Point2());
@@ -1362,24 +1459,30 @@ Size2 OS_OSX::get_screen_size(int p_screen) const {
Point2 OS_OSX::get_window_position() const {
- return Size2([window_object frame].origin.x, [window_object frame].origin.y);
+ Size2 wp([window_object frame].origin.x, [window_object frame].origin.y);
+ wp*=display_scale;
+ return wp;
};
void OS_OSX::set_window_position(const Point2& p_position) {
- [window_object setFrame:NSMakeRect(p_position.x, p_position.y, [window_object frame].size.width, [window_object frame].size.height) display:YES];
+ Point2 size=p_position;
+ size/=display_scale;
+ [window_object setFrame:NSMakeRect(size.x, size.y, [window_object frame].size.width, [window_object frame].size.height) display:YES];
};
Size2 OS_OSX::get_window_size() const {
- return Size2([window_object frame].size.width, [window_object frame].size.height);
+ return window_size;
+
};
void OS_OSX::set_window_size(const Size2 p_size) {
+ Size2 size=p_size;
NSRect frame = [window_object frame];
- [window_object setFrame:NSMakeRect(frame.origin.x, frame.origin.y, p_size.x, p_size.y) display:YES];
+ [window_object setFrame:NSMakeRect(frame.origin.x, frame.origin.y, size.x, size.y) display:YES];
};
void OS_OSX::set_window_fullscreen(bool p_enabled) {
@@ -1690,5 +1793,7 @@ OS_OSX::OS_OSX() {
maximized = false;
minimized = false;
+ window_size=Vector2(1024,600);
zoomed = false;
+ display_scale=1.0;
}
diff --git a/platform/windows/context_gl_win.cpp b/platform/windows/context_gl_win.cpp
index ab66b81421..fd9e895370 100644
--- a/platform/windows/context_gl_win.cpp
+++ b/platform/windows/context_gl_win.cpp
@@ -96,6 +96,20 @@ static GLWrapperFuncPtr wrapper_get_proc_address(const char* p_function) {
}
*/
+void ContextGL_Win::set_use_vsync(bool p_use) {
+
+ if (wglSwapIntervalEXT) {
+ wglSwapIntervalEXT(p_use?1:0);
+ }
+ use_vsync=p_use;
+
+}
+
+bool ContextGL_Win::is_using_vsync() const {
+
+ return use_vsync;
+}
+
Error ContextGL_Win::initialize() {
@@ -184,7 +198,7 @@ Error ContextGL_Win::initialize() {
printf("Activated GL 3.1 context");
}
-
+ wglSwapIntervalEXT = (PFNWGLSWAPINTERVALEXTPROC) wglGetProcAddress ("wglSwapIntervalEXT");
// glWrapperInit(wrapper_get_proc_address);
return OK;
@@ -194,6 +208,7 @@ ContextGL_Win::ContextGL_Win(HWND hwnd,bool p_opengl_3_context) {
opengl_3_context=p_opengl_3_context;
hWnd=hwnd;
+ use_vsync=false;
}
ContextGL_Win::~ContextGL_Win() {
diff --git a/platform/windows/context_gl_win.h b/platform/windows/context_gl_win.h
index 055e0b2f51..e1ab6fb26a 100644
--- a/platform/windows/context_gl_win.h
+++ b/platform/windows/context_gl_win.h
@@ -49,6 +49,8 @@
#include <windows.h>
+typedef bool (APIENTRY *PFNWGLSWAPINTERVALEXTPROC) (int interval);
+
class ContextGL_Win : public ContextGL {
HDC hDC;
@@ -56,6 +58,10 @@ class ContextGL_Win : public ContextGL {
unsigned int pixel_format;
HWND hWnd;
bool opengl_3_context;
+ bool use_vsync;
+
+
+ PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT;
public:
@@ -69,6 +75,8 @@ public:
virtual Error initialize();
+ virtual void set_use_vsync(bool p_use);
+ virtual bool is_using_vsync() const;
ContextGL_Win(HWND hwnd,bool p_opengl_3_context);
~ContextGL_Win();
diff --git a/platform/windows/detect.py b/platform/windows/detect.py
index 56e8a5d45d..97d2461e58 100644
--- a/platform/windows/detect.py
+++ b/platform/windows/detect.py
@@ -204,8 +204,8 @@ def configure(env):
if (env["freetype"]!="no"):
env.Append(CCFLAGS=['/DFREETYPE_ENABLED'])
- env.Append(CPPPATH=['#tools/freetype'])
- env.Append(CPPPATH=['#tools/freetype/freetype/include'])
+ env.Append(CPPPATH=['#drivers/freetype'])
+ env.Append(CPPPATH=['#drivers/freetype/freetype/include'])
if (env["target"]=="release"):
@@ -352,8 +352,9 @@ def configure(env):
if (env["freetype"]!="no"):
env.Append(CCFLAGS=['-DFREETYPE_ENABLED'])
- env.Append(CPPPATH=['#tools/freetype'])
- env.Append(CPPPATH=['#tools/freetype/freetype/include'])
+ env.Append(CPPPATH=['#drivers/freetype'])
+ env.Append(CPPPATH=['#drivers/freetype/freetype/include'])
+
env["CC"]=mingw_prefix+"gcc"
env['AS']=mingw_prefix+"as"
diff --git a/platform/windows/godot.ico b/platform/windows/godot.ico
index e57ce36529..3e52f2e52f 100644
--- a/platform/windows/godot.ico
+++ b/platform/windows/godot.ico
Binary files differ
diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp
index c9c7780a2a..5e3dc438d0 100644
--- a/platform/windows/os_windows.cpp
+++ b/platform/windows/os_windows.cpp
@@ -724,6 +724,32 @@ LRESULT OS_Windows::WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam) {
}
} break;
+ case WM_DROPFILES: {
+
+ HDROP hDropInfo = NULL;
+ hDropInfo = (HDROP) wParam;
+ const int buffsize=4096;
+ wchar_t buf[buffsize];
+
+ int fcount = DragQueryFileW(hDropInfo, 0xFFFFFFFF,NULL,0);
+
+ Vector<String> files;
+
+ for(int i=0;i<fcount;i++) {
+
+ DragQueryFileW(hDropInfo, i, buf, buffsize);
+ String file=buf;
+ files.push_back(file);
+ }
+
+ if (files.size() && main_loop) {
+ main_loop->drop_files(files,0);
+ }
+
+
+ } break;
+
+
default: {
@@ -748,6 +774,8 @@ LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam) {
}
+
+
void OS_Windows::process_key_events() {
for(int i=0;i<key_event_pos;i++) {
@@ -767,7 +795,7 @@ void OS_Windows::process_key_events() {
k.mod=ke.mod_state;
k.pressed=true;
k.scancode=KeyMappingWindows::get_keysym(ke.wParam);
- k.unicode=ke.wParam;
+ k.unicode=ke.wParam;
if (k.unicode && gr_mem) {
k.mod.alt=false;
k.mod.control=false;
@@ -819,6 +847,75 @@ void OS_Windows::process_key_events() {
key_event_pos=0;
}
+enum _MonitorDpiType
+{
+ MDT_Effective_DPI = 0,
+ MDT_Angular_DPI = 1,
+ MDT_Raw_DPI = 2,
+ MDT_Default = MDT_Effective_DPI
+};
+
+
+static int QueryDpiForMonitor(HMONITOR hmon, _MonitorDpiType dpiType= MDT_Default)
+{
+
+
+ int dpiX = 96, dpiY = 96;
+
+ static HMODULE Shcore = NULL;
+ typedef HRESULT (WINAPI* GetDPIForMonitor_t)(HMONITOR hmonitor, _MonitorDpiType dpiType, UINT *dpiX, UINT *dpiY);
+ static GetDPIForMonitor_t getDPIForMonitor = NULL;
+
+ if (Shcore == NULL)
+ {
+ Shcore = LoadLibraryW(L"Shcore.dll");
+ getDPIForMonitor = Shcore ? (GetDPIForMonitor_t)GetProcAddress(Shcore, "GetDpiForMonitor") : NULL;
+
+ if ((Shcore == NULL) || (getDPIForMonitor == NULL))
+ {
+ if (Shcore)
+ FreeLibrary(Shcore);
+ Shcore = (HMODULE)INVALID_HANDLE_VALUE;
+ }
+ }
+
+ UINT x = 0, y = 0;
+ HRESULT hr = E_FAIL;
+ bool bSet = false;
+ if (hmon && (Shcore != (HMODULE)INVALID_HANDLE_VALUE))
+ {
+ hr = getDPIForMonitor(hmon, dpiType/*MDT_Effective_DPI*/, &x, &y);
+ if (SUCCEEDED(hr) && (x > 0) && (y > 0))
+ {
+
+ dpiX = (int)x;
+ dpiY = (int)y;
+ }
+ }
+ else
+ {
+ static int overallX = 0, overallY = 0;
+ if (overallX <= 0 || overallY <= 0)
+ {
+ HDC hdc = GetDC(NULL);
+ if (hdc)
+ {
+ overallX = GetDeviceCaps(hdc, LOGPIXELSX);
+ overallY = GetDeviceCaps(hdc, LOGPIXELSY);
+ ReleaseDC(NULL, hdc);
+ }
+ }
+ if (overallX > 0 && overallY > 0)
+ {
+ dpiX = overallX; dpiY = overallY;
+ }
+ }
+
+
+ return (dpiX+dpiY)/2;
+}
+
+
BOOL CALLBACK OS_Windows::MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData) {
OS_Windows *self=(OS_Windows*)OS::get_singleton();
MonitorInfo minfo;
@@ -829,6 +926,8 @@ BOOL CALLBACK OS_Windows::MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPR
minfo.rect.size.x=lprcMonitor->right - lprcMonitor->left;
minfo.rect.size.y=lprcMonitor->bottom - lprcMonitor->top;
+ minfo.dpi = QueryDpiForMonitor(hMonitor);
+
self->monitor_info.push_back(minfo);
return TRUE;
@@ -1035,6 +1134,8 @@ void OS_Windows::initialize(const VideoMode& p_desired,int p_video_driver,int p_
_ensure_data_dir();
+ DragAcceptFiles(hWnd,true);
+
}
@@ -1338,6 +1439,14 @@ Size2 OS_Windows::get_screen_size(int p_screen) const{
return Vector2( monitor_info[p_screen].rect.size );
}
+
+int OS_Windows::get_screen_dpi(int p_screen) const {
+
+ ERR_FAIL_INDEX_V(p_screen,monitor_info.size(),72);
+ UINT dpix,dpiy;
+ return monitor_info[p_screen].dpi;
+
+}
Point2 OS_Windows::get_window_position() const{
RECT r;
@@ -2134,7 +2243,7 @@ String OS_Windows::get_system_dir(SystemDir p_dir) const {
}
String OS_Windows::get_data_dir() const {
- String an = Globals::get_singleton()->get("application/name");
+ String an = get_safe_application_name();
if (an!="") {
if (has_environment("APPDATA")) {
@@ -2160,6 +2269,21 @@ String OS_Windows::get_joy_guid(int p_device) const {
return input->get_joy_guid_remapped(p_device);
}
+void OS_Windows::set_use_vsync(bool p_enable) {
+
+ if (gl_context)
+ gl_context->set_use_vsync(p_enable);
+}
+
+bool OS_Windows::is_vsnc_enabled() const{
+
+ if (gl_context)
+ return gl_context->is_using_vsync();
+
+ return true;
+}
+
+
OS_Windows::OS_Windows(HINSTANCE _hInstance) {
key_event_pos=0;
diff --git a/platform/windows/os_windows.h b/platform/windows/os_windows.h
index adea26308f..509d76abbf 100644
--- a/platform/windows/os_windows.h
+++ b/platform/windows/os_windows.h
@@ -103,7 +103,7 @@ class OS_Windows : public OS {
HDC hDC; // Private GDI Device Context
HINSTANCE hInstance; // Holds The Instance Of The Application
HWND hWnd;
-
+
HCURSOR hCursor;
Size2 window_rect;
@@ -172,6 +172,7 @@ protected:
HMONITOR hMonitor;
HDC hdcMonitor;
Rect2 rect;
+ int dpi;
};
@@ -213,6 +214,8 @@ public:
virtual void set_current_screen(int p_screen);
virtual Point2 get_screen_position(int p_screen=0) const;
virtual Size2 get_screen_size(int p_screen=0) const;
+ virtual int get_screen_dpi(int p_screen=0) const;
+
virtual Point2 get_window_position() const;
virtual void set_window_position(const Point2& p_position);
virtual Size2 get_window_size() const;
@@ -280,6 +283,9 @@ public:
virtual bool is_joy_known(int p_device);
virtual String get_joy_guid(int p_device) const;
+ virtual void set_use_vsync(bool p_enable);
+ virtual bool is_vsnc_enabled() const;
+
OS_Windows(HINSTANCE _hInstance);
~OS_Windows();
diff --git a/platform/x11/context_gl_x11.cpp b/platform/x11/context_gl_x11.cpp
index 9f987e1376..cd325dfc99 100644
--- a/platform/x11/context_gl_x11.cpp
+++ b/platform/x11/context_gl_x11.cpp
@@ -34,7 +34,9 @@
#include <unistd.h>
#include <stdlib.h>
+#define GLX_GLXEXT_PROTOTYPES
#include <GL/glx.h>
+#include <GL/glxext.h>
#define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091
#define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092
@@ -176,6 +178,41 @@ int ContextGL_X11::get_window_height() {
return xwa.height;
}
+void ContextGL_X11::set_use_vsync(bool p_use) {
+ static bool setup = false;
+ static PFNGLXSWAPINTERVALEXTPROC glXSwapIntervalEXT = NULL;
+ static PFNGLXSWAPINTERVALSGIPROC glXSwapIntervalMESA = NULL;
+ static PFNGLXSWAPINTERVALSGIPROC glXSwapIntervalSGI = NULL;
+
+ if (!setup) {
+ setup = true;
+ String extensions = glXQueryExtensionsString(x11_display, DefaultScreen(x11_display));
+ if (extensions.find("GLX_EXT_swap_control") != -1)
+ glXSwapIntervalEXT = (PFNGLXSWAPINTERVALEXTPROC) glXGetProcAddressARB((const GLubyte*)"glXSwapIntervalEXT");
+ if (extensions.find("GLX_MESA_swap_control") != -1)
+ glXSwapIntervalMESA = (PFNGLXSWAPINTERVALSGIPROC) glXGetProcAddressARB((const GLubyte*)"glXSwapIntervalMESA");
+ if (extensions.find("GLX_SGI_swap_control") != -1)
+ glXSwapIntervalSGI = (PFNGLXSWAPINTERVALSGIPROC) glXGetProcAddressARB((const GLubyte*)"glXSwapIntervalSGI");
+ }
+ int val = p_use ? 1:0;
+ if (glXSwapIntervalMESA) {
+ glXSwapIntervalMESA(val);
+ }
+ else if (glXSwapIntervalSGI) {
+ glXSwapIntervalSGI(val);
+ }
+ else if (glXSwapIntervalEXT) {
+ GLXDrawable drawable = glXGetCurrentDrawable();
+ glXSwapIntervalEXT(x11_display, drawable, val);
+ }
+ else return;
+ use_vsync = p_use;
+}
+bool ContextGL_X11::is_using_vsync() const {
+
+ return use_vsync;
+}
+
ContextGL_X11::ContextGL_X11(::Display *p_x11_display,::Window &p_x11_window,const OS::VideoMode& p_default_video_mode,bool p_opengl_3_context) : x11_window(p_x11_window) {
@@ -189,6 +226,7 @@ ContextGL_X11::ContextGL_X11(::Display *p_x11_display,::Window &p_x11_window,con
glx_minor=glx_major=0;
p = memnew( ContextGL_X11_Private );
p->glx_context=0;
+ use_vsync=false;
}
diff --git a/platform/x11/context_gl_x11.h b/platform/x11/context_gl_x11.h
index c77fb3e333..4474542c0b 100644
--- a/platform/x11/context_gl_x11.h
+++ b/platform/x11/context_gl_x11.h
@@ -55,6 +55,7 @@ class ContextGL_X11 : public ContextGL {
bool direct_render;
int glx_minor,glx_major;
bool opengl_3_context;
+ bool use_vsync;
public:
virtual void release_current();
@@ -65,6 +66,9 @@ public:
virtual Error initialize();
+ virtual void set_use_vsync(bool p_use);
+ virtual bool is_using_vsync() const;
+
ContextGL_X11(::Display *p_x11_display,::Window &p_x11_window,const OS::VideoMode& p_default_video_mode,bool p_opengl_3_context);
~ContextGL_X11();
diff --git a/platform/x11/detect.py b/platform/x11/detect.py
index 6b3f7147ef..5a43bf9323 100644
--- a/platform/x11/detect.py
+++ b/platform/x11/detect.py
@@ -143,8 +143,8 @@ def configure(env):
if (env["freetype"]!="no"):
env.Append(CCFLAGS=['-DFREETYPE_ENABLED'])
if (env["freetype"]=="builtin"):
- env.Append(CPPPATH=['#tools/freetype'])
- env.Append(CPPPATH=['#tools/freetype/freetype/include'])
+ env.Append(CPPPATH=['#drivers/freetype'])
+ env.Append(CPPPATH=['#drivers/freetype/freetype/include'])
env.Append(CPPFLAGS=['-DOPENGL_ENABLED','-DGLEW_ENABLED'])
diff --git a/platform/x11/os_x11.cpp b/platform/x11/os_x11.cpp
index 4d7532d637..b089436a17 100644
--- a/platform/x11/os_x11.cpp
+++ b/platform/x11/os_x11.cpp
@@ -105,6 +105,7 @@ void OS_X11::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi
last_timestamp=0;
last_mouse_pos_valid=false;
last_keyrelease_time=0;
+ xdnd_version = 0;
if (get_render_thread_mode()==RENDER_SEPARATE_THREAD) {
XInitThreads();
@@ -415,6 +416,19 @@ void OS_X11::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi
}
set_cursor_shape(CURSOR_BUSY);
+ //Set Xdnd (drag & drop) support
+ Atom XdndAware = XInternAtom(x11_display, "XdndAware", False);
+ Atom version=5;
+ XChangeProperty(x11_display, x11_window, XdndAware, XA_ATOM, 32, PropModeReplace, (unsigned char*)&version, 1);
+
+ xdnd_enter = XInternAtom(x11_display, "XdndEnter", False);
+ xdnd_position = XInternAtom(x11_display, "XdndPosition", False);
+ xdnd_status = XInternAtom(x11_display, "XdndStatus", False);
+ xdnd_action_copy = XInternAtom(x11_display, "XdndActionCopy", False);
+ xdnd_drop = XInternAtom(x11_display, "XdndDrop", False);
+ xdnd_finished = XInternAtom(x11_display, "XdndFinished", False);
+ xdnd_selection = XInternAtom(x11_display, "XdndSelection", False);
+ requested = None;
visual_server->init();
//
@@ -1166,6 +1180,72 @@ void OS_X11::handle_key_event(XKeyEvent *p_event, bool p_echo) {
input->parse_input_event( event);
}
+struct Property
+{
+ unsigned char *data;
+ int format, nitems;
+ Atom type;
+};
+
+static Property read_property(Display* p_display, Window p_window, Atom p_property) {
+
+ Atom actual_type;
+ int actual_format;
+ unsigned long nitems;
+ unsigned long bytes_after;
+ unsigned char *ret=0;
+
+ int read_bytes = 1024;
+
+ //Keep trying to read the property until there are no
+ //bytes unread.
+ do
+ {
+ if(ret != 0)
+ XFree(ret);
+
+ XGetWindowProperty(p_display, p_window, p_property, 0, read_bytes, False, AnyPropertyType,
+ &actual_type, &actual_format, &nitems, &bytes_after,
+ &ret);
+
+ read_bytes *= 2;
+
+ }while(bytes_after != 0);
+
+ Property p = {ret, actual_format, nitems, actual_type};
+
+ return p;
+}
+
+static Atom pick_target_from_list(Display* p_display, Atom *p_list, int p_count) {
+
+ static const char* target_type = "text/uri-list";
+
+ for (int i = 0; i < p_count; i++) {
+
+ Atom atom = p_list[i];
+
+ if (atom != None && String(XGetAtomName(p_display, atom)) == target_type)
+ return atom;
+ }
+ return None;
+}
+
+static Atom pick_target_from_atoms(Display* p_disp, Atom p_t1, Atom p_t2, Atom p_t3) {
+
+ static const char* target_type = "text/uri-list";
+ if (p_t1 != None && String(XGetAtomName(p_disp, p_t1)) == target_type)
+ return p_t1;
+
+ if (p_t2 != None && String(XGetAtomName(p_disp, p_t2)) == target_type)
+ return p_t2;
+
+ if (p_t3 != None && String(XGetAtomName(p_disp, p_t3)) == target_type)
+ return p_t3;
+
+ return None;
+}
+
void OS_X11::process_xevents() {
//printf("checking events %i\n", XPending(x11_display));
@@ -1456,11 +1536,96 @@ void OS_X11::process_xevents() {
XFlush (x11_display);
} break;
+ case SelectionNotify:
+
+ if (event.xselection.target == requested) {
+
+ Property p = read_property(x11_display, x11_window, XInternAtom(x11_display, "PRIMARY", 0));
+
+ Vector<String> files = String((char *)p.data).split("\n", false);
+ for (int i = 0; i < files.size(); i++) {
+ files[i] = files[i].replace("file://", "").replace("%20", " ").strip_escapes();
+ }
+ main_loop->drop_files(files);
+
+ //Reply that all is well.
+ XClientMessageEvent m;
+ memset(&m, sizeof(m), 0);
+ m.type = ClientMessage;
+ m.display = x11_display;
+ m.window = xdnd_source_window;
+ m.message_type = xdnd_finished;
+ m.format=32;
+ m.data.l[0] = x11_window;
+ m.data.l[1] = 1;
+ m.data.l[2] = xdnd_action_copy; //We only ever copy.
+
+ XSendEvent(x11_display, xdnd_source_window, False, NoEventMask, (XEvent*)&m);
+ }
+ break;
case ClientMessage:
if ((unsigned int)event.xclient.data.l[0]==(unsigned int)wm_delete)
main_loop->notification(MainLoop::NOTIFICATION_WM_QUIT_REQUEST);
+
+ else if ((unsigned int)event.xclient.message_type == (unsigned int)xdnd_enter) {
+
+ //File(s) have been dragged over the window, check for supported target (text/uri-list)
+ xdnd_version = ( event.xclient.data.l[1] >> 24);
+ Window source = event.xclient.data.l[0];
+ bool more_than_3 = event.xclient.data.l[1] & 1;
+ if (more_than_3) {
+ Property p = read_property(x11_display, source, XInternAtom(x11_display, "XdndTypeList", False));
+ requested = pick_target_from_list(x11_display, (Atom*)p.data, p.nitems);
+ }
+ else
+ requested = pick_target_from_atoms(x11_display, event.xclient.data.l[2],event.xclient.data.l[3], event.xclient.data.l[4]);
+ }
+ else if ((unsigned int)event.xclient.message_type == (unsigned int )xdnd_position) {
+
+ //xdnd position event, reply with an XDND status message
+ //just depending on type of data for now
+ XClientMessageEvent m;
+ memset(&m, sizeof(m), 0);
+ m.type = ClientMessage;
+ m.display = event.xclient.display;
+ m.window = event.xclient.data.l[0];
+ m.message_type = xdnd_status;
+ m.format=32;
+ m.data.l[0] = x11_window;
+ m.data.l[1] = (requested != None);
+ m.data.l[2] = 0; //empty rectangle
+ m.data.l[3] = 0;
+ m.data.l[4] = xdnd_action_copy;
+
+ XSendEvent(x11_display, event.xclient.data.l[0], False, NoEventMask, (XEvent*)&m);
+ XFlush(x11_display);
+ }
+ else if ((unsigned int)event.xclient.message_type == (unsigned int)xdnd_drop) {
+
+ if (requested != None) {
+ xdnd_source_window = event.xclient.data.l[0];
+ if(xdnd_version >= 1)
+ XConvertSelection(x11_display, xdnd_selection, requested, XInternAtom(x11_display, "PRIMARY", 0), x11_window, event.xclient.data.l[2]);
+ else
+ XConvertSelection(x11_display, xdnd_selection, requested, XInternAtom(x11_display, "PRIMARY", 0), x11_window, CurrentTime);
+ }
+ else {
+ //Reply that we're not interested.
+ XClientMessageEvent m;
+ memset(&m, sizeof(m), 0);
+ m.type = ClientMessage;
+ m.display = event.xclient.display;
+ m.window = event.xclient.data.l[0];
+ m.message_type = xdnd_finished;
+ m.format=32;
+ m.data.l[0] = x11_window;
+ m.data.l[1] = 0;
+ m.data.l[2] = None; //Failed.
+ XSendEvent(x11_display, event.xclient.data.l[0], False, NoEventMask, (XEvent*)&m);
+ }
+ }
break;
default:
break;
@@ -1787,6 +1952,20 @@ String OS_X11::get_joy_guid(int p_device) const {
return input->get_joy_guid_remapped(p_device);
}
+void OS_X11::set_use_vsync(bool p_enable) {
+ if (context_gl)
+ return context_gl->set_use_vsync(p_enable);
+}
+
+bool OS_X11::is_vsnc_enabled() const {
+
+ if (context_gl)
+ return context_gl->is_using_vsync();
+
+ return true;
+}
+
+
void OS_X11::set_context(int p_context) {
XClassHint* classHint = NULL;
diff --git a/platform/x11/os_x11.h b/platform/x11/os_x11.h
index d9a5b1688c..311f26d4d3 100644
--- a/platform/x11/os_x11.h
+++ b/platform/x11/os_x11.h
@@ -70,6 +70,17 @@ typedef struct {
class OS_X11 : public OS_Unix {
Atom wm_delete;
+ Atom xdnd_enter;
+ Atom xdnd_position;
+ Atom xdnd_status;
+ Atom xdnd_action_copy;
+ Atom xdnd_drop;
+ Atom xdnd_finished;
+ Atom xdnd_selection;
+ Atom requested;
+
+ int xdnd_version;
+
#if defined(OPENGL_ENABLED) || defined(LEGACYGL_ENABLED)
ContextGL_X11 *context_gl;
#endif
@@ -78,6 +89,7 @@ class OS_X11 : public OS_Unix {
VideoMode current_videomode;
List<String> args;
Window x11_window;
+ Window xdnd_source_window;
MainLoop *main_loop;
::Display* x11_display;
char *xmbstring;
@@ -228,6 +240,9 @@ public:
virtual void set_context(int p_context);
+ virtual void set_use_vsync(bool p_enable);
+ virtual bool is_vsnc_enabled() const;
+
void run();
OS_X11();
diff --git a/scene/2d/area_2d.cpp b/scene/2d/area_2d.cpp
index 8b7aff3b7a..71728966fd 100644
--- a/scene/2d/area_2d.cpp
+++ b/scene/2d/area_2d.cpp
@@ -660,9 +660,9 @@ void Area2D::_bind_methods() {
ADD_PROPERTYNZ( PropertyInfo(Variant::BOOL,"gravity_point"),_SCS("set_gravity_is_point"),_SCS("is_gravity_a_point"));
ADD_PROPERTYNZ( PropertyInfo(Variant::REAL,"gravity_distance_scale", PROPERTY_HINT_RANGE,"0,1024,0.001"),_SCS("set_gravity_distance_scale"),_SCS("get_gravity_distance_scale"));
ADD_PROPERTY( PropertyInfo(Variant::VECTOR2,"gravity_vec"),_SCS("set_gravity_vector"),_SCS("get_gravity_vector"));
- ADD_PROPERTY( PropertyInfo(Variant::REAL,"gravity",PROPERTY_HINT_RANGE,"-1024,1024,0.01"),_SCS("set_gravity"),_SCS("get_gravity"));
- ADD_PROPERTY( PropertyInfo(Variant::REAL,"linear_damp",PROPERTY_HINT_RANGE,"0,1024,0.001"),_SCS("set_linear_damp"),_SCS("get_linear_damp"));
- ADD_PROPERTY( PropertyInfo(Variant::REAL,"angular_damp",PROPERTY_HINT_RANGE,"0,1024,0.001"),_SCS("set_angular_damp"),_SCS("get_angular_damp"));
+ ADD_PROPERTY( PropertyInfo(Variant::REAL,"gravity",PROPERTY_HINT_RANGE,"-1024,1024,0.001"),_SCS("set_gravity"),_SCS("get_gravity"));
+ ADD_PROPERTY( PropertyInfo(Variant::REAL,"linear_damp",PROPERTY_HINT_RANGE,"0,100,0.01"),_SCS("set_linear_damp"),_SCS("get_linear_damp"));
+ ADD_PROPERTY( PropertyInfo(Variant::REAL,"angular_damp",PROPERTY_HINT_RANGE,"0,100,0.01"),_SCS("set_angular_damp"),_SCS("get_angular_damp"));
ADD_PROPERTYNZ( PropertyInfo(Variant::INT,"priority",PROPERTY_HINT_RANGE,"0,128,1"),_SCS("set_priority"),_SCS("get_priority"));
ADD_PROPERTYNO( PropertyInfo(Variant::BOOL,"monitoring"),_SCS("set_enable_monitoring"),_SCS("is_monitoring_enabled"));
ADD_PROPERTYNO( PropertyInfo(Variant::BOOL,"monitorable"),_SCS("set_monitorable"),_SCS("is_monitorable"));
diff --git a/scene/2d/canvas_item.cpp b/scene/2d/canvas_item.cpp
index 21615b7f55..17e5503a2d 100644
--- a/scene/2d/canvas_item.cpp
+++ b/scene/2d/canvas_item.cpp
@@ -455,20 +455,15 @@ void CanvasItem::_enter_canvas() {
if ((!get_parent() || !get_parent()->cast_to<CanvasItem>()) || toplevel) {
Node *n = this;
- Viewport *viewport=NULL;
+
canvas_layer=NULL;
while(n) {
- if (n->cast_to<Viewport>()) {
-
- viewport = n->cast_to<Viewport>();
+ canvas_layer = n->cast_to<CanvasLayer>();
+ if (canvas_layer) {
break;
}
- if (!canvas_layer && n->cast_to<CanvasLayer>()) {
-
- canvas_layer = n->cast_to<CanvasLayer>();
- }
n=n->get_parent();
}
@@ -476,7 +471,7 @@ void CanvasItem::_enter_canvas() {
if (canvas_layer)
canvas=canvas_layer->get_world_2d()->get_canvas();
else
- canvas=viewport->find_world_2d()->get_canvas();
+ canvas=get_viewport()->find_world_2d()->get_canvas();
VisualServer::get_singleton()->canvas_item_set_parent(canvas_item,canvas);
@@ -488,6 +483,7 @@ void CanvasItem::_enter_canvas() {
} else {
CanvasItem *parent = get_parent_item();
+ canvas_layer=parent->canvas_layer;
VisualServer::get_singleton()->canvas_item_set_parent(canvas_item,parent->get_canvas_item());
parent->_queue_sort_children();
}
@@ -1176,12 +1172,10 @@ Matrix32 CanvasItem::get_viewport_transform() const {
return canvas_layer->get_transform();
}
- } else if (get_viewport()) {
+ } else {
return get_viewport()->get_final_transform() * get_viewport()->get_canvas_transform();
}
- return Matrix32();
-
}
diff --git a/scene/2d/canvas_modulate.cpp b/scene/2d/canvas_modulate.cpp
index cc0db2da77..6a74cb1d91 100644
--- a/scene/2d/canvas_modulate.cpp
+++ b/scene/2d/canvas_modulate.cpp
@@ -62,7 +62,7 @@ String CanvasModulate::get_configuration_warning() const {
get_tree()->get_nodes_in_group("_canvas_modulate_"+itos(get_canvas().get_id()),&nodes);
if (nodes.size()>1) {
- return TTR("Only one visible CanvasModulate is allowed per scene (or set of instanced scenes). The first one created will work, while the rest will be ignored.");
+ return TTR("Only one visible CanvasModulate is allowed per scene (or set of instanced scenes). The first created one will work, while the rest will be ignored.");
}
return String();
diff --git a/scene/2d/light_2d.cpp b/scene/2d/light_2d.cpp
index b79c07360b..1cb34075bb 100644
--- a/scene/2d/light_2d.cpp
+++ b/scene/2d/light_2d.cpp
@@ -357,11 +357,11 @@ void Light2D::_bind_methods() {
ADD_PROPERTY( PropertyInfo(Variant::BOOL,"enabled"),_SCS("set_enabled"),_SCS("is_enabled"));
ADD_PROPERTY( PropertyInfo(Variant::OBJECT,"texture",PROPERTY_HINT_RESOURCE_TYPE,"Texture"),_SCS("set_texture"),_SCS("get_texture"));
ADD_PROPERTY( PropertyInfo(Variant::VECTOR2,"offset"),_SCS("set_texture_offset"),_SCS("get_texture_offset"));
- ADD_PROPERTY( PropertyInfo(Variant::REAL,"scale",PROPERTY_HINT_RANGE,"0.01,4096,0.01"),_SCS("set_texture_scale"),_SCS("get_texture_scale"));
+ ADD_PROPERTY( PropertyInfo(Variant::REAL,"scale",PROPERTY_HINT_RANGE,"0.01,50,0.01"),_SCS("set_texture_scale"),_SCS("get_texture_scale"));
ADD_PROPERTY( PropertyInfo(Variant::COLOR,"color"),_SCS("set_color"),_SCS("get_color"));
- ADD_PROPERTY( PropertyInfo(Variant::REAL,"energy"),_SCS("set_energy"),_SCS("get_energy"));
+ ADD_PROPERTY( PropertyInfo(Variant::REAL,"energy",PROPERTY_HINT_RANGE,"0.01,100,0.01"),_SCS("set_energy"),_SCS("get_energy"));
ADD_PROPERTY( PropertyInfo(Variant::INT,"mode",PROPERTY_HINT_ENUM,"Add,Sub,Mix,Mask"),_SCS("set_mode"),_SCS("get_mode"));
- ADD_PROPERTY( PropertyInfo(Variant::REAL,"range/height"),_SCS("set_height"),_SCS("get_height"));
+ ADD_PROPERTY( PropertyInfo(Variant::REAL,"range/height",PROPERTY_HINT_RANGE,"-100,100,0.1"),_SCS("set_height"),_SCS("get_height"));
ADD_PROPERTY( PropertyInfo(Variant::INT,"range/z_min",PROPERTY_HINT_RANGE,itos(VS::CANVAS_ITEM_Z_MIN)+","+itos(VS::CANVAS_ITEM_Z_MAX)+",1"),_SCS("set_z_range_min"),_SCS("get_z_range_min"));
ADD_PROPERTY( PropertyInfo(Variant::INT,"range/z_max",PROPERTY_HINT_RANGE,itos(VS::CANVAS_ITEM_Z_MIN)+","+itos(VS::CANVAS_ITEM_Z_MAX)+",1"),_SCS("set_z_range_max"),_SCS("get_z_range_max"));
ADD_PROPERTY( PropertyInfo(Variant::INT,"range/layer_min",PROPERTY_HINT_RANGE,"-512,512,1"),_SCS("set_layer_range_min"),_SCS("get_layer_range_min"));
diff --git a/scene/2d/path_2d.cpp b/scene/2d/path_2d.cpp
index dee67a829f..41ca7b1d0f 100644
--- a/scene/2d/path_2d.cpp
+++ b/scene/2d/path_2d.cpp
@@ -243,7 +243,7 @@ String PathFollow2D::get_configuration_warning() const {
return String();
if (!get_parent() || !get_parent()->cast_to<Path2D>()) {
- return TTR("PathFolow2D only works when set as a child of a Path2D node.");
+ return TTR("PathFollow2D only works when set as a child of a Path2D node.");
}
return String();
diff --git a/scene/2d/polygon_2d.cpp b/scene/2d/polygon_2d.cpp
index fc6986327f..03ced12c55 100644
--- a/scene/2d/polygon_2d.cpp
+++ b/scene/2d/polygon_2d.cpp
@@ -145,7 +145,18 @@ void Polygon2D::_notification(int p_what) {
Vector<Color> colors;
- colors.push_back(color);
+ int color_len=vertex_colors.size();
+ colors.resize(len);
+ {
+ DVector<Color>::Read color_r=vertex_colors.read();
+ for(int i=0;i<color_len && i<len;i++){
+ colors[i]=color_r[i];
+ }
+ for(int i=color_len;i<len;i++){
+ colors[i]=color;
+ }
+ }
+
Vector<int> indices = Geometry::triangulate_polygon(points);
VS::get_singleton()->canvas_item_add_triangle_array(get_canvas_item(),indices,points,colors,uvs,texture.is_valid()?texture->get_rid():RID());
@@ -188,6 +199,16 @@ Color Polygon2D::get_color() const{
return color;
}
+void Polygon2D::set_vertex_colors(const DVector<Color>& p_colors){
+
+ vertex_colors=p_colors;
+ update();
+}
+DVector<Color> Polygon2D::get_vertex_colors() const{
+
+ return vertex_colors;
+}
+
void Polygon2D::set_texture(const Ref<Texture>& p_texture){
texture=p_texture;
@@ -293,6 +314,9 @@ void Polygon2D::_bind_methods() {
ObjectTypeDB::bind_method(_MD("set_color","color"),&Polygon2D::set_color);
ObjectTypeDB::bind_method(_MD("get_color"),&Polygon2D::get_color);
+ ObjectTypeDB::bind_method(_MD("set_vertex_colors","vertex_colors"),&Polygon2D::set_vertex_colors);
+ ObjectTypeDB::bind_method(_MD("get_vertex_colors"),&Polygon2D::get_vertex_colors);
+
ObjectTypeDB::bind_method(_MD("set_texture","texture"),&Polygon2D::set_texture);
ObjectTypeDB::bind_method(_MD("get_texture"),&Polygon2D::get_texture);
@@ -323,6 +347,7 @@ void Polygon2D::_bind_methods() {
ADD_PROPERTY( PropertyInfo(Variant::VECTOR2_ARRAY,"polygon"),_SCS("set_polygon"),_SCS("get_polygon"));
ADD_PROPERTY( PropertyInfo(Variant::VECTOR2_ARRAY,"uv"),_SCS("set_uv"),_SCS("get_uv"));
ADD_PROPERTY( PropertyInfo(Variant::COLOR,"color"),_SCS("set_color"),_SCS("get_color"));
+ ADD_PROPERTY( PropertyInfo(Variant::COLOR_ARRAY,"vertex_colors"),_SCS("set_vertex_colors"),_SCS("get_vertex_colors"));
ADD_PROPERTY( PropertyInfo(Variant::VECTOR2,"offset"),_SCS("set_offset"),_SCS("get_offset"));
ADD_PROPERTY( PropertyInfo(Variant::OBJECT,"texture/texture",PROPERTY_HINT_RESOURCE_TYPE,"Texture"),_SCS("set_texture"),_SCS("get_texture"));
ADD_PROPERTY( PropertyInfo(Variant::VECTOR2,"texture/offset"),_SCS("set_texture_offset"),_SCS("get_texture_offset"));
diff --git a/scene/2d/polygon_2d.h b/scene/2d/polygon_2d.h
index 517b623ccd..eaa642787c 100644
--- a/scene/2d/polygon_2d.h
+++ b/scene/2d/polygon_2d.h
@@ -9,6 +9,7 @@ class Polygon2D : public Node2D {
DVector<Vector2> polygon;
DVector<Vector2> uv;
+ DVector<Color> vertex_colors;
Color color;
Ref<Texture> texture;
Vector2 tex_scale;
@@ -40,6 +41,9 @@ public:
void set_color(const Color& p_color);
Color get_color() const;
+ void set_vertex_colors(const DVector<Color>& p_colors);
+ DVector<Color> get_vertex_colors() const;
+
void set_texture(const Ref<Texture>& p_texture);
Ref<Texture> get_texture() const;
diff --git a/scene/2d/sprite.cpp b/scene/2d/sprite.cpp
index aebb9a4c28..3e6384ea2c 100644
--- a/scene/2d/sprite.cpp
+++ b/scene/2d/sprite.cpp
@@ -540,7 +540,7 @@ String ViewportSprite::get_configuration_warning() const {
Viewport *vp = n->cast_to<Viewport>();
if (!vp->is_set_as_render_target()) {
- return TTR("The Viewport set in the path property must be set as 'render taget' in order for this sprite to work");
+ return TTR("The Viewport set in the path property must be set as 'render target' in order for this sprite to work.");
}
}
}
diff --git a/scene/3d/listener.cpp b/scene/3d/listener.cpp
new file mode 100644
index 0000000000..bf42a5c92e
--- /dev/null
+++ b/scene/3d/listener.cpp
@@ -0,0 +1,167 @@
+#include "listener.h"
+
+#include "scene/resources/mesh.h"
+
+void Listener::_update_audio_listener_state() {
+
+
+}
+
+void Listener::_request_listener_update() {
+
+ _update_listener();
+}
+
+bool Listener::_set(const StringName& p_name, const Variant& p_value) {
+
+ if (p_name == "current") {
+ if (p_value.operator bool()) {
+ make_current();
+ }
+ else {
+ clear_current();
+ }
+ }
+ else
+ return false;
+
+ return true;
+}
+bool Listener::_get(const StringName& p_name,Variant &r_ret) const {
+
+ if (p_name == "current") {
+ if (is_inside_tree() && get_tree()->is_node_being_edited(this)) {
+ r_ret = current;
+ }
+ else {
+ r_ret = is_current();
+ }
+ }
+ else
+ return false;
+
+ return true;
+}
+
+void Listener::_get_property_list( List<PropertyInfo> *p_list) const {
+
+ p_list->push_back( PropertyInfo( Variant::BOOL, "current" ) );
+}
+
+void Listener::_update_listener() {
+
+ if (is_inside_tree() && is_current()) {
+ get_viewport()->_listener_transform_changed_notify();
+
+ }
+}
+
+void Listener::_notification(int p_what) {
+
+ switch(p_what) {
+
+ case NOTIFICATION_ENTER_WORLD: {
+ bool first_listener = get_viewport()->_listener_add(this);
+ if (!get_tree()->is_node_being_edited(this) && (current || first_listener))
+ make_current();
+ } break;
+ case NOTIFICATION_TRANSFORM_CHANGED: {
+ _request_listener_update();
+ } break;
+ case NOTIFICATION_EXIT_WORLD: {
+
+ if (!get_tree()->is_node_being_edited(this)) {
+ if (is_current()) {
+ clear_current();
+ current=true; //keep it true
+
+ } else {
+ current=false;
+ }
+ }
+
+ get_viewport()->_listener_remove(this);
+
+
+ } break;
+
+
+ }
+
+}
+
+
+Transform Listener::get_listener_transform() const {
+
+ return get_global_transform().orthonormalized();
+}
+
+void Listener::make_current() {
+
+ current=true;
+
+ if (!is_inside_tree())
+ return;
+
+ get_viewport()->_listener_set(this);
+}
+
+
+
+
+void Listener::clear_current() {
+
+ current=false;
+ if (!is_inside_tree())
+ return;
+
+ if (get_viewport()->get_listener()==this) {
+ get_viewport()->_listener_set(NULL);
+ get_viewport()->_listener_make_next_current(this);
+ }
+
+}
+
+bool Listener::is_current() const {
+
+ if (is_inside_tree() && !get_tree()->is_node_being_edited(this)) {
+
+ return get_viewport()->get_listener()==this;
+ } else
+ return current;
+
+ return false;
+}
+
+bool Listener::_can_gizmo_scale() const {
+
+ return false;
+}
+
+RES Listener::_get_gizmo_geometry() const {
+ Ref<Mesh> mesh = memnew(Mesh);
+
+ return mesh;
+}
+
+void Listener::_bind_methods() {
+
+ ObjectTypeDB::bind_method( _MD("make_current"),&Listener::make_current );
+ ObjectTypeDB::bind_method( _MD("clear_current"),&Listener::clear_current );
+ ObjectTypeDB::bind_method( _MD("is_current"),&Listener::is_current );
+ ObjectTypeDB::bind_method( _MD("get_listener_transform"),&Listener::get_listener_transform );
+}
+
+Listener::Listener() {
+
+ current=false;
+ force_change=false;
+ //active=false;
+}
+
+
+Listener::~Listener() {
+
+}
+
+
diff --git a/scene/3d/listener.h b/scene/3d/listener.h
new file mode 100644
index 0000000000..bf0281a8e0
--- /dev/null
+++ b/scene/3d/listener.h
@@ -0,0 +1,53 @@
+#ifndef LISTENER_H
+#define LISTENER_H
+
+
+#include "scene/3d/spatial.h"
+#include "scene/main/viewport.h"
+
+class Listener : public Spatial {
+
+ OBJ_TYPE(Listener, Spatial);
+private:
+
+ bool force_change;
+ bool current;
+
+ RID scenario_id;
+
+ virtual bool _can_gizmo_scale() const;
+ virtual RES _get_gizmo_geometry() const;
+
+friend class Viewport;
+ void _update_audio_listener_state();
+protected:
+
+ void _update_listener();
+ virtual void _request_listener_update();
+
+ bool _set(const StringName& p_name, const Variant& p_value);
+ bool _get(const StringName& p_name,Variant &r_ret) const;
+ void _get_property_list( List<PropertyInfo> *p_list) const;
+ void _notification(int p_what);
+
+ static void _bind_methods();
+
+public:
+
+ void make_current();
+ void clear_current();
+ bool is_current() const;
+
+ virtual Transform get_listener_transform() const;
+
+ void set_visible_layers(uint32_t p_layers);
+ uint32_t get_visible_layers() const;
+
+ Vector<Plane> get_frustum() const;
+
+ Listener();
+ ~Listener();
+
+};
+
+#endif
diff --git a/scene/3d/mesh_instance.cpp b/scene/3d/mesh_instance.cpp
index cfe273fa20..ef956e8ad9 100644
--- a/scene/3d/mesh_instance.cpp
+++ b/scene/3d/mesh_instance.cpp
@@ -31,8 +31,8 @@
#include "skeleton.h"
#include "physics_body.h"
#include "body_shape.h"
-
-
+#include "scene/scene_string_names.h"
+#include "core_string_names.h"
bool MeshInstance::_set(const StringName& p_name, const Variant& p_value) {
//this is not _too_ bad performance wise, really. it only arrives here if the property was not set anywhere else.
@@ -43,13 +43,22 @@ bool MeshInstance::_set(const StringName& p_name, const Variant& p_value) {
Map<StringName,MorphTrack>::Element *E = morph_tracks.find(p_name);
- if (!E)
- return false;
+ if (E) {
+ E->get().value=p_value;
+ VisualServer::get_singleton()->instance_set_morph_target_weight(get_instance(),E->get().idx,E->get().value);
+ return true;
+ }
- E->get().value=p_value;
- VisualServer::get_singleton()->instance_set_morph_target_weight(get_instance(),E->get().idx,E->get().value);
+ if (p_name.operator String().begins_with("material/")) {
+ int idx = p_name.operator String().get_slicec('/',1).to_int();
+ if (idx>=materials.size() || idx<0)
+ return false;
- return true;
+ set_surface_material(idx,p_value);
+ return true;
+ }
+
+ return false;
}
bool MeshInstance::_get(const StringName& p_name,Variant &r_ret) const {
@@ -59,12 +68,19 @@ bool MeshInstance::_get(const StringName& p_name,Variant &r_ret) const {
return false;
const Map<StringName,MorphTrack>::Element *E = morph_tracks.find(p_name);
- if (!E)
- return false;
-
- r_ret = E->get().value;
+ if (E) {
+ r_ret = E->get().value;
+ return true;
+ }
- return true;
+ if (p_name.operator String().begins_with("material/")) {
+ int idx = p_name.operator String().get_slicec('/',1).to_int();
+ if (idx>=materials.size() || idx<0)
+ return false;
+ r_ret=materials[idx];
+ return true;
+ }
+ return false;
}
void MeshInstance::_get_property_list( List<PropertyInfo> *p_list) const {
@@ -80,6 +96,12 @@ void MeshInstance::_get_property_list( List<PropertyInfo> *p_list) const {
for(List<String>::Element *E=ls.front();E;E=E->next()) {
p_list->push_back( PropertyInfo(Variant::REAL,E->get(),PROPERTY_HINT_RANGE,"0,1,0.01"));
}
+
+ if (mesh.is_valid()) {
+ for(int i=0;i<mesh->get_surface_count();i++) {
+ p_list->push_back( PropertyInfo(Variant::OBJECT, "material/"+itos(i), PROPERTY_HINT_RESOURCE_TYPE, "Material"));
+ }
+ }
}
@@ -87,6 +109,14 @@ void MeshInstance::_get_property_list( List<PropertyInfo> *p_list) const {
void MeshInstance::set_mesh(const Ref<Mesh>& p_mesh) {
+ if (mesh==p_mesh)
+ return;
+
+ if (mesh.is_valid()) {
+ mesh->disconnect(CoreStringNames::get_singleton()->changed,this,SceneStringNames::get_singleton()->_mesh_changed);
+ materials.clear();
+ }
+
mesh=p_mesh;
morph_tracks.clear();
@@ -100,13 +130,17 @@ void MeshInstance::set_mesh(const Ref<Mesh>& p_mesh) {
mt.value=0;
morph_tracks["morph/"+String(mesh->get_morph_target_name(i))]=mt;
}
+
+ mesh->connect(CoreStringNames::get_singleton()->changed,this,SceneStringNames::get_singleton()->_mesh_changed);
+ materials.resize(mesh->get_surface_count());
+
set_base(mesh->get_rid());
} else {
set_base(RID());
}
- _change_notify("mesh");
+ _change_notify();
}
Ref<Mesh> MeshInstance::get_mesh() const {
@@ -232,6 +266,32 @@ void MeshInstance::_notification(int p_what) {
}
+void MeshInstance::set_surface_material(int p_surface,const Ref<Material>& p_material) {
+
+ ERR_FAIL_INDEX(p_surface,materials.size());
+
+ materials[p_surface]=p_material;
+
+ if (materials[p_surface].is_valid())
+ VS::get_singleton()->instance_set_surface_material(get_instance(),p_surface,materials[p_surface]->get_rid());
+ else
+ VS::get_singleton()->instance_set_surface_material(get_instance(),p_surface,RID());
+
+}
+
+Ref<Material> MeshInstance::get_surface_material(int p_surface) const {
+
+ ERR_FAIL_INDEX_V(p_surface,materials.size(),Ref<Material>());
+
+ return materials[p_surface];
+}
+
+
+void MeshInstance::_mesh_changed() {
+
+ materials.resize( mesh->get_surface_count() );
+}
+
void MeshInstance::_bind_methods() {
ObjectTypeDB::bind_method(_MD("set_mesh","mesh:Mesh"),&MeshInstance::set_mesh);
@@ -243,6 +303,7 @@ void MeshInstance::_bind_methods() {
ObjectTypeDB::set_method_flags("MeshInstance","create_trimesh_collision",METHOD_FLAGS_DEFAULT);
ObjectTypeDB::bind_method(_MD("create_convex_collision"),&MeshInstance::create_convex_collision);
ObjectTypeDB::set_method_flags("MeshInstance","create_convex_collision",METHOD_FLAGS_DEFAULT);
+ ObjectTypeDB::bind_method(_MD("_mesh_changed"),&MeshInstance::_mesh_changed);
ADD_PROPERTY( PropertyInfo( Variant::OBJECT, "mesh/mesh", PROPERTY_HINT_RESOURCE_TYPE, "Mesh" ), _SCS("set_mesh"), _SCS("get_mesh"));
ADD_PROPERTY( PropertyInfo (Variant::NODE_PATH, "mesh/skeleton"), _SCS("set_skeleton_path"), _SCS("get_skeleton_path"));
}
diff --git a/scene/3d/mesh_instance.h b/scene/3d/mesh_instance.h
index 7c605c2d6d..fd8faf38b4 100644
--- a/scene/3d/mesh_instance.h
+++ b/scene/3d/mesh_instance.h
@@ -50,7 +50,9 @@ class MeshInstance : public GeometryInstance {
};
Map<StringName,MorphTrack> morph_tracks;
+ Vector<Ref<Material> > materials;
+ void _mesh_changed();
void _resolve_skeleton_path();
protected:
@@ -69,6 +71,9 @@ public:
void set_skeleton_path(const NodePath& p_skeleton);
NodePath get_skeleton_path();
+ void set_surface_material(int p_surface,const Ref<Material>& p_material);
+ Ref<Material> get_surface_material(int p_surface) const;
+
Node* create_trimesh_collision_node();
void create_trimesh_collision();
diff --git a/scene/3d/vehicle_body.cpp b/scene/3d/vehicle_body.cpp
index ba30c118f0..e35ba11e84 100644
--- a/scene/3d/vehicle_body.cpp
+++ b/scene/3d/vehicle_body.cpp
@@ -936,7 +936,7 @@ void VehicleBody::_direct_state_changed(Object *p_state) {
wheel.m_deltaRotation *= real_t(0.99);//damping of rotation when not in contact
}
-
+ linear_velocity = s->get_linear_velocity();
}
void VehicleBody::set_mass(real_t p_mass) {
@@ -990,6 +990,10 @@ float VehicleBody::get_steering() const{
return m_steeringValue;
}
+Vector3 VehicleBody::get_linear_velocity()
+{
+ return linear_velocity;
+}
void VehicleBody::_bind_methods(){
@@ -1008,6 +1012,8 @@ void VehicleBody::_bind_methods(){
ObjectTypeDB::bind_method(_MD("set_steering","steering"),&VehicleBody::set_steering);
ObjectTypeDB::bind_method(_MD("get_steering"),&VehicleBody::get_steering);
+ ObjectTypeDB::bind_method(_MD("get_linear_velocity"),&VehicleBody::get_linear_velocity);
+
ObjectTypeDB::bind_method(_MD("_direct_state_changed"),&VehicleBody::_direct_state_changed);
ADD_PROPERTY( PropertyInfo(Variant::REAL,"motion/engine_force",PROPERTY_HINT_RANGE,"0.00,1024.0,0.01"),_SCS("set_engine_force"),_SCS("get_engine_force"));
diff --git a/scene/3d/vehicle_body.h b/scene/3d/vehicle_body.h
index 285cca142d..b6ad88f15e 100644
--- a/scene/3d/vehicle_body.h
+++ b/scene/3d/vehicle_body.h
@@ -178,6 +178,7 @@ public:
void set_steering(float p_steering);
float get_steering() const;
+ Vector3 get_linear_velocity();
VehicleBody();
};
diff --git a/scene/animation/animation_player.cpp b/scene/animation/animation_player.cpp
index cecdd2bc40..2399bee539 100644
--- a/scene/animation/animation_player.cpp
+++ b/scene/animation/animation_player.cpp
@@ -1012,7 +1012,7 @@ void AnimationPlayer::play(const StringName& p_name, float p_custom_blend, float
queued.clear();
_set_process(true); // always process when starting an animation
playing = true;
-
+
emit_signal(SceneStringNames::get_singleton()->animation_started, c.assigned);
if (is_inside_tree() && get_tree()->is_editor_hint())
diff --git a/scene/gui/base_button.cpp b/scene/gui/base_button.cpp
index 3bcc60b86a..2200cac5da 100644
--- a/scene/gui/base_button.cpp
+++ b/scene/gui/base_button.cpp
@@ -289,7 +289,7 @@ void BaseButton::set_disabled(bool p_disabled) {
if (p_disabled)
set_focus_mode(FOCUS_NONE);
else
- set_focus_mode(FOCUS_ALL);
+ set_focus_mode(enabled_focus_mode);
}
bool BaseButton::is_disabled() const {
@@ -377,12 +377,56 @@ bool BaseButton::get_click_on_press() const {
return status.click_on_press;
}
+void BaseButton::set_enabled_focus_mode(FocusMode p_mode) {
+ enabled_focus_mode = p_mode;
+ if (!status.disabled) {
+ set_focus_mode( p_mode );
+ }
+}
+
+Control::FocusMode BaseButton::get_enabled_focus_mode() const {
+
+ return enabled_focus_mode;
+}
+
+void BaseButton::set_shortcut(const Ref<ShortCut>& p_shortcut) {
+
+ if (shortcut.is_null() == p_shortcut.is_null())
+ return;
+
+ shortcut=p_shortcut;
+ set_process_unhandled_input(shortcut.is_valid());
+}
+Ref<ShortCut> BaseButton:: get_shortcut() const {
+ return shortcut;
+}
+
+void BaseButton::_unhandled_input(InputEvent p_event) {
+
+ if (!is_disabled() && is_visible() && shortcut.is_valid() && shortcut->is_shortcut(p_event)) {
+ if (is_toggle_mode()) {
+ set_pressed(!is_pressed());
+ emit_signal("toggled",is_pressed());
+ }
+
+ emit_signal("pressed");
+ }
+}
+
+String BaseButton::get_tooltip(const Point2& p_pos) const {
+
+ String tooltip=Control::get_tooltip(p_pos);
+ if (shortcut.is_valid() && shortcut->is_valid())
+ tooltip+=" ("+shortcut->get_as_text()+")";
+ return tooltip;
+}
void BaseButton::_bind_methods() {
ObjectTypeDB::bind_method(_MD("_input_event"),&BaseButton::_input_event);
+ ObjectTypeDB::bind_method(_MD("_unhandled_input"),&BaseButton::_unhandled_input);
ObjectTypeDB::bind_method(_MD("set_pressed","pressed"),&BaseButton::set_pressed);
ObjectTypeDB::bind_method(_MD("is_pressed"),&BaseButton::is_pressed);
ObjectTypeDB::bind_method(_MD("is_hovered"),&BaseButton::is_hovered);
@@ -393,6 +437,10 @@ void BaseButton::_bind_methods() {
ObjectTypeDB::bind_method(_MD("set_click_on_press","enable"),&BaseButton::set_click_on_press);
ObjectTypeDB::bind_method(_MD("get_click_on_press"),&BaseButton::get_click_on_press);
ObjectTypeDB::bind_method(_MD("get_draw_mode"),&BaseButton::get_draw_mode);
+ ObjectTypeDB::bind_method(_MD("set_enabled_focus_mode","mode"),&BaseButton::set_enabled_focus_mode);
+ ObjectTypeDB::bind_method(_MD("get_enabled_focus_mode"),&BaseButton::get_enabled_focus_mode);
+ ObjectTypeDB::bind_method(_MD("set_shortcut","shortcut"),&BaseButton::set_shortcut);
+ ObjectTypeDB::bind_method(_MD("get_shortcut"),&BaseButton::get_shortcut);
BIND_VMETHOD(MethodInfo("_pressed"));
BIND_VMETHOD(MethodInfo("_toggled",PropertyInfo(Variant::BOOL,"pressed")));
@@ -404,6 +452,8 @@ void BaseButton::_bind_methods() {
ADD_PROPERTY( PropertyInfo( Variant::BOOL, "toggle_mode"), _SCS("set_toggle_mode"), _SCS("is_toggle_mode"));
ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "is_pressed"), _SCS("set_pressed"), _SCS("is_pressed"));
ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "click_on_press"), _SCS("set_click_on_press"), _SCS("get_click_on_press"));
+ ADD_PROPERTY( PropertyInfo( Variant::INT,"enabled_focus_mode", PROPERTY_HINT_ENUM, "None,Click,All" ), _SCS("set_enabled_focus_mode"), _SCS("get_enabled_focus_mode") );
+ ADD_PROPERTY( PropertyInfo( Variant::OBJECT, "shortcut",PROPERTY_HINT_RESOURCE_TYPE,"ShortCut"), _SCS("set_shortcut"), _SCS("get_shortcut"));
BIND_CONSTANT( DRAW_NORMAL );
@@ -424,6 +474,7 @@ BaseButton::BaseButton() {
status.click_on_press=false;
status.pressing_button=0;
set_focus_mode( FOCUS_ALL );
+ enabled_focus_mode = FOCUS_ALL;
group=NULL;
diff --git a/scene/gui/base_button.h b/scene/gui/base_button.h
index 9a5213d971..0056b00f33 100644
--- a/scene/gui/base_button.h
+++ b/scene/gui/base_button.h
@@ -42,6 +42,8 @@ class BaseButton : public Control {
OBJ_TYPE( BaseButton, Control );
bool toggle_mode;
+ FocusMode enabled_focus_mode;
+ Ref<ShortCut> shortcut;
struct Status {
@@ -56,6 +58,7 @@ class BaseButton : public Control {
} status;
+
ButtonGroup *group;
@@ -68,6 +71,7 @@ protected:
virtual void toggled(bool p_pressed);
static void _bind_methods();
virtual void _input_event(InputEvent p_event);
+ virtual void _unhandled_input(InputEvent p_event);
void _notification(int p_what);
public:
@@ -97,6 +101,13 @@ public:
void set_click_on_press(bool p_click_on_press);
bool get_click_on_press() const;
+ void set_enabled_focus_mode(FocusMode p_mode);
+ FocusMode get_enabled_focus_mode() const;
+
+ void set_shortcut(const Ref<ShortCut>& p_shortcut);
+ Ref<ShortCut> get_shortcut() const;
+
+ virtual String get_tooltip(const Point2& p_pos) const;
BaseButton();
~BaseButton();
diff --git a/scene/gui/box_container.cpp b/scene/gui/box_container.cpp
index a9522cf248..a6ffc30a83 100644
--- a/scene/gui/box_container.cpp
+++ b/scene/gui/box_container.cpp
@@ -280,6 +280,7 @@ BoxContainer::AlignMode BoxContainer::get_alignment() const {
void BoxContainer::add_spacer(bool p_begin) {
Control *c = memnew( Control );
+ c->set_stop_mouse(false);
if (vertical)
c->set_v_size_flags(SIZE_EXPAND_FILL);
else
diff --git a/scene/gui/button.cpp b/scene/gui/button.cpp
index 0f1622a838..579f6e08c9 100644
--- a/scene/gui/button.cpp
+++ b/scene/gui/button.cpp
@@ -213,7 +213,6 @@ Button::TextAlign Button::get_text_align() const {
return align;
}
-
void Button::_bind_methods() {
ObjectTypeDB::bind_method(_MD("set_text","text"),&Button::set_text);
diff --git a/scene/gui/button.h b/scene/gui/button.h
index 8a17a164a0..c39237c9af 100644
--- a/scene/gui/button.h
+++ b/scene/gui/button.h
@@ -54,7 +54,6 @@ private:
TextAlign align;
-
protected:
virtual Size2 get_minimum_size() const;
@@ -62,6 +61,8 @@ protected:
static void _bind_methods();
public:
//
+
+
void set_text(const String& p_text);
String get_text() const;
@@ -77,6 +78,7 @@ public:
void set_text_align(TextAlign p_align);
TextAlign get_text_align() const;
+
Button(const String& p_text=String());
~Button();
diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp
index 73e7237058..bd56369746 100644
--- a/scene/gui/control.cpp
+++ b/scene/gui/control.cpp
@@ -770,7 +770,7 @@ Size2 Control::get_minimum_size() const {
Ref<Texture> Control::get_icon(const StringName& p_name,const StringName& p_type) const {
- if (p_type==StringName()) {
+ if (p_type==StringName() || p_type=="") {
const Ref<Texture>* tex = data.icon_override.getptr(p_name);
if (tex)
@@ -800,7 +800,7 @@ Ref<Texture> Control::get_icon(const StringName& p_name,const StringName& p_type
}
Ref<Shader> Control::get_shader(const StringName& p_name,const StringName& p_type) const {
- if (p_type==StringName()) {
+ if (p_type==StringName() || p_type=="") {
const Ref<Shader>* sdr = data.shader_override.getptr(p_name);
if (sdr)
@@ -830,7 +830,7 @@ Ref<Shader> Control::get_shader(const StringName& p_name,const StringName& p_typ
Ref<StyleBox> Control::get_stylebox(const StringName& p_name,const StringName& p_type) const {
- if (p_type==StringName()) {
+ if (p_type==StringName() || p_type=="") {
const Ref<StyleBox>* style = data.style_override.getptr(p_name);
if (style)
return *style;
@@ -858,7 +858,7 @@ Ref<StyleBox> Control::get_stylebox(const StringName& p_name,const StringName& p
}
Ref<Font> Control::get_font(const StringName& p_name,const StringName& p_type) const {
- if (p_type==StringName()) {
+ if (p_type==StringName() || p_type=="") {
const Ref<Font>* font = data.font_override.getptr(p_name);
if (font)
return *font;
@@ -889,7 +889,7 @@ Ref<Font> Control::get_font(const StringName& p_name,const StringName& p_type) c
}
Color Control::get_color(const StringName& p_name,const StringName& p_type) const {
- if (p_type==StringName()) {
+ if (p_type==StringName() || p_type=="") {
const Color* color = data.color_override.getptr(p_name);
if (color)
return *color;
@@ -918,7 +918,7 @@ Color Control::get_color(const StringName& p_name,const StringName& p_type) cons
int Control::get_constant(const StringName& p_name,const StringName& p_type) const {
- if (p_type==StringName()) {
+ if (p_type==StringName() || p_type=="") {
const int* constant = data.constant_override.getptr(p_name);
if (constant)
return *constant;
@@ -946,12 +946,64 @@ int Control::get_constant(const StringName& p_name,const StringName& p_type) con
}
+bool Control::has_icon_override(const StringName& p_name) const {
+
+ const Ref<Texture>* tex = data.icon_override.getptr(p_name);
+ if (tex)
+ return true;
+ else
+ return false;
+}
+
+bool Control::has_shader_override(const StringName &p_name) const {
+
+ const Ref<Shader>* sdr = data.shader_override.getptr(p_name);
+ if (sdr)
+ return true;
+ else
+ return false;
+}
+
+bool Control::has_stylebox_override(const StringName& p_name) const {
+
+ const Ref<StyleBox>* style = data.style_override.getptr(p_name);
+ if (style)
+ return true;
+ else
+ return false;
+}
+
+bool Control::has_font_override(const StringName& p_name) const {
+
+ const Ref<Font>* font = data.font_override.getptr(p_name);
+ if (font)
+ return true;
+ else
+ return false;
+}
+
+bool Control::has_color_override(const StringName& p_name) const {
+
+ const Color* color = data.color_override.getptr(p_name);
+ if (color)
+ return true;
+ else
+ return false;
+}
+
+bool Control::has_constant_override(const StringName& p_name) const {
+
+ const int* constant = data.constant_override.getptr(p_name);
+ if (constant)
+ return true;
+ else
+ return false;
+}
bool Control::has_icon(const StringName& p_name,const StringName& p_type) const {
- if (p_type==StringName()) {
- const Ref<Texture>* tex = data.icon_override.getptr(p_name);
- if (tex)
+ if (p_type==StringName() || p_type=="") {
+ if (has_icon_override(p_name) == true)
return true;
}
@@ -977,11 +1029,10 @@ bool Control::has_icon(const StringName& p_name,const StringName& p_type) const
}
-bool Control::has_shader(const StringName &p_name, const StringName &p_type) const
-{
- if (p_type==StringName()) {
- const Ref<Shader>* sdr = data.shader_override.getptr(p_name);
- if (sdr)
+bool Control::has_shader(const StringName &p_name, const StringName &p_type) const {
+
+ if (p_type==StringName() || p_type=="") {
+ if (has_shader_override(p_name)==true)
return true;
}
@@ -1008,10 +1059,8 @@ bool Control::has_shader(const StringName &p_name, const StringName &p_type) con
}
bool Control::has_stylebox(const StringName& p_name,const StringName& p_type) const {
- if (p_type==StringName()) {
- const Ref<StyleBox>* style = data.style_override.getptr(p_name);
-
- if (style)
+ if (p_type==StringName() || p_type=="") {
+ if (has_stylebox_override(p_name)==true)
return true;
}
@@ -1038,9 +1087,8 @@ bool Control::has_stylebox(const StringName& p_name,const StringName& p_type) co
}
bool Control::has_font(const StringName& p_name,const StringName& p_type) const {
- if (p_type==StringName()) {
- const Ref<Font>* font = data.font_override.getptr(p_name);
- if (font)
+ if (p_type==StringName() || p_type=="") {
+ if (has_font_override(p_name)==true)
return true;
}
@@ -1066,11 +1114,11 @@ bool Control::has_font(const StringName& p_name,const StringName& p_type) const
return Theme::get_default()->has_font( p_name, type );
}
-bool Control::has_color(const StringName& p_name,const StringName& p_type) const {
- if (p_type==StringName()) {
- const Color* color = data.color_override.getptr(p_name);
- if (color)
+bool Control::has_color(const StringName& p_name, const StringName& p_type) const {
+
+ if (p_type==StringName() || p_type=="") {
+ if (has_color_override(p_name)==true)
return true;
}
@@ -1098,10 +1146,8 @@ bool Control::has_color(const StringName& p_name,const StringName& p_type) const
bool Control::has_constant(const StringName& p_name,const StringName& p_type) const {
- if (p_type==StringName()) {
-
- const int* constant = data.constant_override.getptr(p_name);
- if (constant)
+ if (p_type==StringName() || p_type=="") {
+ if (has_constant_override(p_name) == true)
return true;
}
@@ -1810,6 +1856,7 @@ void Control::_propagate_theme_changed(Control *p_owner) {
void Control::set_theme(const Ref<Theme>& p_theme) {
+
data.theme=p_theme;
if (!p_theme.is_null()) {
@@ -2265,6 +2312,7 @@ void Control::_bind_methods() {
ObjectTypeDB::bind_method(_MD("set_area_as_parent_rect","margin"),&Control::set_area_as_parent_rect,DEFVAL(0));
ObjectTypeDB::bind_method(_MD("show_modal","exclusive"),&Control::show_modal,DEFVAL(false));
ObjectTypeDB::bind_method(_MD("set_focus_mode","mode"),&Control::set_focus_mode);
+ ObjectTypeDB::bind_method(_MD("get_focus_mode"),&Control::get_focus_mode);
ObjectTypeDB::bind_method(_MD("has_focus"),&Control::has_focus);
ObjectTypeDB::bind_method(_MD("grab_focus"),&Control::grab_focus);
ObjectTypeDB::bind_method(_MD("release_focus"),&Control::release_focus);
@@ -2295,6 +2343,17 @@ void Control::_bind_methods() {
ObjectTypeDB::bind_method(_MD("get_color","name","type"),&Control::get_color,DEFVAL(""));
ObjectTypeDB::bind_method(_MD("get_constant","name","type"),&Control::get_constant,DEFVAL(""));
+ ObjectTypeDB::bind_method(_MD("has_icon_override", "name"), &Control::has_icon_override);
+ ObjectTypeDB::bind_method(_MD("has_stylebox_override", "name"), &Control::has_stylebox_override);
+ ObjectTypeDB::bind_method(_MD("has_font_override", "name"), &Control::has_font_override);
+ ObjectTypeDB::bind_method(_MD("has_color_override", "name"), &Control::has_color_override);
+ ObjectTypeDB::bind_method(_MD("has_constant_override", "name"), &Control::has_constant_override);
+
+ ObjectTypeDB::bind_method(_MD("has_icon", "name", "type"), &Control::has_icon, DEFVAL(""));
+ ObjectTypeDB::bind_method(_MD("has_stylebox", "name", "type"), &Control::has_stylebox, DEFVAL(""));
+ ObjectTypeDB::bind_method(_MD("has_font", "name", "type"), &Control::has_font, DEFVAL(""));
+ ObjectTypeDB::bind_method(_MD("has_color", "name", "type"), &Control::has_color, DEFVAL(""));
+ ObjectTypeDB::bind_method(_MD("has_constant", "name", "type"), &Control::has_constant, DEFVAL(""));
ObjectTypeDB::bind_method(_MD("get_parent_control:Control"),&Control::get_parent_control);
@@ -2324,6 +2383,7 @@ void Control::_bind_methods() {
ObjectTypeDB::bind_method(_MD("warp_mouse","to_pos"),&Control::warp_mouse);
+ ObjectTypeDB::bind_method(_MD("minimum_size_changed"), &Control::minimum_size_changed);
BIND_VMETHOD(MethodInfo("_input_event",PropertyInfo(Variant::INPUT_EVENT,"event")));
BIND_VMETHOD(MethodInfo(Variant::VECTOR2,"get_minimum_size"));
diff --git a/scene/gui/control.h b/scene/gui/control.h
index f720185c9d..59704ae29b 100644
--- a/scene/gui/control.h
+++ b/scene/gui/control.h
@@ -35,7 +35,7 @@
#include "scene/2d/canvas_item.h"
#include "math_2d.h"
#include "rid.h"
-
+#include "scene/gui/input_action.h"
/**
@author Juan Linietsky <reduzio@gmail.com>
*/
@@ -341,6 +341,13 @@ public:
Color get_color(const StringName& p_name,const StringName& p_type=StringName()) const;
int get_constant(const StringName& p_name,const StringName& p_type=StringName()) const;
+ bool has_icon_override(const StringName& p_name) const;
+ bool has_shader_override(const StringName& p_name) const;
+ bool has_stylebox_override(const StringName& p_name) const;
+ bool has_font_override(const StringName& p_name) const;
+ bool has_color_override(const StringName& p_name) const;
+ bool has_constant_override(const StringName& p_name) const;
+
bool has_icon(const StringName& p_name,const StringName& p_type=StringName()) const;
bool has_shader(const StringName& p_name,const StringName& p_type=StringName()) const;
bool has_stylebox(const StringName& p_name,const StringName& p_type=StringName()) const;
diff --git a/scene/gui/dialogs.cpp b/scene/gui/dialogs.cpp
index 51242d89bd..6342391383 100644
--- a/scene/gui/dialogs.cpp
+++ b/scene/gui/dialogs.cpp
@@ -118,6 +118,16 @@ void WindowDialog::set_title(const String& p_title) {
update();
}
+Size2 WindowDialog::get_minimum_size() const {
+
+ Ref<Font> font = get_font("title_font","WindowDialog");
+ int msx=close_button->get_combined_minimum_size().x;
+ msx+=font->get_string_size(title).x;
+
+ return Size2(msx,1);
+}
+
+
String WindowDialog::get_title() const {
return title;
@@ -192,11 +202,9 @@ void AcceptDialog::_notification(int p_what) {
if (p_what==NOTIFICATION_MODAL_CLOSE) {
cancel_pressed();
- } if (p_what==NOTIFICATION_DRAW) {
-
-
-
+ } if (p_what==NOTIFICATION_RESIZED) {
+ _update_child_rect();
}
}
@@ -244,12 +252,69 @@ void AcceptDialog::register_text_enter(Node *p_line_edit) {
p_line_edit->connect("text_entered", this,"_builtin_text_entered");
}
+void AcceptDialog::_update_child_rect() {
+
+ int margin = get_constant("margin","Dialogs");
+ Size2 size = get_size();
+ Size2 hminsize = hbc->get_combined_minimum_size();
+
+ Vector2 cpos(margin,margin);
+ Vector2 csize(size.x-margin*2,size.y-margin*3-hminsize.y);
+ label->set_pos(cpos);
+ label->set_size(csize);
+
+ if (child) {
+
+ child->set_pos(cpos);
+ child->set_size(csize);
+ }
+
+ cpos.y+=csize.y+margin;
+ csize.y=hminsize.y;
+
+ hbc->set_pos(cpos);
+ hbc->set_size(csize);
+
+}
+
+Size2 AcceptDialog::get_minimum_size() const {
+
+ int margin = get_constant("margin","Dialogs");
+ Size2 minsize = label->get_combined_minimum_size();
+ if (child) {
+
+ Size2 cminsize = child->get_combined_minimum_size();
+ minsize.x=MAX(cminsize.x,minsize.x);
+ minsize.y=MAX(cminsize.y,minsize.y);
+ }
+
+ Size2 hminsize = hbc->get_combined_minimum_size();
+ minsize.x = MAX(hminsize.x,minsize.x);
+ minsize.y+=hminsize.y;
+ minsize.x+=margin*2;
+ minsize.y+=margin*3; //one as separation between hbc and child
+
+ Size2 wmsize = WindowDialog::get_minimum_size();
+ minsize.x=MAX(wmsize.x,minsize.x);
+ return minsize;
+}
+
+
void AcceptDialog::set_child_rect(Control *p_child) {
ERR_FAIL_COND(p_child->get_parent()!=this);
- p_child->set_area_as_parent_rect(get_constant("margin","Dialogs"));
- p_child->set_margin(MARGIN_BOTTOM, get_constant("button_margin","Dialogs")+10);
+ //p_child->set_area_as_parent_rect(get_constant("margin","Dialogs"));
+ child=p_child;
+ minimum_size_changed();
+ _update_child_rect();
+}
+
+void AcceptDialog::remove_child_notify(Node *p_child) {
+
+ if (p_child==child) {
+ child=NULL;
+ }
}
void AcceptDialog::_custom_action(const String& p_action) {
@@ -284,7 +349,7 @@ Button* AcceptDialog::add_cancel(const String &p_cancel) {
String c = p_cancel;
if (p_cancel=="")
- c="Cancel";
+ c=RTR("Cancel");
Button *b = swap_ok_cancel ? add_button(c,true) : add_button(c);
b->connect("pressed",this,"_closed");
return b;
@@ -341,7 +406,7 @@ AcceptDialog::AcceptDialog() {
hbc->add_spacer();
ok = memnew( Button );
- ok->set_text("OK");
+ ok->set_text(RTR("OK"));
hbc->add_child(ok);
hbc->add_spacer();
//add_child(ok);
@@ -351,7 +416,9 @@ AcceptDialog::AcceptDialog() {
set_as_toplevel(true);
hide_on_ok=true;
- set_title("Alert!");
+ set_title(RTR("Alert!"));
+
+ child=NULL;
}
@@ -372,6 +439,6 @@ Button *ConfirmationDialog::get_cancel() {
ConfirmationDialog::ConfirmationDialog() {
- set_title("Please Confirm...");
+ set_title(RTR("Please Confirm..."));
cancel = add_cancel();
}
diff --git a/scene/gui/dialogs.h b/scene/gui/dialogs.h
index f256c49aee..d00bb41ff6 100644
--- a/scene/gui/dialogs.h
+++ b/scene/gui/dialogs.h
@@ -64,6 +64,8 @@ public:
void set_title(const String& p_title);
String get_title() const;
+ Size2 get_minimum_size() const;
+
WindowDialog();
~WindowDialog();
@@ -89,6 +91,7 @@ class AcceptDialog : public WindowDialog {
OBJ_TYPE(AcceptDialog,WindowDialog);
+ Control *child;
HBoxContainer *hbc;
Label *label;
Button *ok;
@@ -100,10 +103,12 @@ class AcceptDialog : public WindowDialog {
void _ok_pressed();
void _close_pressed();
void _builtin_text_entered(const String& p_text);
+ void _update_child_rect();
static bool swap_ok_cancel;
+ virtual void remove_child_notify(Node *p_child);
protected:
@@ -116,6 +121,8 @@ protected:
virtual void custom_action(const String&) {}
public:
+ Size2 get_minimum_size() const;
+
Label *get_label() { return label; }
static void set_swap_ok_cancel(bool p_swap);
diff --git a/scene/gui/input_action.cpp b/scene/gui/input_action.cpp
new file mode 100644
index 0000000000..c4e7a75298
--- /dev/null
+++ b/scene/gui/input_action.cpp
@@ -0,0 +1,125 @@
+#include "input_action.h"
+#include "os/keyboard.h"
+
+void ShortCut::set_shortcut(const InputEvent& p_shortcut){
+
+ shortcut=p_shortcut;
+ emit_changed();
+}
+
+InputEvent ShortCut::get_shortcut() const{
+
+ return shortcut;
+}
+
+bool ShortCut::is_shortcut(const InputEvent& p_event) const {
+
+ bool same=false;
+
+
+ switch(p_event.type) {
+
+ case InputEvent::KEY: {
+
+ same=(shortcut.key.scancode==p_event.key.scancode && shortcut.key.mod == p_event.key.mod);
+
+ } break;
+ case InputEvent::JOYSTICK_BUTTON: {
+
+ same=(shortcut.joy_button.button_index==p_event.joy_button.button_index);
+
+ } break;
+ case InputEvent::MOUSE_BUTTON: {
+
+ same=(shortcut.mouse_button.button_index==p_event.mouse_button.button_index);
+
+ } break;
+ case InputEvent::JOYSTICK_MOTION: {
+
+ same=(shortcut.joy_motion.axis==p_event.joy_motion.axis && (shortcut.joy_motion.axis_value < 0) == (p_event.joy_motion.axis_value < 0));
+
+ } break;
+ default: {};
+ }
+
+ return same;
+}
+
+String ShortCut::get_as_text() const {
+
+ switch(shortcut.type) {
+
+ case InputEvent::NONE: {
+
+ return "None";
+ } break;
+ case InputEvent::KEY: {
+
+ String str;
+ if (shortcut.key.mod.shift)
+ str+=RTR("Shift+");
+ if (shortcut.key.mod.alt)
+ str+=RTR("Alt+");
+ if (shortcut.key.mod.control)
+ str+=RTR("Ctrl+");
+ if (shortcut.key.mod.meta)
+ str+=RTR("Meta+");
+
+ str+=keycode_get_string(shortcut.key.scancode).capitalize();
+
+ return str;
+ } break;
+ case InputEvent::JOYSTICK_BUTTON: {
+
+ String str = RTR("Device")+" "+itos(shortcut.device)+", "+RTR("Button")+" "+itos(shortcut.joy_button.button_index);
+ str+=".";
+
+ return str;
+ } break;
+ case InputEvent::MOUSE_BUTTON: {
+
+ String str = RTR("Device")+" "+itos(shortcut.device)+", ";
+ switch (shortcut.mouse_button.button_index) {
+ case BUTTON_LEFT: str+=RTR("Left Button."); break;
+ case BUTTON_RIGHT: str+=RTR("Right Button."); break;
+ case BUTTON_MIDDLE: str+=RTR("Middle Button."); break;
+ case BUTTON_WHEEL_UP: str+=RTR("Wheel Up."); break;
+ case BUTTON_WHEEL_DOWN: str+=RTR("Wheel Down."); break;
+ default: str+=RTR("Button")+" "+itos(shortcut.mouse_button.button_index)+".";
+ }
+
+ return str;
+ } break;
+ case InputEvent::JOYSTICK_MOTION: {
+
+ int ax = shortcut.joy_motion.axis;
+ String str = RTR("Device")+" "+itos(shortcut.device)+", "+RTR("Axis")+" "+itos(ax)+".";
+
+ return str;
+ } break;
+ }
+
+ return "";
+}
+
+bool ShortCut::is_valid() const {
+
+ return shortcut.type!=InputEvent::NONE;
+}
+
+void ShortCut::_bind_methods() {
+
+ ObjectTypeDB::bind_method(_MD("set_shortcut","event"),&ShortCut::set_shortcut);
+ ObjectTypeDB::bind_method(_MD("get_shortcut"),&ShortCut::get_shortcut);
+
+ ObjectTypeDB::bind_method(_MD("is_valid"),&ShortCut::is_valid);
+
+ ObjectTypeDB::bind_method(_MD("is_shortcut","event"),&ShortCut::is_shortcut);
+ ObjectTypeDB::bind_method(_MD("get_as_text"),&ShortCut::get_as_text);
+
+ ADD_PROPERTY(PropertyInfo(Variant::INPUT_EVENT,"shortcut"),_SCS("set_shortcut"),_SCS("get_shortcut"));
+}
+
+ShortCut::ShortCut(){
+
+}
diff --git a/scene/gui/input_action.h b/scene/gui/input_action.h
new file mode 100644
index 0000000000..8e0e1ef0bd
--- /dev/null
+++ b/scene/gui/input_action.h
@@ -0,0 +1,26 @@
+#ifndef INPUTACTION_H
+#define INPUTACTION_H
+
+#include "resource.h"
+
+class ShortCut : public Resource {
+
+ OBJ_TYPE(ShortCut,Resource);
+
+ InputEvent shortcut;
+protected:
+
+ static void _bind_methods();
+public:
+
+ void set_shortcut(const InputEvent& p_shortcut);
+ InputEvent get_shortcut() const;
+ bool is_shortcut(const InputEvent& p_Event) const;
+ bool is_valid() const;
+
+ String get_as_text() const;
+
+ ShortCut();
+};
+
+#endif // INPUTACTION_H
diff --git a/scene/gui/item_list.cpp b/scene/gui/item_list.cpp
index c1a0e43e49..fc4ab5f8ca 100644
--- a/scene/gui/item_list.cpp
+++ b/scene/gui/item_list.cpp
@@ -325,6 +325,18 @@ int ItemList::get_fixed_column_width() const{
return fixed_column_width;
}
+void ItemList::set_same_column_width(bool p_enable){
+
+ same_column_width=p_enable;
+ update();
+ shape_changed=true;
+
+}
+int ItemList::is_same_column_width() const{
+
+ return same_column_width;
+}
+
void ItemList::set_max_text_lines(int p_lines){
ERR_FAIL_COND(p_lines<1);
@@ -824,6 +836,8 @@ void ItemList::_notification(int p_what) {
}
if (shape_changed) {
+
+ float max_column_width = 0;
//1- compute item minimum sizes
for(int i=0;i<items.size();i++) {
@@ -831,7 +845,7 @@ void ItemList::_notification(int p_what) {
Size2 minsize;
if (items[i].icon.is_valid()) {
- minsize=_adjust_to_max_size(items[i].get_icon_size(),max_icon_size);
+ minsize=_adjust_to_max_size(items[i].get_icon_size(),max_icon_size) * icon_scale;
if (items[i].text!="") {
if (icon_mode==ICON_MODE_TOP) {
@@ -864,10 +878,11 @@ void ItemList::_notification(int p_what) {
}
-
- items[i].rect_cache.size=minsize;
if (fixed_column_width>0)
- items[i].rect_cache.size.x=fixed_column_width;
+ minsize.x=fixed_column_width;
+ max_column_width=MAX(max_column_width,minsize.x);
+ items[i].rect_cache.size=minsize;
+ items[i].min_rect_cache.size=minsize;
}
@@ -896,17 +911,23 @@ void ItemList::_notification(int p_what) {
break;
}
+ items[i].rect_cache=items[i].min_rect_cache;
+ if(same_column_width)
+ items[i].rect_cache.size.x=max_column_width;
items[i].rect_cache.pos=ofs;
max_h=MAX(max_h,items[i].rect_cache.size.y);
- ofs.x+=items[i].rect_cache.size.x;
+ ofs.x+=items[i].rect_cache.size.x + hseparation;
//print_line("item "+itos(i)+" ofs "+rtos(items[i].rect_cache.size.x));
- if (col>0)
- ofs.x+=hseparation;
col++;
if (col==current_columns) {
if (i<items.size()-1)
separators.push_back(ofs.y+max_h+vseparation/2);
+
+ for(int j=i;j>=0 && col>0;j--, col--) {
+ items[j].rect_cache.size.y = max_h;
+ }
+
ofs.x=0;
ofs.y+=max_h+vseparation;
col=0;
@@ -914,6 +935,10 @@ void ItemList::_notification(int p_what) {
}
}
+ for(int j=items.size()-1;j>=0 && col>0;j--, col--) {
+ items[j].rect_cache.size.y = max_h;
+ }
+
if (all_fit) {
float max = MAX(page,ofs.y+max_h);
scroll_bar->set_max(max);
@@ -976,7 +1001,7 @@ void ItemList::_notification(int p_what) {
Vector2 text_ofs;
if (items[i].icon.is_valid()) {
- Size2 icon_size = _adjust_to_max_size(items[i].get_icon_size(),max_icon_size);
+ Size2 icon_size = _adjust_to_max_size(items[i].get_icon_size(),max_icon_size) * icon_scale;
Vector2 icon_ofs;
if (min_icon_size!=Vector2()) {
@@ -988,7 +1013,12 @@ void ItemList::_notification(int p_what) {
if (icon_mode==ICON_MODE_TOP) {
pos.x += Math::floor((items[i].rect_cache.size.width - icon_size.width)/2);
+ pos.y += MIN(
+ Math::floor((items[i].rect_cache.size.height - icon_size.height)/2),
+ items[i].rect_cache.size.height - items[i].min_rect_cache.size.height
+ );
text_ofs.y = MAX(icon_size.height, min_icon_size.y) + icon_margin;
+ text_ofs.y += items[i].rect_cache.size.height - items[i].min_rect_cache.size.height;
} else {
pos.y += Math::floor((items[i].rect_cache.size.height - icon_size.height)/2);
@@ -1014,6 +1044,8 @@ void ItemList::_notification(int p_what) {
Vector2 size = font->get_string_size(items[i].text);
if (fixed_column_width)
max_len=fixed_column_width;
+ else if(same_column_width)
+ max_len=items[i].rect_cache.size.x;
else
max_len=size.x;
@@ -1201,6 +1233,14 @@ bool ItemList::get_allow_rmb_select() const {
return allow_rmb_select;
}
+void ItemList::set_icon_scale(real_t p_scale) {
+ icon_scale = p_scale;
+}
+
+real_t ItemList::get_icon_scale() const {
+ return icon_scale;
+}
+
void ItemList::_bind_methods(){
ObjectTypeDB::bind_method(_MD("add_item","text","icon:Texture","selectable"),&ItemList::add_item,DEFVAL(Variant()),DEFVAL(true));
@@ -1243,6 +1283,9 @@ void ItemList::_bind_methods(){
ObjectTypeDB::bind_method(_MD("set_fixed_column_width","width"),&ItemList::set_fixed_column_width);
ObjectTypeDB::bind_method(_MD("get_fixed_column_width"),&ItemList::get_fixed_column_width);
+ ObjectTypeDB::bind_method(_MD("set_same_column_width","enable"),&ItemList::set_same_column_width);
+ ObjectTypeDB::bind_method(_MD("is_same_column_width"),&ItemList::is_same_column_width);
+
ObjectTypeDB::bind_method(_MD("set_max_text_lines","lines"),&ItemList::set_max_text_lines);
ObjectTypeDB::bind_method(_MD("get_max_text_lines"),&ItemList::get_max_text_lines);
@@ -1261,6 +1304,9 @@ void ItemList::_bind_methods(){
ObjectTypeDB::bind_method(_MD("set_max_icon_size","size"),&ItemList::set_max_icon_size);
ObjectTypeDB::bind_method(_MD("get_max_icon_size"),&ItemList::get_max_icon_size);
+ ObjectTypeDB::bind_method(_MD("set_icon_scale","scale"),&ItemList::set_icon_scale);
+ ObjectTypeDB::bind_method(_MD("get_icon_scale"),&ItemList::get_icon_scale);
+
ObjectTypeDB::bind_method(_MD("set_allow_rmb_select","allow"),&ItemList::set_allow_rmb_select);
ObjectTypeDB::bind_method(_MD("get_allow_rmb_select"),&ItemList::get_allow_rmb_select);
@@ -1292,6 +1338,7 @@ ItemList::ItemList() {
icon_mode=ICON_MODE_LEFT;
fixed_column_width=0;
+ same_column_width = false;
max_text_lines=1;
max_columns=1;
@@ -1308,6 +1355,7 @@ ItemList::ItemList() {
defer_select_single=-1;
allow_rmb_select=false;
+ icon_scale = 1.0f;
}
ItemList::~ItemList() {
diff --git a/scene/gui/item_list.h b/scene/gui/item_list.h
index 59fa1d8270..087c585128 100644
--- a/scene/gui/item_list.h
+++ b/scene/gui/item_list.h
@@ -33,6 +33,7 @@ private:
Color custom_bg;
Rect2 rect_cache;
+ Rect2 min_rect_cache;
Size2 get_icon_size() const;
@@ -44,6 +45,7 @@ private:
bool shape_changed;
bool ensure_selected_visible;
+ bool same_column_width;
Vector<Item> items;
Vector<int> separators;
@@ -59,12 +61,18 @@ private:
int fixed_column_width;
int max_text_lines;
int max_columns;
+
Size2 min_icon_size;
Size2 max_icon_size;
+
+ Size2 max_item_size_cache;
+
int defer_select_single;
bool allow_rmb_select;
+ real_t icon_scale;
+
void _scroll_changed(double);
void _input_event(const InputEvent& p_event);
protected:
@@ -121,6 +129,9 @@ public:
void set_fixed_column_width(int p_size);
int get_fixed_column_width() const;
+ void set_same_column_width(bool p_enable);
+ int is_same_column_width() const;
+
void set_max_text_lines(int p_amount);
int get_max_text_lines() const;
@@ -150,6 +161,9 @@ public:
virtual String get_tooltip(const Point2& p_pos) const;
int get_item_at_pos(const Point2& p_pos,bool p_exact=false) const;
+ void set_icon_scale(real_t p_scale);
+ real_t get_icon_scale() const;
+
ItemList();
~ItemList();
};
diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp
index 14dac454bd..44cc798447 100644
--- a/scene/gui/line_edit.cpp
+++ b/scene/gui/line_edit.cpp
@@ -454,7 +454,7 @@ void LineEdit::_notification(int p_what) {
} break;
}
- int ofs_max=width-style->get_minimum_size().width;
+ int ofs_max=width-style->get_minimum_size().width+x_ofs;
int char_ofs=window_pos;
int y_area=height-style->get_minimum_size().height;
@@ -799,8 +799,7 @@ Size2 LineEdit::get_minimum_size() const {
Ref<Font> font=get_font("font");
Size2 min=style->get_minimum_size();
- min.height+=font->get_height();
- min.width+=get_constant("minimum_spaces")*font->get_char_size(' ').x;
+ min+=font->get_string_size(this->text);
return min;
}
@@ -1027,7 +1026,7 @@ void LineEdit::_bind_methods() {
ADD_PROPERTYNZ( PropertyInfo( Variant::INT, "max_length" ), _SCS("set_max_length"),_SCS("get_max_length") );
ADD_PROPERTYNO( PropertyInfo( Variant::BOOL, "editable" ), _SCS("set_editable"),_SCS("is_editable") );
ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "secret" ), _SCS("set_secret"),_SCS("is_secret") );
-
+ ADD_PROPERTY( PropertyInfo( Variant::INT,"focus_mode", PROPERTY_HINT_ENUM, "None,Click,All" ), _SCS("set_focus_mode"), _SCS("get_focus_mode") );
}
diff --git a/scene/gui/link_button.cpp b/scene/gui/link_button.cpp
index 007d0a709e..065423ae2d 100644
--- a/scene/gui/link_button.cpp
+++ b/scene/gui/link_button.cpp
@@ -119,6 +119,6 @@ void LinkButton::_bind_methods() {
LinkButton::LinkButton() {
underline_mode=UNDERLINE_MODE_ALWAYS;
- set_focus_mode(FOCUS_NONE);
+ set_enabled_focus_mode(FOCUS_NONE);
set_default_cursor_shape(CURSOR_POINTING_HAND);
}
diff --git a/scene/gui/menu_button.cpp b/scene/gui/menu_button.cpp
index 0f415f013d..28d67287d5 100644
--- a/scene/gui/menu_button.cpp
+++ b/scene/gui/menu_button.cpp
@@ -32,30 +32,15 @@
void MenuButton::_unhandled_key_input(InputEvent p_event) {
- //check accelerators
- if (p_event.type==InputEvent::KEY && p_event.key.pressed) {
+ if (p_event.is_pressed() && !p_event.is_echo() && (p_event.type==InputEvent::KEY || p_event.type==InputEvent::ACTION || p_event.type==InputEvent::JOYSTICK_BUTTON)) {
if (!get_parent() || !is_visible() || is_disabled())
return;
- uint32_t code=p_event.key.scancode;
- if (code==0)
- code=p_event.key.unicode;
- if (p_event.key.mod.control)
- code|=KEY_MASK_CTRL;
- if (p_event.key.mod.alt)
- code|=KEY_MASK_ALT;
- if (p_event.key.mod.meta)
- code|=KEY_MASK_META;
- if (p_event.key.mod.shift)
- code|=KEY_MASK_SHIFT;
-
-
- int item = popup->activate_item_by_accelerator(code);
+ int item = popup->activate_item_by_event(p_event);
}
-
}
@@ -123,7 +108,7 @@ MenuButton::MenuButton() {
set_flat(true);
- set_focus_mode(FOCUS_NONE);
+ set_enabled_focus_mode(FOCUS_NONE);
popup = memnew( PopupMenu );
popup->hide();
add_child(popup);
diff --git a/scene/gui/patch_9_frame.cpp b/scene/gui/patch_9_frame.cpp
index b6e261714c..3ecee7328b 100644
--- a/scene/gui/patch_9_frame.cpp
+++ b/scene/gui/patch_9_frame.cpp
@@ -9,10 +9,9 @@ void Patch9Frame::_notification(int p_what) {
if (texture.is_null())
return;
-
Size2 s=get_size();
RID ci = get_canvas_item();
- VS::get_singleton()->canvas_item_add_style_box(ci,Rect2(Point2(),s),texture->get_rid(),Vector2(margin[MARGIN_LEFT],margin[MARGIN_TOP]),Vector2(margin[MARGIN_RIGHT],margin[MARGIN_BOTTOM]),draw_center,modulate);
+ VS::get_singleton()->canvas_item_add_style_box(ci,Rect2(Point2(),s),region_rect,texture->get_rid(),Vector2(margin[MARGIN_LEFT],margin[MARGIN_TOP]),Vector2(margin[MARGIN_RIGHT],margin[MARGIN_BOTTOM]),draw_center,modulate);
// draw_texture_rect(texture,Rect2(Point2(),s),false,modulate);
/*
@@ -47,12 +46,15 @@ void Patch9Frame::_bind_methods() {
ObjectTypeDB::bind_method(_MD("get_modulate"), & Patch9Frame::get_modulate );
ObjectTypeDB::bind_method(_MD("set_patch_margin","margin","value"), & Patch9Frame::set_patch_margin );
ObjectTypeDB::bind_method(_MD("get_patch_margin","margin"), & Patch9Frame::get_patch_margin );
+ ObjectTypeDB::bind_method(_MD("set_region_rect","rect"),&Patch9Frame::set_region_rect);
+ ObjectTypeDB::bind_method(_MD("get_region_rect"),&Patch9Frame::get_region_rect);
ObjectTypeDB::bind_method(_MD("set_draw_center","draw_center"), & Patch9Frame::set_draw_center );
ObjectTypeDB::bind_method(_MD("get_draw_center"), & Patch9Frame::get_draw_center );
ADD_PROPERTYNZ( PropertyInfo( Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), _SCS("set_texture"),_SCS("get_texture") );
ADD_PROPERTYNO( PropertyInfo( Variant::COLOR, "modulate"), _SCS("set_modulate"),_SCS("get_modulate") );
ADD_PROPERTYNO( PropertyInfo( Variant::BOOL, "draw_center"), _SCS("set_draw_center"),_SCS("get_draw_center") );
+ ADD_PROPERTYNZ( PropertyInfo( Variant::RECT2, "region_rect"), _SCS("set_region_rect"),_SCS("get_region_rect"));
ADD_PROPERTYINZ( PropertyInfo( Variant::INT, "patch_margin/left",PROPERTY_HINT_RANGE,"0,16384,1"), _SCS("set_patch_margin"),_SCS("get_patch_margin"),MARGIN_LEFT );
ADD_PROPERTYINZ( PropertyInfo( Variant::INT, "patch_margin/top",PROPERTY_HINT_RANGE,"0,16384,1"), _SCS("set_patch_margin"),_SCS("get_patch_margin"),MARGIN_TOP );
ADD_PROPERTYINZ( PropertyInfo( Variant::INT, "patch_margin/right",PROPERTY_HINT_RANGE,"0,16384,1"), _SCS("set_patch_margin"),_SCS("get_patch_margin"),MARGIN_RIGHT );
@@ -93,6 +95,20 @@ void Patch9Frame::set_patch_margin(Margin p_margin,int p_size) {
margin[p_margin]=p_size;
update();
minimum_size_changed();
+ switch (p_margin) {
+ case MARGIN_LEFT:
+ _change_notify("patch_margin/left");
+ break;
+ case MARGIN_TOP:
+ _change_notify("patch_margin/top");
+ break;
+ case MARGIN_RIGHT:
+ _change_notify("patch_margin/right");
+ break;
+ case MARGIN_BOTTOM:
+ _change_notify("patch_margin/bottom");
+ break;
+ }
}
int Patch9Frame::get_patch_margin(Margin p_margin) const{
@@ -101,6 +117,22 @@ int Patch9Frame::get_patch_margin(Margin p_margin) const{
return margin[p_margin];
}
+void Patch9Frame::set_region_rect(const Rect2& p_region_rect) {
+
+ if (region_rect==p_region_rect)
+ return;
+
+ region_rect=p_region_rect;
+
+ item_rect_changed();
+ _change_notify("region_rect");
+}
+
+Rect2 Patch9Frame::get_region_rect() const {
+
+ return region_rect;
+}
+
void Patch9Frame::set_draw_center(bool p_draw) {
draw_center=p_draw;
@@ -128,5 +160,3 @@ Patch9Frame::Patch9Frame() {
Patch9Frame::~Patch9Frame()
{
}
-
-
diff --git a/scene/gui/patch_9_frame.h b/scene/gui/patch_9_frame.h
index 562a5b1d77..52e2324c3d 100644
--- a/scene/gui/patch_9_frame.h
+++ b/scene/gui/patch_9_frame.h
@@ -11,6 +11,7 @@ class Patch9Frame : public Control {
bool draw_center;
int margin[4];
+ Rect2 region_rect;
Color modulate;
Ref<Texture> texture;
protected:
@@ -30,6 +31,9 @@ public:
void set_patch_margin(Margin p_margin,int p_size);
int get_patch_margin(Margin p_margin) const;
+ void set_region_rect(const Rect2& p_region_rect);
+ Rect2 get_region_rect() const;
+
void set_draw_center(bool p_enable);
bool get_draw_center() const;
diff --git a/scene/gui/popup_menu.cpp b/scene/gui/popup_menu.cpp
index 819885809b..b3f18bf8fa 100644
--- a/scene/gui/popup_menu.cpp
+++ b/scene/gui/popup_menu.cpp
@@ -32,9 +32,16 @@
#include "translation.h"
#include "os/input.h"
-String PopupMenu::_get_accel_text(uint32_t p_accel) const {
+String PopupMenu::_get_accel_text(int p_item) const {
+
+ ERR_FAIL_INDEX_V(p_item,items.size(),String());
+
+ if (items[p_item].shortcut.is_valid())
+ return items[p_item].shortcut->get_as_text();
+ else if (items[p_item].accel)
+ return keycode_get_string(items[p_item].accel);
+ return String();
- return keycode_get_string(p_accel);
/*
String atxt;
if (p_accel&KEY_MASK_SHIFT)
@@ -87,14 +94,15 @@ Size2 PopupMenu::get_minimum_size() const {
size.width+=check_w+hseparation;
}
- size.width+=font->get_string_size(items[i].text).width;
+ String text = items[i].shortcut.is_valid() ? String(tr(items[i].shortcut->get_name())) : items[i].text;
+ size.width+=font->get_string_size(text).width;
if (i>0)
size.height+=vseparation;
- if (items[i].accel) {
+ if (items[i].accel || (items[i].shortcut.is_valid() && items[i].shortcut->is_valid())) {
int accel_w = hseparation*2;
- accel_w+=font->get_string_size(_get_accel_text(items[i].accel)).width;
+ accel_w+=font->get_string_size(_get_accel_text(i)).width;
accel_max_w = MAX( accel_w, accel_max_w );
}
@@ -484,13 +492,15 @@ void PopupMenu::_notification(int p_what) {
}
item_ofs.y+=font->get_ascent();
- if (!items[i].separator)
- font->draw(ci,item_ofs+Point2(0,Math::floor((h-font_h)/2.0)),items[i].text,items[i].disabled?font_color_disabled:(i==mouse_over?font_color_hover:font_color));
+ String text = items[i].shortcut.is_valid() ? String(tr(items[i].shortcut->get_name())) : items[i].text;
+ if (!items[i].separator) {
+ font->draw(ci,item_ofs+Point2(0,Math::floor((h-font_h)/2.0)),text,items[i].disabled?font_color_disabled:(i==mouse_over?font_color_hover:font_color));
+ }
- if (items[i].accel) {
+ if (items[i].accel || (items[i].shortcut.is_valid() && items[i].shortcut->is_valid())) {
//accelerator
- String text = _get_accel_text(items[i].accel);
+ String text = _get_accel_text(i);
item_ofs.x=size.width-style->get_margin(MARGIN_RIGHT)-font->get_string_size(text).width;
font->draw(ci,item_ofs+Point2(0,Math::floor((h-font_h)/2.0)),text,i==mouse_over?font_color_hover:font_color_accel);
@@ -570,6 +580,64 @@ void PopupMenu::add_check_item(const String& p_label,int p_ID,uint32_t p_accel)
update();
}
+
+void PopupMenu::add_icon_shortcut(const Ref<Texture>& p_icon,const Ref<ShortCut>& p_shortcut,int p_ID) {
+
+ ERR_FAIL_COND(p_shortcut.is_null());
+
+ _ref_shortcut(p_shortcut);
+
+ Item item;
+ item.ID=p_ID;
+ item.icon=p_icon;
+ item.shortcut=p_shortcut;
+ items.push_back(item);
+ update();
+
+}
+
+void PopupMenu::add_shortcut(const Ref<ShortCut>& p_shortcut,int p_ID){
+
+ ERR_FAIL_COND(p_shortcut.is_null());
+
+ _ref_shortcut(p_shortcut);
+
+ Item item;
+ item.ID=p_ID;
+ item.shortcut=p_shortcut;
+ items.push_back(item);
+ update();
+
+}
+void PopupMenu::add_icon_check_shortcut(const Ref<Texture>& p_icon,const Ref<ShortCut>& p_shortcut,int p_ID){
+
+ ERR_FAIL_COND(p_shortcut.is_null());
+
+ _ref_shortcut(p_shortcut);
+
+ Item item;
+ item.ID=p_ID;
+ item.shortcut=p_shortcut;
+ item.checkable=true;
+ item.icon=p_icon;
+ items.push_back(item);
+ update();
+}
+
+void PopupMenu::add_check_shortcut(const Ref<ShortCut>& p_shortcut,int p_ID){
+
+ ERR_FAIL_COND(p_shortcut.is_null());
+
+ _ref_shortcut(p_shortcut);
+
+ Item item;
+ item.ID=p_ID;
+ item.shortcut=p_shortcut;
+ item.checkable=true;
+ items.push_back(item);
+ update();
+}
+
void PopupMenu::set_item_text(int p_idx,const String& p_text) {
ERR_FAIL_INDEX(p_idx,items.size());
@@ -701,6 +769,12 @@ String PopupMenu::get_item_tooltip(int p_idx) const {
return items[p_idx].tooltip;
}
+Ref<ShortCut> PopupMenu::get_item_shortcut(int p_idx) const {
+
+ ERR_FAIL_INDEX_V(p_idx,items.size(),Ref<ShortCut>());
+ return items[p_idx].shortcut;
+}
+
void PopupMenu::set_item_as_separator(int p_idx, bool p_separator) {
ERR_FAIL_INDEX(p_idx,items.size());
@@ -730,6 +804,21 @@ void PopupMenu::set_item_tooltip(int p_idx,const String& p_tooltip) {
update();
}
+void PopupMenu::set_item_shortcut(int p_idx, const Ref<ShortCut>& p_shortcut) {
+ ERR_FAIL_INDEX(p_idx,items.size());
+ if (items[p_idx].shortcut.is_valid()) {
+ _unref_shortcut(items[p_idx].shortcut);
+ }
+ items[p_idx].shortcut=p_shortcut;
+
+ if (items[p_idx].shortcut.is_valid()) {
+ _ref_shortcut(items[p_idx].shortcut);
+ }
+
+
+ update();
+}
+
bool PopupMenu::is_item_checkable(int p_idx) const {
ERR_FAIL_INDEX_V(p_idx,items.size(),false);
return items[p_idx].checkable;
@@ -740,14 +829,36 @@ int PopupMenu::get_item_count() const {
return items.size();
}
-bool PopupMenu::activate_item_by_accelerator(uint32_t p_accel) {
+bool PopupMenu::activate_item_by_event(const InputEvent& p_event) {
+
+ uint32_t code=0;
+ if (p_event.type==InputEvent::KEY) {
+ code=p_event.key.scancode;
+ if (code==0)
+ code=p_event.key.unicode;
+ if (p_event.key.mod.control)
+ code|=KEY_MASK_CTRL;
+ if (p_event.key.mod.alt)
+ code|=KEY_MASK_ALT;
+ if (p_event.key.mod.meta)
+ code|=KEY_MASK_META;
+ if (p_event.key.mod.shift)
+ code|=KEY_MASK_SHIFT;
+ }
+
int il=items.size();
for(int i=0;i<il;i++) {
if (is_item_disabled(i))
continue;
- if (items[i].accel==p_accel) {
+
+ if (items[i].shortcut.is_valid() && items[i].shortcut->is_shortcut(p_event)) {
+ activate_item(i);
+ return true;
+ }
+
+ if (code!=0 && items[i].accel==code) {
activate_item(i);
return true;
}
@@ -761,7 +872,7 @@ bool PopupMenu::activate_item_by_accelerator(uint32_t p_accel) {
if(!pm)
continue;
- if(pm->activate_item_by_accelerator(p_accel)) {
+ if(pm->activate_item_by_event(p_event)) {
return true;
}
}
@@ -791,6 +902,12 @@ void PopupMenu::activate_item(int p_item) {
void PopupMenu::remove_item(int p_idx) {
+ ERR_FAIL_INDEX(p_idx,items.size());
+
+ if (items[p_idx].shortcut.is_valid()) {
+ _unref_shortcut(items[p_idx].shortcut);
+ }
+
items.remove(p_idx);
update();
}
@@ -806,6 +923,11 @@ void PopupMenu::add_separator() {
void PopupMenu::clear() {
+ for(int i=0;i<items.size();i++) {
+ if (items[i].shortcut.is_valid()) {
+ _unref_shortcut(items[i].shortcut);
+ }
+ }
items.clear();
mouse_over=-1;
update();
@@ -834,6 +956,27 @@ Array PopupMenu::_get_items() const {
return items;
}
+
+void PopupMenu::_ref_shortcut( Ref<ShortCut> p_sc) {
+
+ if (!shortcut_refcount.has(p_sc)) {
+ shortcut_refcount[p_sc]=1;
+ p_sc->connect("changed",this,"update");
+ } else {
+ shortcut_refcount[p_sc]+=1;
+ }
+}
+
+void PopupMenu::_unref_shortcut(Ref<ShortCut> p_sc) {
+
+ ERR_FAIL_COND(!shortcut_refcount.has(p_sc));
+ shortcut_refcount[p_sc]--;
+ if (shortcut_refcount[p_sc]==0) {
+ p_sc->disconnect("changed",this,"update");
+ shortcut_refcount.erase(p_sc);
+ }
+}
+
void PopupMenu::_set_items(const Array& p_items){
ERR_FAIL_COND(p_items.size() % 10);
@@ -912,12 +1055,20 @@ void PopupMenu::_bind_methods() {
ObjectTypeDB::bind_method(_MD("add_icon_check_item","texture","label","id","accel"),&PopupMenu::add_icon_check_item,DEFVAL(-1),DEFVAL(0));
ObjectTypeDB::bind_method(_MD("add_check_item","label","id","accel"),&PopupMenu::add_check_item,DEFVAL(-1),DEFVAL(0));
ObjectTypeDB::bind_method(_MD("add_submenu_item","label","submenu","id"),&PopupMenu::add_submenu_item,DEFVAL(-1));
+
+ ObjectTypeDB::bind_method(_MD("add_icon_shortcut","texture","shortcut:ShortCut","id"),&PopupMenu::add_icon_shortcut,DEFVAL(-1));
+ ObjectTypeDB::bind_method(_MD("add_shortcut","shortcut:ShortCut","id"),&PopupMenu::add_shortcut,DEFVAL(-1));
+ ObjectTypeDB::bind_method(_MD("add_icon_check_shortcut","texture","shortcut:ShortCut","id"),&PopupMenu::add_icon_check_shortcut,DEFVAL(-1));
+ ObjectTypeDB::bind_method(_MD("add_check_shortcut","shortcut:ShortCut","id"),&PopupMenu::add_check_shortcut,DEFVAL(-1));
+
+
ObjectTypeDB::bind_method(_MD("set_item_text","idx","text"),&PopupMenu::set_item_text);
ObjectTypeDB::bind_method(_MD("set_item_icon","idx","icon"),&PopupMenu::set_item_icon);
ObjectTypeDB::bind_method(_MD("set_item_accelerator","idx","accel"),&PopupMenu::set_item_accelerator);
ObjectTypeDB::bind_method(_MD("set_item_metadata","idx","metadata"),&PopupMenu::set_item_metadata);
ObjectTypeDB::bind_method(_MD("set_item_checked","idx","checked"),&PopupMenu::set_item_checked);
ObjectTypeDB::bind_method(_MD("set_item_disabled","idx","disabled"),&PopupMenu::set_item_disabled);
+ ObjectTypeDB::bind_method(_MD("set_item_shortcut","idx","shortcut:ShortCut"),&PopupMenu::set_item_shortcut);
ObjectTypeDB::bind_method(_MD("set_item_submenu","idx","submenu"),&PopupMenu::set_item_submenu);
ObjectTypeDB::bind_method(_MD("set_item_as_separator","idx","enable"),&PopupMenu::set_item_as_separator);
ObjectTypeDB::bind_method(_MD("set_item_as_checkable","idx","enable"),&PopupMenu::set_item_as_checkable);
@@ -926,6 +1077,7 @@ void PopupMenu::_bind_methods() {
ObjectTypeDB::bind_method(_MD("get_item_icon","idx"),&PopupMenu::get_item_icon);
ObjectTypeDB::bind_method(_MD("get_item_metadata","idx"),&PopupMenu::get_item_metadata);
ObjectTypeDB::bind_method(_MD("get_item_accelerator","idx"),&PopupMenu::get_item_accelerator);
+ ObjectTypeDB::bind_method(_MD("get_item_shortcut:ShortCut","idx"),&PopupMenu::get_item_shortcut);
ObjectTypeDB::bind_method(_MD("get_item_submenu","idx"),&PopupMenu::get_item_submenu);
ObjectTypeDB::bind_method(_MD("is_item_separator","idx"),&PopupMenu::is_item_separator);
ObjectTypeDB::bind_method(_MD("is_item_checkable","idx"),&PopupMenu::is_item_checkable);
diff --git a/scene/gui/popup_menu.h b/scene/gui/popup_menu.h
index 0e98765dc4..f35e91d4e4 100644
--- a/scene/gui/popup_menu.h
+++ b/scene/gui/popup_menu.h
@@ -34,6 +34,9 @@
/**
@author Juan Linietsky <reduzio@gmail.com>
*/
+
+
+
class PopupMenu : public Popup {
OBJ_TYPE(PopupMenu, Popup );
@@ -51,6 +54,7 @@ class PopupMenu : public Popup {
String tooltip;
uint32_t accel;
int _ofs_cache;
+ Ref<ShortCut> shortcut;
Item() { checked=false; checkable=false; separator=false; accel=0; disabled=false; _ofs_cache=0; }
};
@@ -62,7 +66,7 @@ class PopupMenu : public Popup {
int mouse_over;
int submenu_over;
Rect2 parent_rect;
- String _get_accel_text(uint32_t p_accel) const;
+ String _get_accel_text(int p_item) const;
int _get_mouse_over(const Point2& p_over) const;
virtual Size2 get_minimum_size() const;
void _input_event(const InputEvent &p_event);
@@ -75,6 +79,10 @@ class PopupMenu : public Popup {
Array _get_items() const;
void _set_items(const Array& p_items);
+ Map< Ref<ShortCut>, int> shortcut_refcount;
+
+ void _ref_shortcut(Ref<ShortCut> p_sc);
+ void _unref_shortcut( Ref<ShortCut> p_sc);
protected:
virtual bool has_point(const Point2& p_point) const;
@@ -90,6 +98,11 @@ public:
void add_check_item(const String& p_label,int p_ID=-1,uint32_t p_accel=0);
void add_submenu_item(const String& p_label,const String& p_submenu, int p_ID=-1);
+ void add_icon_shortcut(const Ref<Texture>& p_icon,const Ref<ShortCut>& p_shortcut,int p_ID=-1);
+ void add_shortcut(const Ref<ShortCut>& p_shortcut,int p_ID=-1);
+ void add_icon_check_shortcut(const Ref<Texture>& p_icon,const Ref<ShortCut>& p_shortcut,int p_ID=-1);
+ void add_check_shortcut(const Ref<ShortCut>& p_shortcut,int p_ID=-1);
+
void set_item_text(int p_idx,const String& p_text);
void set_item_icon(int p_idx,const Ref<Texture>& p_icon);
void set_item_checked(int p_idx,bool p_checked);
@@ -101,6 +114,7 @@ public:
void set_item_as_separator(int p_idx, bool p_separator);
void set_item_as_checkable(int p_idx, bool p_checkable);
void set_item_tooltip(int p_idx,const String& p_tooltip);
+ void set_item_shortcut(int p_idx, const Ref<ShortCut>& p_shortcut);
String get_item_text(int p_idx) const;
Ref<Texture> get_item_icon(int p_idx) const;
@@ -114,10 +128,11 @@ public:
bool is_item_separator(int p_idx) const;
bool is_item_checkable(int p_idx) const;
String get_item_tooltip(int p_idx) const;
+ Ref<ShortCut> get_item_shortcut(int p_idx) const;
int get_item_count() const;
- bool activate_item_by_accelerator(uint32_t p_accel);
+ bool activate_item_by_event(const InputEvent& p_event);
void activate_item(int p_item);
void remove_item(int p_idx);
diff --git a/scene/gui/slider.cpp b/scene/gui/slider.cpp
index f66f909517..d5d14ad649 100644
--- a/scene/gui/slider.cpp
+++ b/scene/gui/slider.cpp
@@ -237,6 +237,7 @@ void Slider::_bind_methods() {
ADD_PROPERTY( PropertyInfo( Variant::INT, "tick_count", PROPERTY_HINT_RANGE,"0,4096,1"), _SCS("set_ticks"), _SCS("get_ticks") );
ADD_PROPERTY( PropertyInfo( Variant::BOOL, "ticks_on_borders" ), _SCS("set_ticks_on_borders"), _SCS("get_ticks_on_borders") );
+ ADD_PROPERTY( PropertyInfo( Variant::INT,"focus_mode", PROPERTY_HINT_ENUM, "None,Click,All" ), _SCS("set_focus_mode"), _SCS("get_focus_mode") );
}
diff --git a/scene/gui/tab_container.cpp b/scene/gui/tab_container.cpp
index 1c6a97bab8..d19e5f0d60 100644
--- a/scene/gui/tab_container.cpp
+++ b/scene/gui/tab_container.cpp
@@ -411,6 +411,10 @@ void TabContainer::_notification(int p_what) {
panel->draw(ci, Rect2( 0, top_size.height, size.width, size.height-top_size.height));
} break;
+ case NOTIFICATION_THEME_CHANGED: {
+
+ call_deferred("set_current_tab",get_current_tab()); //wait until all changed theme
+ } break;
}
}
diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp
index 03024daff5..fe03b34105 100644
--- a/scene/gui/text_edit.cpp
+++ b/scene/gui/text_edit.cpp
@@ -314,6 +314,10 @@ void TextEdit::_update_scrollbars() {
if (line_numbers)
total_width += cache.line_number_w;
+ if (draw_breakpoint_gutter) {
+ total_width += cache.breakpoint_gutter_width;
+ }
+
bool use_hscroll=true;
bool use_vscroll=true;
@@ -412,9 +416,15 @@ void TextEdit::_notification(int p_what) {
case NOTIFICATION_THEME_CHANGED: {
_update_caches();
- };
+ } break;
case NOTIFICATION_DRAW: {
+ if (draw_breakpoint_gutter) {
+ cache.breakpoint_gutter_width = breakpoint_gutter_width;
+ } else {
+ cache.breakpoint_gutter_width = 0;
+ }
+
int line_number_char_count=0;
{
@@ -439,7 +449,7 @@ void TextEdit::_notification(int p_what) {
RID ci = get_canvas_item();
- int xmargin_beg=cache.style_normal->get_margin(MARGIN_LEFT)+cache.line_number_w;
+ int xmargin_beg=cache.style_normal->get_margin(MARGIN_LEFT)+cache.line_number_w+cache.breakpoint_gutter_width;
int xmargin_end=cache.size.width-cache.style_normal->get_margin(MARGIN_RIGHT);
//let's do it easy for now:
cache.style_normal->draw(ci,Rect2(Point2(),cache.size));
@@ -682,18 +692,13 @@ void TextEdit::_notification(int p_what) {
// check if line contains highlighted word
int highlighted_text_col = -1;
- if (highlighted_text.length() != 0) {
- highlighted_text_col = _get_column_pos_of_word(highlighted_text, str, 0);
- }
+ int search_text_col = -1;
- if (cache.line_number_w) {
- String fc = String::num(line+1);
- while (fc.length() < line_number_char_count) {
- fc="0"+fc;
- }
+ if (!search_text.empty())
+ search_text_col = _get_column_pos_of_word(search_text, str, search_flags, 0);
- cache.font->draw(ci,Point2(cache.style_normal->get_margin(MARGIN_LEFT),ofs_y+cache.font->get_ascent()),fc,cache.line_number_color);
- }
+ if (highlighted_text.length() != 0 && highlighted_text != search_text)
+ highlighted_text_col = _get_column_pos_of_word(highlighted_text, str, SEARCH_MATCH_CASE|SEARCH_WHOLE_WORDS, 0);
const Map<int,Text::ColorRegionInfo>& cri_map=text.get_color_region_info(line);
@@ -708,11 +713,28 @@ void TextEdit::_notification(int p_what) {
VisualServer::get_singleton()->canvas_item_add_rect(ci,Rect2(xmargin_beg, ofs_y,xmargin_end-xmargin_beg,get_row_height()),cache.breakpoint_color);
}
-
if (line==cursor.line) {
+ VisualServer::get_singleton()->canvas_item_add_rect(ci,Rect2(0, ofs_y,xmargin_end,get_row_height()),cache.current_line_color);
+ }
+
+ // draw breakpoint marker
+ if (text.is_breakpoint(line)) {
+ if (draw_breakpoint_gutter) {
+ int vertical_gap = cache.breakpoint_gutter_width / 2;
+ int marker_size = cache.breakpoint_gutter_width - vertical_gap;
+ // no transparency on marker
+ VisualServer::get_singleton()->canvas_item_add_rect(ci,Rect2(cache.style_normal->get_margin(MARGIN_LEFT) + 1, ofs_y + vertical_gap ,marker_size, marker_size),Color(cache.breakpoint_color.r, cache.breakpoint_color.g, cache.breakpoint_color.b));
+ }
+ }
- VisualServer::get_singleton()->canvas_item_add_rect(ci,Rect2(xmargin_beg, ofs_y,xmargin_end-xmargin_beg,get_row_height()),cache.current_line_color);
+ if (cache.line_number_w) {
+ String fc = String::num(line+1);
+ while (fc.length() < line_number_char_count) {
+ fc="0"+fc;
+ }
+
+ cache.font->draw(ci,Point2(cache.style_normal->get_margin(MARGIN_LEFT)+cache.breakpoint_gutter_width,ofs_y+cache.font->get_ascent()),fc,cache.line_number_color);
}
for (int j=0;j<str.length();j++) {
@@ -879,20 +901,45 @@ void TextEdit::_notification(int p_what) {
break;
}
- bool in_selection = (selection.active && line>=selection.from_line && line<=selection.to_line && (line>selection.from_line || j>=selection.from_column) && (line<selection.to_line || j<selection.to_column));
+ bool in_search_result=false;
+
+ if (search_text_col != -1) {
+ // if we are at the end check for new search result on same line
+ if (j >= search_text_col+search_text.length())
+ search_text_col = _get_column_pos_of_word(search_text, str, search_flags, j);
+
+ in_search_result = j >= search_text_col && j < search_text_col+search_text.length();
+ if (in_search_result) {
+ VisualServer::get_singleton()->canvas_item_add_rect(ci,Rect2(Point2i( char_ofs+char_margin, ofs_y ), Size2i(char_w, get_row_height())),cache.search_result_color);
+ }
+ }
+
+ bool in_selection = (selection.active && line>=selection.from_line && line<=selection.to_line && (line>selection.from_line || j>=selection.from_column) && (line<selection.to_line || j<selection.to_column));
if (in_selection) {
//inside selection!
VisualServer::get_singleton()->canvas_item_add_rect(ci,Rect2(Point2i( char_ofs+char_margin, ofs_y ), Size2i(char_w,get_row_height())),cache.selection_color);
}
+ if (in_search_result) {
+ Color border_color=(line==search_result_line && j>=search_result_col && j<search_result_col+search_text.length())?cache.font_color:cache.search_result_border_color;
+
+ VisualServer::get_singleton()->canvas_item_add_rect(ci,Rect2(Point2i( char_ofs+char_margin, ofs_y ), Size2i(char_w,1)),border_color);
+ VisualServer::get_singleton()->canvas_item_add_rect(ci,Rect2(Point2i( char_ofs+char_margin, ofs_y+get_row_height()-1 ), Size2i(char_w,1)),border_color);
+
+ if (j==search_text_col)
+ VisualServer::get_singleton()->canvas_item_add_rect(ci,Rect2(Point2i( char_ofs+char_margin, ofs_y ), Size2i(1,get_row_height())),border_color);
+ if (j==search_text_col+search_text.length()-1)
+ VisualServer::get_singleton()->canvas_item_add_rect(ci,Rect2(Point2i( char_ofs+char_margin+char_w-1, ofs_y ), Size2i(1,get_row_height())),border_color);
+ }
+
if (highlight_all_occurrences) {
if (highlighted_text_col != -1) {
// if we are at the end check for new word on same line
if (j > highlighted_text_col+highlighted_text.length()) {
- highlighted_text_col = _get_column_pos_of_word(highlighted_text, str, j);
+ highlighted_text_col = _get_column_pos_of_word(highlighted_text, str, SEARCH_MATCH_CASE|SEARCH_WHOLE_WORDS, j);
}
bool in_highlighted_word = (j >= highlighted_text_col && j < highlighted_text_col+highlighted_text.length());
@@ -1347,7 +1394,7 @@ void TextEdit::_get_mouse_pos(const Point2i& p_mouse, int &r_row, int &r_col) co
col=text[row].size();
} else {
- col=p_mouse.x-(cache.style_normal->get_margin(MARGIN_LEFT)+cache.line_number_w);
+ col=p_mouse.x-(cache.style_normal->get_margin(MARGIN_LEFT)+cache.line_number_w+cache.breakpoint_gutter_width);
col+=cursor.x_ofs;
col=get_char_pos_for( col, get_line(row) );
}
@@ -1421,6 +1468,15 @@ void TextEdit::_input_event(const InputEvent& p_input_event) {
int row,col;
_get_mouse_pos(Point2i(mb.x,mb.y), row,col);
+ // toggle breakpoint on gutter click
+ if (draw_breakpoint_gutter) {
+ int gutter=cache.style_normal->get_margin(MARGIN_LEFT);
+ if (mb.x > gutter && mb.x <= gutter + cache.breakpoint_gutter_width + 3) {
+ set_line_as_breakpoint(row, !is_line_set_as_breakpoint(row));
+ return;
+ }
+ }
+
int prev_col=cursor.column;
int prev_line=cursor.line;
@@ -1820,7 +1876,9 @@ void TextEdit::_input_event(const InputEvent& p_input_event) {
}
if (clear) {
- begin_complex_operation();
+ if (!dobreak) {
+ begin_complex_operation();
+ }
selection.active=false;
update();
_remove_text(selection.from_line,selection.from_column,selection.to_line,selection.to_column);
@@ -1892,7 +1950,8 @@ void TextEdit::_input_event(const InputEvent& p_input_event) {
if (completion_hint!="") {
completion_hint="";
update();
-
+ } else {
+ scancode_handled=false;
}
} break;
case KEY_TAB: {
@@ -2846,7 +2905,7 @@ void TextEdit::adjust_viewport_to_cursor() {
if (cursor.line_ofs>cursor.line)
cursor.line_ofs=cursor.line;
- int visible_width=cache.size.width-cache.style_normal->get_minimum_size().width-cache.line_number_w;
+ int visible_width=cache.size.width-cache.style_normal->get_minimum_size().width-cache.line_number_w-cache.breakpoint_gutter_width;
if (v_scroll->is_visible())
visible_width-=v_scroll->get_combined_minimum_size().width;
visible_width-=20; // give it a little more space
@@ -3075,7 +3134,8 @@ void TextEdit::insert_text_at_cursor(const String& p_text) {
}
Control::CursorShape TextEdit::get_cursor_shape(const Point2& p_pos) const {
- if(completion_active && completion_rect.has_point(p_pos)) {
+ int gutter=cache.style_normal->get_margin(MARGIN_LEFT)+cache.line_number_w+cache.breakpoint_gutter_width;
+ if((completion_active && completion_rect.has_point(p_pos)) || p_pos.x < gutter) {
return CURSOR_ARROW;
}
return CURSOR_IBEAM;
@@ -3220,6 +3280,8 @@ void TextEdit::_update_caches() {
cache.breakpoint_color=get_color("breakpoint_color");
cache.brace_mismatch_color=get_color("brace_mismatch_color");
cache.word_highlighted_color=get_color("word_highlighted_color");
+ cache.search_result_color=get_color("search_result_color");
+ cache.search_result_border_color=get_color("search_result_border_color");
cache.line_spacing=get_constant("line_spacing");
cache.row_height = cache.font->get_height() + cache.line_spacing;
cache.tab_icon=get_icon("tab");
@@ -3481,12 +3543,26 @@ String TextEdit::get_word_under_cursor() const {
return text[cursor.line].substr(prev_cc, next_cc-prev_cc);
}
+void TextEdit::set_search_text(const String &p_search_text) {
+ search_text = p_search_text;
+}
+
+void TextEdit::set_search_flags(uint32_t p_flags) {
+ search_flags = p_flags;
+}
+
+void TextEdit::set_current_search_result(int line, int col) {
+ search_result_line = line;
+ search_result_col = col;
+ update();
+}
+
void TextEdit::set_highlight_all_occurrences(const bool p_enabled) {
highlight_all_occurrences = p_enabled;
update();
}
-int TextEdit::_get_column_pos_of_word(const String &p_key, const String &p_search, int p_from_column) {
+int TextEdit::_get_column_pos_of_word(const String &p_key, const String &p_search, uint32_t p_search_flags, int p_from_column) {
int col = -1;
if (p_key.length() > 0 && p_search.length() > 0) {
@@ -3494,12 +3570,15 @@ int TextEdit::_get_column_pos_of_word(const String &p_key, const String &p_searc
p_from_column = 0;
}
- while (col == -1 && p_from_column <= p_search.length()) {
- // match case
- col = p_search.findn(p_key, p_from_column);
+ while (col == -1 && p_from_column <= p_search.length()) {
+ if (p_search_flags&SEARCH_MATCH_CASE) {
+ col = p_search.find(p_key,p_from_column);
+ } else {
+ col = p_search.findn(p_key,p_from_column);
+ }
// whole words only
- if (col != -1) {
+ if (col != -1 && p_search_flags&SEARCH_WHOLE_WORDS) {
p_from_column=col;
if (col > 0 && _is_text_char(p_search[col-1])) {
@@ -3565,10 +3644,8 @@ bool TextEdit::search(const String &p_key,uint32_t p_search_flags, int p_from_li
//wrapped
if (p_search_flags&SEARCH_BACKWARDS) {
- text_line=text_line.substr(from_column,text_line.length());
from_column=text_line.length();
} else {
- text_line=text_line.substr(0,from_column);
from_column=0;
}
@@ -3579,7 +3656,6 @@ bool TextEdit::search(const String &p_key,uint32_t p_search_flags, int p_from_li
} else {
- //text_line=text_line.substr(0,p_from_column); //wrap around for missing begining.
if (p_search_flags&SEARCH_BACKWARDS)
from_column=text_line.length()-1;
else
@@ -3588,12 +3664,25 @@ bool TextEdit::search(const String &p_key,uint32_t p_search_flags, int p_from_li
pos=-1;
- if (!(p_search_flags&SEARCH_BACKWARDS)) {
+ int pos_from=0;
+ int last_pos=-1;
+ while ((last_pos=(p_search_flags&SEARCH_MATCH_CASE)?text_line.find(p_key,pos_from):text_line.findn(p_key,pos_from))!=-1) {
- pos = (p_search_flags&SEARCH_MATCH_CASE)?text_line.find(p_key,from_column):text_line.findn(p_key,from_column);
- } else {
+ if (p_search_flags&SEARCH_BACKWARDS) {
- pos = (p_search_flags&SEARCH_MATCH_CASE)?text_line.rfind(p_key,from_column):text_line.rfindn(p_key,from_column);
+ if (last_pos>from_column)
+ break;
+ pos=last_pos;
+
+ } else {
+
+ if (last_pos>=from_column) {
+ pos=last_pos;
+ break;
+ }
+ }
+
+ pos_from=last_pos+p_key.length();
}
if (pos!=-1 && (p_search_flags&SEARCH_WHOLE_WORDS)) {
@@ -4167,6 +4256,24 @@ void TextEdit::set_show_line_numbers(bool p_show) {
update();
}
+void TextEdit::set_draw_breakpoint_gutter(bool p_draw) {
+ draw_breakpoint_gutter = p_draw;
+ update();
+}
+
+bool TextEdit::is_drawing_breakpoint_gutter() const {
+ return draw_breakpoint_gutter;
+}
+
+void TextEdit::set_breakpoint_gutter_width(int p_gutter_width) {
+ breakpoint_gutter_width = p_gutter_width;
+ update();
+}
+
+int TextEdit::get_breakpoint_gutter_width() const {
+ return cache.breakpoint_gutter_width;
+}
+
bool TextEdit::is_text_field() const {
return true;
@@ -4308,6 +4415,8 @@ TextEdit::TextEdit() {
cache.row_height=1;
cache.line_spacing=1;
cache.line_number_w=1;
+ cache.breakpoint_gutter_width=0;
+ breakpoint_gutter_width = 0;
tab_size=4;
text.set_tab_size(tab_size);
@@ -4389,6 +4498,7 @@ TextEdit::TextEdit() {
completion_line_ofs=0;
tooltip_obj=NULL;
line_numbers=false;
+ draw_breakpoint_gutter=false;
next_operation_is_complex=false;
scroll_past_end_of_file_enabled=false;
auto_brace_completion_enabled=false;
diff --git a/scene/gui/text_edit.h b/scene/gui/text_edit.h
index dbe6293240..24a72afd48 100644
--- a/scene/gui/text_edit.h
+++ b/scene/gui/text_edit.h
@@ -88,10 +88,13 @@ class TextEdit : public Control {
Color current_line_color;
Color brace_mismatch_color;
Color word_highlighted_color;
+ Color search_result_color;
+ Color search_result_border_color;
int row_height;
int line_spacing;
int line_number_w;
+ int breakpoint_gutter_width;
Size2 size;
} cache;
@@ -222,6 +225,8 @@ class TextEdit : public Control {
bool text_changed_dirty;
bool undo_enabled;
bool line_numbers;
+ bool draw_breakpoint_gutter;
+ int breakpoint_gutter_width;
bool highlight_all_occurrences;
bool scroll_past_end_of_file_enabled;
@@ -249,6 +254,11 @@ class TextEdit : public Control {
bool callhint_below;
Vector2 callhint_offset;
+ String search_text;
+ uint32_t search_flags;
+ int search_result_line;
+ int search_result_col;
+
int get_visible_rows() const;
int get_char_count();
@@ -287,7 +297,7 @@ class TextEdit : public Control {
String _base_get_text(int p_from_line, int p_from_column,int p_to_line,int p_to_column) const;
void _base_remove_text(int p_from_line, int p_from_column,int p_to_line,int p_to_column);
- int _get_column_pos_of_word(const String &p_key, const String &p_search, int p_from_column);
+ int _get_column_pos_of_word(const String &p_key, const String &p_search, uint32_t p_search_flags, int p_from_column);
DVector<int> _search_bind(const String &p_key,uint32_t p_search_flags, int p_from_line,int p_from_column) const;
@@ -408,6 +418,10 @@ public:
void select(int p_from_line,int p_from_column,int p_to_line,int p_to_column);
void deselect();
+ void set_search_text(const String& p_search_text);
+ void set_search_flags(uint32_t p_flags);
+ void set_current_search_result(int line, int col);
+
void set_highlight_all_occurrences(const bool p_enabled);
bool is_selection_active() const;
int get_selection_from_line() const;
@@ -451,6 +465,12 @@ public:
void set_show_line_numbers(bool p_show);
+ void set_draw_breakpoint_gutter(bool p_draw);
+ bool is_drawing_breakpoint_gutter() const;
+
+ void set_breakpoint_gutter_width(int p_gutter_width);
+ int get_breakpoint_gutter_width() const;
+
void set_tooltip_request_func(Object *p_obj, const StringName& p_function, const Variant& p_udata);
void set_completion(bool p_enabled,const Vector<String>& p_prefixes);
diff --git a/scene/gui/texture_frame.cpp b/scene/gui/texture_frame.cpp
index 73fecf591a..2fe8735fda 100644
--- a/scene/gui/texture_frame.cpp
+++ b/scene/gui/texture_frame.cpp
@@ -37,9 +37,31 @@ void TextureFrame::_notification(int p_what) {
return;
- Size2 s=expand?get_size():texture->get_size();
+
RID ci = get_canvas_item();
- draw_texture_rect(texture,Rect2(Point2(),s),false,modulate);
+
+ switch(stretch_mode) {
+ case STRETCH_SCALE_ON_EXPAND: {
+ Size2 s=expand?get_size():texture->get_size();
+ draw_texture_rect(texture,Rect2(Point2(),s),false,modulate);
+ } break;
+ case STRETCH_SCALE: {
+ draw_texture_rect(texture,Rect2(Point2(),get_size()),false,modulate);
+ } break;
+ case STRETCH_TILE: {
+ draw_texture_rect(texture,Rect2(Point2(),get_size()),true,modulate);
+ } break;
+ case STRETCH_KEEP: {
+ draw_texture_rect(texture,Rect2(Point2(),texture->get_size()),false,modulate);
+
+ } break;
+ case STRETCH_KEEP_CENTERED: {
+
+ Vector2 ofs = (get_size() - texture->get_size())/2;
+ draw_texture_rect(texture,Rect2(ofs,texture->get_size()),false,modulate);
+ } break;
+ }
+
/*
Vector<Point2> points;
@@ -76,11 +98,19 @@ void TextureFrame::_bind_methods() {
ObjectTypeDB::bind_method(_MD("get_modulate"), & TextureFrame::get_modulate );
ObjectTypeDB::bind_method(_MD("set_expand","enable"), & TextureFrame::set_expand );
ObjectTypeDB::bind_method(_MD("has_expand"), & TextureFrame::has_expand );
+ ObjectTypeDB::bind_method(_MD("set_stretch_mode","stretch_mode"), & TextureFrame::set_stretch_mode );
+ ObjectTypeDB::bind_method(_MD("get_stretch_mode"), & TextureFrame::get_stretch_mode );
ADD_PROPERTYNZ( PropertyInfo( Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), _SCS("set_texture"),_SCS("get_texture") );
ADD_PROPERTYNO( PropertyInfo( Variant::COLOR, "modulate"), _SCS("set_modulate"),_SCS("get_modulate") );
ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "expand" ), _SCS("set_expand"),_SCS("has_expand") );
+ ADD_PROPERTYNO( PropertyInfo( Variant::INT, "stretch_mode",PROPERTY_HINT_ENUM,"Scale On Expand (Compat),Scale,Tile,Keep,Keep Centered"), _SCS("set_stretch_mode"),_SCS("get_stretch_mode") );
+ BIND_CONSTANT( STRETCH_SCALE_ON_EXPAND );
+ BIND_CONSTANT( STRETCH_SCALE );
+ BIND_CONSTANT( STRETCH_TILE );
+ BIND_CONSTANT( STRETCH_KEEP );
+ BIND_CONSTANT( STRETCH_KEEP_CENTERED );
}
@@ -121,12 +151,24 @@ bool TextureFrame::has_expand() const {
return expand;
}
+void TextureFrame::set_stretch_mode(StretchMode p_mode) {
+
+ stretch_mode=p_mode;
+ update();
+}
+
+TextureFrame::StretchMode TextureFrame::get_stretch_mode() const {
+
+ return stretch_mode;
+}
+
TextureFrame::TextureFrame() {
expand=false;
modulate=Color(1,1,1,1);
set_ignore_mouse(true);
+ stretch_mode=STRETCH_SCALE_ON_EXPAND;
}
diff --git a/scene/gui/texture_frame.h b/scene/gui/texture_frame.h
index e1f0de92df..a4acf588ea 100644
--- a/scene/gui/texture_frame.h
+++ b/scene/gui/texture_frame.h
@@ -36,10 +36,19 @@
class TextureFrame : public Control {
OBJ_TYPE(TextureFrame,Control);
-
+public:
+ enum StretchMode {
+ STRETCH_SCALE_ON_EXPAND, //default, for backwards compatibility
+ STRETCH_SCALE,
+ STRETCH_TILE,
+ STRETCH_KEEP,
+ STRETCH_KEEP_CENTERED,
+ };
+private:
bool expand;
Color modulate;
Ref<Texture> texture;
+ StretchMode stretch_mode;
protected:
void _notification(int p_what);
@@ -57,9 +66,13 @@ public:
void set_expand(bool p_expand);
bool has_expand() const;
+ void set_stretch_mode(StretchMode p_mode);
+ StretchMode get_stretch_mode() const;
+
TextureFrame();
~TextureFrame();
};
+VARIANT_ENUM_CAST( TextureFrame::StretchMode );
#endif // TEXTURE_FRAME_H
diff --git a/scene/gui/video_player.cpp b/scene/gui/video_player.cpp
index 89dacc6577..26227d6389 100644
--- a/scene/gui/video_player.cpp
+++ b/scene/gui/video_player.cpp
@@ -131,7 +131,7 @@ void VideoPlayer::_notification(int p_notification) {
if (!playback->is_playing())
return;
- double audio_time = OS::get_singleton()->get_ticks_usec()/1000000.0; //AudioServer::get_singleton()->get_mix_time();
+ double audio_time = USEC_TO_SEC(OS::get_singleton()->get_ticks_usec()); //AudioServer::get_singleton()->get_mix_time();
double delta = last_audio_time==0?0:audio_time-last_audio_time;
last_audio_time=audio_time;
diff --git a/scene/io/resource_format_image.cpp b/scene/io/resource_format_image.cpp
index 6174d134a3..f3a0eaa8c4 100644
--- a/scene/io/resource_format_image.cpp
+++ b/scene/io/resource_format_image.cpp
@@ -108,7 +108,7 @@ RES ResourceFormatLoaderImage::load(const String &p_path, const String& p_origin
Error err = ImageLoader::load_image(p_path,&image);
if (!err && debug_load_times) {
- double total=(double)(OS::get_singleton()->get_ticks_usec()-begtime)/1000000.0;
+ double total=USEC_TO_SEC((OS::get_singleton()->get_ticks_usec()-begtime));
print_line("IMAGE: "+itos(image.get_width())+"x"+itos(image.get_height()));
print_line(" -load: "+rtos(total));
}
@@ -201,7 +201,7 @@ RES ResourceFormatLoaderImage::load(const String &p_path, const String& p_origin
if (debug_load_times) {
- total=(double)(OS::get_singleton()->get_ticks_usec()-begtime)/1000000.0;
+ total=USEC_TO_SEC(OS::get_singleton()->get_ticks_usec()-begtime);
print_line(" -make texture: "+rtos(total));
}
diff --git a/scene/main/http_request.cpp b/scene/main/http_request.cpp
index 90e3713799..2320616629 100644
--- a/scene/main/http_request.cpp
+++ b/scene/main/http_request.cpp
@@ -480,8 +480,9 @@ void HTTPRequest::_bind_methods() {
BIND_CONSTANT( RESULT_NO_RESPONSE );
BIND_CONSTANT( RESULT_BODY_SIZE_LIMIT_EXCEEDED );
BIND_CONSTANT( RESULT_REQUEST_FAILED );
- BIND_CONSTANT( RESULT_REDIRECT_LIMIT_REACHED );
+ BIND_CONSTANT( RESULT_DOWNLOAD_FILE_CANT_OPEN );
BIND_CONSTANT( RESULT_DOWNLOAD_FILE_WRITE_ERROR );
+ BIND_CONSTANT( RESULT_REDIRECT_LIMIT_REACHED );
}
@@ -494,7 +495,7 @@ HTTPRequest::HTTPRequest()
max_redirects=8;
body_len=-1;
got_response=false;
- validate_ssl=false;
+ validate_ssl=false;
use_ssl=false;
response_code=0;
request_sent=false;
diff --git a/scene/main/node.cpp b/scene/main/node.cpp
index f261693841..29925b62f5 100644
--- a/scene/main/node.cpp
+++ b/scene/main/node.cpp
@@ -1244,7 +1244,19 @@ void Node::get_groups(List<GroupInfo> *p_groups) const {
}
+bool Node::has_persistent_groups() const {
+ const StringName *K=NULL;
+
+ while ((K=data.grouped.next(K))) {
+
+ if (data.grouped[*K].persistent)
+ return true;
+ }
+
+ return false;
+
+}
void Node::_print_tree(const Node *p_node) {
print_line(String(p_node->get_path_to(this)));
diff --git a/scene/main/node.h b/scene/main/node.h
index a4683e602f..cf62e7cdea 100644
--- a/scene/main/node.h
+++ b/scene/main/node.h
@@ -223,6 +223,7 @@ public:
};
void get_groups(List<GroupInfo> *p_groups) const;
+ bool has_persistent_groups() const;
void move_child(Node *p_child,int p_pos);
void raise();
diff --git a/scene/main/scene_main_loop.cpp b/scene/main/scene_main_loop.cpp
index b83ad7381e..d7f22c3228 100644
--- a/scene/main/scene_main_loop.cpp
+++ b/scene/main/scene_main_loop.cpp
@@ -1002,6 +1002,7 @@ static void _fill_array(Node *p_node, Array& array, int p_level) {
array.push_back(p_level);
array.push_back(p_node->get_name());
array.push_back(p_node->get_type());
+ array.push_back(p_node->get_instance_ID());
for(int i=0;i<p_node->get_child_count();i++) {
_fill_array(p_node->get_child(i),array,p_level+1);
@@ -1592,6 +1593,14 @@ void SceneTree::_live_edit_reparent_node_func(const NodePath& p_at,const NodePat
#endif
+
+
+void SceneTree::drop_files(const Vector<String>& p_files,int p_from_screen) {
+
+ emit_signal("files_dropped",p_files,p_from_screen);
+ MainLoop::drop_files(p_files,p_from_screen);
+}
+
void SceneTree::_bind_methods() {
@@ -1665,6 +1674,8 @@ void SceneTree::_bind_methods() {
ADD_SIGNAL( MethodInfo("idle_frame"));
ADD_SIGNAL( MethodInfo("fixed_frame"));
+ ADD_SIGNAL( MethodInfo("files_dropped",PropertyInfo(Variant::STRING_ARRAY,"files"),PropertyInfo(Variant::INT,"screen")) );
+
BIND_CONSTANT( GROUP_CALL_DEFAULT );
BIND_CONSTANT( GROUP_CALL_REVERSE );
BIND_CONSTANT( GROUP_CALL_REALTIME );
diff --git a/scene/main/scene_main_loop.h b/scene/main/scene_main_loop.h
index b6a015c9ed..5fc9e0c1ae 100644
--- a/scene/main/scene_main_loop.h
+++ b/scene/main/scene_main_loop.h
@@ -344,6 +344,7 @@ public:
static SceneTree* get_singleton() { return singleton; }
+ void drop_files(const Vector<String>& p_files,int p_from_screen=0);
SceneTree();
~SceneTree();
diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp
index c9f61beba7..4083dc893d 100644
--- a/scene/main/viewport.cpp
+++ b/scene/main/viewport.cpp
@@ -37,6 +37,7 @@
#include "servers/spatial_sound_2d_server.h"
#include "scene/gui/control.h"
#include "scene/3d/camera.h"
+#include "scene/3d/listener.h"
#include "scene/resources/mesh.h"
#include "scene/3d/spatial_indexer.h"
#include "scene/3d/collision_object.h"
@@ -388,6 +389,19 @@ void Viewport::_notification(int p_what) {
} break;
case NOTIFICATION_READY: {
#ifndef _3D_DISABLED
+ if (listeners.size() && !listener) {
+ Listener *first=NULL;
+ for(Set<Listener*>::Element *E=listeners.front();E;E=E->next()) {
+
+ if (first==NULL || first->is_greater_than(E->get())) {
+ first=E->get();
+ }
+ }
+
+ if (first)
+ first->make_current();
+ }
+
if (cameras.size() && !camera) {
//there are cameras but no current camera, pick first in tree and make it current
Camera *first=NULL;
@@ -414,7 +428,7 @@ void Viewport::_notification(int p_what) {
_vp_exit_tree();
VisualServer::get_singleton()->viewport_set_scenario(viewport,RID());
- SpatialSoundServer::get_singleton()->listener_set_space(listener,RID());
+ SpatialSoundServer::get_singleton()->listener_set_space(internal_listener, RID());
VisualServer::get_singleton()->viewport_remove_canvas(viewport,current_canvas);
if (contact_2d_debug.is_valid()) {
VisualServer::get_singleton()->free(contact_2d_debug);
@@ -740,10 +754,10 @@ Rect2 Viewport::get_rect() const {
void Viewport::_update_listener() {
- if (is_inside_tree() && audio_listener && camera && (!get_parent() || (get_parent()->cast_to<Control>() && get_parent()->cast_to<Control>()->is_visible()))) {
- SpatialSoundServer::get_singleton()->listener_set_space(listener,find_world()->get_sound_space());
+ if (is_inside_tree() && audio_listener && (camera || listener) && (!get_parent() || (get_parent()->cast_to<Control>() && get_parent()->cast_to<Control>()->is_visible()))) {
+ SpatialSoundServer::get_singleton()->listener_set_space(internal_listener, find_world()->get_sound_space());
} else {
- SpatialSoundServer::get_singleton()->listener_set_space(listener,RID());
+ SpatialSoundServer::get_singleton()->listener_set_space(internal_listener, RID());
}
@@ -752,9 +766,9 @@ void Viewport::_update_listener() {
void Viewport::_update_listener_2d() {
if (is_inside_tree() && audio_listener && (!get_parent() || (get_parent()->cast_to<Control>() && get_parent()->cast_to<Control>()->is_visible())))
- SpatialSound2DServer::get_singleton()->listener_set_space(listener_2d,find_world_2d()->get_sound_space());
+ SpatialSound2DServer::get_singleton()->listener_set_space(internal_listener_2d, find_world_2d()->get_sound_space());
else
- SpatialSound2DServer::get_singleton()->listener_set_space(listener_2d,RID());
+ SpatialSound2DServer::get_singleton()->listener_set_space(internal_listener_2d, RID());
}
@@ -798,11 +812,11 @@ void Viewport::set_canvas_transform(const Matrix32& p_transform) {
Matrix32 xform = (global_canvas_transform * canvas_transform).affine_inverse();
Size2 ss = get_visible_rect().size;
- SpatialSound2DServer::get_singleton()->listener_set_transform(listener_2d,Matrix32(0,xform.xform(ss*0.5)));
+ SpatialSound2DServer::get_singleton()->listener_set_transform(internal_listener_2d, Matrix32(0, xform.xform(ss*0.5)));
Vector2 ss2 = ss*xform.get_scale();
float panrange = MAX(ss2.x,ss2.y);
- SpatialSound2DServer::get_singleton()->listener_set_param(listener_2d,SpatialSound2DServer::LISTENER_PARAM_PAN_RANGE,panrange);
+ SpatialSound2DServer::get_singleton()->listener_set_param(internal_listener_2d, SpatialSound2DServer::LISTENER_PARAM_PAN_RANGE, panrange);
}
@@ -823,11 +837,11 @@ void Viewport::_update_global_transform() {
Matrix32 xform = (sxform * canvas_transform).affine_inverse();
Size2 ss = get_visible_rect().size;
- SpatialSound2DServer::get_singleton()->listener_set_transform(listener_2d,Matrix32(0,xform.xform(ss*0.5)));
+ SpatialSound2DServer::get_singleton()->listener_set_transform(internal_listener_2d, Matrix32(0, xform.xform(ss*0.5)));
Vector2 ss2 = ss*xform.get_scale();
float panrange = MAX(ss2.x,ss2.y);
- SpatialSound2DServer::get_singleton()->listener_set_param(listener_2d,SpatialSound2DServer::LISTENER_PARAM_PAN_RANGE,panrange);
+ SpatialSound2DServer::get_singleton()->listener_set_param(internal_listener_2d, SpatialSound2DServer::LISTENER_PARAM_PAN_RANGE, panrange);
}
@@ -846,12 +860,75 @@ Matrix32 Viewport::get_global_canvas_transform() const{
return global_canvas_transform;
}
+void Viewport::_listener_transform_changed_notify() {
+
+#ifndef _3D_DISABLED
+ if (listener)
+ SpatialSoundServer::get_singleton()->listener_set_transform(internal_listener, listener->get_listener_transform());
+#endif
+}
+
+void Viewport::_listener_set(Listener* p_listener) {
+
+#ifndef _3D_DISABLED
+
+ if (listener == p_listener)
+ return;
+
+ listener = p_listener;
+
+ _update_listener();
+ _listener_transform_changed_notify();
+#endif
+}
+
+bool Viewport::_listener_add(Listener* p_listener) {
+
+ listeners.insert(p_listener);
+ return listeners.size() == 1;
+}
+
+void Viewport::_listener_remove(Listener* p_listener) {
+
+ listeners.erase(p_listener);
+ if (listener == p_listener) {
+ listener = NULL;
+ }
+}
+
+#ifndef _3D_DISABLED
+void Viewport::_listener_make_next_current(Listener* p_exclude) {
+
+ if (listeners.size() > 0) {
+ for (Set<Listener*>::Element *E = listeners.front(); E; E = E->next()) {
+
+ if (p_exclude == E->get())
+ continue;
+ if (!E->get()->is_inside_tree())
+ continue;
+ if (listener != NULL)
+ return;
+
+ E->get()->make_current();
+
+ }
+ }
+ else {
+ // Attempt to reset listener to the camera position
+ if (camera != NULL) {
+ _update_listener();
+ _camera_transform_changed_notify();
+ }
+ }
+}
+#endif
void Viewport::_camera_transform_changed_notify() {
#ifndef _3D_DISABLED
- if (camera)
- SpatialSoundServer::get_singleton()->listener_set_transform(listener,camera->get_camera_transform());
+ // If there is an active listener in the scene, it takes priority over the camera
+ if (camera && !listener)
+ SpatialSoundServer::get_singleton()->listener_set_transform(internal_listener, camera->get_camera_transform());
#endif
}
@@ -1076,6 +1153,11 @@ Ref<World> Viewport::find_world() const{
return Ref<World>();
}
+Listener* Viewport::get_listener() const {
+
+ return listener;
+}
+
Camera* Viewport::get_camera() const {
return camera;
@@ -1358,7 +1440,6 @@ void Viewport::_vp_unhandled_input(const InputEvent& p_ev) {
if (disable_input)
return;
-
#ifdef TOOLS_ENABLED
if (get_tree()->is_editor_hint() && get_tree()->get_edited_scene_root()->is_a_parent_of(this)) {
return;
@@ -1493,22 +1574,29 @@ void Viewport::_gui_call_input(Control *p_control,const InputEvent& p_input) {
// _block();
- while(p_control) {
+ CanvasItem *ci=p_control;
+ while(ci) {
- p_control->call_multilevel(SceneStringNames::get_singleton()->_input_event,p_input);
- if (gui.key_event_accepted)
- break;
- if (!p_control->is_inside_tree())
- break;
- p_control->emit_signal(SceneStringNames::get_singleton()->input_event,p_input);
- if (!p_control->is_inside_tree() || p_control->is_set_as_toplevel()) {
- break;
+ Control *control = ci->cast_to<Control>();
+ if (control) {
+ control->call_multilevel(SceneStringNames::get_singleton()->_input_event,p_input);
+ if (gui.key_event_accepted)
+ break;
+ if (!control->is_inside_tree())
+ break;
+ control->emit_signal(SceneStringNames::get_singleton()->input_event,p_input);
+ if (!control->is_inside_tree() || control->is_set_as_toplevel())
+ break;
+ if (gui.key_event_accepted)
+ break;
+ if (control->data.stop_mouse && (p_input.type==InputEvent::MOUSE_BUTTON || p_input.type==InputEvent::MOUSE_MOTION))
+ break;
}
- if (gui.key_event_accepted)
- break;
- if (p_control->data.stop_mouse && (p_input.type==InputEvent::MOUSE_BUTTON || p_input.type==InputEvent::MOUSE_MOTION))
+
+ if (ci->is_set_as_toplevel())
break;
- p_control=p_control->data.parent;
+
+ ci=ci->get_parent_item();
}
//_unblock();
@@ -1842,6 +1930,8 @@ void Viewport::_gui_input_event(InputEvent p_event) {
if (gui.mouse_over)
gui.mouse_over->notification(Control::NOTIFICATION_MOUSE_EXIT);
+ _gui_cancel_tooltip();
+
if (over)
over->notification(Control::NOTIFICATION_MOUSE_ENTER);
@@ -1849,8 +1939,6 @@ void Viewport::_gui_input_event(InputEvent p_event) {
gui.mouse_over=over;
- _gui_cancel_tooltip();
-
if (gui.drag_preview) {
gui.drag_preview->set_pos(mpos);
}
@@ -2407,7 +2495,7 @@ String Viewport::get_configuration_warning() const {
if (get_parent() && !get_parent()->cast_to<Control>() && !render_target) {
- return TTR("This viewport is not set as render target. If you intend for it to display it's contents directly to the screen, make it a child of a Control so it can obtain a size. Otherwise, make it a RenderTarget and assign it's internal texture to some node for display.");
+ return TTR("This viewport is not set as render target. If you intend for it to display its contents directly to the screen, make it a child of a Control so it can obtain a size. Otherwise, make it a RenderTarget and assign its internal texture to some node for display.");
}
return String();
@@ -2540,12 +2628,13 @@ Viewport::Viewport() {
world_2d = Ref<World2D>( memnew( World2D ));
viewport = VisualServer::get_singleton()->viewport_create();
- listener=SpatialSoundServer::get_singleton()->listener_create();
+ internal_listener = SpatialSoundServer::get_singleton()->listener_create();
audio_listener=false;
- listener_2d=SpatialSound2DServer::get_singleton()->listener_create();
+ internal_listener_2d = SpatialSound2DServer::get_singleton()->listener_create();
audio_listener_2d=false;
transparent_bg=false;
parent=NULL;
+ listener=NULL;
camera=NULL;
size_override=false;
size_override_stretch=false;
@@ -2593,8 +2682,8 @@ Viewport::Viewport() {
Viewport::~Viewport() {
VisualServer::get_singleton()->free( viewport );
- SpatialSoundServer::get_singleton()->free(listener);
- SpatialSound2DServer::get_singleton()->free(listener_2d);
+ SpatialSoundServer::get_singleton()->free(internal_listener);
+ SpatialSound2DServer::get_singleton()->free(internal_listener_2d);
if (render_target_texture.is_valid())
render_target_texture->vp=NULL; //so if used, will crash
}
diff --git a/scene/main/viewport.h b/scene/main/viewport.h
index 6ae9e421eb..545020dfc7 100644
--- a/scene/main/viewport.h
+++ b/scene/main/viewport.h
@@ -39,6 +39,7 @@
*/
class Camera;
+class Listener;
class Control;
class CanvasItem;
class Panel;
@@ -92,6 +93,9 @@ friend class RenderTargetTexture;
Control *parent_control;
Viewport *parent;
+ Listener *listener;
+ Set<Listener*> listeners;
+
Camera *camera;
Set<Camera*> cameras;
@@ -100,10 +104,10 @@ friend class RenderTargetTexture;
RID current_canvas;
bool audio_listener;
- RID listener;
+ RID internal_listener;
bool audio_listener_2d;
- RID listener_2d;
+ RID internal_listener_2d;
Matrix32 canvas_transform;
Matrix32 global_canvas_transform;
@@ -263,6 +267,13 @@ friend class Control;
Control *_gui_get_focus_owner();
+friend class Listener;
+ void _listener_transform_changed_notify();
+ void _listener_set(Listener* p_listener);
+ bool _listener_add(Listener* p_listener); //true if first
+ void _listener_remove(Listener* p_listener);
+ void _listener_make_next_current(Listener* p_exclude);
+
friend class Camera;
void _camera_transform_changed_notify();
void _camera_set(Camera* p_camera);
@@ -276,7 +287,7 @@ protected:
static void _bind_methods();
public:
-
+ Listener* get_listener() const;
Camera* get_camera() const;
void set_as_audio_listener(bool p_enable);
diff --git a/scene/register_scene_types.cpp b/scene/register_scene_types.cpp
index 8327473a60..54b4ddca9e 100644
--- a/scene/register_scene_types.cpp
+++ b/scene/register_scene_types.cpp
@@ -133,6 +133,7 @@
#include "scene/resources/mesh_data_tool.h"
#include "scene/resources/scene_preloader.h"
#include "scene/resources/dynamic_font.h"
+#include "scene/resources/dynamic_font_stb.h"
#include "scene/main/timer.h"
@@ -192,6 +193,7 @@
#ifndef _3D_DISABLED
#include "scene/3d/camera.h"
+#include "scene/3d/listener.h"
#include "scene/3d/interpolated_camera.h"
#include "scene/3d/position_3d.h"
@@ -254,7 +256,6 @@ void register_scene_types() {
resource_loader_wav = memnew( ResourceFormatLoaderWAV );
ResourceLoader::add_resource_format_loader( resource_loader_wav );
-
resource_loader_dynamic_font = memnew( ResourceFormatLoaderDynamicFont );
ResourceLoader::add_resource_format_loader( resource_loader_dynamic_font );
@@ -293,6 +294,7 @@ void register_scene_types() {
OS::get_singleton()->yield(); //may take time to init
+ ObjectTypeDB::register_type<ShortCut>();
ObjectTypeDB::register_type<Control>();
// ObjectTypeDB::register_type<EmptyControl>();
ObjectTypeDB::add_compatibility_type("EmptyControl","Control");
@@ -386,6 +388,7 @@ void register_scene_types() {
ObjectTypeDB::register_type<BoneAttachment>();
ObjectTypeDB::register_virtual_type<VisualInstance>();
ObjectTypeDB::register_type<Camera>();
+ ObjectTypeDB::register_type<Listener>();
ObjectTypeDB::register_type<InterpolatedCamera>();
ObjectTypeDB::register_type<TestCube>();
ObjectTypeDB::register_type<MeshInstance>();
@@ -578,8 +581,10 @@ void register_scene_types() {
ObjectTypeDB::register_type<Animation>();
ObjectTypeDB::register_virtual_type<Font>();
ObjectTypeDB::register_type<BitmapFont>();
+
ObjectTypeDB::register_type<DynamicFontData>();
ObjectTypeDB::register_type<DynamicFont>();
+
ObjectTypeDB::register_type<StyleBoxEmpty>();
ObjectTypeDB::register_type<StyleBoxTexture>();
ObjectTypeDB::register_type<StyleBoxFlat>();
@@ -647,6 +652,7 @@ void unregister_scene_types() {
memdelete( resource_loader_image );
memdelete( resource_loader_wav );
memdelete( resource_loader_dynamic_font );
+
#ifdef TOOLS_ENABLED
diff --git a/scene/resources/bit_mask.h b/scene/resources/bit_mask.h
index b245ea1542..e75a2aa332 100644
--- a/scene/resources/bit_mask.h
+++ b/scene/resources/bit_mask.h
@@ -36,6 +36,8 @@
class BitMap : public Resource {
OBJ_TYPE(BitMap,Resource);
+ OBJ_SAVE_TYPE(BitMap);
+ RES_BASE_EXTENSION("pbm");
Vector<uint8_t> bitmask;
int width;
diff --git a/scene/resources/curve.cpp b/scene/resources/curve.cpp
index 516156c315..88ff09e961 100644
--- a/scene/resources/curve.cpp
+++ b/scene/resources/curve.cpp
@@ -544,7 +544,7 @@ void Curve2D::_bake() const {
List<Vector2> pointlist;
pointlist.push_back(pos); //start always from origin
-
+
for(int i=0;i<points.size()-1;i++) {
float step = 0.1; // at least 10 substeps ought to be enough?
diff --git a/scene/resources/default_theme/default_theme.cpp b/scene/resources/default_theme/default_theme.cpp
index 0c4d8ae841..9ebb7e7561 100644
--- a/scene/resources/default_theme/default_theme.cpp
+++ b/scene/resources/default_theme/default_theme.cpp
@@ -28,6 +28,7 @@
typedef Map<const void*,Ref<ImageTexture> > TexCacheMap;
static TexCacheMap *tex_cache;
+static int scale=1;
template<class T>
static Ref<StyleBoxTexture> make_stylebox(T p_src,float p_left, float p_top, float p_right, float p_botton,float p_margin_left=-1, float p_margin_top=-1, float p_margin_right=-1, float p_margin_botton=-1, bool p_draw_center=true) {
@@ -40,21 +41,24 @@ static Ref<StyleBoxTexture> make_stylebox(T p_src,float p_left, float p_top, flo
} else {
texture = Ref<ImageTexture>( memnew( ImageTexture ) );
- texture->create_from_image( Image(p_src),ImageTexture::FLAG_FILTER );
+ Image img(p_src);
+ if (scale>1)
+ img.expand_x2_hq2x();
+ texture->create_from_image( img,ImageTexture::FLAG_FILTER );
(*tex_cache)[p_src]=texture;
}
Ref<StyleBoxTexture> style( memnew( StyleBoxTexture ) );
style->set_texture(texture);
- style->set_margin_size( MARGIN_LEFT, p_left );
- style->set_margin_size( MARGIN_RIGHT, p_right );
- style->set_margin_size( MARGIN_BOTTOM, p_botton );
- style->set_margin_size( MARGIN_TOP, p_top );
- style->set_default_margin( MARGIN_LEFT, p_margin_left );
- style->set_default_margin( MARGIN_RIGHT, p_margin_right );
- style->set_default_margin( MARGIN_BOTTOM, p_margin_botton );
- style->set_default_margin( MARGIN_TOP, p_margin_top );
+ style->set_margin_size( MARGIN_LEFT, p_left * scale);
+ style->set_margin_size( MARGIN_RIGHT, p_right * scale);
+ style->set_margin_size( MARGIN_BOTTOM, p_botton * scale);
+ style->set_margin_size( MARGIN_TOP, p_top * scale);
+ style->set_default_margin( MARGIN_LEFT, p_margin_left * scale);
+ style->set_default_margin( MARGIN_RIGHT, p_margin_right * scale);
+ style->set_default_margin( MARGIN_BOTTOM, p_margin_botton * scale);
+ style->set_default_margin( MARGIN_TOP, p_margin_top * scale);
style->set_draw_center(p_draw_center);
return style;
@@ -63,10 +67,10 @@ static Ref<StyleBoxTexture> make_stylebox(T p_src,float p_left, float p_top, flo
static Ref<StyleBoxTexture> sb_expand(Ref<StyleBoxTexture> p_sbox,float p_left, float p_top, float p_right, float p_botton) {
- p_sbox->set_expand_margin_size(MARGIN_LEFT,p_left);
- p_sbox->set_expand_margin_size(MARGIN_TOP,p_top);
- p_sbox->set_expand_margin_size(MARGIN_RIGHT,p_right);
- p_sbox->set_expand_margin_size(MARGIN_BOTTOM,p_botton);
+ p_sbox->set_expand_margin_size(MARGIN_LEFT,p_left * scale);
+ p_sbox->set_expand_margin_size(MARGIN_TOP,p_top * scale);
+ p_sbox->set_expand_margin_size(MARGIN_RIGHT,p_right * scale);
+ p_sbox->set_expand_margin_size(MARGIN_BOTTOM,p_botton * scale);
return p_sbox;
}
@@ -75,7 +79,10 @@ static Ref<Texture> make_icon(T p_src) {
Ref<ImageTexture> texture( memnew( ImageTexture ) );
- texture->create_from_image( Image(p_src),ImageTexture::FLAG_FILTER );
+ Image img = Image(p_src);
+ if (scale>1)
+ img.expand_x2_hq2x();
+ texture->create_from_image( img,ImageTexture::FLAG_FILTER );
return texture;
}
@@ -170,27 +177,24 @@ static Ref<StyleBox> make_empty_stylebox(float p_margin_left=-1, float p_margin_
Ref<StyleBox> style( memnew( StyleBoxEmpty) );
- style->set_default_margin( MARGIN_LEFT, p_margin_left );
- style->set_default_margin( MARGIN_RIGHT, p_margin_right );
- style->set_default_margin( MARGIN_BOTTOM, p_margin_botton );
- style->set_default_margin( MARGIN_TOP, p_margin_top );
+ style->set_default_margin( MARGIN_LEFT, p_margin_left * scale);
+ style->set_default_margin( MARGIN_RIGHT, p_margin_right * scale);
+ style->set_default_margin( MARGIN_BOTTOM, p_margin_botton * scale);
+ style->set_default_margin( MARGIN_TOP, p_margin_top * scale);
return style;
}
-#ifndef DEFAULT_THEME_DISABLED
-
-void make_default_theme() {
+void fill_default_theme(Ref<Theme>& t,const Ref<Font> & default_font,const Ref<Font> & large_font,Ref<Texture>& default_icon, Ref<StyleBox>& default_style,bool p_hidpi) {
+ if (p_hidpi)
+ scale=2;
+ else
+ scale=1;
tex_cache = memnew( TexCacheMap );
- Ref<Theme> t( memnew( Theme ) );
-
//Ref<BitmapFont> default_font = make_font(_bi_font_normal_height,_bi_font_normal_ascent,_bi_font_normal_valign,_bi_font_normal_charcount,_bi_font_normal_characters,make_icon(font_normal_png));
- Ref<BitmapFont> default_font=make_font2(_builtin_normal_font_height,_builtin_normal_font_ascent,_builtin_normal_font_charcount,&_builtin_normal_font_charrects[0][0],_builtin_normal_font_kerning_pair_count,&_builtin_normal_font_kerning_pairs[0][0],_builtin_normal_font_img_width,_builtin_normal_font_img_height,_builtin_normal_font_img_data);
- Ref<BitmapFont> source_font=make_font2(_builtin_source_font_height,_builtin_source_font_ascent,_builtin_source_font_charcount,&_builtin_source_font_charrects[0][0],_builtin_source_font_kerning_pair_count,&_builtin_source_font_kerning_pairs[0][0],_builtin_source_font_img_width,_builtin_source_font_img_height,_builtin_source_font_img_data);
- Ref<BitmapFont> large_font=make_font2(_builtin_large_font_height,_builtin_large_font_ascent,_builtin_large_font_charcount,&_builtin_large_font_charrects[0][0],_builtin_large_font_kerning_pair_count,&_builtin_large_font_kerning_pairs[0][0],_builtin_large_font_img_width,_builtin_large_font_img_height,_builtin_large_font_img_data);
// Font Colors
@@ -213,7 +217,7 @@ void make_default_theme() {
Ref<StyleBoxTexture> focus = make_stylebox( focus_png,5,5,5,5);
for(int i=0;i<4;i++) {
- focus->set_expand_margin_size(Margin(i),1);
+ focus->set_expand_margin_size(Margin(i),1 *scale);
}
@@ -239,7 +243,7 @@ void make_default_theme() {
t->set_color("font_color_hover","Button", control_font_color_hover );
t->set_color("font_color_disabled","Button", control_font_color_disabled );
- t->set_constant("hseparation","Button", 2);
+ t->set_constant("hseparation","Button", 2 *scale);
// LinkButton
@@ -249,7 +253,7 @@ void make_default_theme() {
t->set_color("font_color_pressed","LinkButton", control_font_color_pressed );
t->set_color("font_color_hover","LinkButton", control_font_color_hover );
- t->set_constant("underline_spacing","LinkButton", 2 );
+ t->set_constant("underline_spacing","LinkButton", 2 *scale);
// ColorPickerButton
@@ -266,16 +270,16 @@ void make_default_theme() {
t->set_color("font_color_hover","ColorPickerButton", Color(1,1,1,1) );
t->set_color("font_color_disabled","ColorPickerButton", Color(0.9,0.9,0.9,0.3) );
- t->set_constant("hseparation","ColorPickerButton", 2 );
+ t->set_constant("hseparation","ColorPickerButton", 2 *scale);
// ToolButton
Ref<StyleBox> tb_empty = memnew( StyleBoxEmpty );
- tb_empty->set_default_margin(MARGIN_LEFT,6);
- tb_empty->set_default_margin(MARGIN_RIGHT,6);
- tb_empty->set_default_margin(MARGIN_TOP,4);
- tb_empty->set_default_margin(MARGIN_BOTTOM,4);
+ tb_empty->set_default_margin(MARGIN_LEFT,6 *scale);
+ tb_empty->set_default_margin(MARGIN_RIGHT,6 *scale);
+ tb_empty->set_default_margin(MARGIN_TOP,4 *scale);
+ tb_empty->set_default_margin(MARGIN_BOTTOM,4 *scale);
t->set_stylebox("normal","ToolButton", tb_empty);
t->set_stylebox("pressed","ToolButton", make_stylebox( button_pressed_png,4,4,4,4) );
@@ -316,8 +320,8 @@ void make_default_theme() {
t->set_color("font_color_hover","OptionButton", control_font_color_hover );
t->set_color("font_color_disabled","OptionButton", control_font_color_disabled );
- t->set_constant("hseparation","OptionButton", 2 );
- t->set_constant("arrow_margin","OptionButton", 2 );
+ t->set_constant("hseparation","OptionButton", 2 *scale);
+ t->set_constant("arrow_margin","OptionButton", 2 *scale);
@@ -336,7 +340,7 @@ void make_default_theme() {
t->set_color("font_color_hover","MenuButton", control_font_color_hover );
t->set_color("font_color_disabled","MenuButton", Color(1,1,1,0.3) );
- t->set_constant("hseparation","MenuButton", 3 );
+ t->set_constant("hseparation","MenuButton", 3 *scale);
// ButtonGroup
@@ -345,15 +349,15 @@ void make_default_theme() {
// CheckBox
Ref<StyleBox> cbx_empty = memnew( StyleBoxEmpty );
- cbx_empty->set_default_margin(MARGIN_LEFT,22);
- cbx_empty->set_default_margin(MARGIN_RIGHT,4);
- cbx_empty->set_default_margin(MARGIN_TOP,4);
- cbx_empty->set_default_margin(MARGIN_BOTTOM,5);
+ cbx_empty->set_default_margin(MARGIN_LEFT,22 *scale);
+ cbx_empty->set_default_margin(MARGIN_RIGHT,4 *scale);
+ cbx_empty->set_default_margin(MARGIN_TOP,4 *scale);
+ cbx_empty->set_default_margin(MARGIN_BOTTOM,5 *scale);
Ref<StyleBox> cbx_focus = focus;
- cbx_focus->set_default_margin(MARGIN_LEFT,4);
- cbx_focus->set_default_margin(MARGIN_RIGHT,22);
- cbx_focus->set_default_margin(MARGIN_TOP,4);
- cbx_focus->set_default_margin(MARGIN_BOTTOM,5);
+ cbx_focus->set_default_margin(MARGIN_LEFT,4 *scale);
+ cbx_focus->set_default_margin(MARGIN_RIGHT,22 *scale);
+ cbx_focus->set_default_margin(MARGIN_TOP,4 *scale);
+ cbx_focus->set_default_margin(MARGIN_BOTTOM,5 *scale);
t->set_stylebox("normal","CheckBox", cbx_empty );
t->set_stylebox("pressed","CheckBox", cbx_empty );
@@ -373,18 +377,18 @@ void make_default_theme() {
t->set_color("font_color_hover","CheckBox", control_font_color_hover );
t->set_color("font_color_disabled","CheckBox", control_font_color_disabled );
- t->set_constant("hseparation","CheckBox",4);
- t->set_constant("check_vadjust","CheckBox",0);
+ t->set_constant("hseparation","CheckBox",4 *scale);
+ t->set_constant("check_vadjust","CheckBox",0 *scale);
// CheckButton
Ref<StyleBox> cb_empty = memnew( StyleBoxEmpty );
- cb_empty->set_default_margin(MARGIN_LEFT,6);
- cb_empty->set_default_margin(MARGIN_RIGHT,70);
- cb_empty->set_default_margin(MARGIN_TOP,4);
- cb_empty->set_default_margin(MARGIN_BOTTOM,4);
+ cb_empty->set_default_margin(MARGIN_LEFT,6 *scale);
+ cb_empty->set_default_margin(MARGIN_RIGHT,70 *scale);
+ cb_empty->set_default_margin(MARGIN_TOP,4 *scale);
+ cb_empty->set_default_margin(MARGIN_BOTTOM,4 *scale);
t->set_stylebox("normal","CheckButton", cb_empty );
t->set_stylebox("pressed","CheckButton", cb_empty );
@@ -402,8 +406,8 @@ void make_default_theme() {
t->set_color("font_color_hover","CheckButton", control_font_color_hover );
t->set_color("font_color_disabled","CheckButton", control_font_color_disabled );
- t->set_constant("hseparation","CheckButton",4);
- t->set_constant("check_vadjust","CheckButton",0);
+ t->set_constant("hseparation","CheckButton",4 *scale);
+ t->set_constant("check_vadjust","CheckButton",0 *scale);
@@ -414,10 +418,10 @@ void make_default_theme() {
t->set_color("font_color","Label", Color(1,1,1) );
t->set_color("font_color_shadow","Label", Color(0,0,0,0) );
- t->set_constant("shadow_offset_x","Label", 1 );
- t->set_constant("shadow_offset_y","Label", 1 );
- t->set_constant("shadow_as_outline","Label", 0 );
- t->set_constant("line_spacing","Label", 3 );
+ t->set_constant("shadow_offset_x","Label", 1 *scale);
+ t->set_constant("shadow_offset_y","Label", 1 *scale);
+ t->set_constant("shadow_as_outline","Label", 0 *scale);
+ t->set_constant("line_spacing","Label", 3 *scale);
@@ -434,7 +438,7 @@ void make_default_theme() {
t->set_color("cursor_color","LineEdit", control_font_color_hover );
t->set_color("selection_color","LineEdit", font_color_selection );
- t->set_constant("minimum_spaces","LineEdit", 12 );
+ t->set_constant("minimum_spaces","LineEdit", 12 *scale);
@@ -468,14 +472,14 @@ void make_default_theme() {
t->set_color("mark_color","TextEdit", Color(1.0,0.4,0.4,0.4) );
t->set_color("breakpoint_color","TextEdit", Color(0.8,0.8,0.4,0.2) );
t->set_color("current_line_color","TextEdit", Color(0.25,0.25,0.26,0.8) );
- t->set_color("cursor_color","TextEdit", control_font_color );
+ t->set_color("caret_color","TextEdit", control_font_color );
t->set_color("symbol_color","TextEdit", control_font_color_hover );
t->set_color("brace_mismatch_color","TextEdit", Color(1,0.2,0.2) );
t->set_constant("completion_lines","TextEdit", 7 );
t->set_constant("completion_max_width","TextEdit", 50 );
t->set_constant("completion_scroll_width","TextEdit", 3 );
- t->set_constant("line_spacing","TextEdit",4 );
+ t->set_constant("line_spacing","TextEdit",4 *scale);
Ref<Texture> empty_icon = memnew( ImageTexture );
@@ -555,10 +559,10 @@ void make_default_theme() {
t->set_color("title_color","WindowDialog", Color(0,0,0) );
- t->set_constant("close_h_ofs","WindowDialog", 22 );
- t->set_constant("close_v_ofs","WindowDialog", 20 );
- t->set_constant("titlebar_height","WindowDialog", 18 );
- t->set_constant("title_height","WindowDialog", 20 );
+ t->set_constant("close_h_ofs","WindowDialog", 22 *scale);
+ t->set_constant("close_v_ofs","WindowDialog", 20 *scale);
+ t->set_constant("titlebar_height","WindowDialog", 18 *scale);
+ t->set_constant("title_height","WindowDialog", 20 *scale);
// File Dialog
@@ -572,7 +576,7 @@ void make_default_theme() {
Ref<StyleBoxTexture> selected = make_stylebox( selection_png,6,6,6,6);
for(int i=0;i<4;i++) {
- selected->set_expand_margin_size(Margin(i),2);
+ selected->set_expand_margin_size(Margin(i),2 *scale);
}
t->set_stylebox("panel","PopupPanel", style_pp );
@@ -598,8 +602,8 @@ void make_default_theme() {
t->set_color("font_color_disabled","PopupMenu", Color(0.4,0.4,0.4,0.8) );
t->set_color("font_color_hover","PopupMenu", control_font_color );
- t->set_constant("hseparation","PopupMenu",4);
- t->set_constant("vseparation","PopupMenu",4);
+ t->set_constant("hseparation","PopupMenu",4 *scale);
+ t->set_constant("vseparation","PopupMenu",4 *scale);
// GraphNode
@@ -614,14 +618,14 @@ void make_default_theme() {
t->set_stylebox("selectedframe","GraphNode", graphsbselected );
t->set_stylebox("defaultframe", "GraphNode", graphsbdefault );
t->set_stylebox("defaultfocus", "GraphNode", graphsbdeffocus );
- t->set_constant("separation","GraphNode", 1 );
+ t->set_constant("separation","GraphNode", 1 *scale);
t->set_icon("port","GraphNode", make_icon( graph_port_png ) );
t->set_icon("close","GraphNode", make_icon( graph_node_close_png ) );
t->set_font("title_font","GraphNode", default_font );
t->set_color("title_color","GraphNode", Color(0,0,0,1));
- t->set_constant("title_offset","GraphNode", 18);
- t->set_constant("close_offset","GraphNode", 18);
- t->set_constant("port_offset","GraphNode", 3);
+ t->set_constant("title_offset","GraphNode", 18 *scale);
+ t->set_constant("close_offset","GraphNode", 18 *scale);
+ t->set_constant("port_offset","GraphNode", 3 *scale);
// Tree
@@ -658,11 +662,11 @@ void make_default_theme() {
t->set_color("guide_color","Tree", Color(0,0,0,0.1) );
t->set_color("drop_position_color","Tree", Color(1,0.3,0.2) );
- t->set_constant("hseparation","Tree",4);
- t->set_constant("vseparation","Tree",4);
- t->set_constant("guide_width","Tree",2);
- t->set_constant("item_margin","Tree",12);
- t->set_constant("button_margin","Tree",4);
+ t->set_constant("hseparation","Tree",4 *scale);
+ t->set_constant("vseparation","Tree",4 *scale);
+ t->set_constant("guide_width","Tree",2 *scale);
+ t->set_constant("item_margin","Tree",12 *scale);
+ t->set_constant("button_margin","Tree",4 *scale);
// ItemList
@@ -674,7 +678,7 @@ void make_default_theme() {
t->set_constant("hseparation","ItemList",4);
t->set_constant("vseparation","ItemList",2);
t->set_constant("icon_margin","ItemList",4);
- t->set_constant("line_separation","ItemList",2);
+ t->set_constant("line_separation","ItemList",2 *scale);
t->set_font("font","ItemList", default_font );
t->set_color("font_color","ItemList", control_font_color_lower );
t->set_color("font_color_selected","ItemList", control_font_color_pressed );
@@ -695,8 +699,8 @@ void make_default_theme() {
Ref<StyleBoxTexture> tc_sb = sb_expand( make_stylebox( tab_container_bg_png,4,4,4,4,4,4,4,4),3,3,3,3);
- tc_sb->set_expand_margin_size(MARGIN_TOP,2);
- tc_sb->set_default_margin(MARGIN_TOP,8);
+ tc_sb->set_expand_margin_size(MARGIN_TOP,2 *scale);
+ tc_sb->set_default_margin(MARGIN_TOP,8 *scale);
t->set_stylebox("tab_fg","TabContainer", sb_expand( make_stylebox( tab_current_png,4,4,4,1,16,4,16,4),2,2,2,2) );
t->set_stylebox("tab_bg","TabContainer", sb_expand( make_stylebox( tab_behind_png,5,5,5,1,16,6,16,4),3,0,3,3) );
@@ -714,11 +718,11 @@ void make_default_theme() {
t->set_color("font_color_fg","TabContainer", control_font_color_hover );
t->set_color("font_color_bg","TabContainer", control_font_color_low );
- t->set_constant("side_margin","TabContainer", 8 );
- t->set_constant("top_margin","TabContainer", 24);
- t->set_constant("label_valign_fg","TabContainer", 0);
- t->set_constant("label_valign_bg","TabContainer", 2);
- t->set_constant("hseparation","TabContainer", 4);
+ t->set_constant("side_margin","TabContainer", 8 *scale);
+ t->set_constant("top_margin","TabContainer", 24 *scale);
+ t->set_constant("label_valign_fg","TabContainer", 0 *scale);
+ t->set_constant("label_valign_bg","TabContainer", 2 *scale);
+ t->set_constant("hseparation","TabContainer", 4 *scale);
@@ -741,10 +745,10 @@ void make_default_theme() {
t->set_color("font_color_fg","Tabs", control_font_color_hover );
t->set_color("font_color_bg","Tabs", control_font_color_low );
- t->set_constant("top_margin","Tabs", 24);
- t->set_constant("label_valign_fg","Tabs", 0);
- t->set_constant("label_valign_bg","Tabs", 2);
- t->set_constant("hseparation","Tabs", 4);
+ t->set_constant("top_margin","Tabs", 24 *scale);
+ t->set_constant("label_valign_fg","Tabs", 0 *scale);
+ t->set_constant("label_valign_bg","Tabs", 2 *scale);
+ t->set_constant("hseparation","Tabs", 4 *scale);
@@ -754,18 +758,17 @@ void make_default_theme() {
t->set_stylebox("separator","VSeparator", make_stylebox( hseparator_png,3,3,3,3) );
t->set_icon("close","Icons", make_icon(icon_close_png));
- t->set_font("source","Fonts", source_font);
t->set_font("normal","Fonts", default_font );
t->set_font("large","Fonts", large_font );
- t->set_constant("separation","HSeparator", 4);
- t->set_constant("separation","VSeparator", 4);
+ t->set_constant("separation","HSeparator", 4 *scale);
+ t->set_constant("separation","VSeparator", 4 *scale);
// Dialogs
- t->set_constant("margin","Dialogs",8);
- t->set_constant("button_margin","Dialogs",32);
+ t->set_constant("margin","Dialogs",8 *scale);
+ t->set_constant("button_margin","Dialogs",32 *scale);
@@ -778,11 +781,11 @@ void make_default_theme() {
// colorPicker
- t->set_constant("value_height","ColorPicker", 23 );
- t->set_constant("value_width","ColorPicker", 50);
- t->set_constant("color_width","ColorPicker", 100);
- t->set_constant("label_width","ColorPicker", 20);
- t->set_constant("hseparator","ColorPicker", 4);
+ t->set_constant("value_height","ColorPicker", 23 *scale);
+ t->set_constant("value_width","ColorPicker", 50 *scale);
+ t->set_constant("color_width","ColorPicker", 100 *scale);
+ t->set_constant("label_width","ColorPicker", 20 *scale);
+ t->set_constant("hseparator","ColorPicker", 4 *scale);
t->set_icon("screen_picker","ColorPicker", make_icon( icon_color_pick_png ) );
t->set_icon("add_preset","ColorPicker", make_icon( icon_add_png ) );
@@ -794,7 +797,7 @@ void make_default_theme() {
Ref<StyleBoxTexture> style_tt = make_stylebox( tooltip_bg_png,4,4,4,4);
for(int i=0;i<4;i++)
- style_tt->set_expand_margin_size((Margin)i,4);
+ style_tt->set_expand_margin_size((Margin)i,4 *scale);
t->set_stylebox("panel","TooltipPanel", style_tt );
@@ -822,9 +825,9 @@ void make_default_theme() {
t->set_color("font_color_selected","RichTextLabel", font_color_selection );
t->set_color("selection_color","RichTextLabel", Color(0.1,0.1,1,0.8) );
- t->set_constant("line_separation","RichTextLabel", 1 );
- t->set_constant("table_hseparation","RichTextLabel", 3 );
- t->set_constant("table_vseparation","RichTextLabel", 3 );
+ t->set_constant("line_separation","RichTextLabel", 1 *scale);
+ t->set_constant("table_hseparation","RichTextLabel", 3 *scale);
+ t->set_constant("table_vseparation","RichTextLabel", 3 *scale);
@@ -836,18 +839,18 @@ void make_default_theme() {
t->set_icon("grabber","VSplitContainer",make_icon(vsplitter_png));
t->set_icon("grabber","HSplitContainer",make_icon(hsplitter_png));
- t->set_constant("separation","HBoxContainer",4);
- t->set_constant("separation","VBoxContainer",4);
- t->set_constant("margin_left","MarginContainer",8);
- t->set_constant("margin_top","MarginContainer",0);
- t->set_constant("margin_right","MarginContainer",0);
- t->set_constant("margin_bottom","MarginContainer",0);
- t->set_constant("hseparation","GridContainer",4);
- t->set_constant("vseparation","GridContainer",4);
- t->set_constant("separation","HSplitContainer",12);
- t->set_constant("separation","VSplitContainer",12);
- t->set_constant("autohide","HSplitContainer",1);
- t->set_constant("autohide","VSplitContainer",1);
+ t->set_constant("separation","HBoxContainer",4 *scale);
+ t->set_constant("separation","VBoxContainer",4 *scale);
+ t->set_constant("margin_left","MarginContainer",8 *scale);
+ t->set_constant("margin_top","MarginContainer",0 *scale);
+ t->set_constant("margin_right","MarginContainer",0 *scale);
+ t->set_constant("margin_bottom","MarginContainer",0 *scale);
+ t->set_constant("hseparation","GridContainer",4 *scale);
+ t->set_constant("vseparation","GridContainer",4 *scale);
+ t->set_constant("separation","HSplitContainer",12 *scale);
+ t->set_constant("separation","VSplitContainer",12 *scale);
+ t->set_constant("autohide","HSplitContainer",1 *scale);
+ t->set_constant("autohide","VSplitContainer",1 *scale);
@@ -863,8 +866,8 @@ void make_default_theme() {
t->set_color("font_color","HButtonArray", control_font_color_low );
t->set_color("font_color_selected","HButtonArray", control_font_color_hover );
- t->set_constant("icon_separator","HButtonArray", 4 );
- t->set_constant("button_separator","HButtonArray", 8 );
+ t->set_constant("icon_separator","HButtonArray", 4 *scale );
+ t->set_constant("button_separator","HButtonArray", 8 *scale );
t->set_stylebox("focus","HButtonArray", focus );
@@ -881,8 +884,8 @@ void make_default_theme() {
t->set_color("font_color","VButtonArray", control_font_color_low );
t->set_color("font_color_selected","VButtonArray", control_font_color_hover );
- t->set_constant("icon_separator","VButtonArray", 4);
- t->set_constant("button_separator","VButtonArray", 8);
+ t->set_constant("icon_separator","VButtonArray", 4 *scale);
+ t->set_constant("button_separator","VButtonArray", 8 *scale);
t->set_stylebox("focus","VButtonArray", focus );
@@ -914,45 +917,31 @@ void make_default_theme() {
// Theme
- Theme::set_default( t );
- Theme::set_default_icon( make_icon(error_icon_png) );
- Theme::set_default_style( make_stylebox( error_icon_png,2,2,2,2) );
- Theme::set_default_font( default_font );
+ default_icon= make_icon(error_icon_png) ;
+ default_style = make_stylebox( error_icon_png,2,2,2,2) ;
memdelete( tex_cache );
}
-#else
-
-#include "error_icon.xpm"
-
void make_default_theme() {
- Ref<Theme> t( memnew( Theme ) );
-
+ Ref<Theme> t;
+ t.instance();
- Image error_img(error_icon_xpm);
- Ref<Texture> texture( memnew( Texture ) );
- texture->create_from_image( error_img );
-
- Ref<StyleBoxTexture> style( memnew( StyleBoxTexture ) );
- style->set_texture(texture);
-
- for(int i=0;i<4;i++) {
- style->set_margin_size( Margin(),8);
- style->set_default_margin( Margin(),8);
- }
+ Ref<StyleBox> default_style;
+ Ref<Texture> default_icon;
+ Ref<BitmapFont> default_font=make_font2(_builtin_normal_font_height,_builtin_normal_font_ascent,_builtin_normal_font_charcount,&_builtin_normal_font_charrects[0][0],_builtin_normal_font_kerning_pair_count,&_builtin_normal_font_kerning_pairs[0][0],_builtin_normal_font_img_width,_builtin_normal_font_img_height,_builtin_normal_font_img_data);
+ Ref<BitmapFont> large_font=make_font2(_builtin_large_font_height,_builtin_large_font_ascent,_builtin_large_font_charcount,&_builtin_large_font_charrects[0][0],_builtin_large_font_kerning_pair_count,&_builtin_large_font_kerning_pairs[0][0],_builtin_large_font_img_width,_builtin_large_font_img_height,_builtin_large_font_img_data);
+ fill_default_theme(t,default_font,large_font,default_icon,default_style,false);
- Ref<BitmapFont> f = make_default_font();
Theme::set_default( t );
- Theme::set_default_icon( texture );
- Theme::set_default_style( style );
- Theme::set_default_font( f );
+ Theme::set_default_icon( default_icon );
+ Theme::set_default_style( default_style );
+ Theme::set_default_font( default_font );
}
-#endif
void clear_default_theme() {
Theme::set_default( Ref<Theme>() );
diff --git a/scene/resources/default_theme/default_theme.h b/scene/resources/default_theme/default_theme.h
index 44569ba192..1e3b4b4081 100644
--- a/scene/resources/default_theme/default_theme.h
+++ b/scene/resources/default_theme/default_theme.h
@@ -12,10 +12,12 @@
#ifndef DEFAULT_THEME_H
#define DEFAULT_THEME_H
+#include "scene/resources/theme.h"
/**
@author Juan Linietsky <reduzio@gmail.com>
*/
+void fill_default_theme(Ref<Theme>& theme,const Ref<Font> & default_font,const Ref<Font> & large_font,Ref<Texture>& default_icon, Ref<StyleBox>& default_style,bool p_hidpi);
void make_default_theme();
void clear_default_theme();
diff --git a/scene/resources/dynamic_font.cpp b/scene/resources/dynamic_font.cpp
index 19aa0e79cc..78a5571bf0 100644
--- a/scene/resources/dynamic_font.cpp
+++ b/scene/resources/dynamic_font.cpp
@@ -1,65 +1,11 @@
+#ifdef FREETYPE_ENABLED
#include "dynamic_font.h"
-#define STB_TRUETYPE_IMPLEMENTATION
-#include "stb_truetype.h"
#include "os/file_access.h"
-void DynamicFontData::lock() {
- fr=font_data.read();
-
- if (fr.ptr()!=last_data_ptr) {
-
- last_data_ptr=fr.ptr();
-
- if (!stbtt_InitFont(&info, last_data_ptr, 0)) {
- valid=false;
- } else {
- valid=true;
- }
-
- last_data_ptr=fr.ptr();
- }
-}
-
-void DynamicFontData::unlock() {
-
- fr = DVector<uint8_t>::Read();
-}
-
-void DynamicFontData::set_font_data(const DVector<uint8_t>& p_font) {
- //clear caches and stuff
- ERR_FAIL_COND(font_data.size()) ;
- font_data=p_font;
-
- lock();
-
- if (valid) {
- stbtt_GetFontVMetrics(&info, &ascent, &descent, &linegap);
- descent=-descent + linegap;
-
- for(int i=32;i<1024;i++) {
- for(int j=32;j<1024;j++) {
-
- int kern = stbtt_GetCodepointKernAdvance(&info, i,j);
- if (kern!=0) {
- KerningPairKey kpk;
- kpk.A=i;
- kpk.B=j;
- kerning_map[kpk]=kern;
- }
- }
- }
- }
-
- unlock();
- //clear existing stuff
-
- ERR_FAIL_COND(!valid);
-}
Ref<DynamicFontAtSize> DynamicFontData::_get_dynamic_font_at_size(int p_size) {
- ERR_FAIL_COND_V(!valid,Ref<DynamicFontAtSize>());
if (size_cache.has(p_size)) {
return Ref<DynamicFontAtSize>( size_cache[p_size] );
@@ -67,6 +13,7 @@ Ref<DynamicFontAtSize> DynamicFontData::_get_dynamic_font_at_size(int p_size) {
Ref<DynamicFontAtSize> dfas;
+
dfas.instance();
dfas->font=Ref<DynamicFontData>( this );
@@ -74,21 +21,34 @@ Ref<DynamicFontAtSize> DynamicFontData::_get_dynamic_font_at_size(int p_size) {
size_cache[p_size]=dfas.ptr();
dfas->size=p_size;
+ dfas->_load();
- lock();
+ return dfas;
- dfas->scale = stbtt_ScaleForPixelHeight(&info, p_size);
+}
- unlock();
+void DynamicFontData::set_font_ptr(const uint8_t* p_font_mem,int p_font_mem_size) {
- return dfas;
+ font_mem=p_font_mem;
+ font_mem_size=p_font_mem_size;
+}
+void DynamicFontData::set_font_path(const String& p_path) {
+
+ font_path=p_path;
+}
+
+void DynamicFontData::set_force_autohinter(bool p_force) {
+
+ force_autohinter=p_force;
}
DynamicFontData::DynamicFontData()
{
- last_data_ptr=NULL;
- valid=false;
+
+ force_autohinter=false;
+ font_mem=NULL;
+ font_mem_size=0;
}
DynamicFontData::~DynamicFontData()
@@ -100,79 +60,291 @@ DynamicFontData::~DynamicFontData()
////////////////////
+Error DynamicFontAtSize::_load() {
+
+
+ int error = FT_Init_FreeType( &library );
+
+ ERR_EXPLAIN(TTR("Error initializing FreeType."));
+ ERR_FAIL_COND_V( error !=0, ERR_CANT_CREATE );
+
+ if (font->font_path!=String()) {
+
+ FileAccess *f=FileAccess::open(font->font_path,FileAccess::READ);
+ ERR_FAIL_COND_V(!f,ERR_CANT_OPEN);
+
+ memset(&stream,0,sizeof(FT_StreamRec));
+ stream.base=NULL;
+ stream.size=f->get_len();
+ stream.pos=0;
+ stream.descriptor.pointer=f;
+ stream.read=_ft_stream_io;
+ stream.close=_ft_stream_close;
+
+ FT_Open_Args fargs;
+ memset(&fargs,0,sizeof(FT_Open_Args));
+ fargs.flags=FT_OPEN_STREAM;
+ fargs.stream=&stream;
+ error = FT_Open_Face( library,&fargs,0,&face);
+ } else if (font->font_mem) {
+
+ memset(&stream,0,sizeof(FT_StreamRec));
+ stream.base=(unsigned char*)font->font_mem;
+ stream.size=font->font_mem_size;
+ stream.pos=0;
+
+ FT_Open_Args fargs;
+ memset(&fargs,0,sizeof(FT_Open_Args));
+ fargs.memory_base=(unsigned char*)font->font_mem;
+ fargs.memory_size=font->font_mem_size;
+ fargs.flags= FT_OPEN_MEMORY;
+ fargs.stream=&stream;
+ error = FT_Open_Face( library,&fargs,0,&face);
+
+ } else {
+ ERR_EXPLAIN("DynamicFont uninitialized");
+ ERR_FAIL_V(ERR_UNCONFIGURED);
+ }
+
+ //error = FT_New_Face( library, src_path.utf8().get_data(),0,&face );
+
+ if ( error == FT_Err_Unknown_File_Format ) {
+ ERR_EXPLAIN(TTR("Unknown font format."));
+ FT_Done_FreeType( library );
+
+ } else if ( error ) {
+
+ ERR_EXPLAIN(TTR("Error loading font."));
+ FT_Done_FreeType( library );
+
+ }
+
+ ERR_FAIL_COND_V(error,ERR_FILE_CANT_OPEN);
+
+
+ /*error = FT_Set_Char_Size(face,0,64*size,512,512);
+
+ if ( error ) {
+ FT_Done_FreeType( library );
+ ERR_EXPLAIN(TTR("Invalid font size."));
+ ERR_FAIL_COND_V( error, ERR_INVALID_PARAMETER );
+ }*/
+
+ error = FT_Set_Pixel_Sizes(face,0,size);
+
+ ascent=face->size->metrics.ascender>>6;
+ descent=-face->size->metrics.descender>>6;
+ linegap=0;
+
+ //print_line("ASCENT: "+itos(ascent)+" descent "+itos(descent)+" hinted: "+itos(face->face_flags&FT_FACE_FLAG_HINTER));
+
+ valid=true;
+ return OK;
+}
+
float DynamicFontAtSize::get_height() const {
- return (font->ascent+font->descent)*scale;
+ return ascent+descent;
}
float DynamicFontAtSize::get_ascent() const {
- return font->ascent*scale;
+ return ascent;
}
float DynamicFontAtSize::get_descent() const {
- return font->descent*scale;
+ return descent;
}
-Size2 DynamicFontAtSize::get_char_size(CharType p_char,CharType p_next) const {
+Size2 DynamicFontAtSize::get_char_size(CharType p_char,CharType p_next,const Vector<Ref<DynamicFontAtSize> >& p_fallbacks) const {
+ if (!valid)
+ return Size2(1,1);
const_cast<DynamicFontAtSize*>(this)->_update_char(p_char);
const Character *c = char_map.getptr(p_char);
ERR_FAIL_COND_V(!c,Size2());
- Size2 ret( c->advance, get_height());
+ Size2 ret(0,get_height());
+
+ if (!c->found) {
+
+ //not found, try in fallbacks
+ for(int i=0;i<p_fallbacks.size();i++) {
+
+ DynamicFontAtSize *fb = const_cast<DynamicFontAtSize*>(p_fallbacks[i].ptr());
+ if (!fb->valid)
+ continue;
+
+ fb->_update_char(p_char);
+ const Character *ch = fb->char_map.getptr(p_char);
+ ERR_CONTINUE(!ch);
+
+ if (!ch->found)
+ continue;
+
+ c=ch;
+ break;
+ }
+ //not found, try 0xFFFD to display 'not found'.
+
+ if (!c->found) {
+
+ const_cast<DynamicFontAtSize*>(this)->_update_char(0xFFFD);
+ c = char_map.getptr(0xFFFD);
+ ERR_FAIL_COND_V(!c,Size2());
+
+ }
+ }
+
+ if (c->found) {
+ ret.x=c->advance;
+ }
+
if (p_next) {
- DynamicFontData::KerningPairKey kpk;
- kpk.A=p_char;
- kpk.B=p_next;
+ FT_Vector delta;
+ FT_Get_Kerning( face, p_char,p_next, FT_KERNING_DEFAULT, &delta );
+
+ if (delta.x==0) {
+ for(int i=0;i<p_fallbacks.size();i++) {
+
+ DynamicFontAtSize *fb = const_cast<DynamicFontAtSize*>(p_fallbacks[i].ptr());
+ if (!fb->valid)
+ continue;
- const Map<DynamicFontData::KerningPairKey,int>::Element *K=font->kerning_map.find(kpk);
- if (K) {
- ret.x+=K->get()*scale;
+ FT_Get_Kerning( fb->face, p_char,p_next, FT_KERNING_DEFAULT, &delta );
+
+ if (delta.x==0)
+ continue;
+
+ ret.x+=delta.x>>6;
+ break;
+ }
+ } else {
+ ret.x+=delta.x>>6;
}
+
}
return ret;
}
-float DynamicFontAtSize::draw_char(RID p_canvas_item, const Point2& p_pos, const CharType& p_char,const CharType& p_next,const Color& p_modulate) const {
+float DynamicFontAtSize::draw_char(RID p_canvas_item, const Point2& p_pos, const CharType& p_char,const CharType& p_next,const Color& p_modulate,const Vector<Ref<DynamicFontAtSize> >& p_fallbacks) const {
+
+ if (!valid)
+ return 0;
const_cast<DynamicFontAtSize*>(this)->_update_char(p_char);
const Character * c = char_map.getptr(p_char);
- if (!c) {
- return 0;
+ float advance=0;
+
+ if (!c->found) {
+
+ //not found, try in fallbacks
+ bool used_fallback=false;
+
+ for(int i=0;i<p_fallbacks.size();i++) {
+
+ DynamicFontAtSize *fb = const_cast<DynamicFontAtSize*>(p_fallbacks[i].ptr());
+ if (!fb->valid)
+ continue;
+
+ fb->_update_char(p_char);
+ const Character *ch = fb->char_map.getptr(p_char);
+ ERR_CONTINUE(!ch);
+
+ if (!ch->found)
+ continue;
+
+ Point2 cpos=p_pos;
+ cpos.x+=ch->h_align;
+ cpos.y-=get_ascent();
+ cpos.y+=ch->v_align;
+ ERR_FAIL_COND_V( ch->texture_idx<-1 || ch->texture_idx>=fb->textures.size(),0);
+ if (ch->texture_idx!=-1)
+ VisualServer::get_singleton()->canvas_item_add_texture_rect_region( p_canvas_item, Rect2( cpos, ch->rect.size ), fb->textures[ch->texture_idx].texture->get_rid(),ch->rect, p_modulate );
+ advance=ch->advance;
+ used_fallback=true;
+ break;
+ }
+ //not found, try 0xFFFD to display 'not found'.
+
+ if (!used_fallback) {
+
+ const_cast<DynamicFontAtSize*>(this)->_update_char(0xFFFD);
+ c = char_map.getptr(0xFFFD);
+
+ }
}
- Point2 cpos=p_pos;
- cpos.x+=c->h_align;
- cpos.y-=get_ascent();
- cpos.y+=c->v_align;
- ERR_FAIL_COND_V( c->texture_idx<-1 || c->texture_idx>=textures.size(),0);
- if (c->texture_idx!=-1)
- VisualServer::get_singleton()->canvas_item_add_texture_rect_region( p_canvas_item, Rect2( cpos, c->rect.size ), textures[c->texture_idx].texture->get_rid(),c->rect, p_modulate );
+ if (c->found) {
+
+
+ Point2 cpos=p_pos;
+ cpos.x+=c->h_align;
+ cpos.y-=get_ascent();
+ cpos.y+=c->v_align;
+ ERR_FAIL_COND_V( c->texture_idx<-1 || c->texture_idx>=textures.size(),0);
+ if (c->texture_idx!=-1)
+ VisualServer::get_singleton()->canvas_item_add_texture_rect_region( p_canvas_item, Rect2( cpos, c->rect.size ), textures[c->texture_idx].texture->get_rid(),c->rect, p_modulate );
+ advance=c->advance;
+ //textures[c->texture_idx].texture->draw(p_canvas_item,Vector2());
+ }
- //textures[c->texture_idx].texture->draw(p_canvas_item,Vector2());
- float ret = c->advance;
if (p_next) {
- DynamicFontData::KerningPairKey kpk;
- kpk.A=p_char;
- kpk.B=p_next;
- const Map<DynamicFontData::KerningPairKey,int>::Element *K=font->kerning_map.find(kpk);
- if (K) {
- ret+=K->get()*scale;
+ FT_Vector delta;
+ FT_Get_Kerning( face, p_char,p_next, FT_KERNING_DEFAULT, &delta );
+
+ if (delta.x==0) {
+ for(int i=0;i<p_fallbacks.size();i++) {
+
+ DynamicFontAtSize *fb = const_cast<DynamicFontAtSize*>(p_fallbacks[i].ptr());
+ if (!fb->valid)
+ continue;
+
+ FT_Get_Kerning( fb->face, p_char,p_next, FT_KERNING_DEFAULT, &delta );
+
+ if (delta.x==0)
+ continue;
+
+ advance+=delta.x>>6;
+ break;
+ }
+ } else {
+ advance+=delta.x>>6;
}
+ }
+
+ return advance;
+}
+
+unsigned long DynamicFontAtSize::_ft_stream_io(FT_Stream stream, unsigned long offset, unsigned char* buffer, unsigned long count ) {
+
+
+ FileAccess *f=(FileAccess*)stream->descriptor.pointer;
+
+ if (f->get_pos()!=offset) {
+ f->seek(offset);
}
- return ret;
+ if (count==0)
+ return 0;
+
+ return f->get_buffer(buffer,count);
+}
+void DynamicFontAtSize::_ft_stream_close(FT_Stream stream) {
+
+ FileAccess *f=(FileAccess*)stream->descriptor.pointer;
+ f->close();
+ memdelete(f);
}
@@ -181,38 +353,59 @@ void DynamicFontAtSize::_update_char(CharType p_char) {
if (char_map.has(p_char))
return;
- font->lock();
+ _THREAD_SAFE_METHOD_
+ FT_GlyphSlot slot = face->glyph;
- int w,h,xofs,yofs;
- unsigned char * cpbitmap = stbtt_GetCodepointBitmap(&font->info, scale, scale, p_char, &w, &h, &xofs, &yofs );
+ if (FT_Get_Char_Index( face, p_char)==0) {
+ //not found
+ Character ch;
+ ch.texture_idx=-1;
+ ch.advance=0;
+ ch.h_align=0;
+ ch.v_align=0;
+ ch.found=false;
- if (!cpbitmap) {
- //no glyph
+ char_map[p_char]=ch;
+ return;
+ }
+ int error = FT_Load_Char( face, p_char, FT_LOAD_RENDER|(font->force_autohinter?FT_LOAD_FORCE_AUTOHINT:0) );
+ if (!error) {
+ error = FT_Render_Glyph( face->glyph, ft_render_mode_normal );
+ }
+ if (error) {
- int advance;
- stbtt_GetCodepointHMetrics(&font->info, p_char, &advance, 0);
+ int advance=0;
+ //stbtt_GetCodepointHMetrics(&font->info, p_char, &advance, 0);
//print_line("char has no bitmap: "+itos(p_char)+" but advance is "+itos(advance*scale));
Character ch;
ch.texture_idx=-1;
- ch.advance=advance*scale;
+ ch.advance=advance;
ch.h_align=0;
ch.v_align=0;
+ ch.found=false;
char_map[p_char]=ch;
- font->unlock();
return;
}
+
+
+ int w = slot->bitmap.width;
+ int h = slot->bitmap.rows;
+ int p = slot->bitmap.pitch;
+ int yofs=slot->bitmap_top;
+ int xofs=slot->bitmap_left;
+ int advance=slot->advance.x>>6;
+
+
int mw=w+rect_margin*2;
int mh=h+rect_margin*2;
if (mw>4096 || mh>4096) {
- stbtt_FreeBitmap(cpbitmap,NULL);
- font->unlock();
ERR_FAIL_COND(mw>4096);
ERR_FAIL_COND(mh>4096);
}
@@ -304,13 +497,14 @@ void DynamicFontAtSize::_update_char(CharType p_char) {
{
DVector<uint8_t>::Write wr = tex.imgdata.write();
+
for(int i=0;i<h;i++) {
for(int j=0;j<w;j++) {
int ofs = ( (i+tex_y+rect_margin)*tex.texture_size+j+tex_x+rect_margin)*2;
ERR_FAIL_COND(ofs >= tex.imgdata.size());
wr[ofs+0]=255; //grayscale as 1
- wr[ofs+1]=cpbitmap[i*w+j]; //alpha as 0
+ wr[ofs+1]=slot->bitmap.buffer[i*slot->bitmap.width+j];
}
}
}
@@ -322,7 +516,7 @@ void DynamicFontAtSize::_update_char(CharType p_char) {
if (tex.texture.is_null()) {
tex.texture.instance();
- tex.texture->create_from_image(img,Texture::FLAG_FILTER);
+ tex.texture->create_from_image(img,0/*Texture::FLAG_FILTER*/);
} else {
tex.texture->set_data(img); //update
}
@@ -337,14 +531,13 @@ void DynamicFontAtSize::_update_char(CharType p_char) {
tex.offsets[k]=tex_y+mh;
}
- int advance;
- stbtt_GetCodepointHMetrics(&font->info, p_char, &advance, 0);
Character chr;
chr.h_align=xofs;
- chr.v_align=yofs + get_ascent();
- chr.advance=advance*scale;
+ chr.v_align=ascent-yofs;// + ascent - descent;
+ chr.advance=advance;
chr.texture_idx=tex_index;
+ chr.found=true;
chr.rect=Rect2(tex_x+rect_margin,tex_y+rect_margin,w,h);
@@ -353,45 +546,38 @@ void DynamicFontAtSize::_update_char(CharType p_char) {
char_map[p_char]=chr;
- stbtt_FreeBitmap(cpbitmap,NULL);
-
- font->unlock();
}
DynamicFontAtSize::DynamicFontAtSize() {
+ valid=false;
rect_margin=1;
+ ascent=1;
+ descent=1;
+ linegap=1;
}
DynamicFontAtSize::~DynamicFontAtSize(){
- ERR_FAIL_COND(!font.ptr());
- font->size_cache.erase(size);
+ if (valid) {
+ FT_Done_FreeType( library );
+ font->size_cache.erase(size);
+ }
}
/////////////////////////
-void DynamicFont::_bind_methods() {
-
- ObjectTypeDB::bind_method(_MD("set_font_data","data:DynamicFontData"),&DynamicFont::set_font_data);
- ObjectTypeDB::bind_method(_MD("get_font_data:DynamicFontData"),&DynamicFont::get_font_data);
-
- ObjectTypeDB::bind_method(_MD("set_size","data"),&DynamicFont::set_size);
- ObjectTypeDB::bind_method(_MD("get_size"),&DynamicFont::get_size);
-
- ADD_PROPERTY(PropertyInfo(Variant::INT,"size"),_SCS("set_size"),_SCS("get_size"));
- ADD_PROPERTY(PropertyInfo(Variant::OBJECT,"font",PROPERTY_HINT_RESOURCE_TYPE,"DynamicFontData"),_SCS("set_font_data"),_SCS("get_font_data"));
-}
-
void DynamicFont::set_font_data(const Ref<DynamicFontData>& p_data) {
data=p_data;
data_at_size=data->_get_dynamic_font_at_size(size);
+ emit_changed();
}
+
Ref<DynamicFontData> DynamicFont::get_font_data() const{
return data;
@@ -406,7 +592,12 @@ void DynamicFont::set_size(int p_size){
if (!data.is_valid())
return;
data_at_size=data->_get_dynamic_font_at_size(size);
+ for(int i=0;i<fallbacks.size();i++) {
+ fallback_data_at_size[i]=fallbacks[i]->_get_dynamic_font_at_size(size);
+ }
+ emit_changed();
+ _change_notify();
}
int DynamicFont::get_size() const{
@@ -443,7 +634,7 @@ Size2 DynamicFont::get_char_size(CharType p_char,CharType p_next) const{
if (!data_at_size.is_valid())
return Size2(1,1);
- return data_at_size->get_char_size(p_char,p_next);
+ return data_at_size->get_char_size(p_char,p_next,fallback_data_at_size);
}
@@ -457,10 +648,120 @@ float DynamicFont::draw_char(RID p_canvas_item, const Point2& p_pos, const CharT
if (!data_at_size.is_valid())
return 0;
- return data_at_size->draw_char(p_canvas_item,p_pos,p_char,p_next,p_modulate);
+ return data_at_size->draw_char(p_canvas_item,p_pos,p_char,p_next,p_modulate,fallback_data_at_size);
+
+}
+void DynamicFont::set_fallback(int p_idx,const Ref<DynamicFontData>& p_data) {
+
+ ERR_FAIL_COND(p_data.is_null());
+ ERR_FAIL_INDEX(p_idx,fallbacks.size());
+ fallbacks[p_idx]=p_data;
+ fallback_data_at_size[p_idx]=fallbacks[p_idx]->_get_dynamic_font_at_size(size);
}
+void DynamicFont::add_fallback(const Ref<DynamicFontData>& p_data) {
+
+ ERR_FAIL_COND(p_data.is_null());
+ fallbacks.push_back(p_data);
+ fallback_data_at_size.push_back(fallbacks[fallbacks.size()-1]->_get_dynamic_font_at_size(size)); //const..
+
+ _change_notify();
+ emit_changed();
+ _change_notify();
+
+}
+
+int DynamicFont::get_fallback_count() const {
+ return fallbacks.size();
+}
+Ref<DynamicFontData> DynamicFont::get_fallback(int p_idx) const {
+
+ ERR_FAIL_INDEX_V(p_idx,fallbacks.size(),Ref<DynamicFontData>());
+
+ return fallbacks[p_idx];
+}
+void DynamicFont::remove_fallback(int p_idx) {
+
+ ERR_FAIL_INDEX(p_idx,fallbacks.size());
+ fallbacks.remove(p_idx);
+ fallback_data_at_size.remove(p_idx);
+ emit_changed();
+ _change_notify();
+}
+
+bool DynamicFont::_set(const StringName& p_name, const Variant& p_value) {
+
+ String str = p_name;
+ if (str.begins_with("fallback/")) {
+ int idx = str.get_slicec('/',1).to_int();
+ Ref<DynamicFontData> fd = p_value;
+
+ if (fd.is_valid()) {
+ if (idx==fallbacks.size()) {
+ add_fallback(fd);
+ return true;
+ } else if (idx>=0 && idx<fallbacks.size()) {
+ set_fallback(idx,fd);
+ return true;
+ } else {
+ return false;
+ }
+ } else if (idx>=0 && idx<fallbacks.size()) {
+ remove_fallback(idx);
+ return true;
+ }
+ }
+
+ return false;
+}
+
+bool DynamicFont::_get(const StringName& p_name,Variant &r_ret) const{
+
+ String str = p_name;
+ if (str.begins_with("fallback/")) {
+ int idx = str.get_slicec('/',1).to_int();
+
+ if (idx==fallbacks.size()) {
+ r_ret=Ref<DynamicFontData>();
+ return true;
+ } else if (idx>=0 && idx<fallbacks.size()) {
+ r_ret=get_fallback(idx);
+ return true;
+ }
+ }
+
+ return false;
+}
+void DynamicFont::_get_property_list( List<PropertyInfo> *p_list) const{
+
+ for(int i=0;i<fallbacks.size();i++) {
+ p_list->push_back(PropertyInfo(Variant::OBJECT,"fallback/"+itos(i),PROPERTY_HINT_RESOURCE_TYPE,"DynamicFontData"));
+ }
+
+ p_list->push_back(PropertyInfo(Variant::OBJECT,"fallback/"+itos(fallbacks.size()),PROPERTY_HINT_RESOURCE_TYPE,"DynamicFontData"));
+}
+
+
+void DynamicFont::_bind_methods() {
+
+ ObjectTypeDB::bind_method(_MD("set_font_data","data:DynamicFontData"),&DynamicFont::set_font_data);
+ ObjectTypeDB::bind_method(_MD("get_font_data:DynamicFontData"),&DynamicFont::get_font_data);
+
+ ObjectTypeDB::bind_method(_MD("set_size","data"),&DynamicFont::set_size);
+ ObjectTypeDB::bind_method(_MD("get_size"),&DynamicFont::get_size);
+
+ ObjectTypeDB::bind_method(_MD("add_fallback","data:DynamicFontData"),&DynamicFont::add_fallback);
+ ObjectTypeDB::bind_method(_MD("set_fallback","idx","data:DynamicFontData"),&DynamicFont::set_fallback);
+ ObjectTypeDB::bind_method(_MD("get_fallback:DynamicFontData","idx"),&DynamicFont::get_fallback);
+ ObjectTypeDB::bind_method(_MD("remove_fallback","idx"),&DynamicFont::remove_fallback);
+ ObjectTypeDB::bind_method(_MD("get_fallback_count"),&DynamicFont::get_fallback_count);
+
+
+ ADD_PROPERTY(PropertyInfo(Variant::INT,"font/size"),_SCS("set_size"),_SCS("get_size"));
+ ADD_PROPERTY(PropertyInfo(Variant::OBJECT,"font/font",PROPERTY_HINT_RESOURCE_TYPE,"DynamicFontData"),_SCS("set_font_data"),_SCS("get_font_data"));
+}
+
DynamicFont::DynamicFont() {
size=16;
@@ -478,34 +779,21 @@ RES ResourceFormatLoaderDynamicFont::load(const String &p_path, const String& p_
if (r_error)
*r_error=ERR_FILE_CANT_OPEN;
+ Ref<DynamicFontData> dfont;
+ dfont.instance();;
+ dfont->set_font_path(p_path);
- FileAccess *f = FileAccess::open(p_path,FileAccess::READ);
- ERR_FAIL_COND_V(!f,RES());
-
- DVector<uint8_t> data;
-
- data.resize(f->get_len());
-
- ERR_FAIL_COND_V(data.size()==0,RES());
-
- {
- DVector<uint8_t>::Write w = data.write();
- f->get_buffer(w.ptr(),data.size());
- }
-
- Ref<DynamicFontData> dfd;
- dfd.instance();
- dfd->set_font_data(data);
if (r_error)
*r_error=OK;
- return dfd;
+ return dfont;
}
void ResourceFormatLoaderDynamicFont::get_recognized_extensions(List<String> *p_extensions) const {
p_extensions->push_back("ttf");
+ p_extensions->push_back("otf");
}
bool ResourceFormatLoaderDynamicFont::handles_type(const String& p_type) const {
@@ -516,8 +804,10 @@ bool ResourceFormatLoaderDynamicFont::handles_type(const String& p_type) const {
String ResourceFormatLoaderDynamicFont::get_resource_type(const String &p_path) const {
String el = p_path.extension().to_lower();
- if (el=="ttf")
+ if (el=="ttf" || el=="otf")
return "DynamicFontData";
return "";
}
+
+#endif
diff --git a/scene/resources/dynamic_font.h b/scene/resources/dynamic_font.h
index ba7249a7b7..1a46e1e468 100644
--- a/scene/resources/dynamic_font.h
+++ b/scene/resources/dynamic_font.h
@@ -1,10 +1,14 @@
-#ifndef DYNAMICFONT_H
-#define DYNAMICFONT_H
+#ifndef DYNAMIC_FONT_H
+#define DYNAMIC_FONT_H
-#include "font.h"
-#include "stb_truetype.h"
+#ifdef FREETYPE_ENABLED
+#include "scene/resources/font.h"
+#include "os/thread_safe.h"
#include "io/resource_loader.h"
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
class DynamicFontAtSize;
class DynamicFont;
@@ -13,39 +17,16 @@ class DynamicFontData : public Resource {
OBJ_TYPE(DynamicFontData,Resource);
- bool valid;
-
- DVector<uint8_t> font_data;
- DVector<uint8_t>::Read fr;
- const uint8_t* last_data_ptr;
- struct KerningPairKey {
-
- union {
- struct {
- uint32_t A,B;
- };
-
- uint64_t pair;
- };
-
- _FORCE_INLINE_ bool operator<(const KerningPairKey& p_r) const { return pair<p_r.pair; }
- };
-
- Map<KerningPairKey,int> kerning_map;
+ const uint8_t *font_mem;
+ int font_mem_size;
+ bool force_autohinter;
+ String font_path;
Map<int,DynamicFontAtSize*> size_cache;
-friend class DynamicFontAtSize;
-
- stbtt_fontinfo info;
- int ascent;
- int descent;
- int linegap;
-
- void lock();
- void unlock();
+ friend class DynamicFontAtSize;
friend class DynamicFont;
@@ -53,7 +34,10 @@ friend class DynamicFont;
Ref<DynamicFontAtSize> _get_dynamic_font_at_size(int p_size);
public:
- void set_font_data(const DVector<uint8_t>& p_font);
+ void set_font_ptr(const uint8_t* p_font_mem,int p_font_mem_size);
+ void set_font_path(const String& p_path);
+ void set_force_autohinter(bool p_force);
+
DynamicFontData();
~DynamicFontData();
};
@@ -61,11 +45,21 @@ public:
class DynamicFontAtSize : public Reference {
- OBJ_TYPE(DynamicFontAtSize,Reference);
+ OBJ_TYPE(DynamicFontAtSize,Reference)
+
+ _THREAD_SAFE_CLASS_
+ FT_Library library; /* handle to library */
+ FT_Face face; /* handle to face object */
+ FT_StreamRec stream;
+ int ascent;
+ int descent;
+ int linegap;
int rect_margin;
+ bool valid;
+
struct CharTexture {
DVector<uint8_t> imgdata;
@@ -78,6 +72,7 @@ class DynamicFontAtSize : public Reference {
struct Character {
+ bool found;
int texture_idx;
Rect2 rect;
float v_align;
@@ -88,6 +83,8 @@ class DynamicFontAtSize : public Reference {
};
+ static unsigned long _ft_stream_io(FT_Stream stream, unsigned long offset, unsigned char* buffer, unsigned long count );
+ static void _ft_stream_close(FT_Stream stream);
HashMap< CharType, Character > char_map;
@@ -95,21 +92,26 @@ class DynamicFontAtSize : public Reference {
friend class DynamicFontData;
Ref<DynamicFontData> font;
- float scale;
int size;
+
+
+ Error _load();
protected:
+
+
public:
+
float get_height() const;
float get_ascent() const;
float get_descent() const;
- Size2 get_char_size(CharType p_char,CharType p_next=0) const;
+ Size2 get_char_size(CharType p_char,CharType p_next,const Vector<Ref<DynamicFontAtSize> >& p_fallbacks) const;
- float draw_char(RID p_canvas_item, const Point2& p_pos, const CharType& p_char,const CharType& p_next=0,const Color& p_modulate=Color(1,1,1)) const;
+ float draw_char(RID p_canvas_item, const Point2& p_pos, const CharType& p_char,const CharType& p_next,const Color& p_modulate,const Vector<Ref<DynamicFontAtSize> >& p_fallbacks) const;
@@ -123,13 +125,22 @@ class DynamicFont : public Font {
OBJ_TYPE( DynamicFont, Font );
- Ref<DynamicFontData> data;
+ Ref<DynamicFontData> data;
Ref<DynamicFontAtSize> data_at_size;
- int size;
+ Vector< Ref<DynamicFontData> > fallbacks;
+ Vector< Ref<DynamicFontAtSize> > fallback_data_at_size;
+
+
+ int size;
+ bool valid;
protected:
+ bool _set(const StringName& p_name, const Variant& p_value);
+ bool _get(const StringName& p_name,Variant &r_ret) const;
+ void _get_property_list( List<PropertyInfo> *p_list) const;
+
static void _bind_methods();
public:
@@ -140,6 +151,13 @@ public:
void set_size(int p_size);
int get_size() const;
+
+ void add_fallback(const Ref<DynamicFontData>& p_data);
+ void set_fallback(int p_idx,const Ref<DynamicFontData>& p_data);
+ int get_fallback_count() const;
+ Ref<DynamicFontData> get_fallback(int p_idx) const;
+ void remove_fallback(int p_idx);
+
virtual float get_height() const;
virtual float get_ascent() const;
@@ -171,5 +189,6 @@ public:
};
+#endif
-#endif // DYNAMICFONT_H
+#endif
diff --git a/scene/resources/dynamic_font_stb.cpp b/scene/resources/dynamic_font_stb.cpp
new file mode 100644
index 0000000000..0b9f95da4f
--- /dev/null
+++ b/scene/resources/dynamic_font_stb.cpp
@@ -0,0 +1,527 @@
+#include "dynamic_font_stb.h"
+
+#ifndef FREETYPE_ENABLED
+
+#define STB_TRUETYPE_IMPLEMENTATION
+#include "stb_truetype.h"
+#include "os/file_access.h"
+
+void DynamicFontData::lock() {
+
+ fr=font_data.read();
+
+ if (fr.ptr()!=last_data_ptr) {
+
+ last_data_ptr=fr.ptr();
+
+ if (!stbtt_InitFont(&info, last_data_ptr, 0)) {
+ valid=false;
+ } else {
+ valid=true;
+ }
+
+ last_data_ptr=fr.ptr();
+ }
+}
+
+void DynamicFontData::unlock() {
+
+ fr = DVector<uint8_t>::Read();
+}
+
+void DynamicFontData::set_font_data(const DVector<uint8_t>& p_font) {
+ //clear caches and stuff
+ ERR_FAIL_COND(font_data.size()) ;
+ font_data=p_font;
+
+ lock();
+
+ if (valid) {
+ stbtt_GetFontVMetrics(&info, &ascent, &descent, &linegap);
+ descent=-descent + linegap;
+
+ for(int i=32;i<1024;i++) {
+ for(int j=32;j<1024;j++) {
+
+ int kern = stbtt_GetCodepointKernAdvance(&info, i,j);
+ if (kern!=0) {
+ KerningPairKey kpk;
+ kpk.A=i;
+ kpk.B=j;
+ kerning_map[kpk]=kern;
+ }
+ }
+ }
+ }
+
+ unlock();
+ //clear existing stuff
+
+ ERR_FAIL_COND(!valid);
+}
+
+Ref<DynamicFontAtSize> DynamicFontData::_get_dynamic_font_at_size(int p_size) {
+
+ ERR_FAIL_COND_V(!valid,Ref<DynamicFontAtSize>());
+
+ if (size_cache.has(p_size)) {
+ return Ref<DynamicFontAtSize>( size_cache[p_size] );
+ }
+
+
+ Ref<DynamicFontAtSize> dfas;
+ dfas.instance();
+
+ dfas->font=Ref<DynamicFontData>( this );
+
+ size_cache[p_size]=dfas.ptr();
+
+ dfas->size=p_size;
+
+ lock();
+
+ dfas->scale = stbtt_ScaleForPixelHeight(&info, p_size);
+
+ unlock();
+
+ return dfas;
+
+}
+
+DynamicFontData::DynamicFontData()
+{
+ last_data_ptr=NULL;
+ valid=false;
+}
+
+DynamicFontData::~DynamicFontData()
+{
+
+}
+
+
+
+////////////////////
+
+float DynamicFontAtSize::get_height() const {
+
+ return (font->ascent+font->descent)*scale;
+}
+
+float DynamicFontAtSize::get_ascent() const {
+
+ return font->ascent*scale;
+}
+float DynamicFontAtSize::get_descent() const {
+
+ return font->descent*scale;
+}
+
+Size2 DynamicFontAtSize::get_char_size(CharType p_char,CharType p_next) const {
+
+ const_cast<DynamicFontAtSize*>(this)->_update_char(p_char);
+
+ const Character *c = char_map.getptr(p_char);
+ ERR_FAIL_COND_V(!c,Size2());
+
+ Size2 ret( c->advance, get_height());
+
+ if (p_next) {
+ DynamicFontData::KerningPairKey kpk;
+ kpk.A=p_char;
+ kpk.B=p_next;
+
+ const Map<DynamicFontData::KerningPairKey,int>::Element *K=font->kerning_map.find(kpk);
+ if (K) {
+ ret.x+=K->get()*scale;
+ }
+
+ }
+
+ return ret;
+}
+
+
+float DynamicFontAtSize::draw_char(RID p_canvas_item, const Point2& p_pos, const CharType& p_char,const CharType& p_next,const Color& p_modulate) const {
+
+ const_cast<DynamicFontAtSize*>(this)->_update_char(p_char);
+
+ const Character * c = char_map.getptr(p_char);
+
+ if (!c) {
+ return 0;
+ }
+
+ Point2 cpos=p_pos;
+ cpos.x+=c->h_align;
+ cpos.y-=get_ascent();
+ cpos.y+=c->v_align;
+ ERR_FAIL_COND_V( c->texture_idx<-1 || c->texture_idx>=textures.size(),0);
+ if (c->texture_idx!=-1)
+ VisualServer::get_singleton()->canvas_item_add_texture_rect_region( p_canvas_item, Rect2( cpos, c->rect.size ), textures[c->texture_idx].texture->get_rid(),c->rect, p_modulate );
+
+ //textures[c->texture_idx].texture->draw(p_canvas_item,Vector2());
+
+ float ret = c->advance;
+ if (p_next) {
+ DynamicFontData::KerningPairKey kpk;
+ kpk.A=p_char;
+ kpk.B=p_next;
+
+ const Map<DynamicFontData::KerningPairKey,int>::Element *K=font->kerning_map.find(kpk);
+ if (K) {
+ ret+=K->get()*scale;
+ }
+
+ }
+
+ return ret;
+}
+
+
+void DynamicFontAtSize::_update_char(CharType p_char) {
+
+ if (char_map.has(p_char))
+ return;
+
+ font->lock();
+
+
+ int w,h,xofs,yofs;
+ unsigned char * cpbitmap = stbtt_GetCodepointBitmap(&font->info, scale, scale, p_char, &w, &h, &xofs, &yofs );
+
+ if (!cpbitmap) {
+ //no glyph
+
+ int advance;
+ stbtt_GetCodepointHMetrics(&font->info, p_char, &advance, 0);
+ //print_line("char has no bitmap: "+itos(p_char)+" but advance is "+itos(advance*scale));
+ Character ch;
+ ch.texture_idx=-1;
+ ch.advance=advance*scale;
+ ch.h_align=0;
+ ch.v_align=0;
+
+ char_map[p_char]=ch;
+
+ font->unlock();
+
+ return;
+ }
+
+ int mw=w+rect_margin*2;
+ int mh=h+rect_margin*2;
+
+ if (mw>4096 || mh>4096) {
+
+ stbtt_FreeBitmap(cpbitmap,NULL);
+ font->unlock();
+ ERR_FAIL_COND(mw>4096);
+ ERR_FAIL_COND(mh>4096);
+ }
+
+ //find a texture to fit this...
+
+ int tex_index=-1;
+ int tex_x=0;
+ int tex_y=0;
+
+ for(int i=0;i<textures.size();i++) {
+
+ CharTexture &ct=textures[i];
+
+ if (mw > ct.texture_size || mh > ct.texture_size) //too big for this texture
+ continue;
+
+ tex_y=0x7FFFFFFF;
+ tex_x=0;
+
+ for(int j=0;j<ct.texture_size-mw;j++) {
+
+ int max_y=0;
+
+ for(int k=j;k<j+mw;k++) {
+
+ int y = ct.offsets[k];
+ if (y>max_y)
+ max_y=y;
+ }
+
+ if (max_y<tex_y) {
+ tex_y=max_y;
+ tex_x=j;
+ }
+ }
+
+ if (tex_y==0x7FFFFFFF || tex_y+mh > ct.texture_size)
+ continue; //fail, could not fit it here
+
+ tex_index=i;
+ break;
+ }
+
+// print_line("CHAR: "+String::chr(p_char)+" TEX INDEX: "+itos(tex_index)+" X: "+itos(tex_x)+" Y: "+itos(tex_y));
+
+ if (tex_index==-1) {
+ //could not find texture to fit, create one
+ tex_x = 0;
+ tex_y = 0;
+
+ int texsize = MAX(size*8,256);
+ if (mw>texsize)
+ texsize=mw; //special case, adapt to it?
+ if (mh>texsize)
+ texsize=mh; //special case, adapt to it?
+
+ texsize=nearest_power_of_2(texsize);
+
+ texsize=MIN(texsize,4096);
+
+
+ CharTexture tex;
+ tex.texture_size=texsize;
+ tex.imgdata.resize(texsize*texsize*2); //grayscale alpha
+
+ {
+ //zero texture
+ DVector<uint8_t>::Write w = tex.imgdata.write();
+ ERR_FAIL_COND(texsize*texsize*2 > tex.imgdata.size());
+ for(int i=0;i<texsize*texsize*2;i++) {
+ w[i]=0;
+ }
+ }
+ tex.offsets.resize(texsize);
+ for(int i=0;i<texsize;i++) //zero offsets
+ tex.offsets[i]=0;
+
+ textures.push_back(tex);
+ tex_index=textures.size()-1;
+
+ }
+
+
+ //fit character in char texture
+
+ CharTexture &tex=textures[tex_index];
+
+ {
+ DVector<uint8_t>::Write wr = tex.imgdata.write();
+
+ for(int i=0;i<h;i++) {
+ for(int j=0;j<w;j++) {
+
+ int ofs = ( (i+tex_y+rect_margin)*tex.texture_size+j+tex_x+rect_margin)*2;
+ ERR_FAIL_COND(ofs >= tex.imgdata.size());
+ wr[ofs+0]=255; //grayscale as 1
+ wr[ofs+1]=cpbitmap[i*w+j]; //alpha as 0
+ }
+ }
+ }
+
+ //blit to image and texture
+ {
+
+ Image img(tex.texture_size,tex.texture_size,0,Image::FORMAT_GRAYSCALE_ALPHA,tex.imgdata);
+
+ if (tex.texture.is_null()) {
+ tex.texture.instance();
+ tex.texture->create_from_image(img,Texture::FLAG_FILTER);
+ } else {
+ tex.texture->set_data(img); //update
+ }
+
+ }
+
+
+ // update height array
+
+ for(int k=tex_x;k<tex_x+mw;k++) {
+
+ tex.offsets[k]=tex_y+mh;
+ }
+
+ int advance;
+ stbtt_GetCodepointHMetrics(&font->info, p_char, &advance, 0);
+
+ Character chr;
+ chr.h_align=xofs;
+ chr.v_align=yofs + get_ascent();
+ chr.advance=advance*scale;
+ chr.texture_idx=tex_index;
+
+
+ chr.rect=Rect2(tex_x+rect_margin,tex_y+rect_margin,w,h);
+
+ //print_line("CHAR: "+String::chr(p_char)+" TEX INDEX: "+itos(tex_index)+" RECT: "+chr.rect+" X OFS: "+itos(xofs)+" Y OFS: "+itos(yofs));
+
+ char_map[p_char]=chr;
+
+ stbtt_FreeBitmap(cpbitmap,NULL);
+
+ font->unlock();
+
+}
+
+DynamicFontAtSize::DynamicFontAtSize() {
+
+ rect_margin=1;
+}
+
+DynamicFontAtSize::~DynamicFontAtSize(){
+
+ ERR_FAIL_COND(!font.ptr());
+ font->size_cache.erase(size);
+}
+
+/////////////////////////
+
+
+void DynamicFont::_bind_methods() {
+
+ ObjectTypeDB::bind_method(_MD("set_font_data","data:DynamicFontData"),&DynamicFont::set_font_data);
+ ObjectTypeDB::bind_method(_MD("get_font_data:DynamicFontData"),&DynamicFont::get_font_data);
+
+ ObjectTypeDB::bind_method(_MD("set_size","data"),&DynamicFont::set_size);
+ ObjectTypeDB::bind_method(_MD("get_size"),&DynamicFont::get_size);
+
+ ADD_PROPERTY(PropertyInfo(Variant::INT,"font/size"),_SCS("set_size"),_SCS("get_size"));
+ ADD_PROPERTY(PropertyInfo(Variant::OBJECT,"font/font",PROPERTY_HINT_RESOURCE_TYPE,"DynamicFontData"),_SCS("set_font_data"),_SCS("get_font_data"));
+}
+
+
+void DynamicFont::set_font_data(const Ref<DynamicFontData>& p_data) {
+
+ data=p_data;
+ data_at_size=data->_get_dynamic_font_at_size(size);
+}
+
+Ref<DynamicFontData> DynamicFont::get_font_data() const{
+
+ return data;
+}
+
+void DynamicFont::set_size(int p_size){
+
+ if (size==p_size)
+ return;
+ size=p_size;
+ ERR_FAIL_COND(p_size<1);
+ if (!data.is_valid())
+ return;
+ data_at_size=data->_get_dynamic_font_at_size(size);
+
+}
+int DynamicFont::get_size() const{
+
+ return size;
+}
+
+float DynamicFont::get_height() const{
+
+ if (!data_at_size.is_valid())
+ return 1;
+
+ return data_at_size->get_height();
+}
+
+float DynamicFont::get_ascent() const{
+
+ if (!data_at_size.is_valid())
+ return 1;
+
+ return data_at_size->get_ascent();
+}
+
+float DynamicFont::get_descent() const{
+
+ if (!data_at_size.is_valid())
+ return 1;
+
+ return data_at_size->get_descent();
+
+}
+
+Size2 DynamicFont::get_char_size(CharType p_char,CharType p_next) const{
+
+ if (!data_at_size.is_valid())
+ return Size2(1,1);
+
+ return data_at_size->get_char_size(p_char,p_next);
+
+}
+
+bool DynamicFont::is_distance_field_hint() const{
+
+ return false;
+}
+
+float DynamicFont::draw_char(RID p_canvas_item, const Point2& p_pos, const CharType& p_char,const CharType& p_next,const Color& p_modulate) const {
+
+ if (!data_at_size.is_valid())
+ return 0;
+
+ return data_at_size->draw_char(p_canvas_item,p_pos,p_char,p_next,p_modulate);
+
+}
+
+DynamicFont::DynamicFont() {
+
+ size=16;
+}
+
+DynamicFont::~DynamicFont() {
+
+}
+
+/////////////////////////
+
+
+RES ResourceFormatLoaderDynamicFont::load(const String &p_path, const String& p_original_path, Error *r_error) {
+
+ if (r_error)
+ *r_error=ERR_FILE_CANT_OPEN;
+
+
+ FileAccess *f = FileAccess::open(p_path,FileAccess::READ);
+ ERR_FAIL_COND_V(!f,RES());
+
+ DVector<uint8_t> data;
+
+ data.resize(f->get_len());
+
+ ERR_FAIL_COND_V(data.size()==0,RES());
+
+ {
+ DVector<uint8_t>::Write w = data.write();
+ f->get_buffer(w.ptr(),data.size());
+ }
+
+ Ref<DynamicFontData> dfd;
+ dfd.instance();
+ dfd->set_font_data(data);
+
+ if (r_error)
+ *r_error=OK;
+
+ return dfd;
+}
+
+void ResourceFormatLoaderDynamicFont::get_recognized_extensions(List<String> *p_extensions) const {
+
+ p_extensions->push_back("ttf");
+}
+
+bool ResourceFormatLoaderDynamicFont::handles_type(const String& p_type) const {
+
+ return (p_type=="DynamicFontData");
+}
+
+String ResourceFormatLoaderDynamicFont::get_resource_type(const String &p_path) const {
+
+ String el = p_path.extension().to_lower();
+ if (el=="ttf")
+ return "DynamicFontData";
+ return "";
+}
+
+#endif
diff --git a/scene/resources/dynamic_font_stb.h b/scene/resources/dynamic_font_stb.h
new file mode 100644
index 0000000000..6b72fb3703
--- /dev/null
+++ b/scene/resources/dynamic_font_stb.h
@@ -0,0 +1,178 @@
+#ifndef DYNAMICFONT_STB_H
+#define DYNAMICFONT_STB_H
+
+#ifndef FREETYPE_ENABLED
+
+#include "font.h"
+#include "stb_truetype.h"
+#include "io/resource_loader.h"
+
+
+
+class DynamicFontAtSize;
+class DynamicFont;
+
+class DynamicFontData : public Resource {
+
+ OBJ_TYPE(DynamicFontData,Resource);
+
+ bool valid;
+
+ DVector<uint8_t> font_data;
+ DVector<uint8_t>::Read fr;
+ const uint8_t* last_data_ptr;
+
+ struct KerningPairKey {
+
+ union {
+ struct {
+ uint32_t A,B;
+ };
+
+ uint64_t pair;
+ };
+
+ _FORCE_INLINE_ bool operator<(const KerningPairKey& p_r) const { return pair<p_r.pair; }
+ };
+
+ Map<KerningPairKey,int> kerning_map;
+
+
+ Map<int,DynamicFontAtSize*> size_cache;
+
+friend class DynamicFontAtSize;
+
+ stbtt_fontinfo info;
+ int ascent;
+ int descent;
+ int linegap;
+
+ void lock();
+ void unlock();
+
+friend class DynamicFont;
+
+
+ Ref<DynamicFontAtSize> _get_dynamic_font_at_size(int p_size);
+public:
+
+ void set_font_data(const DVector<uint8_t>& p_font);
+ DynamicFontData();
+ ~DynamicFontData();
+};
+
+
+class DynamicFontAtSize : public Reference {
+
+ OBJ_TYPE(DynamicFontAtSize,Reference);
+
+
+ int rect_margin;
+
+ struct CharTexture {
+
+ DVector<uint8_t> imgdata;
+ int texture_size;
+ Vector<int> offsets;
+ Ref<ImageTexture> texture;
+ };
+
+ Vector<CharTexture> textures;
+
+ struct Character {
+
+ int texture_idx;
+ Rect2 rect;
+ float v_align;
+ float h_align;
+ float advance;
+
+ Character() { texture_idx=0; v_align=0; }
+ };
+
+
+
+ HashMap< CharType, Character > char_map;
+
+ _FORCE_INLINE_ void _update_char(CharType p_char);
+
+friend class DynamicFontData;
+ Ref<DynamicFontData> font;
+ float scale;
+ int size;
+
+protected:
+
+public:
+
+ float get_height() const;
+
+ float get_ascent() const;
+ float get_descent() const;
+
+ Size2 get_char_size(CharType p_char,CharType p_next=0) const;
+
+ float draw_char(RID p_canvas_item, const Point2& p_pos, const CharType& p_char,const CharType& p_next=0,const Color& p_modulate=Color(1,1,1)) const;
+
+
+
+ DynamicFontAtSize();
+ ~DynamicFontAtSize();
+};
+
+///////////////
+
+class DynamicFont : public Font {
+
+ OBJ_TYPE( DynamicFont, Font );
+
+ Ref<DynamicFontData> data;
+ Ref<DynamicFontAtSize> data_at_size;
+ int size;
+
+
+protected:
+
+ static void _bind_methods();
+
+public:
+
+ void set_font_data(const Ref<DynamicFontData>& p_data);
+ Ref<DynamicFontData> get_font_data() const;
+
+ void set_size(int p_size);
+ int get_size() const;
+
+ virtual float get_height() const;
+
+ virtual float get_ascent() const;
+ virtual float get_descent() const;
+
+ virtual Size2 get_char_size(CharType p_char,CharType p_next=0) const;
+
+ virtual bool is_distance_field_hint() const;
+
+ virtual float draw_char(RID p_canvas_item, const Point2& p_pos, const CharType& p_char,const CharType& p_next=0,const Color& p_modulate=Color(1,1,1)) const;
+
+ DynamicFont();
+ ~DynamicFont();
+
+};
+
+
+
+/////////////
+
+class ResourceFormatLoaderDynamicFont : public ResourceFormatLoader {
+public:
+
+ virtual RES load(const String &p_path,const String& p_original_path="",Error *r_error=NULL);
+ virtual void get_recognized_extensions(List<String> *p_extensions) const;
+ virtual bool handles_type(const String& p_type) const;
+ virtual String get_resource_type(const String &p_path) const;
+
+};
+
+
+#endif
+#endif // DYNAMICFONT_H
diff --git a/scene/resources/mesh.cpp b/scene/resources/mesh.cpp
index 09c0a21f53..e6356d3366 100644
--- a/scene/resources/mesh.cpp
+++ b/scene/resources/mesh.cpp
@@ -30,7 +30,6 @@
#include "scene/resources/concave_polygon_shape.h"
#include "scene/resources/convex_polygon_shape.h"
#include "surface_tool.h"
-
static const char*_array_name[]={
"vertex_array",
"normal_array",
@@ -288,6 +287,7 @@ void Mesh::add_surface(PrimitiveType p_primitive,const Array& p_arrays,const Arr
triangle_mesh=Ref<TriangleMesh>();
_change_notify();
+ emit_changed();
}
@@ -387,6 +387,7 @@ void Mesh::surface_remove(int p_idx) {
triangle_mesh=Ref<TriangleMesh>();
_recompute_aabb();
_change_notify();
+ emit_changed();
}
@@ -491,6 +492,8 @@ void Mesh::add_surface_from_mesh_data(const Geometry::MeshData& p_mesh_data) {
surfaces.push_back(s);
_change_notify();
+
+ emit_changed();
}
RID Mesh::get_rid() const {
diff --git a/scene/resources/stb_truetype.h b/scene/resources/stb_truetype.h
index d360d60920..016972785a 100644
--- a/scene/resources/stb_truetype.h
+++ b/scene/resources/stb_truetype.h
@@ -29,7 +29,7 @@
// "Zer" on mollyrocket (with fix)
// Cass Everitt
// stoiko (Haemimont Games)
-// Brian Hook
+// Brian Hook
// Walter van Niftrik
// David Gow
// David Given
@@ -218,7 +218,7 @@
// Curve tesselation 120 LOC \__ 550 LOC Bitmap creation
// Bitmap management 100 LOC /
// Baked bitmap interface 70 LOC /
-// Font name matching & access 150 LOC ---- 150
+// Font name matching & access 150 LOC ---- 150
// C runtime library abstraction 60 LOC ---- 60
//
//
@@ -311,7 +311,7 @@ int main(int argc, char **argv)
}
return 0;
}
-#endif
+#endif
//
// Output:
//
@@ -325,9 +325,9 @@ int main(int argc, char **argv)
// :@@. M@M
// @@@o@@@@
// :M@@V:@@.
-//
+//
//////////////////////////////////////////////////////////////////////////////
-//
+//
// Complete program: print "Hello World!" banner, with bugs
//
#if 0
@@ -599,7 +599,7 @@ STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *spc, stbt
// Calling these functions in sequence is roughly equivalent to calling
// stbtt_PackFontRanges(). If you more control over the packing of multiple
// fonts, or if you want to pack custom data into a font texture, take a look
-// at the source to of stbtt_PackFontRanges() and create a custom version
+// at the source to of stbtt_PackFontRanges() and create a custom version
// using these functions, e.g. call GatherRects multiple times,
// building up a single array of rects, then call PackRects once,
// then call RenderIntoRects repeatedly. This may result in a
@@ -1350,7 +1350,7 @@ STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_index, s
if (i != 0)
num_vertices = stbtt__close_shape(vertices, num_vertices, was_off, start_off, sx,sy,scx,scy,cx,cy);
- // now start the new one
+ // now start the new one
start_off = !(flags & 1);
if (start_off) {
// if we start off with an off-curve point, then when we need to find a point on the curve
@@ -1403,7 +1403,7 @@ STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_index, s
int comp_num_verts = 0, i;
stbtt_vertex *comp_verts = 0, *tmp = 0;
float mtx[6] = {1,0,0,1,0,0}, m, n;
-
+
flags = ttSHORT(comp); comp+=2;
gidx = ttSHORT(comp); comp+=2;
@@ -1433,7 +1433,7 @@ STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_index, s
mtx[2] = ttSHORT(comp)/16384.0f; comp+=2;
mtx[3] = ttSHORT(comp)/16384.0f; comp+=2;
}
-
+
// Find transformation scales.
m = (float) STBTT_sqrt(mtx[0]*mtx[0] + mtx[1]*mtx[1]);
n = (float) STBTT_sqrt(mtx[2]*mtx[2] + mtx[3]*mtx[3]);
@@ -1691,7 +1691,7 @@ static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__edge *e, i
float dxdy = (e->x1 - e->x0) / (e->y1 - e->y0);
STBTT_assert(z != NULL);
if (!z) return z;
-
+
// round dx down to avoid overshooting
if (dxdy < 0)
z->dx = -STBTT_ifloor(STBTT_FIX * -dxdy);
@@ -1769,7 +1769,7 @@ static void stbtt__fill_active_edges(unsigned char *scanline, int len, stbtt__ac
}
}
}
-
+
e = e->next;
}
}
@@ -2441,7 +2441,7 @@ STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info
{
int ix0,iy0,ix1,iy1;
stbtt__bitmap gbm;
- stbtt_vertex *vertices;
+ stbtt_vertex *vertices;
int num_verts = stbtt_GetGlyphShape(info, glyph, &vertices);
if (scale_x == 0) scale_x = scale_y;
@@ -2464,7 +2464,7 @@ STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info
if (height) *height = gbm.h;
if (xoff ) *xoff = ix0;
if (yoff ) *yoff = iy0;
-
+
if (gbm.w && gbm.h) {
gbm.pixels = (unsigned char *) STBTT_malloc(gbm.w * gbm.h, info->userdata);
if (gbm.pixels) {
@@ -2475,7 +2475,7 @@ STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info
}
STBTT_free(vertices, info->userdata);
return gbm.pixels;
-}
+}
STBTT_DEF unsigned char *stbtt_GetGlyphBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int glyph, int *width, int *height, int *xoff, int *yoff)
{
@@ -2487,7 +2487,7 @@ STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info, unsigne
int ix0,iy0;
stbtt_vertex *vertices;
int num_verts = stbtt_GetGlyphShape(info, glyph, &vertices);
- stbtt__bitmap gbm;
+ stbtt__bitmap gbm;
stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale_x, scale_y, shift_x, shift_y, &ix0,&iy0,0,0);
gbm.pixels = output;
@@ -2509,7 +2509,7 @@ STBTT_DEF void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigned char *
STBTT_DEF unsigned char *stbtt_GetCodepointBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint, int *width, int *height, int *xoff, int *yoff)
{
return stbtt_GetGlyphBitmapSubpixel(info, scale_x, scale_y,shift_x,shift_y, stbtt_FindGlyphIndex(info,codepoint), width,height,xoff,yoff);
-}
+}
STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint)
{
@@ -2519,7 +2519,7 @@ STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *info, uns
STBTT_DEF unsigned char *stbtt_GetCodepointBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int codepoint, int *width, int *height, int *xoff, int *yoff)
{
return stbtt_GetCodepointBitmapSubpixel(info, scale_x, scale_y, 0.0f,0.0f, codepoint, width,height,xoff,yoff);
-}
+}
STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int codepoint)
{
@@ -2644,7 +2644,7 @@ static void stbrp_init_target(stbrp_context *con, int pw, int ph, stbrp_node *no
con->y = 0;
con->bottom_y = 0;
STBTT__NOTUSED(nodes);
- STBTT__NOTUSED(num_nodes);
+ STBTT__NOTUSED(num_nodes);
}
static void stbrp_pack_rects(stbrp_context *con, stbrp_rect *rects, int num_rects)
@@ -2996,7 +2996,7 @@ STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, unsigned char *fontd
n = 0;
for (i=0; i < num_ranges; ++i)
n += ranges[i].num_chars;
-
+
rects = (stbrp_rect *) STBTT_malloc(sizeof(*rects) * n, spc->user_allocator_context);
if (rects == NULL)
return 0;
@@ -3007,7 +3007,7 @@ STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, unsigned char *fontd
n = stbtt_PackFontRangesGatherRects(spc, &info, ranges, num_ranges, rects);
stbtt_PackFontRangesPackRects(spc, rects, n);
-
+
return_value = stbtt_PackFontRangesRenderIntoRects(spc, &info, ranges, num_ranges, rects);
STBTT_free(rects, spc->user_allocator_context);
@@ -3060,7 +3060,7 @@ STBTT_DEF void stbtt_GetPackedQuad(stbtt_packedchar *chardata, int pw, int ph, i
//
// check if a utf8 string contains a prefix which is the utf16 string; if so return length of matching utf8 string
-static stbtt_int32 stbtt__CompareUTF8toUTF16_bigendian_prefix(const stbtt_uint8 *s1, stbtt_int32 len1, const stbtt_uint8 *s2, stbtt_int32 len2)
+static stbtt_int32 stbtt__CompareUTF8toUTF16_bigendian_prefix(const stbtt_uint8 *s1, stbtt_int32 len1, const stbtt_uint8 *s2, stbtt_int32 len2)
{
stbtt_int32 i=0;
@@ -3099,7 +3099,7 @@ static stbtt_int32 stbtt__CompareUTF8toUTF16_bigendian_prefix(const stbtt_uint8
return i;
}
-STBTT_DEF int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len1, const char *s2, int len2)
+STBTT_DEF int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len1, const char *s2, int len2)
{
return len1 == stbtt__CompareUTF8toUTF16_bigendian_prefix((const stbtt_uint8*) s1, len1, (const stbtt_uint8*) s2, len2);
}
diff --git a/scene/resources/style_box.cpp b/scene/resources/style_box.cpp
index 75e38f9701..a61ffe8e97 100644
--- a/scene/resources/style_box.cpp
+++ b/scene/resources/style_box.cpp
@@ -138,7 +138,7 @@ void StyleBoxTexture::draw(RID p_canvas_item,const Rect2& p_rect) const {
r.pos.y-=expand_margin[MARGIN_TOP];
r.size.x+=expand_margin[MARGIN_LEFT]+expand_margin[MARGIN_RIGHT];
r.size.y+=expand_margin[MARGIN_TOP]+expand_margin[MARGIN_BOTTOM];
- VisualServer::get_singleton()->canvas_item_add_style_box( p_canvas_item,r,texture->get_rid(),Vector2(margin[MARGIN_LEFT],margin[MARGIN_TOP]),Vector2(margin[MARGIN_RIGHT],margin[MARGIN_BOTTOM]),draw_center);
+ VisualServer::get_singleton()->canvas_item_add_style_box( p_canvas_item,r,region_rect,texture->get_rid(),Vector2(margin[MARGIN_LEFT],margin[MARGIN_TOP]),Vector2(margin[MARGIN_RIGHT],margin[MARGIN_BOTTOM]),draw_center);
}
void StyleBoxTexture::set_draw_center(bool p_draw) {
@@ -175,6 +175,20 @@ float StyleBoxTexture::get_expand_margin_size(Margin p_expand_margin) const {
return expand_margin[p_expand_margin];
}
+void StyleBoxTexture::set_region_rect(const Rect2& p_region_rect) {
+
+ if (region_rect==p_region_rect)
+ return;
+
+ region_rect=p_region_rect;
+ emit_changed();
+}
+
+Rect2 StyleBoxTexture::get_region_rect() const {
+
+ return region_rect;
+}
+
void StyleBoxTexture::_bind_methods() {
@@ -187,10 +201,14 @@ void StyleBoxTexture::_bind_methods() {
ObjectTypeDB::bind_method(_MD("set_expand_margin_size","margin","size"),&StyleBoxTexture::set_expand_margin_size);
ObjectTypeDB::bind_method(_MD("get_expand_margin_size","margin"),&StyleBoxTexture::get_expand_margin_size);
+ ObjectTypeDB::bind_method(_MD("set_region_rect","region"),&StyleBoxTexture::set_region_rect);
+ ObjectTypeDB::bind_method(_MD("get_region_rect"),&StyleBoxTexture::get_region_rect);
+
ObjectTypeDB::bind_method(_MD("set_draw_center","enable"),&StyleBoxTexture::set_draw_center);
ObjectTypeDB::bind_method(_MD("get_draw_center"),&StyleBoxTexture::get_draw_center);
ADD_PROPERTY( PropertyInfo( Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture" ), _SCS("set_texture"),_SCS("get_texture") );
+ ADD_PROPERTYNZ( PropertyInfo( Variant::RECT2, "region_rect"), _SCS("set_region_rect"),_SCS("get_region_rect"));
ADD_PROPERTYI( PropertyInfo( Variant::REAL, "margin/left", PROPERTY_HINT_RANGE,"0,2048,1" ), _SCS("set_margin_size"),_SCS("get_margin_size"), MARGIN_LEFT );
ADD_PROPERTYI( PropertyInfo( Variant::REAL, "margin/right", PROPERTY_HINT_RANGE,"0,2048,1" ), _SCS("set_margin_size"),_SCS("get_margin_size"), MARGIN_RIGHT );
ADD_PROPERTYI( PropertyInfo( Variant::REAL, "margin/top", PROPERTY_HINT_RANGE,"0,2048,1" ), _SCS("set_margin_size"),_SCS("get_margin_size"), MARGIN_TOP);
@@ -505,4 +523,3 @@ StyleBoxImageMask::StyleBoxImageMask() {
}
expand=true;
}
-
diff --git a/scene/resources/style_box.h b/scene/resources/style_box.h
index 02d79bc2ac..98aaee754b 100644
--- a/scene/resources/style_box.h
+++ b/scene/resources/style_box.h
@@ -81,6 +81,7 @@ class StyleBoxTexture : public StyleBox {
float expand_margin[4];
float margin[4];
+ Rect2 region_rect;
Ref<Texture> texture;
bool draw_center;
@@ -98,6 +99,9 @@ public:
void set_margin_size(Margin p_margin,float p_size);
float get_margin_size(Margin p_margin) const;
+ void set_region_rect(const Rect2& p_region_rect);
+ Rect2 get_region_rect() const;
+
void set_texture(RES p_texture);
RES get_texture() const;
diff --git a/scene/resources/theme.cpp b/scene/resources/theme.cpp
index 20405a57b2..8d0aedbf93 100644
--- a/scene/resources/theme.cpp
+++ b/scene/resources/theme.cpp
@@ -374,7 +374,7 @@ void Theme::get_stylebox_types(List<StringName> *p_list) const {
const StringName *key=NULL;
while((key=style_map.next(key))) {
p_list->push_back(*key);
- }
+ }
}
void Theme::set_font(const StringName& p_name,const StringName& p_type,const Ref<Font>& p_font) {
diff --git a/scene/resources/world_2d.cpp b/scene/resources/world_2d.cpp
index 8cacc0fce7..e96cac170b 100644
--- a/scene/resources/world_2d.cpp
+++ b/scene/resources/world_2d.cpp
@@ -373,7 +373,15 @@ World2D::World2D() {
Physics2DServer::get_singleton()->space_set_active(space,true);
Physics2DServer::get_singleton()->area_set_param(space,Physics2DServer::AREA_PARAM_GRAVITY,GLOBAL_DEF("physics_2d/default_gravity",98));
Physics2DServer::get_singleton()->area_set_param(space,Physics2DServer::AREA_PARAM_GRAVITY_VECTOR,GLOBAL_DEF("physics_2d/default_gravity_vector",Vector2(0,1)));
- Physics2DServer::get_singleton()->area_set_param(space,Physics2DServer::AREA_PARAM_LINEAR_DAMP,GLOBAL_DEF("physics_2d/default_density",0.1));
+ // TODO: Remove this deprecation warning and compatibility code for 2.2 or 3.0
+ if (Globals::get_singleton()->get("physics_2d/default_density") && !Globals::get_singleton()->get("physics_2d/default_linear_damp)")) {
+ WARN_PRINT("Deprecated parameter 'physics_2d/default_density'. It was renamed to 'physics_2d/default_linear_damp', adjusting your project settings accordingly (make sure to adjust scripts that potentially rely on 'physics_2d/default_density'.");
+ Globals::get_singleton()->set("physics_2d/default_linear_damp", Globals::get_singleton()->get("physics_2d/default_density"));
+ Globals::get_singleton()->set_persisting("physics_2d/default_linear_damp", true);
+ Globals::get_singleton()->set_persisting("physics_2d/default_density", false);
+ Globals::get_singleton()->save();
+ }
+ Physics2DServer::get_singleton()->area_set_param(space,Physics2DServer::AREA_PARAM_LINEAR_DAMP,GLOBAL_DEF("physics_2d/default_linear_damp",0.1));
Physics2DServer::get_singleton()->area_set_param(space,Physics2DServer::AREA_PARAM_ANGULAR_DAMP,GLOBAL_DEF("physics_2d/default_angular_damp",1));
Physics2DServer::get_singleton()->space_set_param(space,Physics2DServer::SPACE_PARAM_CONTACT_RECYCLE_RADIUS,1.0);
Physics2DServer::get_singleton()->space_set_param(space,Physics2DServer::SPACE_PARAM_CONTACT_MAX_SEPARATION,1.5);
diff --git a/scene/scene_string_names.cpp b/scene/scene_string_names.cpp
index 7e8dd41ed9..164ae55c9f 100644
--- a/scene/scene_string_names.cpp
+++ b/scene/scene_string_names.cpp
@@ -176,4 +176,11 @@ SceneStringNames::SceneStringNames() {
path_pp=NodePath("..");
_default=StaticCString::create("default");
+
+ for(int i=0;i<MAX_MATERIALS;i++) {
+
+ mesh_materials[i]="material/"+itos(i);
+ }
+
+ _mesh_changed=StaticCString::create("_mesh_changed");
}
diff --git a/scene/scene_string_names.h b/scene/scene_string_names.h
index 7143bd539f..32e51ce8f4 100644
--- a/scene/scene_string_names.h
+++ b/scene/scene_string_names.h
@@ -186,6 +186,12 @@ public:
StringName node_configuration_warning_changed;
+ enum {
+ MAX_MATERIALS=32
+ };
+ StringName mesh_materials[MAX_MATERIALS];
+ StringName _mesh_changed;
+
};
diff --git a/servers/physics/joints/hinge_joint_sw.cpp b/servers/physics/joints/hinge_joint_sw.cpp
index feaf00290d..37b73f64c7 100644
--- a/servers/physics/joints/hinge_joint_sw.cpp
+++ b/servers/physics/joints/hinge_joint_sw.cpp
@@ -420,7 +420,6 @@ float HingeJointSW::get_param(PhysicsServer::HingeJointParam p_param) const{
void HingeJointSW::set_flag(PhysicsServer::HingeJointFlag p_flag, bool p_value){
- print_line(p_flag+": "+itos(p_value));
switch (p_flag) {
case PhysicsServer::HINGE_JOINT_FLAG_USE_LIMIT: m_useLimit=p_value; break;
case PhysicsServer::HINGE_JOINT_FLAG_ENABLE_MOTOR: m_enableAngularMotor=p_value; break;
diff --git a/servers/physics/physics_server_sw.cpp b/servers/physics/physics_server_sw.cpp
index 5307f1ce88..6c098a6df2 100644
--- a/servers/physics/physics_server_sw.cpp
+++ b/servers/physics/physics_server_sw.cpp
@@ -34,7 +34,8 @@
#include "joints/slider_joint_sw.h"
#include "joints/cone_twist_joint_sw.h"
#include "joints/generic_6dof_joint_sw.h"
-
+#include "script_language.h"
+#include "os/os.h"
RID PhysicsServerSW::shape_create(ShapeType p_shape) {
@@ -1509,12 +1510,51 @@ void PhysicsServerSW::flush_queries() {
return;
doing_sync=true;
+
+ uint64_t time_beg = OS::get_singleton()->get_ticks_usec();
+
for( Set<const SpaceSW*>::Element *E=active_spaces.front();E;E=E->next()) {
SpaceSW *space=(SpaceSW *)E->get();
space->call_queries();
}
+
+ if (ScriptDebugger::get_singleton() && ScriptDebugger::get_singleton()->is_profiling()) {
+
+ uint64_t total_time[SpaceSW::ELAPSED_TIME_MAX];
+ static const char* time_name[SpaceSW::ELAPSED_TIME_MAX]={
+ "integrate_forces",
+ "generate_islands",
+ "setup_constraints",
+ "solve_constraints",
+ "integrate_velocities"
+ };
+
+ for(int i=0;i<SpaceSW::ELAPSED_TIME_MAX;i++) {
+ total_time[i]=0;
+ }
+
+ for( Set<const SpaceSW*>::Element *E=active_spaces.front();E;E=E->next()) {
+
+ for(int i=0;i<SpaceSW::ELAPSED_TIME_MAX;i++) {
+ total_time[i]+=E->get()->get_elapsed_time(SpaceSW::ElapsedTime(i));
+ }
+
+ }
+
+ Array values;
+ values.resize(SpaceSW::ELAPSED_TIME_MAX*2);
+ for(int i=0;i<SpaceSW::ELAPSED_TIME_MAX;i++) {
+ values[i*2+0]=time_name[i];
+ values[i*2+1]=USEC_TO_SEC(total_time[i]);
+ }
+ values.push_back("flush_queries");
+ values.push_back(USEC_TO_SEC(OS::get_singleton()->get_ticks_usec()-time_beg));
+
+ ScriptDebugger::get_singleton()->add_profiling_frame_data("physics",values);
+
+ }
};
diff --git a/servers/physics/space_sw.cpp b/servers/physics/space_sw.cpp
index 4cf7729b09..1e6f42aa02 100644
--- a/servers/physics/space_sw.cpp
+++ b/servers/physics/space_sw.cpp
@@ -736,6 +736,10 @@ SpaceSW::SpaceSW() {
direct_access = memnew( PhysicsDirectSpaceStateSW );
direct_access->space=this;
+
+ for(int i=0;i<ELAPSED_TIME_MAX;i++)
+ elapsed_time[i]=0;
+
}
SpaceSW::~SpaceSW() {
diff --git a/servers/physics/space_sw.h b/servers/physics/space_sw.h
index 6300c206d8..3fdef7e62b 100644
--- a/servers/physics/space_sw.h
+++ b/servers/physics/space_sw.h
@@ -59,6 +59,20 @@ public:
class SpaceSW {
+public:
+
+ enum ElapsedTime {
+ ELAPSED_TIME_INTEGRATE_FORCES,
+ ELAPSED_TIME_GENERATE_ISLANDS,
+ ELAPSED_TIME_SETUP_CONSTRAINTS,
+ ELAPSED_TIME_SOLVE_CONSTRAINTS,
+ ELAPSED_TIME_INTEGRATE_VELOCITIES,
+ ELAPSED_TIME_MAX
+
+ };
+private:
+
+ uint64_t elapsed_time[ELAPSED_TIME_MAX];
PhysicsDirectSpaceStateSW *direct_access;
RID self;
@@ -178,6 +192,8 @@ public:
void set_static_global_body(RID p_body) { static_global_body=p_body; }
RID get_static_global_body() { return static_global_body; }
+ void set_elapsed_time(ElapsedTime p_time,uint64_t p_msec) { elapsed_time[p_time]=p_msec; }
+ uint64_t get_elapsed_time(ElapsedTime p_time) const { return elapsed_time[p_time]; }
SpaceSW();
~SpaceSW();
diff --git a/servers/physics/step_sw.cpp b/servers/physics/step_sw.cpp
index f10dadf81a..5b7ebce817 100644
--- a/servers/physics/step_sw.cpp
+++ b/servers/physics/step_sw.cpp
@@ -29,6 +29,8 @@
#include "step_sw.h"
#include "joints_sw.h"
+#include "os/os.h"
+
void StepSW::_populate_island(BodySW* p_body,BodySW** p_island,ConstraintSW **p_constraint_island) {
p_body->set_island_step(_step);
@@ -152,6 +154,10 @@ void StepSW::step(SpaceSW* p_space,float p_delta,int p_iterations) {
const SelfList<BodySW>::List * body_list = &p_space->get_active_body_list();
/* INTEGRATE FORCES */
+
+ uint64_t profile_begtime = OS::get_singleton()->get_ticks_usec();
+ uint64_t profile_endtime=0;
+
int active_count=0;
const SelfList<BodySW>*b = body_list->first();
@@ -165,6 +171,12 @@ void StepSW::step(SpaceSW* p_space,float p_delta,int p_iterations) {
p_space->set_active_objects(active_count);
+ { //profile
+ profile_endtime=OS::get_singleton()->get_ticks_usec();
+ p_space->set_elapsed_time(SpaceSW::ELAPSED_TIME_INTEGRATE_FORCES,profile_endtime-profile_begtime);
+ profile_begtime=profile_endtime;
+ }
+
/* GENERATE CONSTRAINT ISLANDS */
BodySW *island_list=NULL;
@@ -214,6 +226,13 @@ void StepSW::step(SpaceSW* p_space,float p_delta,int p_iterations) {
p_space->area_remove_from_moved_list((SelfList<AreaSW>*)aml.first()); //faster to remove here
}
+ { //profile
+ profile_endtime=OS::get_singleton()->get_ticks_usec();
+ p_space->set_elapsed_time(SpaceSW::ELAPSED_TIME_GENERATE_ISLANDS,profile_endtime-profile_begtime);
+ profile_begtime=profile_endtime;
+ }
+
+
// print_line("island count: "+itos(island_count)+" active count: "+itos(active_count));
/* SETUP CONSTRAINT ISLANDS */
@@ -226,6 +245,12 @@ void StepSW::step(SpaceSW* p_space,float p_delta,int p_iterations) {
}
}
+ { //profile
+ profile_endtime=OS::get_singleton()->get_ticks_usec();
+ p_space->set_elapsed_time(SpaceSW::ELAPSED_TIME_SETUP_CONSTRAINTS,profile_endtime-profile_begtime);
+ profile_begtime=profile_endtime;
+ }
+
/* SOLVE CONSTRAINT ISLANDS */
{
@@ -237,6 +262,13 @@ void StepSW::step(SpaceSW* p_space,float p_delta,int p_iterations) {
}
}
+
+ { //profile
+ profile_endtime=OS::get_singleton()->get_ticks_usec();
+ p_space->set_elapsed_time(SpaceSW::ELAPSED_TIME_SOLVE_CONSTRAINTS,profile_endtime-profile_begtime);
+ profile_begtime=profile_endtime;
+ }
+
/* INTEGRATE VELOCITIES */
b = body_list->first();
@@ -257,6 +289,12 @@ void StepSW::step(SpaceSW* p_space,float p_delta,int p_iterations) {
}
}
+ { //profile
+ profile_endtime=OS::get_singleton()->get_ticks_usec();
+ p_space->set_elapsed_time(SpaceSW::ELAPSED_TIME_INTEGRATE_VELOCITIES,profile_endtime-profile_begtime);
+ profile_begtime=profile_endtime;
+ }
+
p_space->update();
p_space->unlock();
_step++;
diff --git a/servers/physics_2d/physics_2d_server_sw.cpp b/servers/physics_2d/physics_2d_server_sw.cpp
index 3796ddd961..54cd929c2f 100644
--- a/servers/physics_2d/physics_2d_server_sw.cpp
+++ b/servers/physics_2d/physics_2d_server_sw.cpp
@@ -31,6 +31,9 @@
#include "broad_phase_2d_hash_grid.h"
#include "collision_solver_2d_sw.h"
#include "globals.h"
+#include "script_language.h"
+#include "os/os.h"
+
RID Physics2DServerSW::shape_create(ShapeType p_shape) {
Shape2DSW *shape=NULL;
@@ -1276,6 +1279,8 @@ void Physics2DServerSW::step(float p_step) {
active_objects+=E->get()->get_active_objects();
collision_pairs+=E->get()->get_collision_pairs();
}
+
+
};
void Physics2DServerSW::sync() {
@@ -1288,6 +1293,7 @@ void Physics2DServerSW::flush_queries() {
if (!active)
return;
+ uint64_t time_beg = OS::get_singleton()->get_ticks_usec();
for( Set<const Space2DSW*>::Element *E=active_spaces.front();E;E=E->next()) {
@@ -1295,7 +1301,44 @@ void Physics2DServerSW::flush_queries() {
space->call_queries();
}
-};
+
+ if (ScriptDebugger::get_singleton() && ScriptDebugger::get_singleton()->is_profiling()) {
+
+ uint64_t total_time[Space2DSW::ELAPSED_TIME_MAX];
+ static const char* time_name[Space2DSW::ELAPSED_TIME_MAX]={
+ "integrate_forces",
+ "generate_islands",
+ "setup_constraints",
+ "solve_constraints",
+ "integrate_velocities"
+ };
+
+ for(int i=0;i<Space2DSW::ELAPSED_TIME_MAX;i++) {
+ total_time[i]=0;
+ }
+
+ for( Set<const Space2DSW*>::Element *E=active_spaces.front();E;E=E->next()) {
+
+ for(int i=0;i<Space2DSW::ELAPSED_TIME_MAX;i++) {
+ total_time[i]+=E->get()->get_elapsed_time(Space2DSW::ElapsedTime(i));
+ }
+
+ }
+
+ Array values;
+ values.resize(Space2DSW::ELAPSED_TIME_MAX*2);
+ for(int i=0;i<Space2DSW::ELAPSED_TIME_MAX;i++) {
+ values[i*2+0]=time_name[i];
+ values[i*2+1]=USEC_TO_SEC(total_time[i]);
+ }
+ values.push_back("flush_queries");
+ values.push_back(USEC_TO_SEC(OS::get_singleton()->get_ticks_usec()-time_beg));
+
+ ScriptDebugger::get_singleton()->add_profiling_frame_data("physics_2d",values);
+
+ }
+
+}
void Physics2DServerSW::end_sync() {
doing_sync=false;
diff --git a/servers/physics_2d/physics_2d_server_sw.h b/servers/physics_2d/physics_2d_server_sw.h
index 6415786803..d557688b91 100644
--- a/servers/physics_2d/physics_2d_server_sw.h
+++ b/servers/physics_2d/physics_2d_server_sw.h
@@ -55,6 +55,7 @@ friend class Physics2DDirectBodyStateSW;
bool using_threads;
+
Step2DSW *stepper;
Set<const Space2DSW*> active_spaces;
diff --git a/servers/physics_2d/space_2d_sw.cpp b/servers/physics_2d/space_2d_sw.cpp
index d83efeea9c..ddef5fc86b 100644
--- a/servers/physics_2d/space_2d_sw.cpp
+++ b/servers/physics_2d/space_2d_sw.cpp
@@ -1325,7 +1325,8 @@ Space2DSW::Space2DSW() {
direct_access->space=this;
-
+ for(int i=0;i<ELAPSED_TIME_MAX;i++)
+ elapsed_time[i]=0;
}
diff --git a/servers/physics_2d/space_2d_sw.h b/servers/physics_2d/space_2d_sw.h
index 5f35f224b2..f8e1f32838 100644
--- a/servers/physics_2d/space_2d_sw.h
+++ b/servers/physics_2d/space_2d_sw.h
@@ -60,6 +60,20 @@ public:
class Space2DSW {
+public:
+
+ enum ElapsedTime {
+ ELAPSED_TIME_INTEGRATE_FORCES,
+ ELAPSED_TIME_GENERATE_ISLANDS,
+ ELAPSED_TIME_SETUP_CONSTRAINTS,
+ ELAPSED_TIME_SOLVE_CONSTRAINTS,
+ ELAPSED_TIME_INTEGRATE_VELOCITIES,
+ ELAPSED_TIME_MAX
+
+ };
+private:
+
+ uint64_t elapsed_time[ELAPSED_TIME_MAX];
Physics2DDirectSpaceStateSW *direct_access;
RID self;
@@ -182,6 +196,9 @@ public:
Physics2DDirectSpaceStateSW *get_direct_state();
+ void set_elapsed_time(ElapsedTime p_time,uint64_t p_msec) { elapsed_time[p_time]=p_msec; }
+ uint64_t get_elapsed_time(ElapsedTime p_time) const { return elapsed_time[p_time]; }
+
Space2DSW();
~Space2DSW();
};
diff --git a/servers/physics_2d/step_2d_sw.cpp b/servers/physics_2d/step_2d_sw.cpp
index 4f9d06ee96..4f86168c1e 100644
--- a/servers/physics_2d/step_2d_sw.cpp
+++ b/servers/physics_2d/step_2d_sw.cpp
@@ -27,7 +27,7 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include "step_2d_sw.h"
-
+#include "os/os.h"
void Step2DSW::_populate_island(Body2DSW* p_body,Body2DSW** p_island,Constraint2DSW **p_constraint_island) {
@@ -142,6 +142,11 @@ void Step2DSW::step(Space2DSW* p_space,float p_delta,int p_iterations) {
const SelfList<Body2DSW>::List * body_list = &p_space->get_active_body_list();
/* INTEGRATE FORCES */
+
+ uint64_t profile_begtime = OS::get_singleton()->get_ticks_usec();
+ uint64_t profile_endtime=0;
+
+
int active_count=0;
const SelfList<Body2DSW>*b = body_list->first();
@@ -154,6 +159,13 @@ void Step2DSW::step(Space2DSW* p_space,float p_delta,int p_iterations) {
p_space->set_active_objects(active_count);
+
+ { //profile
+ profile_endtime=OS::get_singleton()->get_ticks_usec();
+ p_space->set_elapsed_time(Space2DSW::ELAPSED_TIME_INTEGRATE_FORCES,profile_endtime-profile_begtime);
+ profile_begtime=profile_endtime;
+ }
+
/* GENERATE CONSTRAINT ISLANDS */
Body2DSW *island_list=NULL;
@@ -190,7 +202,6 @@ void Step2DSW::step(Space2DSW* p_space,float p_delta,int p_iterations) {
const SelfList<Area2DSW>::List &aml = p_space->get_moved_area_list();
-
while(aml.first()) {
for(const Set<Constraint2DSW*>::Element *E=aml.first()->self()->get_constraints().front();E;E=E->next()) {
@@ -206,6 +217,13 @@ void Step2DSW::step(Space2DSW* p_space,float p_delta,int p_iterations) {
}
// print_line("island count: "+itos(island_count)+" active count: "+itos(active_count));
+
+ { //profile
+ profile_endtime=OS::get_singleton()->get_ticks_usec();
+ p_space->set_elapsed_time(Space2DSW::ELAPSED_TIME_GENERATE_ISLANDS,profile_endtime-profile_begtime);
+ profile_begtime=profile_endtime;
+ }
+
/* SETUP CONSTRAINT ISLANDS */
{
@@ -248,6 +266,12 @@ void Step2DSW::step(Space2DSW* p_space,float p_delta,int p_iterations) {
}
}
+ { //profile
+ profile_endtime=OS::get_singleton()->get_ticks_usec();
+ p_space->set_elapsed_time(Space2DSW::ELAPSED_TIME_SETUP_CONSTRAINTS,profile_endtime-profile_begtime);
+ profile_begtime=profile_endtime;
+ }
+
/* SOLVE CONSTRAINT ISLANDS */
{
@@ -259,6 +283,12 @@ void Step2DSW::step(Space2DSW* p_space,float p_delta,int p_iterations) {
}
}
+ { //profile
+ profile_endtime=OS::get_singleton()->get_ticks_usec();
+ p_space->set_elapsed_time(Space2DSW::ELAPSED_TIME_SOLVE_CONSTRAINTS,profile_endtime-profile_begtime);
+ profile_begtime=profile_endtime;
+ }
+
/* INTEGRATE VELOCITIES */
b = body_list->first();
@@ -280,6 +310,12 @@ void Step2DSW::step(Space2DSW* p_space,float p_delta,int p_iterations) {
}
}
+ { //profile
+ profile_endtime=OS::get_singleton()->get_ticks_usec();
+ p_space->set_elapsed_time(Space2DSW::ELAPSED_TIME_INTEGRATE_VELOCITIES,profile_endtime-profile_begtime);
+ //profile_begtime=profile_endtime;
+ }
+
p_space->update();
p_space->unlock();
_step++;
diff --git a/servers/physics_2d_server.h b/servers/physics_2d_server.h
index dd04f0f6b8..53c5a9ecc0 100644
--- a/servers/physics_2d_server.h
+++ b/servers/physics_2d_server.h
@@ -562,7 +562,9 @@ public:
INFO_ACTIVE_OBJECTS,
INFO_COLLISION_PAIRS,
- INFO_ISLAND_COUNT
+ INFO_ISLAND_COUNT,
+ INFO_STEP_TIME,
+ INFO_BROAD_PHASE_TIME
};
virtual int get_process_info(ProcessInfo p_info)=0;
diff --git a/servers/server_wrap_mt_common.h b/servers/server_wrap_mt_common.h
index cbb75129d0..149e9ec4f9 100644
--- a/servers/server_wrap_mt_common.h
+++ b/servers/server_wrap_mt_common.h
@@ -698,3 +698,64 @@
}\
}
+#define FUNC8R(m_r,m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6, m_arg7, m_arg8)\
+ virtual m_r m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5, m_arg6 p6, m_arg7 p7, m_arg8 p8) { \
+ if (Thread::get_caller_ID()!=server_thread) {\
+ m_r ret;\
+ command_queue.push_and_ret( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6, p7, p8, &ret);\
+ SYNC_DEBUG\
+ return ret;\
+ } else {\
+ return server_name->m_type(p1, p2, p3, p4, p5, p6, p7, p8);\
+ }\
+ }
+
+#define FUNC8RC(m_r,m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6, m_arg7, m_arg8)\
+ virtual m_r m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5, m_arg6 p6, m_arg7 p7, m_arg8 p8) const { \
+ if (Thread::get_caller_ID()!=server_thread) {\
+ m_r ret;\
+ command_queue.push_and_ret( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6, p7, p8, &ret);\
+ SYNC_DEBUG\
+ return ret;\
+ } else {\
+ return server_name->m_type(p1, p2, p3, p4, p5, p6, p7, p8);\
+ }\
+ }
+
+
+#define FUNC8S(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6, m_arg7, m_arg8)\
+ virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5, m_arg6 p6, m_arg7 p7, m_arg8 p8) { \
+ if (Thread::get_caller_ID()!=server_thread) {\
+ command_queue.push_and_sync( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6, p7, p8);\
+ } else {\
+ server_name->m_type(p1, p2, p3, p4, p5, p6, p7, p8);\
+ }\
+ }
+
+#define FUNC8SC(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6, m_arg7, m_arg8)\
+ virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5, m_arg6 p6, m_arg7 p7, m_arg8 p8) const { \
+ if (Thread::get_caller_ID()!=server_thread) {\
+ command_queue.push_and_sync( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6, p7, p8);\
+ } else {\
+ server_name->m_type(p1, p2, p3, p4, p5, p6, p7, p8);\
+ }\
+ }
+
+
+#define FUNC8(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6, m_arg7, m_arg8)\
+ virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5, m_arg6 p6, m_arg7 p7, m_arg8 p8) { \
+ if (Thread::get_caller_ID()!=server_thread) {\
+ command_queue.push( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6, p7, p8);\
+ } else {\
+ server_name->m_type(p1, p2, p3, p4, p5, p6, p7, p8);\
+ }\
+ }
+
+#define FUNC8C(m_type,m_arg1, m_arg2, m_arg3, m_arg4, m_arg5, m_arg6, m_arg7, m_arg8)\
+ virtual void m_type(m_arg1 p1, m_arg2 p2, m_arg3 p3, m_arg4 p4, m_arg5 p5, m_arg6 p6, m_arg7 p7, m_arg8 p8) const { \
+ if (Thread::get_caller_ID()!=server_thread) {\
+ command_queue.push( server_name, &ServerName::m_type,p1, p2, p3, p4, p5, p6, p7, p8);\
+ } else {\
+ server_name->m_type(p1, p2, p3, p4, p5, p6, p7, p8);\
+ }\
+ }
diff --git a/servers/visual/rasterizer.h b/servers/visual/rasterizer.h
index e3d1b14835..50ec6792cc 100644
--- a/servers/visual/rasterizer.h
+++ b/servers/visual/rasterizer.h
@@ -542,6 +542,7 @@ public:
RID skeleton;
RID material_override;
RID sampled_light;
+ Vector<RID> materials;
Vector<RID> light_instances;
Vector<float> morph_values;
BakedLightData *baked_light;
@@ -701,6 +702,7 @@ public:
struct CommandStyle : public Command {
Rect2 rect;
+ Rect2 source;
RID texture;
float margin[4];
bool draw_center;
@@ -943,12 +945,12 @@ public:
virtual void canvas_disable_blending()=0;
virtual void canvas_set_opacity(float p_opacity)=0;
virtual void canvas_set_blend_mode(VS::MaterialBlendMode p_mode)=0;
- virtual void canvas_begin_rect(const Matrix32& p_transform)=0;;
+ virtual void canvas_begin_rect(const Matrix32& p_transform)=0;
virtual void canvas_set_clip(bool p_clip, const Rect2& p_rect)=0;
virtual void canvas_end_rect()=0;
virtual void canvas_draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width)=0;
virtual void canvas_draw_rect(const Rect2& p_rect, int p_flags, const Rect2& p_source,RID p_texture,const Color& p_modulate)=0;
- virtual void canvas_draw_style_box(const Rect2& p_rect, RID p_texture,const float *p_margins, bool p_draw_center=true,const Color& p_modulate=Color(1,1,1))=0;
+ virtual void canvas_draw_style_box(const Rect2& p_rect, const Rect2& p_src_region, RID p_texture,const float *p_margins, bool p_draw_center=true,const Color& p_modulate=Color(1,1,1))=0;
virtual void canvas_draw_primitive(const Vector<Point2>& p_points, const Vector<Color>& p_colors,const Vector<Point2>& p_uvs, RID p_texture,float p_width)=0;
virtual void canvas_draw_polygon(int p_vertex_count, const int* p_indices, const Vector2* p_vertices, const Vector2* p_uvs, const Color* p_colors,const RID& p_texture,bool p_singlecolor)=0;
virtual void canvas_set_transform(const Matrix32& p_transform)=0;
diff --git a/servers/visual/rasterizer_dummy.cpp b/servers/visual/rasterizer_dummy.cpp
index 3b12b503dd..0e71d224d5 100644
--- a/servers/visual/rasterizer_dummy.cpp
+++ b/servers/visual/rasterizer_dummy.cpp
@@ -1627,7 +1627,7 @@ void RasterizerDummy::canvas_draw_rect(const Rect2& p_rect, int p_flags, const R
}
-void RasterizerDummy::canvas_draw_style_box(const Rect2& p_rect, RID p_texture,const float *p_margin, bool p_draw_center,const Color& p_modulate) {
+void RasterizerDummy::canvas_draw_style_box(const Rect2& p_rect, const Rect2& p_src_region, RID p_texture,const float *p_margin, bool p_draw_center,const Color& p_modulate) {
}
@@ -1959,4 +1959,3 @@ RasterizerDummy::RasterizerDummy() {
RasterizerDummy::~RasterizerDummy() {
};
-
diff --git a/servers/visual/rasterizer_dummy.h b/servers/visual/rasterizer_dummy.h
index 674c165966..ac320e55f9 100644
--- a/servers/visual/rasterizer_dummy.h
+++ b/servers/visual/rasterizer_dummy.h
@@ -708,7 +708,7 @@ public:
virtual void canvas_end_rect();
virtual void canvas_draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width);
virtual void canvas_draw_rect(const Rect2& p_rect, int p_flags, const Rect2& p_source,RID p_texture,const Color& p_modulate);
- virtual void canvas_draw_style_box(const Rect2& p_rect, RID p_texture,const float *p_margins, bool p_draw_center=true,const Color& p_modulate=Color(1,1,1));
+ virtual void canvas_draw_style_box(const Rect2& p_rect, const Rect2& p_src_region, RID p_texture,const float *p_margins, bool p_draw_center=true,const Color& p_modulate=Color(1,1,1));
virtual void canvas_draw_primitive(const Vector<Point2>& p_points, const Vector<Color>& p_colors,const Vector<Point2>& p_uvs, RID p_texture,float p_width);
virtual void canvas_draw_polygon(int p_vertex_count, const int* p_indices, const Vector2* p_vertices, const Vector2* p_uvs, const Color* p_colors,const RID& p_texture,bool p_singlecolor);
virtual void canvas_set_transform(const Matrix32& p_transform);
diff --git a/servers/visual/visual_server_raster.cpp b/servers/visual/visual_server_raster.cpp
index ad85ecc7c0..532247d94c 100644
--- a/servers/visual/visual_server_raster.cpp
+++ b/servers/visual/visual_server_raster.cpp
@@ -398,7 +398,7 @@ void VisualServerRaster::mesh_add_custom_surface(RID p_mesh,const Variant& p_dat
void VisualServerRaster::mesh_add_surface(RID p_mesh,PrimitiveType p_primitive,const Array& p_arrays,const Array& p_blend_shapes,bool p_alpha_sort) {
VS_CHANGED;
- _dependency_queue_update(p_mesh,true);
+ _dependency_queue_update(p_mesh,true,true);
rasterizer->mesh_add_surface(p_mesh,p_primitive,p_arrays,p_blend_shapes,p_alpha_sort);
}
@@ -452,6 +452,7 @@ VisualServer::PrimitiveType VisualServerRaster::mesh_surface_get_primitive_type(
void VisualServerRaster::mesh_remove_surface(RID p_mesh,int p_surface){
rasterizer->mesh_remove_surface(p_mesh,p_surface);
+ _dependency_queue_update(p_mesh,true,true);
}
int VisualServerRaster::mesh_get_surface_count(RID p_mesh) const{
@@ -480,6 +481,8 @@ void VisualServerRaster::mesh_clear(RID p_mesh) {
while(rasterizer->mesh_get_surface_count(p_mesh)) {
rasterizer->mesh_remove_surface(p_mesh,0);
}
+
+ _dependency_queue_update(p_mesh,true,true);
}
@@ -2038,7 +2041,7 @@ Variant VisualServerRaster::environment_fx_get_param(RID p_env,EnvironmentFxPara
/* SCENARIO API */
-void VisualServerRaster::_dependency_queue_update(RID p_rid,bool p_update_aabb) {
+void VisualServerRaster::_dependency_queue_update(RID p_rid,bool p_update_aabb,bool p_update_materials) {
Map< RID, Set<RID> >::Element * E = instance_dependency_map.find( p_rid );
@@ -2051,17 +2054,19 @@ void VisualServerRaster::_dependency_queue_update(RID p_rid,bool p_update_aabb)
while(I) {
Instance *ins = instance_owner.get( I->get() );
- _instance_queue_update( ins , p_update_aabb );
+ _instance_queue_update( ins , p_update_aabb, p_update_materials );
I = I->next();
}
}
-void VisualServerRaster::_instance_queue_update(Instance *p_instance,bool p_update_aabb) {
+void VisualServerRaster::_instance_queue_update(Instance *p_instance,bool p_update_aabb,bool p_update_materials) {
if (p_update_aabb)
p_instance->update_aabb=true;
+ if (p_update_materials)
+ p_instance->update_materials=true;
if (p_instance->update)
return;
@@ -2273,6 +2278,7 @@ void VisualServerRaster::instance_set_base(RID p_instance, RID p_base) {
}
instance->data.morph_values.clear();
+ instance->data.materials.clear();
}
@@ -2286,6 +2292,7 @@ void VisualServerRaster::instance_set_base(RID p_instance, RID p_base) {
if (rasterizer->is_mesh(p_base)) {
instance->base_type=INSTANCE_MESH;
instance->data.morph_values.resize( rasterizer->mesh_get_morph_target_count(p_base));
+ instance->data.materials.resize( rasterizer->mesh_get_surface_count(p_base));
} else if (rasterizer->is_multimesh(p_base)) {
instance->base_type=INSTANCE_MULTIMESH;
} else if (rasterizer->is_immediate(p_base)) {
@@ -2510,6 +2517,16 @@ float VisualServerRaster::instance_get_morph_target_weight(RID p_instance,int p_
return instance->data.morph_values[p_shape];
}
+void VisualServerRaster::instance_set_surface_material(RID p_instance,int p_surface, RID p_material) {
+
+ VS_CHANGED;
+ Instance *instance = instance_owner.get( p_instance );
+ ERR_FAIL_COND( !instance);
+ ERR_FAIL_INDEX( p_surface, instance->data.materials.size() );
+ instance->data.materials[p_surface]=p_material;
+}
+
+
void VisualServerRaster::instance_set_transform(RID p_instance, const Transform& p_transform) {
VS_CHANGED;
Instance *instance = instance_owner.get( p_instance );
@@ -3046,6 +3063,7 @@ void VisualServerRaster::_update_instance(Instance *p_instance) {
}
+
if (p_instance->aabb.has_no_surface())
return;
@@ -3301,10 +3319,17 @@ void VisualServerRaster::_update_instances() {
if (instance->update_aabb)
_update_instance_aabb(instance);
+ if (instance->update_materials) {
+ if (instance->base_type==INSTANCE_MESH) {
+ instance->data.materials.resize(rasterizer->mesh_get_surface_count(instance->base_rid));
+ }
+ }
+
_update_instance(instance);
instance->update=false;
instance->update_aabb=false;
+ instance->update_materials=false;
instance->update_next=0;
}
}
@@ -3661,8 +3686,11 @@ void VisualServerRaster::canvas_item_add_texture_rect(RID p_item, const Rect2& p
rect->modulate=p_modulate;
rect->rect=p_rect;
rect->flags=0;
- if (p_tile)
+ if (p_tile) {
rect->flags|=Rasterizer::CANVAS_RECT_TILE;
+ rect->flags|=Rasterizer::CANVAS_RECT_REGION;
+ rect->source=Rect2(0,0,p_rect.size.width,p_rect.size.height);
+ }
if (p_rect.size.x<0) {
@@ -3717,7 +3745,7 @@ void VisualServerRaster::canvas_item_add_texture_rect_region(RID p_item, const R
}
-void VisualServerRaster::canvas_item_add_style_box(RID p_item, const Rect2& p_rect, RID p_texture,const Vector2& p_topleft, const Vector2& p_bottomright, bool p_draw_center,const Color& p_modulate) {
+void VisualServerRaster::canvas_item_add_style_box(RID p_item, const Rect2& p_rect, const Rect2& p_source, RID p_texture, const Vector2& p_topleft, const Vector2& p_bottomright, bool p_draw_center,const Color& p_modulate) {
VS_CHANGED;
CanvasItem *canvas_item = canvas_item_owner.get( p_item );
@@ -3727,6 +3755,7 @@ void VisualServerRaster::canvas_item_add_style_box(RID p_item, const Rect2& p_re
ERR_FAIL_COND(!style);
style->texture=p_texture;
style->rect=p_rect;
+ style->source=p_source;
style->draw_center=p_draw_center;
style->color=p_modulate;
style->margin[MARGIN_LEFT]=p_topleft.x;
diff --git a/servers/visual/visual_server_raster.h b/servers/visual/visual_server_raster.h
index cb9e96e284..dcaac6e8d2 100644
--- a/servers/visual/visual_server_raster.h
+++ b/servers/visual/visual_server_raster.h
@@ -160,6 +160,7 @@ class VisualServerRaster : public VisualServer {
Scenario *scenario;
bool update;
bool update_aabb;
+ bool update_materials;
Instance *update_next;
InstanceType base_type;
@@ -317,6 +318,8 @@ class VisualServerRaster : public VisualServer {
draw_range_end=0;
extra_margin=0;
visible_in_all_rooms=false;
+ update_aabb=false;
+ update_materials=false;
baked_light=NULL;
baked_light_info=NULL;
@@ -583,8 +586,8 @@ class VisualServerRaster : public VisualServer {
void _portal_disconnect(Instance *p_portal,bool p_cleanup=false);
void _portal_attempt_connect(Instance *p_portal);
- void _dependency_queue_update(RID p_rid,bool p_update_aabb=false);
- _FORCE_INLINE_ void _instance_queue_update(Instance *p_instance,bool p_update_aabb=false);
+ void _dependency_queue_update(RID p_rid, bool p_update_aabb=false, bool p_update_materials=false);
+ _FORCE_INLINE_ void _instance_queue_update(Instance *p_instance,bool p_update_aabb=false,bool p_update_materials=false);
void _update_instances();
void _update_instance_aabb(Instance *p_instance);
void _update_instance(Instance *p_instance);
@@ -657,7 +660,7 @@ public:
virtual RID texture_create();
virtual void texture_allocate(RID p_texture,int p_width, int p_height,Image::Format p_format,uint32_t p_flags=TEXTURE_FLAGS_DEFAULT);
- virtual void texture_set_data(RID p_texture,const Image& p_image,CubeMapSide p_cube_side=CUBEMAP_LEFT);
+ virtual void texture_set_data(RID p_texture,const Image& p_image,CubeMapSide p_cube_side=CUBEMAP_LEFT);
virtual Image texture_get_data(RID p_texture,CubeMapSide p_cube_side=CUBEMAP_LEFT) const;
virtual void texture_set_flags(RID p_texture,uint32_t p_flags) ;
virtual uint32_t texture_get_flags(RID p_texture) const;
@@ -1083,6 +1086,9 @@ public:
virtual void instance_set_morph_target_weight(RID p_instance,int p_shape, float p_weight);
virtual float instance_get_morph_target_weight(RID p_instance,int p_shape) const;
+ virtual void instance_set_surface_material(RID p_instance,int p_surface, RID p_material);
+
+
virtual void instance_set_transform(RID p_instance, const Transform& p_transform);
virtual Transform instance_get_transform(RID p_instance) const;
@@ -1165,7 +1171,7 @@ public:
virtual void canvas_item_add_circle(RID p_item, const Point2& p_pos, float p_radius,const Color& p_color);
virtual void canvas_item_add_texture_rect(RID p_item, const Rect2& p_rect, RID p_texture,bool p_tile=false,const Color& p_modulate=Color(1,1,1),bool p_transpose=false);
virtual void canvas_item_add_texture_rect_region(RID p_item, const Rect2& p_rect, RID p_texture,const Rect2& p_src_rect,const Color& p_modulate=Color(1,1,1),bool p_transpose=false);
- virtual void canvas_item_add_style_box(RID p_item, const Rect2& p_rect, RID p_texture,const Vector2& p_topleft, const Vector2& p_bottomright, bool p_draw_center=true,const Color& p_modulate=Color(1,1,1));
+ virtual void canvas_item_add_style_box(RID p_item, const Rect2& p_rect, const Rect2& p_source, RID p_texture,const Vector2& p_topleft, const Vector2& p_bottomright, bool p_draw_center=true,const Color& p_modulate=Color(1,1,1));
virtual void canvas_item_add_primitive(RID p_item, const Vector<Point2>& p_points, const Vector<Color>& p_colors,const Vector<Point2>& p_uvs, RID p_texture,float p_width=1.0);
virtual void canvas_item_add_polygon(RID p_item, const Vector<Point2>& p_points, const Vector<Color>& p_colors,const Vector<Point2>& p_uvs=Vector<Point2>(), RID p_texture=RID());
virtual void canvas_item_add_triangle_array(RID p_item, const Vector<int>& p_indices, const Vector<Point2>& p_points, const Vector<Color>& p_colors,const Vector<Point2>& p_uvs=Vector<Point2>(), RID p_texture=RID(), int p_count=-1);
diff --git a/servers/visual/visual_server_wrap_mt.h b/servers/visual/visual_server_wrap_mt.h
index 6a42fcc8a6..a97b232c03 100644
--- a/servers/visual/visual_server_wrap_mt.h
+++ b/servers/visual/visual_server_wrap_mt.h
@@ -525,6 +525,8 @@ public:
FUNC3(instance_set_morph_target_weight,RID,int, float);
FUNC2RC(float,instance_get_morph_target_weight,RID,int);
+ FUNC3(instance_set_surface_material,RID,int, RID);
+
FUNC2(instance_set_transform,RID, const Transform&);
FUNC1RC(Transform,instance_get_transform,RID);
@@ -605,7 +607,7 @@ public:
FUNC4(canvas_item_add_circle,RID, const Point2& , float ,const Color& );
FUNC6(canvas_item_add_texture_rect,RID, const Rect2& , RID ,bool ,const Color&,bool );
FUNC6(canvas_item_add_texture_rect_region,RID, const Rect2& , RID ,const Rect2& ,const Color&,bool );
- FUNC7(canvas_item_add_style_box,RID, const Rect2& , RID ,const Vector2& ,const Vector2&, bool ,const Color& );
+ FUNC8(canvas_item_add_style_box,RID, const Rect2& , const Rect2&, RID ,const Vector2& ,const Vector2&, bool ,const Color& );
FUNC6(canvas_item_add_primitive,RID, const Vector<Point2>& , const Vector<Color>& ,const Vector<Point2>& , RID ,float );
FUNC5(canvas_item_add_polygon,RID, const Vector<Point2>& , const Vector<Color>& ,const Vector<Point2>& , RID );
FUNC7(canvas_item_add_triangle_array,RID, const Vector<int>& , const Vector<Point2>& , const Vector<Color>& ,const Vector<Point2>& , RID , int );
diff --git a/servers/visual_server.cpp b/servers/visual_server.cpp
index 5ac0e5b5d5..570a5a6ee4 100644
--- a/servers/visual_server.cpp
+++ b/servers/visual_server.cpp
@@ -705,10 +705,10 @@ void VisualServer::_bind_methods() {
}
-void VisualServer::_canvas_item_add_style_box(RID p_item, const Rect2& p_rect, RID p_texture,const Vector<float>& p_margins, const Color& p_modulate) {
+void VisualServer::_canvas_item_add_style_box(RID p_item, const Rect2& p_rect, const Rect2& p_source, RID p_texture,const Vector<float>& p_margins, const Color& p_modulate) {
ERR_FAIL_COND(p_margins.size()!=4);
- canvas_item_add_style_box(p_item, p_rect, p_texture,Vector2(p_margins[0],p_margins[1]),Vector2(p_margins[2],p_margins[3]),true,p_modulate);
+ canvas_item_add_style_box(p_item,p_rect,p_source,p_texture,Vector2(p_margins[0],p_margins[1]),Vector2(p_margins[2],p_margins[3]),true,p_modulate);
}
void VisualServer::_camera_set_orthogonal(RID p_camera,float p_size,float p_z_near,float p_z_far) {
@@ -822,5 +822,3 @@ VisualServer::~VisualServer() {
singleton=NULL;
}
-
-
diff --git a/servers/visual_server.h b/servers/visual_server.h
index 750c090bbe..f330a6faee 100644
--- a/servers/visual_server.h
+++ b/servers/visual_server.h
@@ -52,7 +52,7 @@ class VisualServer : public Object {
void _camera_set_orthogonal(RID p_camera,float p_size,float p_z_near,float p_z_far);
void _viewport_set_rect(RID p_viewport,const Rect2& p_rect);
Rect2 _viewport_get_rect(RID p_viewport) const;
- void _canvas_item_add_style_box(RID p_item, const Rect2& p_rect, RID p_texture,const Vector<float>& p_margins, const Color& p_modulate=Color(1,1,1));
+ void _canvas_item_add_style_box(RID p_item, const Rect2& p_rect, const Rect2& p_source, RID p_texture,const Vector<float>& p_margins, const Color& p_modulate=Color(1,1,1));
protected:
RID _make_test_cube();
void _free_internal_rids();
@@ -919,6 +919,8 @@ public:
virtual void instance_set_morph_target_weight(RID p_instance,int p_shape, float p_weight)=0;
virtual float instance_get_morph_target_weight(RID p_instance,int p_shape) const=0;
+ virtual void instance_set_surface_material(RID p_instance,int p_surface, RID p_material)=0;
+
virtual void instance_attach_skeleton(RID p_instance,RID p_skeleton)=0;
virtual RID instance_get_skeleton(RID p_instance) const=0;
@@ -1023,7 +1025,7 @@ public:
virtual void canvas_item_add_circle(RID p_item, const Point2& p_pos, float p_radius,const Color& p_color)=0;
virtual void canvas_item_add_texture_rect(RID p_item, const Rect2& p_rect, RID p_texture,bool p_tile=false,const Color& p_modulate=Color(1,1,1),bool p_transpose=false)=0;
virtual void canvas_item_add_texture_rect_region(RID p_item, const Rect2& p_rect, RID p_texture,const Rect2& p_src_rect,const Color& p_modulate=Color(1,1,1),bool p_transpose=false)=0;
- virtual void canvas_item_add_style_box(RID p_item, const Rect2& p_rect, RID p_texture,const Vector2& p_topleft, const Vector2& p_bottomright, bool p_draw_center=true,const Color& p_modulate=Color(1,1,1))=0;
+ virtual void canvas_item_add_style_box(RID p_item, const Rect2& p_rect, const Rect2& p_source, RID p_texture,const Vector2& p_topleft, const Vector2& p_bottomright, bool p_draw_center=true,const Color& p_modulate=Color(1,1,1))=0;
virtual void canvas_item_add_primitive(RID p_item, const Vector<Point2>& p_points, const Vector<Color>& p_colors,const Vector<Point2>& p_uvs, RID p_texture,float p_width=1.0)=0;
virtual void canvas_item_add_polygon(RID p_item, const Vector<Point2>& p_points, const Vector<Color>& p_colors,const Vector<Point2>& p_uvs=Vector<Point2>(), RID p_texture=RID())=0;
virtual void canvas_item_add_triangle_array(RID p_item, const Vector<int>& p_indices, const Vector<Point2>& p_points, const Vector<Color>& p_colors,const Vector<Point2>& p_uvs=Vector<Point2>(), RID p_texture=RID(), int p_count=-1)=0;
diff --git a/tools/Godot.app/Contents/Resources/Godot.icns b/tools/Godot.app/Contents/Resources/Godot.icns
index 4a3dc0415a..375f61437d 100644
--- a/tools/Godot.app/Contents/Resources/Godot.icns
+++ b/tools/Godot.app/Contents/Resources/Godot.icns
Binary files differ
diff --git a/tools/SCsub b/tools/SCsub
index 5613d8a6c9..f6c14a13fb 100644
--- a/tools/SCsub
+++ b/tools/SCsub
@@ -5,12 +5,120 @@ env.add_source_files(env.tool_sources,"*.cpp")
Export('env')
+
+def make_translations_header(target,source,env):
+
+
+ dst = target[0].srcnode().abspath
+
+ g = open(dst,"wb")
+
+
+ """"
+ """
+
+ g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n")
+ g.write("#ifndef _EDITOR_TRANSLATIONS_H\n")
+ g.write("#define _EDITOR_TRANSLATIONS_H\n")
+
+ import zlib
+ import os.path
+
+ paths = [node.srcnode().abspath for node in source]
+ sorted_paths = sorted(paths, key=lambda path: os.path.splitext(os.path.basename(path))[0])
+
+ xl_names=[]
+ for i in range(len(sorted_paths)):
+ print("Appending translation: "+sorted_paths[i])
+ f = open(sorted_paths[i],"rb")
+ buf = f.read()
+ decomp_size = len(buf)
+ buf = zlib.compress(buf)
+ name = os.path.splitext(os.path.basename(sorted_paths[i]))[0]
+
+ #g.write("static const int _translation_"+name+"_compressed_size="+str(len(buf))+";\n")
+ #g.write("static const int _translation_"+name+"_uncompressed_size="+str(decomp_size)+";\n")
+ g.write("static const unsigned char _translation_"+name+"_compressed[]={\n")
+ for i in range(len(buf)):
+ g.write(str(ord(buf[i]))+",\n")
+
+ g.write("};\n")
+
+ xl_names.append([name,len(buf),str(decomp_size)])
+
+ g.write("struct EditorTranslationList {\n")
+ g.write("\tconst char* lang;\n");
+ g.write("\tint comp_size;\n");
+ g.write("\tint uncomp_size;\n");
+ g.write("\tconst unsigned char* data;\n");
+ g.write("};\n\n");
+ g.write("static EditorTranslationList _editor_translations[]={\n")
+ for x in xl_names:
+ g.write("\t{ \""+x[0]+"\", "+str(x[1])+", "+str(x[2])+",_translation_"+x[0]+"_compressed},\n")
+ g.write("\t{NULL,0,0,NULL}\n")
+ g.write("};\n")
+
+ g.write("#endif")
+
+
+def make_fonts_header(target,source,env):
+
+
+ dst = target[0].srcnode().abspath
+
+ g = open(dst,"wb")
+
+
+ """"
+ """
+
+ g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n")
+ g.write("#ifndef _EDITOR_FONTS_H\n")
+ g.write("#define _EDITOR_FONTS_H\n")
+
+ #saving uncompressed, since freetype will reference from memory pointer
+ xl_names=[]
+ for i in range(len(source)):
+ print("Appending font: "+source[i].srcnode().abspath)
+ f = open(source[i].srcnode().abspath,"rb")
+ buf = f.read()
+ import os.path
+
+ name = os.path.splitext(os.path.basename(source[i].srcnode().abspath))[0]
+
+ g.write("static const int _font_"+name+"_size="+str(len(buf))+";\n")
+ g.write("static const unsigned char _font_"+name+"[]={\n")
+ for i in range(len(buf)):
+ g.write(str(ord(buf[i]))+",\n")
+
+ g.write("};\n")
+
+ g.write("#endif")
+
+
if (env["tools"]!="no"):
+
+ import glob
+
+ dir = env.Dir('.').abspath
+ tlist = glob.glob(dir + "/translations/*.po")
+
+ print("translations: ",tlist)
+ env.Depends('#tools/editor/translations.h',tlist)
+ env.Command('#tools/editor/translations.h',tlist,make_translations_header)
+
+ flist = glob.glob(dir + "/editor_fonts/*.ttf")
+ flist.append( glob.glob(dir + "/editor_fonts/*.otf") )
+
+ print("fonts: ",flist)
+ env.Depends('#tools/editor/builtin_fonts.h',flist)
+ env.Command('#tools/editor/builtin_fonts.h',flist,make_fonts_header)
+
SConscript('editor/SCsub');
#SConscript('scintilla/SCsub');
SConscript('collada/SCsub');
SConscript('docdump/SCsub');
- SConscript('freetype/SCsub');
+ #SConscript('freetype/SCsub');
SConscript('doc/SCsub')
SConscript('pck/SCsub')
diff --git a/tools/doc/doc_data.h b/tools/doc/doc_data.h
index 877f30defb..d1aebff4ce 100644
--- a/tools/doc/doc_data.h
+++ b/tools/doc/doc_data.h
@@ -50,6 +50,9 @@ public:
String qualifiers;
String description;
Vector<ArgumentDoc> arguments;
+ bool operator<(const MethodDoc& p_md) const {
+ return name<p_md.name;
+ }
};
struct ConstantDoc {
diff --git a/tools/editor/addon_editor_plugin.cpp b/tools/editor/addon_editor_plugin.cpp
index 3b74330c1e..ee0b4b595f 100644
--- a/tools/editor/addon_editor_plugin.cpp
+++ b/tools/editor/addon_editor_plugin.cpp
@@ -1085,7 +1085,7 @@ EditorAddonLibrary::EditorAddonLibrary() {
- search_hb->add_child( memnew( Label(TTR("Search: "))));
+ search_hb->add_child( memnew( Label(TTR("Search:")+" ")));
filter =memnew( LineEdit );
search_hb->add_child(filter);
filter->set_h_size_flags(SIZE_EXPAND_FILL);
@@ -1112,7 +1112,7 @@ EditorAddonLibrary::EditorAddonLibrary() {
HBoxContainer *search_hb2 = memnew( HBoxContainer );
library_main->add_child(search_hb2);
- search_hb2->add_child( memnew( Label("Sort: ")));
+ search_hb2->add_child( memnew( Label(TTR("Sort:")+" ")));
sort = memnew( OptionButton );
for(int i=0;i<SORT_MAX;i++) {
sort->add_item(sort_text[i]);
@@ -1123,26 +1123,26 @@ EditorAddonLibrary::EditorAddonLibrary() {
sort->set_h_size_flags(SIZE_EXPAND_FILL);
reverse = memnew( CheckBox);
- reverse->set_text("Reverse");
+ reverse->set_text(TTR("Reverse"));
search_hb2->add_child(reverse);
search_hb2->add_child(memnew(VSeparator));
//search_hb2->add_spacer();
- search_hb2->add_child( memnew( Label("Category: ")));
+ search_hb2->add_child( memnew( Label(TTR("Category:")+" ")));
categories = memnew( OptionButton );
- categories->add_item("All");
+ categories->add_item(TTR("All"));
search_hb2->add_child(categories);
categories->set_h_size_flags(SIZE_EXPAND_FILL);
//search_hb2->add_spacer();
search_hb2->add_child(memnew(VSeparator));
- search_hb2->add_child( memnew( Label("Site: ")));
+ search_hb2->add_child( memnew( Label(TTR("Site:")+" ")));
repository = memnew( OptionButton );
- repository->add_item(TTR("Godot"));
+ repository->add_item("Godot");
search_hb2->add_child(repository);
repository->set_h_size_flags(SIZE_EXPAND_FILL);
@@ -1232,7 +1232,7 @@ EditorAddonLibrary::EditorAddonLibrary() {
asset_open = memnew( EditorFileDialog );
asset_open->set_access(EditorFileDialog::ACCESS_FILESYSTEM);
- asset_open->add_filter("*.zip ; Assets ZIP File");
+ asset_open->add_filter("*.zip ; "+TTR("Assets ZIP File"));
asset_open->set_mode(EditorFileDialog::MODE_OPEN_FILE);
add_child(asset_open);
asset_open->connect("file_selected",this,"_asset_file_selected");
diff --git a/tools/editor/animation_editor.cpp b/tools/editor/animation_editor.cpp
index f4fda7ba6e..08b90b5408 100644
--- a/tools/editor/animation_editor.cpp
+++ b/tools/editor/animation_editor.cpp
@@ -889,7 +889,7 @@ void AnimationKeyEditor::_menu_track(int p_type) {
case TRACK_MENU_SET_ALL_TRANS_OUTIN: t=-2.0; break;
}
- undo_redo->create_action(TTR("Set Transitions to: ")+rtos(t));
+ undo_redo->create_action(TTR("Set Transitions to:")+" "+rtos(t));
for(Map<SelectedKey,KeyInfo>::Element *E=selection.back();E;E=E->prev()) {
@@ -2096,7 +2096,7 @@ void AnimationKeyEditor::_track_editor_input_event(const InputEvent& p_input) {
/*
if (ofsx < remove_icon->get_width()) {
- undo_redo->create_action(TTR("Remove Anim Track"));
+ undo_redo->create_action("Remove Anim Track");
undo_redo->add_do_method(animation.ptr(),"remove_track",idx);
undo_redo->add_undo_method(animation.ptr(),"add_track",animation->track_get_type(idx),idx);
undo_redo->add_undo_method(animation.ptr(),"track_set_path",idx,animation->track_get_path(idx));
@@ -2129,7 +2129,7 @@ void AnimationKeyEditor::_track_editor_input_event(const InputEvent& p_input) {
if (ofsx < move_down_icon->get_width()) {
if (idx < animation->get_track_count() -1) {
- undo_redo->create_action(TTR("Move Anim Track Down"));
+ undo_redo->create_action("Move Anim Track Down");
undo_redo->add_do_method(animation.ptr(),"track_move_up",idx);
undo_redo->add_undo_method(animation.ptr(),"track_move_down",idx+1);
undo_redo->commit_action();
@@ -2142,7 +2142,7 @@ void AnimationKeyEditor::_track_editor_input_event(const InputEvent& p_input) {
if (ofsx < move_up_icon->get_width()) {
if (idx >0) {
- undo_redo->create_action(TTR("Move Anim Track Up"));
+ undo_redo->create_action("Move Anim Track Up");
undo_redo->add_do_method(animation.ptr(),"track_move_down",idx);
undo_redo->add_undo_method(animation.ptr(),"track_move_up",idx-1);
undo_redo->commit_action();
@@ -2893,7 +2893,7 @@ void AnimationKeyEditor::_notification(int p_what) {
optimize_dialog->connect("confirmed",this,"_animation_optimize");
menu_track->get_popup()->add_child(tpp);
- //menu_track->get_popup()->add_submenu_item(TTR("Set Transitions.."),"Transitions");
+ //menu_track->get_popup()->add_submenu_item("Set Transitions..","Transitions");
//menu_track->get_popup()->add_separator();
menu_track->get_popup()->add_item(TTR("Optimize Animation"),TRACK_MENU_OPTIMIZE);
menu_track->get_popup()->add_item(TTR("Clean-Up Animation"),TRACK_MENU_CLEAN_UP);
@@ -3113,9 +3113,9 @@ void AnimationKeyEditor::_query_insert(const InsertData& p_id) {
if (bool(EDITOR_DEF("animation/confirm_insert_track",true))) {
//potential new key, does not exist
if (insert_data.size()==1)
- insert_confirm->set_text(TTR("Create NEW track for ")+p_id.query+TTR(" and insert key?"));
+ insert_confirm->set_text(vformat(TTR("Create NEW track for %s and insert key?"),p_id.query));
else
- insert_confirm->set_text(TTR("Create ")+itos(insert_data.size())+TTR(" NEW tracks and insert keys?"));
+ insert_confirm->set_text(vformat(TTR("Create %d NEW tracks and insert keys?"),insert_data.size()));
insert_confirm->get_ok()->set_text(TTR("Create"));
insert_confirm->popup_centered_minsize();
@@ -3510,7 +3510,7 @@ void AnimationKeyEditor::_insert_delay() {
return;
}
- undo_redo->create_action(TTR("Anim Insert"));
+ undo_redo->create_action(TTR("Anim Insert"));
int last_track = animation->get_track_count();
bool advance=false;
@@ -3818,7 +3818,7 @@ AnimationKeyEditor::AnimationKeyEditor() {
hb->add_child( memnew( VSeparator ) );
Label *l = memnew( Label );
- l->set_text(TTR("Len(s):"));
+ l->set_text(TTR("Length (s):"));
hb->add_child(l);
length = memnew( SpinBox );
@@ -3833,7 +3833,7 @@ AnimationKeyEditor::AnimationKeyEditor() {
length->connect("value_changed",this,"_animation_len_changed");
l = memnew( Label );
- l->set_text(TTR("Step(s):"));
+ l->set_text(TTR("Step (s):"));
hb->add_child(l);
step = memnew( SpinBox );
@@ -3929,7 +3929,7 @@ AnimationKeyEditor::AnimationKeyEditor() {
/*keying = memnew( Button );
keying->set_toggle_mode(true);
- //keying->set_text(TTR("Keys"));
+ //keying->set_text("Keys");
keying->set_anchor_and_margin(MARGIN_LEFT,ANCHOR_END,60);
keying->set_anchor_and_margin(MARGIN_RIGHT,ANCHOR_END,10);
keying->set_anchor_and_margin(MARGIN_BOTTOM,ANCHOR_BEGIN,55);
@@ -3939,7 +3939,7 @@ AnimationKeyEditor::AnimationKeyEditor() {
*/
/* l = memnew( Label );
- l->set_text(TTR("Base: "));
+ l->set_text("Base: ");
l->set_pos(Point2(0,3));
// dr_panel->add_child(l);*/
@@ -4089,10 +4089,10 @@ AnimationKeyEditor::AnimationKeyEditor() {
cleanup_vb->add_child(cleanup_tracks);
cleanup_all = memnew( CheckButton );
- cleanup_all->set_text(TTR("Clean-Up all animations"));
+ cleanup_all->set_text(TTR("Clean-up all animations"));
cleanup_vb->add_child(cleanup_all);
- cleanup_dialog->set_title(TTR("Clean up Animation(s) (NO UNDO!)"));
+ cleanup_dialog->set_title(TTR("Clean-Up Animation(s) (NO UNDO!)"));
cleanup_dialog->get_ok()->set_text(TTR("Clean-Up"));
cleanup_dialog->connect("confirmed",this,"_menu_track",varray(TRACK_MENU_CLEAN_UP_CONFIRM));
diff --git a/tools/editor/call_dialog.cpp b/tools/editor/call_dialog.cpp
index 2ab9a79d3b..0c6c64a33b 100644
--- a/tools/editor/call_dialog.cpp
+++ b/tools/editor/call_dialog.cpp
@@ -239,7 +239,7 @@ void CallDialog::set_object(Object *p_object,StringName p_selected) {
return_value->clear();
_update_method_list();
- method_label->set_text(TTR("Method List For ' ")+p_object->get_type()+" ':");
+ method_label->set_text(vformat(TTR("Method List For '%s':"),p_object->get_type()));
}
CallDialog::CallDialog() {
@@ -323,7 +323,7 @@ CallDialog::CallDialog() {
label->set_begin( Point2( 15,54) );
label->set_end( Point2( 16,44) );
- label->set_text(TTR("Parameters:"));
+ label->set_text("Parameters:");
add_child(label);
*/
diff --git a/tools/editor/code_editor.cpp b/tools/editor/code_editor.cpp
index 970a0477c1..f62209fafa 100644
--- a/tools/editor/code_editor.cpp
+++ b/tools/editor/code_editor.cpp
@@ -30,6 +30,7 @@
#include "editor_settings.h"
#include "scene/gui/margin_container.h"
#include "scene/gui/separator.h"
+#include "os/keyboard.h"
void GotoLineDialog::popup_find_line(TextEdit *p_edit) {
@@ -76,6 +77,470 @@ GotoLineDialog::GotoLineDialog() {
}
+void FindReplaceBar::_notification(int p_what) {
+
+ if (p_what == NOTIFICATION_READY) {
+
+ find_prev->set_icon(get_icon("MoveUp", "EditorIcons"));
+ find_next->set_icon(get_icon("MoveDown", "EditorIcons"));
+ hide_button->set_normal_texture(get_icon("Close","EditorIcons"));
+ hide_button->set_hover_texture(get_icon("CloseHover","EditorIcons"));
+ hide_button->set_pressed_texture(get_icon("Close","EditorIcons"));
+
+ } else if (p_what == NOTIFICATION_VISIBILITY_CHANGED) {
+
+ set_process_unhandled_input(is_visible());
+ }
+}
+
+void FindReplaceBar::_unhandled_input(const InputEvent &p_event) {
+
+ if (p_event.type == InputEvent::KEY) {
+
+ const InputEventKey& k = p_event.key;
+
+ if (k.pressed && (text_edit->has_focus() || text_vbc->is_a_parent_of(get_focus_owner()))) {
+
+ bool accepted = true;
+
+ switch (k.scancode) {
+
+ case KEY_ESCAPE: {
+
+ _hide_bar();
+ } break;
+ default: {
+
+ accepted = false;
+ } break;
+ }
+
+ if (accepted) {
+ accept_event();
+ }
+ }
+ }
+}
+
+bool FindReplaceBar::_search(uint32_t p_flags, int p_from_line, int p_from_col) {
+
+ int line, col;
+ String text=get_search_text();
+
+ bool found=text_edit->search(text,p_flags,p_from_line,p_from_col,line,col);
+
+ if (found) {
+ if (!preserve_cursor) {
+ text_edit->cursor_set_line(line);
+ text_edit->cursor_set_column(col+text.length());
+ }
+
+ text_edit->set_search_text(text);
+ text_edit->set_search_flags(p_flags);
+ text_edit->set_current_search_result(line,col);
+
+ result_line=line;
+ result_col=col;
+
+ set_error("");
+ } else {
+ result_line=-1;
+ result_col=-1;
+ text_edit->set_search_text("");
+ set_error(text.empty()?"":TTR("No Matches"));
+ }
+
+ return found;
+}
+
+void FindReplaceBar::_replace() {
+
+ if (result_line!=-1 && result_col!=-1) {
+ text_edit->begin_complex_operation();
+
+ text_edit->select(result_line,result_col,result_line,result_col+get_search_text().length());
+ text_edit->insert_text_at_cursor(get_replace_text());
+
+ text_edit->end_complex_operation();
+ }
+
+ search_current();
+}
+
+void FindReplaceBar::_replace_all() {
+
+ // line as x so it gets priority in comparison, column as y
+ Point2i orig_cursor(text_edit->cursor_get_line(),text_edit->cursor_get_column());
+ Point2i prev_match=Point2(-1,-1);
+
+ bool selection_enabled = text_edit->is_selection_active();
+ Point2i selection_begin,selection_end;
+ if (selection_enabled) {
+ selection_begin=Point2i(text_edit->get_selection_from_line(),text_edit->get_selection_from_column());
+ selection_end=Point2i(text_edit->get_selection_to_line(),text_edit->get_selection_to_column());
+ }
+
+ int vsval = text_edit->get_v_scroll();
+
+ text_edit->cursor_set_line(0);
+ text_edit->cursor_set_column(0);
+
+ int search_text_len=get_search_text().length();
+ int rc=0;
+
+ replace_all_mode = true;
+
+ text_edit->begin_complex_operation();
+
+ while (search_next()) {
+
+ // replace area
+ Point2i match_from(result_line,result_col);
+ Point2i match_to(result_line,result_col+search_text_len);
+
+ if (match_from < prev_match)
+ break; // done
+
+ prev_match=match_to;
+
+ text_edit->select(result_line,result_col,result_line,match_to.y);
+
+ if (selection_enabled && is_selection_only()) {
+
+ if (match_from<selection_begin || match_to>selection_end)
+ continue;
+
+ // replace but adjust selection bounds
+ text_edit->insert_text_at_cursor(get_replace_text());
+ if (match_to.x==selection_end.x)
+ selection_end.y+=get_replace_text().length() - get_search_text().length();
+ } else {
+ // just replace
+ text_edit->insert_text_at_cursor(get_replace_text());
+ }
+
+ rc++;
+ }
+
+ text_edit->end_complex_operation();
+
+ replace_all_mode = false;
+
+ // restore editor state (selection, cursor, scroll)
+ text_edit->cursor_set_line(orig_cursor.x);
+ text_edit->cursor_set_column(orig_cursor.y);
+
+ if (selection_enabled && is_selection_only()) {
+ // reselect
+ text_edit->select(selection_begin.x,selection_begin.y,selection_end.x,selection_end.y);
+ } else {
+ text_edit->deselect();
+ }
+
+ text_edit->set_v_scroll(vsval);
+ set_error(vformat(TTR("Replaced %d Ocurrence(s)."), rc));
+}
+
+void FindReplaceBar::_get_search_from(int& r_line, int& r_col) {
+
+ r_line=text_edit->cursor_get_line();
+ r_col=text_edit->cursor_get_column();
+
+ if (text_edit->is_selection_active() && !replace_all_mode) {
+ r_line=text_edit->get_selection_from_line();
+ r_col=text_edit->get_selection_to_column();
+ }
+
+ if (r_line==result_line && r_col>=result_col && r_col<=result_col+get_search_text().length()) {
+ r_col=result_col;
+ }
+}
+
+bool FindReplaceBar::search_current() {
+
+ uint32_t flags=0;
+
+ if (is_whole_words())
+ flags|=TextEdit::SEARCH_WHOLE_WORDS;
+ if (is_case_sensitive())
+ flags|=TextEdit::SEARCH_MATCH_CASE;
+
+ int line, col;
+ _get_search_from(line, col);
+
+ return _search(flags,line,col);
+}
+
+bool FindReplaceBar::search_prev() {
+
+ uint32_t flags=0;
+ String text = get_search_text();
+
+ if (is_whole_words())
+ flags|=TextEdit::SEARCH_WHOLE_WORDS;
+ if (is_case_sensitive())
+ flags|=TextEdit::SEARCH_MATCH_CASE;
+
+ flags|=TextEdit::SEARCH_BACKWARDS;
+
+ int line, col;
+ _get_search_from(line, col);
+
+ col-=text.length();
+ if (col<0) {
+ line-=1;
+ if (line<0)
+ line=text_edit->get_line_count()-1;
+ col=text_edit->get_line(line).length();
+ }
+
+ return _search(flags,line,col);
+}
+
+bool FindReplaceBar::search_next() {
+
+ uint32_t flags=0;
+ String text = get_search_text();
+
+ if (is_whole_words())
+ flags|=TextEdit::SEARCH_WHOLE_WORDS;
+ if (is_case_sensitive())
+ flags|=TextEdit::SEARCH_MATCH_CASE;
+
+ int line, col;
+ _get_search_from(line, col);
+
+ if (line==result_line && col==result_col) {
+ col+=text.length();
+ if (col>text_edit->get_line(line).length()) {
+ line+=1;
+ if (line>=text_edit->get_line_count())
+ line=0;
+ col=0;
+ }
+ }
+
+ return _search(flags,line,col);
+}
+
+void FindReplaceBar::_hide_bar() {
+
+ if (replace_text->has_focus() || search_text->has_focus())
+ text_edit->grab_focus();
+
+ text_edit->set_search_text("");
+ result_line = -1;
+ result_col = -1;
+ replace_hbc->hide();
+ replace_options_hbc->hide();
+ hide();
+}
+
+void FindReplaceBar::_show_search() {
+
+ show();
+ search_text->grab_focus();
+
+ if (text_edit->is_selection_active()) {
+ search_text->set_text(text_edit->get_selection_text());
+ }
+
+ if (!get_search_text().empty()) {
+ search_text->select_all();
+ search_text->set_cursor_pos(search_text->get_text().length());
+ search_current();
+ }
+}
+
+void FindReplaceBar::popup_search() {
+
+ replace_hbc->hide();
+ replace_options_hbc->hide();
+ _show_search();
+}
+
+void FindReplaceBar::popup_replace() {
+
+ if (!replace_hbc->is_visible() || !replace_options_hbc->is_visible()) {
+ replace_text->clear();
+ replace_hbc->show();
+ replace_options_hbc->show();
+ }
+
+ _show_search();
+}
+
+void FindReplaceBar::_search_options_changed(bool p_pressed) {
+
+ search_current();
+}
+
+void FindReplaceBar::_editor_text_changed() {
+
+ if (is_visible()) {
+ preserve_cursor=true;
+ search_current();
+ preserve_cursor=false;
+ }
+}
+
+void FindReplaceBar::_search_text_changed(const String& p_text) {
+
+ search_current();
+}
+
+void FindReplaceBar::_search_text_entered(const String& p_text) {
+
+ search_next();
+}
+
+String FindReplaceBar::get_search_text() const {
+
+ return search_text->get_text();
+}
+
+String FindReplaceBar::get_replace_text() const {
+
+ return replace_text->get_text();
+}
+
+bool FindReplaceBar::is_case_sensitive() const {
+
+ return case_sensitive->is_pressed();
+}
+
+bool FindReplaceBar::is_whole_words() const {
+
+ return whole_words->is_pressed();
+}
+
+bool FindReplaceBar::is_selection_only() const {
+
+ return selection_only->is_pressed();
+}
+
+void FindReplaceBar::set_error(const String &p_label) {
+
+ error_label->set_text(p_label);
+}
+
+void FindReplaceBar::set_text_edit(TextEdit *p_text_edit) {
+
+ text_edit = p_text_edit;
+ text_edit->connect("text_changed",this,"_editor_text_changed");
+}
+
+void FindReplaceBar::_bind_methods() {
+
+ ObjectTypeDB::bind_method("_unhandled_input",&FindReplaceBar::_unhandled_input);
+
+ ObjectTypeDB::bind_method("_editor_text_changed",&FindReplaceBar::_editor_text_changed);
+ ObjectTypeDB::bind_method("_search_text_changed",&FindReplaceBar::_search_text_changed);
+ ObjectTypeDB::bind_method("_search_text_entered",&FindReplaceBar::_search_text_entered);
+ ObjectTypeDB::bind_method("_search_current",&FindReplaceBar::search_current);
+ ObjectTypeDB::bind_method("_search_next",&FindReplaceBar::search_next);
+ ObjectTypeDB::bind_method("_search_prev",&FindReplaceBar::search_prev);
+ ObjectTypeDB::bind_method("_replace_pressed",&FindReplaceBar::_replace);
+ ObjectTypeDB::bind_method("_replace_all_pressed",&FindReplaceBar::_replace_all);
+ ObjectTypeDB::bind_method("_search_options_changed",&FindReplaceBar::_search_options_changed);
+ ObjectTypeDB::bind_method("_hide_pressed",&FindReplaceBar::_hide_bar);
+
+ ADD_SIGNAL(MethodInfo("search"));
+}
+
+FindReplaceBar::FindReplaceBar() {
+
+ replace_all_mode=false;
+ preserve_cursor=false;
+
+ text_vbc = memnew(VBoxContainer);
+ add_child(text_vbc);
+
+ HBoxContainer *search_hbc = memnew(HBoxContainer);
+ text_vbc->add_child(search_hbc);
+
+ search_text = memnew(LineEdit);
+ search_hbc->add_child(search_text);
+ search_text->set_custom_minimum_size(Size2(200, 0));
+ search_text->connect("text_changed",this,"_search_text_changed");
+ search_text->connect("text_entered",this,"_search_text_entered");
+
+ find_prev = memnew(ToolButton);
+ search_hbc->add_child(find_prev);
+ find_prev->set_focus_mode(FOCUS_NONE);
+ find_prev->connect("pressed",this,"_search_prev");
+
+ find_next = memnew(ToolButton);
+ search_hbc->add_child(find_next);
+ find_next->set_focus_mode(FOCUS_NONE);
+ find_next->connect("pressed",this,"_search_next");
+
+ replace_hbc = memnew(HBoxContainer);
+ text_vbc->add_child(replace_hbc);
+ replace_hbc->hide();
+
+ replace_text = memnew(LineEdit);
+ replace_hbc->add_child(replace_text);
+ replace_text->set_custom_minimum_size(Size2(200, 0));
+ replace_text->connect("text_entered",this,"_search_text_entered");
+
+ replace = memnew(ToolButton);
+ replace_hbc->add_child(replace);
+ replace->set_text(TTR("Replace"));
+ replace->set_focus_mode(FOCUS_NONE);
+ replace->connect("pressed",this,"_replace_pressed");
+
+ replace_all = memnew(ToolButton);
+ replace_hbc->add_child(replace_all);
+ replace_all->set_text(TTR("Replace All"));
+ replace_all->set_focus_mode(FOCUS_NONE);
+ replace_all->connect("pressed",this,"_replace_all_pressed");
+
+ Control *spacer_split = memnew( Control );
+ spacer_split->set_custom_minimum_size(Size2(0, 1));
+ text_vbc->add_child(spacer_split);
+
+ VBoxContainer *options_vbc = memnew(VBoxContainer);
+ add_child(options_vbc);
+ options_vbc->set_h_size_flags(SIZE_EXPAND_FILL);
+
+ HBoxContainer *search_options = memnew(HBoxContainer);
+ options_vbc->add_child(search_options);
+
+ case_sensitive = memnew(CheckBox);
+ search_options->add_child(case_sensitive);
+ case_sensitive->set_text(TTR("Match Case"));
+ case_sensitive->set_focus_mode(FOCUS_NONE);
+ case_sensitive->connect("toggled",this,"_search_options_changed");
+
+ whole_words = memnew(CheckBox);
+ search_options->add_child(whole_words);
+ whole_words->set_text(TTR("Whole Words"));
+ whole_words->set_focus_mode(FOCUS_NONE);
+ whole_words->connect("toggled",this,"_search_options_changed");
+
+ error_label = memnew(Label);
+ search_options->add_child(error_label);
+
+ search_options->add_spacer();
+
+ hide_button = memnew(TextureButton);
+ search_options->add_child(hide_button);
+ hide_button->set_focus_mode(FOCUS_NONE);
+ hide_button->connect("pressed",this,"_hide_pressed");
+
+ replace_options_hbc = memnew(HBoxContainer);
+ options_vbc->add_child(replace_options_hbc);
+ replace_options_hbc->hide();
+
+ selection_only = memnew(CheckBox);
+ replace_options_hbc->add_child(selection_only);
+ selection_only->set_text(TTR("Selection Only"));
+ selection_only->set_focus_mode(FOCUS_NONE);
+ selection_only->connect("toggled",this,"_search_options_changed");
+}
+
+
void FindReplaceDialog::popup_search() {
set_title(TTR("Search"));
@@ -216,7 +681,7 @@ void FindReplaceDialog::_replace() {
text_edit->set_v_scroll(vsval);
// text_edit->set_h_scroll(hsval);
- error_label->set_text(TTR("Replaced ")+itos(rc)+TTR(" ocurrence(s)."));
+ error_label->set_text(vformat(TTR("Replaced %d ocurrence(s)."),rc));
//hide();
@@ -274,7 +739,7 @@ bool FindReplaceDialog::_search() {
return true;
} else {
- set_error(TTR("Not Found!"));
+ set_error(TTR("Not found!"));
return false;
}
@@ -498,7 +963,7 @@ FindReplaceDialog::FindReplaceDialog() {
void CodeTextEditor::_line_col_changed() {
- String text = String()+TTR("Line: ")+itos(text_editor->cursor_get_line()+1)+TTR(", Col: ")+itos(text_editor->cursor_get_column());
+ String text = String()+TTR("Line:")+" "+itos(text_editor->cursor_get_line()+1)+", "+TTR("Col:")+" "+itos(text_editor->cursor_get_column());
line_col->set_text(text);
}
@@ -544,7 +1009,7 @@ void CodeTextEditor::set_error(const String& p_error) {
}
-void CodeTextEditor::_on_settings_change() {
+void CodeTextEditor::_update_font() {
// FONTS
String editor_font = EDITOR_DEF("text_editor/font", "");
@@ -557,7 +1022,12 @@ void CodeTextEditor::_on_settings_change() {
}
}
if(!font_overrode)
- text_editor->add_font_override("font",get_font("source","Fonts"));
+ text_editor->add_font_override("font",get_font("source","EditorFonts"));
+}
+
+void CodeTextEditor::_on_settings_change() {
+
+ _update_font();
// AUTO BRACE COMPLETION
text_editor->set_auto_brace_completion(
@@ -588,6 +1058,9 @@ void CodeTextEditor::_notification(int p_what) {
if (p_what==EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED)
_load_theme_settings();
+ if (p_what==NOTIFICATION_ENTER_TREE) {
+ _update_font();
+ }
}
void CodeTextEditor::_bind_methods() {
@@ -602,35 +1075,32 @@ void CodeTextEditor::_bind_methods() {
CodeTextEditor::CodeTextEditor() {
+ find_replace_bar = memnew( FindReplaceBar );
+ add_child(find_replace_bar);
+ find_replace_bar->set_h_size_flags(SIZE_EXPAND_FILL);
+ find_replace_bar->hide();
+
text_editor = memnew( TextEdit );
add_child(text_editor);
- text_editor->set_area_as_parent_rect();
- text_editor->set_margin(MARGIN_BOTTOM,20);
+ text_editor->set_v_size_flags(SIZE_EXPAND_FILL);
- String editor_font = EDITOR_DEF("text_editor/font", "");
- bool font_overrode = false;
- if (editor_font!="") {
- Ref<Font> fnt = ResourceLoader::load(editor_font);
- if (fnt.is_valid()) {
- text_editor->add_font_override("font",fnt);
- font_overrode = true;
- }
- }
-
- if (!font_overrode)
- text_editor->add_font_override("font",get_font("source","Fonts"));
+ find_replace_bar->set_text_edit(text_editor);
text_editor->set_show_line_numbers(true);
text_editor->set_brace_matching(true);
text_editor->set_auto_indent(true);
- line_col = memnew( Label );
- add_child(line_col);
- line_col->set_anchor_and_margin(MARGIN_LEFT,ANCHOR_END,135);
- line_col->set_anchor_and_margin(MARGIN_TOP,ANCHOR_END,15);
- line_col->set_anchor_and_margin(MARGIN_BOTTOM,ANCHOR_END,1);
- line_col->set_anchor_and_margin(MARGIN_RIGHT,ANCHOR_END,5);
- //line_col->set_align(Label::ALIGN_RIGHT);
+ MarginContainer *status_mc = memnew( MarginContainer );
+ add_child(status_mc);
+ status_mc->set("custom_constants/margin_left", 2);
+ status_mc->set("custom_constants/margin_top", 5);
+ status_mc->set("custom_constants/margin_right", 2);
+ status_mc->set("custom_constants/margin_bottom", 1);
+
+ HBoxContainer *status_bar = memnew( HBoxContainer );
+ status_mc->add_child(status_bar);
+ status_bar->set_h_size_flags(SIZE_EXPAND_FILL);
+
idle = memnew( Timer );
add_child(idle);
idle->set_one_shot(true);
@@ -644,14 +1114,16 @@ CodeTextEditor::CodeTextEditor() {
code_complete_timer->set_wait_time(EDITOR_DEF("text_editor/code_complete_delay",.3f));
error = memnew( Label );
- add_child(error);
- error->set_anchor_and_margin(MARGIN_LEFT,ANCHOR_BEGIN,5);
- error->set_anchor_and_margin(MARGIN_TOP,ANCHOR_END,15);
- error->set_anchor_and_margin(MARGIN_BOTTOM,ANCHOR_END,1);
- error->set_anchor_and_margin(MARGIN_RIGHT,ANCHOR_END,130);
+ status_bar->add_child(error);
error->hide();
+ error->set_valign(Label::VALIGN_CENTER);
error->add_color_override("font_color",Color(1,0.7,0.6,0.9));
+ status_bar->add_spacer();
+
+ line_col = memnew( Label );
+ status_bar->add_child(line_col);
+ line_col->set_valign(Label::VALIGN_CENTER);
text_editor->connect("cursor_changed", this,"_line_col_changed");
diff --git a/tools/editor/code_editor.h b/tools/editor/code_editor.h
index e28517c601..2e1bf46c02 100644
--- a/tools/editor/code_editor.h
+++ b/tools/editor/code_editor.h
@@ -33,7 +33,9 @@
#include "scene/gui/text_edit.h"
#include "scene/gui/dialogs.h"
#include "scene/main/timer.h"
+#include "scene/gui/tool_button.h"
#include "scene/gui/check_button.h"
+#include "scene/gui/check_box.h"
#include "scene/gui/line_edit.h"
@@ -58,8 +60,76 @@ public:
GotoLineDialog();
};
+class FindReplaceBar : public HBoxContainer {
+ OBJ_TYPE(FindReplaceBar,HBoxContainer);
+ LineEdit *search_text;
+ ToolButton *find_prev;
+ ToolButton *find_next;
+ CheckBox *case_sensitive;
+ CheckBox *whole_words;
+ Label *error_label;
+ TextureButton *hide_button;
+
+ LineEdit *replace_text;
+ ToolButton *replace;
+ ToolButton *replace_all;
+ CheckBox *selection_only;
+
+ VBoxContainer *text_vbc;
+ HBoxContainer *replace_hbc;
+ HBoxContainer *replace_options_hbc;
+
+ TextEdit *text_edit;
+
+ int result_line;
+ int result_col;
+
+ bool replace_all_mode;
+ bool preserve_cursor;
+
+ void _get_search_from(int& r_line, int& r_col);
+
+ void _show_search();
+ void _hide_bar();
+
+ void _editor_text_changed();
+ void _search_options_changed(bool p_pressed);
+ void _search_text_changed(const String& p_text);
+ void _search_text_entered(const String& p_text);
+
+protected:
+ void _notification(int p_what);
+ void _unhandled_input(const InputEvent &p_event);
+
+ bool _search(uint32_t p_flags, int p_from_line, int p_from_col);
+
+ void _replace();
+ void _replace_all();
+
+ static void _bind_methods();
+
+public:
+ String get_search_text() const;
+ String get_replace_text() const;
+
+ bool is_case_sensitive() const;
+ bool is_whole_words() const;
+ bool is_selection_only() const;
+ void set_error(const String& p_label);
+
+ void set_text_edit(TextEdit *p_text_edit);
+
+ void popup_search();
+ void popup_replace();
+
+ bool search_current();
+ bool search_prev();
+ bool search_next();
+
+ FindReplaceBar();
+};
class FindReplaceDialog : public ConfirmationDialog {
@@ -119,11 +189,12 @@ public:
};
-class CodeTextEditor : public Control {
+class CodeTextEditor : public VBoxContainer {
- OBJ_TYPE(CodeTextEditor,Control);
+ OBJ_TYPE(CodeTextEditor,VBoxContainer);
TextEdit *text_editor;
+ FindReplaceBar *find_replace_bar;
Label *line_col;
Label *info;
@@ -135,6 +206,7 @@ class CodeTextEditor : public Control {
void _on_settings_change();
+ void _update_font();
void _complete_request();
protected:
@@ -157,6 +229,7 @@ protected:
public:
TextEdit *get_text_edit() { return text_editor; }
+ FindReplaceBar *get_find_replace_bar() { return find_replace_bar; }
virtual void apply_code() {}
CodeTextEditor();
diff --git a/tools/editor/connections_dialog.cpp b/tools/editor/connections_dialog.cpp
index 3795860472..e2b8f2884f 100644
--- a/tools/editor/connections_dialog.cpp
+++ b/tools/editor/connections_dialog.cpp
@@ -94,8 +94,8 @@ void ConnectDialog::_notification(int p_what) {
if (p_what==NOTIFICATION_DRAW) {
- RID ci = get_canvas_item();
- get_stylebox("panel","PopupMenu")->draw(ci,Rect2(Point2(),get_size()));
+ //RID ci = get_canvas_item();
+ //get_stylebox("panel","PopupMenu")->draw(ci,Rect2(Point2(),get_size()));
}
if (p_what==NOTIFICATION_ENTER_TREE) {
@@ -294,8 +294,8 @@ void ConnectDialog::_bind_methods() {
ConnectDialog::ConnectDialog() {
- int margin = get_constant("margin",TTR("Dialogs"));
- int button_margin = get_constant("button_margin",TTR("Dialogs"));
+ int margin = get_constant("margin","Dialogs");
+ int button_margin = get_constant("button_margin","Dialogs");
Label * label = memnew( Label );
@@ -416,7 +416,7 @@ ConnectDialog::ConnectDialog() {
/*dst_method_list = memnew( MenuButton );
- dst_method_list->set_text(TTR("List.."));
+ dst_method_list->set_text("List..");
dst_method_list->set_anchor( MARGIN_RIGHT, ANCHOR_END );
dst_method_list->set_anchor( MARGIN_LEFT, ANCHOR_END );
dst_method_list->set_anchor( MARGIN_TOP, ANCHOR_END );
@@ -429,7 +429,7 @@ ConnectDialog::ConnectDialog() {
make_callback = memnew( CheckButton );
make_callback->set_toggle_mode(true);
make_callback->set_pressed( EDITOR_DEF("text_editor/create_signal_callbacks",true));
- make_callback->set_text(TTR("Make Function "));
+ make_callback->set_text(TTR("Make Function"));
dstm_hb->add_child(make_callback);
deferred = memnew( CheckButton );
@@ -447,7 +447,7 @@ ConnectDialog::ConnectDialog() {
realtime->set_anchor( MARGIN_RIGHT, ANCHOR_END );
realtime->set_begin( Point2( 120, button_margin-10 ) );
realtime->set_end( Point2( 80, margin ) );
- realtime->set_text(TTR("Realtime"));
+ realtime->set_text("Realtime");
add_child(realtime);
*/
@@ -465,7 +465,7 @@ ConnectDialog::ConnectDialog() {
add_child(error);
error->get_ok()->set_text(TTR("Close"));
get_ok()->set_text(TTR("Connect"));
-// error->get_cancel()->set_text(TTR("Close"));
+// error->get_cancel()->set_text("Close");
@@ -480,21 +480,21 @@ ConnectDialog::~ConnectDialog()
-void ConnectionsDialog::_notification(int p_what) {
+void ConnectionsDock::_notification(int p_what) {
if (p_what==NOTIFICATION_DRAW) {
- RID ci = get_canvas_item();
- get_stylebox("panel","PopupMenu")->draw(ci,Rect2(Point2(),get_size()));
+ //RID ci = get_canvas_item();
+ //get_stylebox("panel","PopupMenu")->draw(ci,Rect2(Point2(),get_size()));
}
}
-void ConnectionsDialog::_close() {
+void ConnectionsDock::_close() {
hide();
}
-void ConnectionsDialog::_connect() {
+void ConnectionsDock::_connect() {
TreeItem *it = tree->get_selected();
ERR_FAIL_COND(!it);
@@ -511,11 +511,14 @@ void ConnectionsDialog::_connect() {
StringArray args = it->get_metadata(0).operator Dictionary()["args"];
int flags = CONNECT_PERSIST | (defer?CONNECT_DEFERRED:0) | (oshot?CONNECT_ONESHOT:0);
- undo_redo->create_action(TTR("Connect '")+signal+"' to '"+String(dst_method)+"'");
+ undo_redo->create_action(vformat(TTR("Connect '%s' to '%s'"),signal,String(dst_method)));
undo_redo->add_do_method(node,"connect",signal,target,dst_method,binds,flags);
undo_redo->add_undo_method(node,"disconnect",signal,target,dst_method);
undo_redo->add_do_method(this,"update_tree");
undo_redo->add_undo_method(this,"update_tree");
+ undo_redo->add_do_method(EditorNode::get_singleton()->get_scene_tree_dock()->get_tree_editor(),"update_tree"); //to force redraw of scene tree
+ undo_redo->add_undo_method(EditorNode::get_singleton()->get_scene_tree_dock()->get_tree_editor(),"update_tree"); //to force redraw of scene tree
+
undo_redo->commit_action();
@@ -533,13 +536,13 @@ void ConnectionsDialog::_connect() {
-void ConnectionsDialog::ok_pressed() {
+void ConnectionsDock::_connect_pressed() {
TreeItem *item = tree->get_selected();
if (!item) {
//no idea how this happened, but disable
- get_ok()->set_disabled(true);
+ connect_button->set_disabled(true);
return;
}
if (item->get_parent()==tree->get_root() || item->get_parent()->get_parent()==tree->get_root()) {
@@ -577,6 +580,8 @@ void ConnectionsDialog::ok_pressed() {
undo_redo->add_undo_method(node,"connect",c.signal,c.target,c.method,Vector<Variant>(),c.flags);
undo_redo->add_do_method(this,"update_tree");
undo_redo->add_undo_method(this,"update_tree");
+ undo_redo->add_do_method(EditorNode::get_singleton()->get_scene_tree_dock()->get_tree_editor(),"update_tree"); //to force redraw of scene tree
+ undo_redo->add_undo_method(EditorNode::get_singleton()->get_scene_tree_dock()->get_tree_editor(),"update_tree"); //to force redraw of scene tree
undo_redo->commit_action();
c.source->disconnect(c.signal,c.target,c.method);
@@ -584,7 +589,7 @@ void ConnectionsDialog::ok_pressed() {
}
}
/*
-void ConnectionsDialog::_remove() {
+void ConnectionsDock::_remove() {
if (!tree->get_selected())
return;
@@ -600,7 +605,7 @@ void ConnectionsDialog::_remove() {
}
*/
/*
-void ConnectionsDialog::_remove_confirm() {
+void ConnectionsDock::_remove_confirm() {
if (!tree->get_selected())
return;
@@ -610,7 +615,7 @@ void ConnectionsDialog::_remove_confirm() {
Dictionary meta=selected->get_metadata(0);
- undo_redo->create_action(TTR("Remove Subscription"));
+ undo_redo->create_action("Remove Subscription");
undo_redo->add_do_method(node,"unsubscribe_path_event",meta["from_event"].operator String(),meta["from_path"].operator NodePath(),meta["to_method"].operator String());
undo_redo->add_undo_method(node,"subscribe_path_event_persist",meta["from_event"].operator String(),meta["from_path"].operator NodePath(),meta["to_method"].operator String(),Array(),false);
undo_redo->add_do_method(this,"update_tree");
@@ -620,18 +625,16 @@ void ConnectionsDialog::_remove_confirm() {
}
*/
-struct _ConnectionsDialogMethodInfoSort {
+struct _ConnectionsDockMethodInfoSort {
_FORCE_INLINE_ bool operator()(const MethodInfo& a, const MethodInfo& b) const {
return a.name < b.name;
}
};
-void ConnectionsDialog::update_tree() {
+void ConnectionsDock::update_tree() {
- if (!is_visible())
- return; //don't update if not visible, of course
- tree->clear();
+ tree->clear();
if (!node)
return;
@@ -643,7 +646,7 @@ void ConnectionsDialog::update_tree() {
node->get_signal_list(&node_signals);
- //node_signals.sort_custom<_ConnectionsDialogMethodInfoSort>();
+ //node_signals.sort_custom<_ConnectionsDockMethodInfoSort>();
bool did_script=false;
StringName base = node->get_type();
@@ -773,68 +776,72 @@ void ConnectionsDialog::update_tree() {
}
}
- get_ok()->set_text(TTR("Connect"));
- get_ok()->set_disabled(true);
+ connect_button->set_text(TTR("Connect"));
+ connect_button->set_disabled(true);
}
-void ConnectionsDialog::set_node(Node* p_node) {
+void ConnectionsDock::set_node(Node* p_node) {
node=p_node;
update_tree();
}
-void ConnectionsDialog::_something_selected() {
+void ConnectionsDock::_something_selected() {
TreeItem *item = tree->get_selected();
if (!item) {
//no idea how this happened, but disable
- get_ok()->set_text(TTR("Connect.."));
- get_ok()->set_disabled(true);
+ connect_button->set_text(TTR("Connect.."));
+ connect_button->set_disabled(true);
} else if (item->get_parent()==tree->get_root() || item->get_parent()->get_parent()==tree->get_root()) {
//a signal - connect
- get_ok()->set_text(TTR("Connect.."));
- get_ok()->set_disabled(false);
+ connect_button->set_text(TTR("Connect.."));
+ connect_button->set_disabled(false);
} else {
//a slot- disconnect
- get_ok()->set_text(TTR("Disconnect"));
- get_ok()->set_disabled(false);
+ connect_button->set_text(TTR("Disconnect"));
+ connect_button->set_disabled(false);
}
}
-void ConnectionsDialog::_bind_methods() {
+void ConnectionsDock::_bind_methods() {
- ObjectTypeDB::bind_method("_connect",&ConnectionsDialog::_connect);
- ObjectTypeDB::bind_method("_something_selected",&ConnectionsDialog::_something_selected);
- ObjectTypeDB::bind_method("_close",&ConnectionsDialog::_close);
-// ObjectTypeDB::bind_method("_remove_confirm",&ConnectionsDialog::_remove_confirm);
- ObjectTypeDB::bind_method("update_tree",&ConnectionsDialog::update_tree);
+ ObjectTypeDB::bind_method("_connect",&ConnectionsDock::_connect);
+ ObjectTypeDB::bind_method("_something_selected",&ConnectionsDock::_something_selected);
+ ObjectTypeDB::bind_method("_close",&ConnectionsDock::_close);
+ ObjectTypeDB::bind_method("_connect_pressed",&ConnectionsDock::_connect_pressed);
+ ObjectTypeDB::bind_method("update_tree",&ConnectionsDock::update_tree);
}
-ConnectionsDialog::ConnectionsDialog(EditorNode *p_editor) {
+ConnectionsDock::ConnectionsDock(EditorNode *p_editor) {
editor=p_editor;
- set_title(TTR("Edit Connections.."));
- set_hide_on_ok(false);
-
- VBoxContainer *vbc = memnew( VBoxContainer );
- add_child(vbc);
- set_child_rect(vbc);
+ set_name(TTR("Signals"));
+ VBoxContainer *vbc = this;
tree = memnew( Tree );
tree->set_columns(1);
tree->set_select_mode(Tree::SELECT_ROW);
tree->set_hide_root(true);
- vbc->add_margin_child(TTR("Connections:"),tree,true);
-
+ vbc->add_child(tree);
+ tree->set_v_size_flags(SIZE_EXPAND_FILL);
+
+ connect_button = memnew( Button );
+ connect_button->set_text("Connect");
+ HBoxContainer *hb = memnew( HBoxContainer);
+ vbc->add_child(hb);
+ hb->add_spacer();
+ hb->add_child(connect_button);
+ connect_button->connect("pressed",this,"_connect_pressed");
// add_child(tree);
connect_dialog = memnew( ConnectDialog );
@@ -858,12 +865,12 @@ ConnectionsDialog::ConnectionsDialog(EditorNode *p_editor) {
remove_confirm->connect("confirmed", this,"_remove_confirm");
connect_dialog->connect("connected", this,"_connect");
tree->connect("item_selected", this,"_something_selected");
- get_cancel()->set_text(TTR("Close"));
+ add_constant_override("separation",3*EDSCALE);
}
-ConnectionsDialog::~ConnectionsDialog()
+ConnectionsDock::~ConnectionsDock()
{
}
diff --git a/tools/editor/connections_dialog.h b/tools/editor/connections_dialog.h
index 575bcf54d7..96ebaf85b0 100644
--- a/tools/editor/connections_dialog.h
+++ b/tools/editor/connections_dialog.h
@@ -95,10 +95,11 @@ public:
};
-class ConnectionsDialog : public ConfirmationDialog {
+class ConnectionsDock : public VBoxContainer {
- OBJ_TYPE( ConnectionsDialog , ConfirmationDialog );
+ OBJ_TYPE( ConnectionsDock , VBoxContainer );
+ Button *connect_button;
EditorNode *editor;
Node *node;
Tree *tree;
@@ -114,7 +115,7 @@ class ConnectionsDialog : public ConfirmationDialog {
protected:
- virtual void ok_pressed();
+ void _connect_pressed();
void _notification(int p_what);
static void _bind_methods();
public:
@@ -124,8 +125,8 @@ public:
void set_node(Node* p_node);
String get_selected_type();
- ConnectionsDialog(EditorNode *p_editor=NULL);
- ~ConnectionsDialog();
+ ConnectionsDock(EditorNode *p_editor=NULL);
+ ~ConnectionsDock();
};
diff --git a/tools/editor/create_dialog.cpp b/tools/editor/create_dialog.cpp
index c156b1b2de..b6137ddac0 100644
--- a/tools/editor/create_dialog.cpp
+++ b/tools/editor/create_dialog.cpp
@@ -36,6 +36,8 @@
#if 1
#include "os/keyboard.h"
+#include "editor_settings.h"
+#include "editor_help.h"
void CreateDialog::popup(bool p_dontclear) {
@@ -107,6 +109,21 @@ void CreateDialog::add_type(const String& p_type,HashMap<String,TreeItem*>& p_ty
}
+ if (bool(EditorSettings::get_singleton()->get("scenetree_editor/start_create_dialog_fully_expanded"))) {
+ item->set_collapsed(false);
+ } else {
+ // don't collapse search results
+ bool collapse = (search_box->get_text() == "");
+ // don't collapse the root node
+ collapse &= (item != p_root);
+ // don't collapse abstract nodes on the first tree level
+ collapse &= ((parent != p_root) || (ObjectTypeDB::can_instance(p_type)));
+ item->set_collapsed(collapse);
+ }
+
+ const String& description = EditorHelp::get_doc_data()->class_list[p_type].brief_description;
+ item->set_tooltip(0,description);
+
if (has_icon(p_type,"EditorIcons")) {
@@ -251,10 +268,19 @@ void CreateDialog::_notification(int p_what) {
void CreateDialog::set_base_type(const String& p_base) {
base_type=p_base;
- set_title(TTR("Create New ")+p_base);
+ set_title(TTR("Create New")+" "+p_base);
_update_search();
}
+String CreateDialog::get_selected_type() {
+
+ TreeItem *selected = search_options->get_selected();
+ if (selected)
+ return selected->get_text(0);
+ else
+ return String();
+}
+
Object *CreateDialog::instance_selected() {
TreeItem *selected = search_options->get_selected();
@@ -541,7 +567,7 @@ void CreateDialog::_bind_methods() {
void CreateDialog::set_base_type(const String& p_base) {
- set_title(TTR("Create ")+p_base+" Type");
+ set_title(vformat("Create %s Type",p_base));
if (base==p_base)
return;
@@ -562,14 +588,14 @@ CreateDialog::CreateDialog() {
add_child(vbc);
set_child_rect(vbc);
- get_ok()->set_text(TTR("Create"));
+ get_ok()->set_text("Create");
tree = memnew( Tree );
- vbc->add_margin_child(TTR("Type:"),tree,true);
+ vbc->add_margin_child("Type:",tree,true);
//tree->set_hide_root(true);
filter = memnew( LineEdit );
- vbc->add_margin_child(TTR("Filter:"),filter);
+ vbc->add_margin_child("Filter:",filter);
base="Node";
set_as_toplevel(true);
diff --git a/tools/editor/create_dialog.h b/tools/editor/create_dialog.h
index a46ff5ae06..8957479beb 100644
--- a/tools/editor/create_dialog.h
+++ b/tools/editor/create_dialog.h
@@ -66,6 +66,7 @@ protected:
public:
Object *instance_selected();
+ String get_selected_type();
void set_base_type(const String& p_base);
String get_base_type() const;
diff --git a/tools/editor/dependency_editor.cpp b/tools/editor/dependency_editor.cpp
index 784315522c..a702d3c687 100644
--- a/tools/editor/dependency_editor.cpp
+++ b/tools/editor/dependency_editor.cpp
@@ -27,7 +27,7 @@ void DependencyEditor::_load_pressed(Object* p_item,int p_cell,int p_button){
String fname = ti->get_text(0);
replacing = ti->get_text(1);
- search->set_title(TTR("Search Replacement For: ")+replacing.get_file());
+ search->set_title(TTR("Search Replacement For:")+" "+replacing.get_file());
search->clear_filters();
List<String> ext;
@@ -180,7 +180,7 @@ void DependencyEditor::_update_list() {
String name = path.get_file();
Ref<Texture> icon;
- if (has_icon(type,TTR("EditorIcons"))) {
+ if (has_icon(type,"EditorIcons")) {
icon=get_icon(type,"EditorIcons");
} else {
icon=get_icon("Object","EditorIcons");
@@ -209,15 +209,15 @@ void DependencyEditor::edit(const String& p_path) {
editing=p_path;
- set_title(TTR("Dependencies For: ")+p_path.get_file());
+ set_title(TTR("Dependencies For:")+" "+p_path.get_file());
_update_list();
popup_centered_ratio();
if (EditorNode::get_singleton()->is_scene_open(p_path)) {
- EditorNode::get_singleton()->show_warning(TTR("Scene '")+p_path.get_file()+"' is currently being edited.\nChanges will not take effect unless reloaded.");
+ EditorNode::get_singleton()->show_warning(vformat(TTR("Scene '%s' is currently being edited.\nChanges will not take effect unless reloaded."),p_path.get_file()));
} else if (ResourceCache::has(p_path)) {
- EditorNode::get_singleton()->show_warning(TTR("Resource '")+p_path.get_file()+"' is in use.\nChanges will take effect when reloaded.");
+ EditorNode::get_singleton()->show_warning(vformat(TTR("Resource '%s' is in use.\nChanges will take effect when reloaded."),p_path.get_file()));
}
}
@@ -240,8 +240,8 @@ DependencyEditor::DependencyEditor() {
tree = memnew( Tree );
tree->set_columns(2);
tree->set_column_titles_visible(true);
- tree->set_column_title(0,"Resource");
- tree->set_column_title(1,"Path");
+ tree->set_column_title(0,TTR("Resource"));
+ tree->set_column_title(1,TTR("Path"));
tree->set_hide_root(true);
tree->connect("button_pressed",this,"_load_pressed");
@@ -301,7 +301,7 @@ void DependencyEditorOwners::_fill_owners(EditorFileSystemDirectory *efsd) {
Ref<Texture> icon;
String type=efsd->get_file_type(i);
- if (!has_icon(type,TTR("EditorIcons"))) {
+ if (!has_icon(type,"EditorIcons")) {
icon=get_icon("Object","EditorIcons");
} else {
icon=get_icon(type,"EditorIcons");
@@ -319,7 +319,7 @@ void DependencyEditorOwners::show(const String& p_path) {
_fill_owners(EditorFileSystem::get_singleton()->get_filesystem());
popup_centered_ratio();
- set_title(TTR("Owners Of: ")+p_path.get_file());
+ set_title(TTR("Owners Of:")+" "+p_path.get_file());
}
@@ -362,7 +362,7 @@ void DependencyRemoveDialog::_fill_owners(EditorFileSystemDirectory *efsd) {
Ref<Texture> icon;
String type=efsd->get_file_type(i);
- if (!has_icon(type,TTR("EditorIcons"))) {
+ if (!has_icon(type,"EditorIcons")) {
icon=get_icon("Object","EditorIcons");
} else {
icon=get_icon(type,"EditorIcons");
@@ -401,7 +401,7 @@ void DependencyRemoveDialog::show(const Vector<String> &to_erase) {
if (exist) {
owners->show();
- text->set_text("The files being removed are required by other resources in order for them to work.\nRemove them anyway? (no undo)");
+ text->set_text(TTR("The files being removed are required by other resources in order for them to work.\nRemove them anyway? (no undo)"));
popup_centered_minsize(Size2(500,220));
} else {
owners->hide();
@@ -448,7 +448,7 @@ void DependencyErrorDialog::show(const String& p_for_file,const Vector<String> &
for_file=p_for_file;
- set_title(TTR("Error loading: ")+p_for_file.get_file());
+ set_title(TTR("Error loading:")+" "+p_for_file.get_file());
files->clear();
TreeItem *root = files->create_item(NULL);
@@ -461,7 +461,7 @@ void DependencyErrorDialog::show(const String& p_for_file,const Vector<String> &
type=report[i].get_slice("::",1);
Ref<Texture> icon;
- if (!has_icon(type,TTR("EditorIcons"))) {
+ if (!has_icon(type,"EditorIcons")) {
icon=get_icon("Object","EditorIcons");
} else {
icon=get_icon(type,"EditorIcons");
@@ -523,7 +523,7 @@ void OrphanResourcesDialog::ok_pressed() {
if (paths.empty())
return;
- delete_confirm->set_text(TTR("Permanently Delete ")+itos(paths.size())+" Item(s) ? (No Undo!!)");
+ delete_confirm->set_text(vformat(TTR("Permanently delete %d item(s)? (No undo!)"),paths.size()));
delete_confirm->popup_centered_minsize();
}
@@ -580,7 +580,7 @@ bool OrphanResourcesDialog::_fill_owners(EditorFileSystemDirectory *efsd,HashMap
String type=efsd->get_file_type(i);
Ref<Texture> icon;
- if (has_icon(type,TTR("EditorIcons"))) {
+ if (has_icon(type,"EditorIcons")) {
icon=get_icon(type,"EditorIcons");
} else {
icon=get_icon("Object","EditorIcons");
@@ -675,7 +675,7 @@ OrphanResourcesDialog::OrphanResourcesDialog(){
files->set_column_min_width(1,100);
files->set_column_expand(0,true);
files->set_column_expand(1,false);
- files->set_column_title(0,"Resource");
+ files->set_column_title(0,TTR("Resource"));
files->set_column_title(1,TTR("Owns"));
files->set_hide_root(true);
vbc->add_margin_child(TTR("Resources Without Explicit Ownership:"),files,true);
diff --git a/tools/editor/editor_file_dialog.cpp b/tools/editor/editor_file_dialog.cpp
index 8c16955d9f..185ec17459 100644
--- a/tools/editor/editor_file_dialog.cpp
+++ b/tools/editor/editor_file_dialog.cpp
@@ -7,7 +7,7 @@
#include "editor_settings.h"
#include "scene/gui/margin_container.h"
#include "os/file_access.h"
-
+#include "editor_scale.h"
EditorFileDialog::GetIconFunc EditorFileDialog::get_icon_func=NULL;
EditorFileDialog::GetIconFunc EditorFileDialog::get_large_icon_func=NULL;
@@ -347,7 +347,7 @@ void EditorFileDialog::_action_pressed() {
if (!valid) {
- exterr->popup_centered_minsize(Size2(250,80));
+ exterr->popup_centered_minsize(Size2(250,80)*EDSCALE);
return;
}
@@ -431,6 +431,7 @@ void EditorFileDialog::update_file_list() {
int thumbnail_size = EditorSettings::get_singleton()->get("file_dialog/thumbnail_size");
+ thumbnail_size*=EDSCALE;
Ref<Texture> folder_thumbnail;
Ref<Texture> file_thumbnail;
@@ -677,7 +678,7 @@ void EditorFileDialog::update_filters() {
if (max_filters<filters.size())
all_filters+=", ...";
- filter->add_item(TTR("All Recognized ( ")+all_filters+" )");
+ filter->add_item(TTR("All Recognized")+" ( "+all_filters+" )");
}
for(int i=0;i<filters.size();i++) {
@@ -840,7 +841,7 @@ void EditorFileDialog::_make_dir_confirm() {
_push_history();
} else {
- mkdirerr->popup_centered_minsize(Size2(250,50));
+ mkdirerr->popup_centered_minsize(Size2(250,50)*EDSCALE);
}
makedirname->set_text(""); // reset label
}
@@ -848,7 +849,7 @@ void EditorFileDialog::_make_dir_confirm() {
void EditorFileDialog::_make_dir() {
- makedialog->popup_centered_minsize(Size2(250,80));
+ makedialog->popup_centered_minsize(Size2(250,80)*EDSCALE);
makedirname->grab_focus();
}
diff --git a/tools/editor/editor_file_system.cpp b/tools/editor/editor_file_system.cpp
index 6423b75abc..c5c92b5228 100644
--- a/tools/editor/editor_file_system.cpp
+++ b/tools/editor/editor_file_system.cpp
@@ -149,6 +149,41 @@ bool EditorFileSystemDirectory::is_missing_sources(int p_idx) const {
return false;
}
+bool EditorFileSystemDirectory::have_sources_changed(int p_idx) const {
+
+ ERR_FAIL_INDEX_V(p_idx,files.size(),false);
+ return files[p_idx]->meta.sources_changed;
+
+}
+
+int EditorFileSystemDirectory::get_source_count(int p_idx) const {
+
+ ERR_FAIL_INDEX_V(p_idx,files.size(),0);
+ if (!files[p_idx]->meta.enabled)
+ return 0;
+ return files[p_idx]->meta.sources.size();
+}
+String EditorFileSystemDirectory::get_source_file(int p_idx,int p_source) const {
+
+ ERR_FAIL_INDEX_V(p_idx,files.size(),String());
+ ERR_FAIL_INDEX_V(p_source,files[p_idx]->meta.sources.size(),String());
+ if (!files[p_idx]->meta.enabled)
+ return String();
+
+ return files[p_idx]->meta.sources[p_source].path;
+
+}
+bool EditorFileSystemDirectory::is_source_file_missing(int p_idx,int p_source) const {
+
+ ERR_FAIL_INDEX_V(p_idx,files.size(),false);
+ ERR_FAIL_INDEX_V(p_source,files[p_idx]->meta.sources.size(),false);
+ if (!files[p_idx]->meta.enabled)
+ return false;
+
+ return files[p_idx]->meta.sources[p_source].missing;
+}
+
+
StringName EditorFileSystemDirectory::get_file_type(int p_idx) const {
ERR_FAIL_INDEX_V(p_idx,files.size(),"");
@@ -210,8 +245,11 @@ EditorFileSystemDirectory::ImportMeta EditorFileSystem::_get_meta(const String&
EditorFileSystemDirectory::ImportMeta m;
if (imd.is_null()) {
m.enabled=false;
+ m.sources_changed=false;
} else {
m.enabled=true;
+ m.sources_changed=false;
+
for(int i=0;i<imd->get_source_count();i++) {
EditorFileSystemDirectory::ImportMeta::Source s;
s.path=imd->get_source_path(i);
@@ -314,7 +352,7 @@ void EditorFileSystem::_scan_filesystem() {
- EditorProgressBG scan_progress("efs",TTR("ScanFS"),1000);
+ EditorProgressBG scan_progress("efs","ScanFS",1000);
ScanProgress sp;
sp.low=0;
@@ -609,7 +647,7 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir,DirAccess
da->change_dir("..");
} else {
- ERR_PRINTS(TTR("Can't go into subdir: ")+E->get());
+ ERR_PRINTS(TTR("Cannot go into subdir:")+" "+E->get());
}
p_progress.update(idx,total);
@@ -649,7 +687,13 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir,DirAccess
ia.dir=p_dir;
ia.file=E->get();
scan_actions.push_back(ia);
+ fi->meta.sources_changed=true;
+ } else {
+ fi->meta.sources_changed=false;
}
+
+ } else {
+ fi->meta.sources_changed=true;
}
p_dir->files.push_back(fi);
@@ -764,6 +808,9 @@ void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir,const S
ia.dir=p_dir;
ia.file=f;
scan_actions.push_back(ia);
+ fi->meta.sources_changed=true;
+ } else {
+ fi->meta.sources_changed=false;
}
} else {
@@ -800,6 +847,9 @@ void EditorFileSystem::_scan_fs_changes(EditorFileSystemDirectory *p_dir,const S
ia.dir=p_dir;
ia.file=p_dir->files[i]->file;
scan_actions.push_back(ia);
+ p_dir->files[i]->meta.sources_changed=true;
+ } else {
+ p_dir->files[i]->meta.sources_changed=false;
}
}
@@ -1113,6 +1163,25 @@ String EditorFileSystem::get_file_type(const String& p_file) const {
}
+EditorFileSystemDirectory* EditorFileSystem::find_file(const String& p_file,int* r_index) const {
+
+ if (!filesystem || scanning)
+ return NULL;
+
+ EditorFileSystemDirectory *fs=NULL;
+ int cpos=-1;
+ if (!_find_file(p_file,&fs,cpos)) {
+
+ return NULL;
+ }
+
+
+ if (r_index)
+ *r_index=cpos;
+
+ return fs;
+}
+
EditorFileSystemDirectory *EditorFileSystem::get_path(const String& p_path) {
diff --git a/tools/editor/editor_file_system.h b/tools/editor/editor_file_system.h
index 254dd68c14..b96e947569 100644
--- a/tools/editor/editor_file_system.h
+++ b/tools/editor/editor_file_system.h
@@ -55,7 +55,7 @@ class EditorFileSystemDirectory : public Object {
String path;
String md5;
uint64_t modified_time;
- bool missing;
+ bool missing;
};
@@ -63,6 +63,7 @@ class EditorFileSystemDirectory : public Object {
String import_editor;
Vector<String> deps;
bool enabled;
+ bool sources_changed;
};
@@ -102,8 +103,12 @@ public:
StringName get_file_type(int p_idx) const;
bool get_file_meta(int p_idx) const;
bool is_missing_sources(int p_idx) const;
+ bool have_sources_changed(int p_idx) const;
Vector<String> get_missing_sources(int p_idx) const;
Vector<String> get_file_deps(int p_idx) const;
+ int get_source_count(int p_idx) const;
+ String get_source_file(int p_idx,int p_source) const;
+ bool is_source_file_missing(int p_idx,int p_source) const;
EditorFileSystemDirectory *get_parent();
@@ -230,6 +235,7 @@ public:
String find_resource_from_source(const String& p_path) const;
EditorFileSystemDirectory *get_path(const String& p_path);
String get_file_type(const String& p_file) const;
+ EditorFileSystemDirectory* find_file(const String& p_file,int* r_index) const;
EditorFileSystem();
~EditorFileSystem();
};
diff --git a/tools/editor/editor_fonts.cpp b/tools/editor/editor_fonts.cpp
index a3ec08f986..7ec22a4068 100644
--- a/tools/editor/editor_fonts.cpp
+++ b/tools/editor/editor_fonts.cpp
@@ -30,6 +30,11 @@
#include "doc_font.h"
#include "doc_title_font.h"
#include "doc_code_font.h"
+#include "builtin_fonts.h"
+#include "editor_settings.h"
+#include "scene/resources/dynamic_font.h"
+#include "editor_scale.h"
+#include "scene/resources/default_theme/default_theme.h"
static Ref<BitmapFont> make_font(int p_height,int p_ascent, int p_valign, int p_charcount, const int *p_chars,const Ref<Texture> &p_texture) {
@@ -61,15 +66,103 @@ static Ref<BitmapFont> make_font(int p_height,int p_ascent, int p_valign, int p_
return font;
}
+#define MAKE_FALLBACKS(m_name)\
+ m_name->add_fallback(DroidSansFallback);\
+ m_name->add_fallback(DroidSansJapanese);\
+ m_name->add_fallback(DroidSansArabic);\
+ m_name->add_fallback(DroidSansHebrew);\
+ m_name->add_fallback(DroidSansThai);
+
+#define MAKE_DROID_SANS(m_name,m_size) \
+ Ref<DynamicFont> m_name;\
+ m_name.instance();\
+ m_name->set_size(m_size);\
+ m_name->set_font_data(DroidSans);\
+ MAKE_FALLBACKS(m_name);
+
void editor_register_fonts(Ref<Theme> p_theme) {
+ /* Droid Sans */
+
+ Ref<DynamicFontData> DroidSans;
+ DroidSans.instance();
+ DroidSans->set_font_ptr(_font_DroidSans,_font_DroidSans_size);
+ DroidSans->set_force_autohinter(true); //just looks better..i think?
+
+ Ref<DynamicFontData> DroidSansFallback;
+ DroidSansFallback.instance();
+ DroidSansFallback->set_font_ptr(_font_DroidSansFallback,_font_DroidSansFallback_size);
+ DroidSansFallback->set_force_autohinter(true); //just looks better..i think?
+
+ Ref<DynamicFontData> DroidSansJapanese;
+ DroidSansJapanese.instance();
+ DroidSansJapanese->set_font_ptr(_font_DroidSansJapanese,_font_DroidSansJapanese_size);
+ DroidSansJapanese->set_force_autohinter(true); //just looks better..i think?
+
+ Ref<DynamicFontData> DroidSansArabic;
+ DroidSansArabic.instance();
+ DroidSansArabic->set_font_ptr(_font_DroidSansArabic,_font_DroidSansArabic_size);
+ DroidSansArabic->set_force_autohinter(true); //just looks better..i think?
+
+ Ref<DynamicFontData> DroidSansHebrew;
+ DroidSansHebrew.instance();
+ DroidSansHebrew->set_font_ptr(_font_DroidSansHebrew,_font_DroidSansHebrew_size);
+ DroidSansHebrew->set_force_autohinter(true); //just looks better..i think?
+
+ Ref<DynamicFontData> DroidSansThai;
+ DroidSansThai.instance();
+ DroidSansThai->set_font_ptr(_font_DroidSansThai,_font_DroidSansThai_size);
+ DroidSansThai->set_force_autohinter(true); //just looks better..i think?
+
+ /* Source Code Pro */
+
+
+ Ref<DynamicFontData> dfmono;
+ dfmono.instance();
+ dfmono->set_font_ptr(_font_source_code_pro,_font_source_code_pro_size);
+ //dfd->set_force_autohinter(true); //just looks better..i think?
+
+ MAKE_DROID_SANS(df,int(EditorSettings::get_singleton()->get("global/font_size"))*EDSCALE);
+
+ p_theme->set_default_theme_font(df);
- Ref<BitmapFont> doc_font = make_font(_bi_font_doc_font_height,_bi_font_doc_font_ascent,0,_bi_font_doc_font_charcount,_bi_font_doc_font_characters,p_theme->get_icon("DocFont","EditorIcons"));
- Ref<BitmapFont> doc_code_font = make_font(_bi_font_doc_code_font_height,_bi_font_doc_code_font_ascent,0,_bi_font_doc_code_font_charcount,_bi_font_doc_code_font_characters,p_theme->get_icon("DocCodeFont","EditorIcons"));
- Ref<BitmapFont> doc_title_font = make_font(_bi_font_doc_title_font_height,_bi_font_doc_title_font_ascent,0,_bi_font_doc_title_font_charcount,_bi_font_doc_title_font_characters,p_theme->get_icon("DocTitleFont","EditorIcons"));
- p_theme->set_font("doc","EditorFonts",doc_font);
- p_theme->set_font("doc_code","EditorFonts",doc_code_font);
- p_theme->set_font("doc_title","EditorFonts",doc_title_font);
+// Ref<BitmapFont> doc_font = make_font(_bi_font_doc_font_height,_bi_font_doc_font_ascent,0,_bi_font_doc_font_charcount,_bi_font_doc_font_characters,p_theme->get_icon("DocFont","EditorIcons"));
+// Ref<BitmapFont> doc_title_font = make_font(_bi_font_doc_title_font_height,_bi_font_doc_title_font_ascent,0,_bi_font_doc_title_font_charcount,_bi_font_doc_title_font_characters,p_theme->get_icon("DocTitleFont","EditorIcons"));
+// Ref<BitmapFont> doc_code_font = make_font(_bi_font_doc_code_font_height,_bi_font_doc_code_font_ascent,0,_bi_font_doc_code_font_charcount,_bi_font_doc_code_font_characters,p_theme->get_icon("DocCodeFont","EditorIcons"));
+
+ MAKE_DROID_SANS(df_title,int(EDITOR_DEF("help/help_title_font_size",18))*EDSCALE);
+
+ MAKE_DROID_SANS(df_doc,int(EDITOR_DEF("help/help_font_size",16))*EDSCALE);
+
+
+ p_theme->set_font("doc","EditorFonts",df_doc);
+ p_theme->set_font("doc_title","EditorFonts",df_title);
+
+
+ Ref<DynamicFont> df_code;
+ df_code.instance();
+ df_code->set_size(int(EditorSettings::get_singleton()->get("global/source_font_size"))*EDSCALE);
+ df_code->set_font_data(dfmono);
+ MAKE_FALLBACKS(df_code);
+
+ p_theme->set_font("source","EditorFonts",df_code);
+
+ Ref<DynamicFont> df_doc_code;
+ df_doc_code.instance();
+ df_doc_code->set_size(int(EDITOR_DEF("help/help_source_font_size",14))*EDSCALE);
+ df_doc_code->set_font_data(dfmono);
+ MAKE_FALLBACKS(df_doc_code);
+
+
+ p_theme->set_font("doc_source","EditorFonts",df_doc_code);
+
+ if (editor_is_hidpi()) {
+ //replace default theme
+ Ref<Texture> di;
+ Ref<StyleBox> ds;
+ fill_default_theme(p_theme,df,df_doc,di,ds,true);
+
+ }
}
diff --git a/tools/editor/editor_help.cpp b/tools/editor/editor_help.cpp
index a8cb1a5730..2d0a8a80b0 100644
--- a/tools/editor/editor_help.cpp
+++ b/tools/editor/editor_help.cpp
@@ -130,6 +130,7 @@ void EditorHelpSearch::_update_search() {
else
cicon=def_icon;
+
for(int i=0;i<c.methods.size();i++) {
if( (term.begins_with(".") && c.methods[i].name.begins_with(term.right(1)))
|| (term.ends_with("(") && c.methods[i].name.ends_with(term.left(term.length()-1).strip_edges()))
@@ -519,7 +520,7 @@ EditorHelpIndex::EditorHelpIndex() {
search_box->connect("input_event", this, "_sbox_input");
class_list = memnew( Tree );
- vbc->add_margin_child(TTR("Class List: "), class_list, true);
+ vbc->add_margin_child(TTR("Class List:")+" ", class_list, true);
class_list->set_v_size_flags(SIZE_EXPAND_FILL);
class_list->connect("item_activated",this,"_tree_item_selected");
@@ -643,6 +644,13 @@ void EditorHelp::_class_desc_select(const String& p_select) {
}
+void EditorHelp::_class_desc_input(const InputEvent& p_input) {
+ if (p_input.type==InputEvent::MOUSE_BUTTON && p_input.mouse_button.pressed && p_input.mouse_button.button_index==1) {
+ class_desc->set_selection_enabled(false);
+ class_desc->set_selection_enabled(true);
+ }
+}
+
void EditorHelp::_add_type(const String& p_type) {
String t = p_type;
@@ -697,20 +705,20 @@ Error EditorHelp::_goto_desc(const String& p_class,int p_vscr) {
//edited_class->show();
- DocData::ClassDoc &cd=doc->class_list[p_class];
+ DocData::ClassDoc cd=doc->class_list[p_class]; //make a copy, so we can sort without worrying
Color h_color;
- Ref<Font> doc_font = get_font("normal","Fonts");
- Ref<Font> doc_code_font = get_font("source","Fonts");
- Ref<Font> doc_title_font = get_font("large","Fonts");
+ Ref<Font> doc_font = get_font("doc","EditorFonts");
+ Ref<Font> doc_title_font = get_font("doc_title","EditorFonts");
+ Ref<Font> doc_code_font = get_font("doc_source","EditorFonts");
h_color=Color(1,1,1,1);
class_desc->push_font(doc_title_font);
class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/keyword_color"));
- class_desc->add_text(TTR("Class: "));
+ class_desc->add_text(TTR("Class:")+" ");
class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/base_type_color"));
_add_text(p_class);
class_desc->pop();
@@ -722,7 +730,7 @@ Error EditorHelp::_goto_desc(const String& p_class,int p_vscr) {
class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/keyword_color"));
class_desc->push_font(doc_title_font);
- class_desc->add_text(TTR("Inherits: "));
+ class_desc->add_text(TTR("Inherits:")+" ");
class_desc->pop();
class_desc->pop();
@@ -756,7 +764,7 @@ Error EditorHelp::_goto_desc(const String& p_class,int p_vscr) {
if (!found) {
class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/keyword_color"));
class_desc->push_font(doc_title_font);
- class_desc->add_text("Inherited by: ");
+ class_desc->add_text(TTR("Inherited by:")+" ");
class_desc->pop();
class_desc->pop();
@@ -794,7 +802,7 @@ Error EditorHelp::_goto_desc(const String& p_class,int p_vscr) {
//class_desc->add_newline();
class_desc->add_newline();
class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/text_color"));
- class_desc->push_font( get_font("normal","Fonts") );
+ class_desc->push_font( doc_font );
class_desc->push_indent(1);
_add_text(cd.brief_description);
class_desc->pop();
@@ -805,9 +813,14 @@ Error EditorHelp::_goto_desc(const String& p_class,int p_vscr) {
}
bool method_descr=false;
+ bool sort_methods = EditorSettings::get_singleton()->get("help/sort_functions_alphabetically");
+
if (cd.methods.size()) {
+ if (sort_methods)
+ cd.methods.sort();
+
class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/keyword_color"));
class_desc->push_font(doc_title_font);
class_desc->add_text(TTR("Public Methods:"));
@@ -979,6 +992,9 @@ Error EditorHelp::_goto_desc(const String& p_class,int p_vscr) {
}
if (cd.signals.size()) {
+ if (sort_methods) {
+ cd.signals.sort();
+ }
class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/keyword_color"));
class_desc->push_font(doc_title_font);
class_desc->add_text(TTR("Signals:"));
@@ -1098,7 +1114,7 @@ Error EditorHelp::_goto_desc(const String& p_class,int p_vscr) {
class_desc->add_newline();
class_desc->add_newline();
class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/text_color"));
- class_desc->push_font( get_font("normal","Fonts") );
+ class_desc->push_font( doc_font );
class_desc->push_indent(1);
_add_text(cd.description);
class_desc->pop();
@@ -1168,7 +1184,7 @@ Error EditorHelp::_goto_desc(const String& p_class,int p_vscr) {
class_desc->add_newline();
class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/text_color"));
- class_desc->push_font( get_font("normal","Fonts") );
+ class_desc->push_font( doc_font );
class_desc->push_indent(1);
_add_text(cd.methods[i].description);
class_desc->pop();
@@ -1248,9 +1264,12 @@ void EditorHelp::_add_text(const String& p_bbcode) {
class_desc->push_indent(1);*/
int pos = 0;
+ Ref<Font> doc_font = get_font("doc","EditorFonts");
+ Ref<Font> doc_code_font = get_font("doc_source","EditorFonts");
+
String bbcode=p_bbcode.replace("\t"," ").replace("\r"," ").strip_edges();
- //find double newlines, keep them
+ //change newlines for double newlines
for(int i=0;i<bbcode.length();i++) {
//find valid newlines (double)
@@ -1269,10 +1288,13 @@ void EditorHelp::_add_text(const String& p_bbcode) {
if (dnl) {
bbcode[i]=0xFFFF;
+ //keep
i=j;
} else {
- bbcode[i]=' ';
- i=j-1;
+ bbcode=bbcode.insert(i,"\n");
+ i++;
+ //bbcode[i]=' ';
+ //i=j-1;
}
}
}
@@ -1280,7 +1302,7 @@ void EditorHelp::_add_text(const String& p_bbcode) {
//remove double spaces or spaces after newlines
for(int i=0;i<bbcode.length();i++) {
- if (bbcode[i]==' ' || bbcode[i]==0xFFFF) {
+ if (bbcode[i]==' ' || bbcode[i]=='\n' || bbcode[i]==0xFFFF) {
for(int j=i+1;j<p_bbcode.length();j++) {
if (bbcode[j]==' ') {
@@ -1353,35 +1375,45 @@ void EditorHelp::_add_text(const String& p_bbcode) {
} else if (tag.begins_with("method ")) {
String m = tag.substr(7,tag.length());
+ class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/keyword_color"));
class_desc->push_meta("@"+m);
class_desc->add_text(m+"()");
class_desc->pop();
+ class_desc->pop();
pos=brk_end+1;
} else if (doc->class_list.has(tag)) {
+ class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/keyword_color"));
class_desc->push_meta("#"+tag);
class_desc->add_text(tag);
class_desc->pop();
+ class_desc->pop();
pos=brk_end+1;
} else if (tag=="b") {
//use bold font
- class_desc->push_font(get_font("source","Fonts"));
+ class_desc->push_font(doc_code_font);
pos=brk_end+1;
tag_stack.push_front(tag);
} else if (tag=="i") {
//use italics font
- class_desc->push_font(get_font("italic","Fonts"));
+ Color text_color = EditorSettings::get_singleton()->get("text_editor/text_color");
+ //no italics so emphasize with color
+ text_color.r*=1.1;
+ text_color.g*=1.1;
+ text_color.b*=1.1;
+ class_desc->push_color(text_color);
+ //class_desc->push_font(get_font("italic","Fonts"));
pos=brk_end+1;
tag_stack.push_front(tag);
} else if (tag=="code" || tag=="codeblock") {
//use monospace font
- class_desc->push_font(get_font("source","EditorFonts"));
+ class_desc->push_font(doc_code_font);
pos=brk_end+1;
tag_stack.push_front(tag);
} else if (tag=="center") {
@@ -1496,7 +1528,7 @@ void EditorHelp::_add_text(const String& p_bbcode) {
if (font.is_valid())
class_desc->push_font(font);
else {
- class_desc->push_font(get_font("source","rFonts"));
+ class_desc->push_font(doc_font);
}
pos=brk_end+1;
@@ -1600,6 +1632,7 @@ void EditorHelp::_bind_methods() {
ObjectTypeDB::bind_method("_class_list_select",&EditorHelp::_class_list_select);
ObjectTypeDB::bind_method("_class_desc_select",&EditorHelp::_class_desc_select);
+ ObjectTypeDB::bind_method("_class_desc_input",&EditorHelp::_class_desc_input);
// ObjectTypeDB::bind_method("_button_pressed",&EditorHelp::_button_pressed);
ObjectTypeDB::bind_method("_scroll_changed",&EditorHelp::_scroll_changed);
ObjectTypeDB::bind_method("_request_help",&EditorHelp::_request_help);
@@ -1618,6 +1651,7 @@ EditorHelp::EditorHelp() {
VBoxContainer *vbc = this;
+ EDITOR_DEF("help/sort_functions_alphabetically",true);
//class_list->connect("meta_clicked",this,"_class_list_select");
//class_list->set_selection_enabled(true);
@@ -1633,6 +1667,7 @@ EditorHelp::EditorHelp() {
pc->add_child(class_desc);
class_desc->set_area_as_parent_rect(8);
class_desc->connect("meta_clicked",this,"_class_desc_select");
+ class_desc->connect("input_event",this,"_class_desc_input");
}
class_desc->get_v_scroll()->connect("value_changed",this,"_scroll_changed");
diff --git a/tools/editor/editor_help.h b/tools/editor/editor_help.h
index f6dda9f545..c3d19894df 100644
--- a/tools/editor/editor_help.h
+++ b/tools/editor/editor_help.h
@@ -157,6 +157,7 @@ class EditorHelp : public VBoxContainer {
void _scroll_changed(double p_scroll);
void _class_list_select(const String& p_select);
void _class_desc_select(const String& p_select);
+ void _class_desc_input(const InputEvent& p_input);
Error _goto_desc(const String& p_class, int p_vscr=-1);
//void _update_history_buttons();
diff --git a/tools/editor/editor_import_export.cpp b/tools/editor/editor_import_export.cpp
index 91357e0f80..f9b9c0b41c 100644
--- a/tools/editor/editor_import_export.cpp
+++ b/tools/editor/editor_import_export.cpp
@@ -85,6 +85,9 @@ void EditorImportPlugin::_bind_methods() {
ObjectTypeDB::add_virtual_method(get_type_static(),MethodInfo("import_dialog",PropertyInfo(Variant::STRING,"from")));
ObjectTypeDB::add_virtual_method(get_type_static(),MethodInfo(Variant::INT,"import",PropertyInfo(Variant::STRING,"path"),PropertyInfo(Variant::OBJECT,"from",PROPERTY_HINT_RESOURCE_TYPE,"ResourceImportMetadata")));
ObjectTypeDB::add_virtual_method(get_type_static(),MethodInfo(Variant::RAW_ARRAY,"custom_export",PropertyInfo(Variant::STRING,"path"),PropertyInfo(Variant::OBJECT,"platform",PROPERTY_HINT_RESOURCE_TYPE,"EditorExportPlatform")));
+ ObjectTypeDB::add_virtual_method(get_type_static(),MethodInfo("import_from_drop",PropertyInfo(Variant::STRING_ARRAY,"files"),PropertyInfo(Variant::STRING,"dest_path")));
+ ObjectTypeDB::add_virtual_method(get_type_static(),MethodInfo("reimport_multiple_files",PropertyInfo(Variant::STRING_ARRAY,"files")));
+ ObjectTypeDB::add_virtual_method(get_type_static(),MethodInfo(Variant::BOOL,"can_reimport_multiple_files"));
// BIND_VMETHOD( mi );
}
@@ -130,13 +133,37 @@ Error EditorImportPlugin::import(const String& p_path, const Ref<ResourceImportM
Vector<uint8_t> EditorImportPlugin::custom_export(const String& p_path, const Ref<EditorExportPlatform> &p_platform) {
- if (get_script_instance() && get_script_instance()->has_method("_custom_export")) {
- get_script_instance()->call("_custom_export",p_path,p_platform);
+ if (get_script_instance() && get_script_instance()->has_method("custom_export")) {
+ get_script_instance()->call("custom_export",p_path,p_platform);
}
return Vector<uint8_t>();
}
+bool EditorImportPlugin::can_reimport_multiple_files() const {
+
+ if (get_script_instance() && get_script_instance()->has_method("can_reimport_multiple_files")) {
+ return get_script_instance()->call("can_reimport_multiple_files");
+ }
+
+ return false;
+}
+void EditorImportPlugin::reimport_multiple_files(const Vector<String>& p_list) {
+
+ if (get_script_instance() && get_script_instance()->has_method("reimport_multiple_files")) {
+ get_script_instance()->call("reimport_multiple_files",p_list);
+ }
+
+}
+
+void EditorImportPlugin::import_from_drop(const Vector<String>& p_drop, const String &p_dest_path) {
+
+ if (get_script_instance() && get_script_instance()->has_method("import_from_drop")) {
+ get_script_instance()->call("import_from_drop",p_drop,p_dest_path);
+ }
+
+}
+
EditorImportPlugin::EditorImportPlugin() {
@@ -240,12 +267,12 @@ static void _edit_files_with_filter(DirAccess *da,const List<String>& p_filters,
for(const List<String>::Element *F=p_filters.front();F;F=F->next()) {
if (fullpath.matchn(F->get())) {
- String act = TTR("Added: ");
+ String act = TTR("Added:")+" ";
if (!exclude) {
r_list.insert(fullpath);
} else {
- act = TTR("Removed: ");
+ act = TTR("Removed:")+" ";
r_list.erase(fullpath);
}
@@ -862,11 +889,11 @@ Error EditorExportPlatform::export_project_files(EditorExportSaveFunction p_func
- Ref<EditorTextureImportPlugin> plugin = EditorImportExport::get_singleton()->get_import_plugin_by_name("texture_atlas");
+ Ref<EditorTextureImportPlugin> plugin = EditorImportExport::get_singleton()->get_import_plugin_by_name("texture");
Error err = plugin->import2(dst_file,imd,get_image_compression(),true);
if (err) {
- EditorNode::add_io_error(TTR("Error saving atlas! ")+dst_file.get_file());
+ EditorNode::add_io_error(TTR("Error saving atlas:")+" "+dst_file.get_file());
return ERR_CANT_CREATE;
}
@@ -916,7 +943,7 @@ Error EditorExportPlatform::export_project_files(EditorExportSaveFunction p_func
String path = EditorSettings::get_singleton()->get_settings_path()+"/tmp/tmpatlas.atex";
Error err = ResourceSaver::save(path,atex);
if (err!=OK) {
- EditorNode::add_io_error(TTR("Could not save atlas subtexture: ")+path);
+ EditorNode::add_io_error(TTR("Could not save atlas subtexture:")+" "+path);
return ERR_CANT_CREATE;
}
Vector<uint8_t> data = FileAccess::get_file_as_array(path);
@@ -1157,7 +1184,7 @@ Error EditorExportPlatform::save_pack_file(void *p_userdata,const String& p_path
MD5Final(&ctx);
pd->f->store_buffer(ctx.digest,16);
}
- pd->ep->step(TTR("Storing File: ")+p_path,2+p_file*100/p_total,false);
+ pd->ep->step(TTR("Storing File:")+" "+p_path,2+p_file*100/p_total,false);
pd->count++;
pd->ftmp->store_buffer(p_data.ptr(),p_data.size());
if (pd->alignment > 1) {
@@ -1195,7 +1222,7 @@ Error EditorExportPlatform::save_zip_file(void *p_userdata,const String& p_path,
zipWriteInFileInZip(zip,p_data.ptr(),p_data.size());
zipCloseFileInZip(zip);
- zd->ep->step(TTR("Storing File: ")+p_path,2+p_file*100/p_total,false);
+ zd->ep->step(TTR("Storing File:")+" "+p_path,2+p_file*100/p_total,false);
zd->count++;
return OK;
@@ -1309,7 +1336,7 @@ Error EditorExportPlatformPC::export_project(const String& p_path, bool p_debug,
- EditorProgress ep("export",TTR("Exporting for ")+get_name(),102);
+ EditorProgress ep("export",vformat(TTR("Exporting for %s"),get_name()),102);
const int BUFSIZE = 32768;
diff --git a/tools/editor/editor_import_export.h b/tools/editor/editor_import_export.h
index 5e09d674d1..e21fd8c8f8 100644
--- a/tools/editor/editor_import_export.h
+++ b/tools/editor/editor_import_export.h
@@ -60,6 +60,9 @@ public:
virtual String get_visible_name() const;
virtual void import_dialog(const String& p_from="");
virtual Error import(const String& p_path, const Ref<ResourceImportMetadata>& p_from);
+ virtual void import_from_drop(const Vector<String>& p_drop,const String& p_dest_path);
+ virtual void reimport_multiple_files(const Vector<String>& p_list);
+ virtual bool can_reimport_multiple_files() const;
virtual Vector<uint8_t> custom_export(const String& p_path,const Ref<EditorExportPlatform> &p_platform);
EditorImportPlugin();
diff --git a/tools/editor/editor_node.cpp b/tools/editor/editor_node.cpp
index fc676bda7e..01a6e3514c 100644
--- a/tools/editor/editor_node.cpp
+++ b/tools/editor/editor_node.cpp
@@ -59,11 +59,13 @@
// plugins
#include "plugins/sprite_frames_editor_plugin.h"
-#include "plugins/sprite_region_editor_plugin.h"
+#include "plugins/texture_region_editor_plugin.h"
#include "plugins/canvas_item_editor_plugin.h"
#include "addon_editor_plugin.h"
#include "plugins/spatial_editor_plugin.h"
#include "plugins/sample_editor_plugin.h"
+#include "plugins/texture_editor_plugin.h"
+#include "plugins/material_editor_plugin.h"
#include "plugins/sample_library_editor_plugin.h"
#include "plugins/sample_player_editor_plugin.h"
#include "plugins/camera_editor_plugin.h"
@@ -72,6 +74,7 @@
#include "plugins/item_list_editor_plugin.h"
#include "plugins/stream_editor_plugin.h"
#include "plugins/multimesh_editor_plugin.h"
+#include "plugins/mesh_instance_editor_plugin.h"
#include "plugins/mesh_editor_plugin.h"
#include "plugins/theme_editor_plugin.h"
@@ -103,6 +106,7 @@
#include "tools/editor/io_plugins/editor_font_import_plugin.h"
#include "tools/editor/io_plugins/editor_sample_import_plugin.h"
#include "tools/editor/io_plugins/editor_translation_import_plugin.h"
+#include "tools/editor/io_plugins/editor_bitmask_import_plugin.h"
#include "tools/editor/io_plugins/editor_mesh_import_plugin.h"
#include "tools/editor/io_plugins/editor_export_scene.h"
@@ -185,10 +189,22 @@ void EditorNode::_unhandled_input(const InputEvent& p_event) {
if (!p_event.key.mod.shift && !p_event.key.mod.command)
_editor_select(EDITOR_SCRIPT);
break;
- case KEY_F5: _menu_option_confirm((p_event.key.mod.control&&p_event.key.mod.shift)?RUN_PLAY_CUSTOM_SCENE:RUN_PLAY,true); break;
+ /* case KEY_F5: _menu_option_confirm((p_event.key.mod.control&&p_event.key.mod.shift)?RUN_PLAY_CUSTOM_SCENE:RUN_PLAY,true); break;
case KEY_F6: _menu_option_confirm(RUN_PLAY_SCENE,true); break;
- case KEY_F7: _menu_option_confirm(RUN_PAUSE,true); break;
- case KEY_F8: _menu_option_confirm(RUN_STOP,true); break;
+ //case KEY_F7: _menu_option_confirm(RUN_PAUSE,true); break;
+ case KEY_F8: _menu_option_confirm(RUN_STOP,true); break;*/
+ case KEY_F11: {
+ if (p_event.key.mod.shift) {
+ if (p_event.key.mod.control) {
+ set_distraction_free_mode(!get_distraction_free_mode());
+ } else if (distraction_free_mode) {
+ distraction_free_mode = false;
+ _update_top_menu_visibility();
+ } else {
+ set_docks_visible(!get_docks_visible());
+ }
+ }
+ } break;
}
}
@@ -285,6 +301,7 @@ void EditorNode::_notification(int p_what) {
get_tree()->get_root()->set_as_audio_listener(false);
get_tree()->get_root()->set_as_audio_listener_2d(false);
get_tree()->set_auto_accept_quit(false);
+ get_tree()->connect("files_dropped",this,"_dropped_files");
//VisualServer::get_singleton()->viewport_set_hide_canvas(editor->get_scene_root()->get_viewport(),false);
//import_monitor->scan_changes();
@@ -372,6 +389,7 @@ void EditorNode::_notification(int p_what) {
_menu_option_confirm(DEPENDENCY_LOAD_CHANGED_IMAGES,true);
}
+ waiting_for_sources_changed=true;
EditorFileSystem::get_singleton()->scan_sources();
}
@@ -409,6 +427,42 @@ void EditorNode::_fs_changed() {
void EditorNode::_sources_changed(bool p_exist) {
+ if (p_exist && bool(EditorSettings::get_singleton()->get("import/automatic_reimport_on_sources_changed"))) {
+ p_exist=false;
+
+ List<String> changed_sources;
+ EditorFileSystem::get_singleton()->get_changed_sources(&changed_sources);
+
+
+ EditorProgress ep("reimport",TTR("Re-Importing"),changed_sources.size());
+ int step_idx=0;
+
+ for(List<String>::Element *E=changed_sources.front();E;E=E->next()) {
+
+ ep.step(TTR("Importing:")+" "+E->get(),step_idx++);
+
+ Ref<ResourceImportMetadata> rimd = ResourceLoader::load_import_metadata(E->get());
+ ERR_CONTINUE(rimd.is_null());
+ String editor = rimd->get_editor();
+ if (editor.begins_with("texture_")) {
+ editor="texture"; //compatibility fix for old versions
+ }
+ Ref<EditorImportPlugin> eip = EditorImportExport::get_singleton()->get_import_plugin_by_name(editor);
+ ERR_CONTINUE(eip.is_null());
+ Error err = eip->import(E->get(),rimd);
+ if (err!=OK) {
+ EditorNode::add_io_error("Error Re Importing:\n "+E->get());
+ }
+
+ }
+
+ EditorFileSystem::get_singleton()->scan_sources();
+ waiting_for_sources_changed=false;
+
+ return;
+ }
+
+
if (p_exist) {
sources_button->set_icon(gui_base->get_icon("DependencyChanged","EditorIcons"));
@@ -421,6 +475,8 @@ void EditorNode::_sources_changed(bool p_exist) {
}
+ waiting_for_sources_changed=false;
+
}
void EditorNode::_vp_resized() {
@@ -432,13 +488,13 @@ void EditorNode::_rebuild_import_menu()
{
PopupMenu* p = import_menu->get_popup();
p->clear();
- p->add_item(TTR("Node from scene"), FILE_IMPORT_SUBSCENE);
- p->add_separator();
+ //p->add_item(TTR("Node From Scene"), FILE_IMPORT_SUBSCENE);
+ //p->add_separator();
for (int i = 0; i < editor_import_export->get_import_plugin_count(); i++) {
p->add_item(editor_import_export->get_import_plugin(i)->get_visible_name(), IMPORT_PLUGIN_BASE + i);
}
- p->add_separator();
- p->add_item(TTR("Re-Import.."), SETTINGS_IMPORT);
+ //p->add_separator();
+ //p->add_item(TTR("Re-Import.."), SETTINGS_IMPORT);
}
void EditorNode::_node_renamed() {
@@ -606,15 +662,15 @@ void EditorNode::_dialog_display_file_error(String p_file,Error p_error) {
case ERR_FILE_CANT_WRITE: {
- accept->set_text(TTR("Can't open file for writing: ")+p_file.extension());
+ accept->set_text(TTR("Can't open file for writing:")+" "+p_file.extension());
} break;
case ERR_FILE_UNRECOGNIZED: {
- accept->set_text(TTR("File format requested unknown: ")+p_file.extension());
+ accept->set_text(TTR("Requested file format unknown:")+" "+p_file.extension());
} break;
default: {
- accept->set_text(TTR("Error Saving."));
+ accept->set_text(TTR("Error while saving."));
}break;
}
@@ -941,6 +997,7 @@ void EditorNode::_save_scene_with_preview(String p_file) {
save.step(TTR("Creating Thumbnail"),3);
Image img = VS::get_singleton()->viewport_get_screen_capture(viewport);
int preview_size = EditorSettings::get_singleton()->get("file_dialog/thumbnail_size");;
+ preview_size*=EDSCALE;
int width,height;
if (img.get_width() > preview_size && img.get_width() >= img.get_height()) {
@@ -1071,8 +1128,8 @@ void EditorNode::_import_action(const String& p_action) {
current_option=-1;
//accept->get_cancel()->hide();
- accept->get_ok()->set_text(TTR("Ugh"));
- accept->set_text(TTR("Error importing scene."));
+ accept->get_ok()->set_text("Ugh");
+ accept->set_text("Error importing scene.");
accept->popup_centered(Size2(300,70));;
return;
}
@@ -1087,8 +1144,8 @@ void EditorNode::_import_action(const String& p_action) {
memdelete(src);
//accept->get_cancel()->hide();
- accept->get_ok()->set_text(TTR("Ugh"));
- accept->set_text(TTR("Error load scene to update."));
+ accept->get_ok()->set_text("Ugh");
+ accept->set_text("Error load scene to update.");
accept->popup_centered(Size2(300,70));;
return;
}
@@ -1128,8 +1185,8 @@ void EditorNode::_import(const String &p_file) {
current_option=-1;
//accept->get_cancel()->hide();
- accept->get_ok()->set_text(TTR("Ugh"));
- accept->set_text(TTR("Error importing scene."));
+ accept->get_ok()->set_text("Ugh");
+ accept->set_text("Error importing scene.");
accept->popup_centered(Size2(300,70));;
return;
}
@@ -1251,7 +1308,7 @@ void EditorNode::_dialog_action(String p_file) {
current_option=-1;
//accept->get_cancel()->hide();
accept->get_ok()->set_text(TTR("I see.."));
- accept->set_text(TTR("Can't load MeshLibrary for merging!."));
+ accept->set_text(TTR("Can't load MeshLibrary for merging!"));
accept->popup_centered_minsize();
return;
}
@@ -1268,7 +1325,7 @@ void EditorNode::_dialog_action(String p_file) {
if (err) {
accept->get_ok()->set_text(TTR("I see.."));
- accept->set_text(TTR("Error saving MeshLibrary!."));
+ accept->set_text(TTR("Error saving MeshLibrary!"));
accept->popup_centered_minsize();
return;
}
@@ -1286,7 +1343,7 @@ void EditorNode::_dialog_action(String p_file) {
current_option=-1;
//accept->get_cancel()->hide();
accept->get_ok()->set_text(TTR("I see.."));
- accept->set_text(TTR("Can't load TileSet for merging!."));
+ accept->set_text(TTR("Can't load TileSet for merging!"));
accept->popup_centered_minsize();
return;
}
@@ -1304,7 +1361,7 @@ void EditorNode::_dialog_action(String p_file) {
if (err) {
accept->get_ok()->set_text(TTR("I see.."));
- accept->set_text(TTR("Error saving TileSet!."));
+ accept->set_text(TTR("Error saving TileSet!"));
accept->popup_centered_minsize();
return;
}
@@ -1328,7 +1385,7 @@ void EditorNode::_dialog_action(String p_file) {
}
int ret = unzGoToFirstFile(pkg);
- int fc=0; //coun them
+ int fc=0; //count them
while(ret==UNZ_OK) {
fc++;
@@ -1368,7 +1425,7 @@ void EditorNode::_dialog_action(String p_file) {
file=file.get_file();
- p.step(TTR("Importing: ")+file,fc);
+ p.step(TTR("Importing:")+" "+file,fc);
print_line("IMPORT "+file);
FileAccess *f = FileAccess::open(EditorSettings::get_singleton()->get_settings_path()+"/templates/"+file,FileAccess::WRITE);
@@ -1454,7 +1511,7 @@ void EditorNode::_dialog_action(String p_file) {
_update_layouts_menu();
if (p_file=="Default") {
- show_warning(TTR("Restored Default layout to base settings."));
+ show_warning(TTR("Restored default layout to base settings."));
}
} break;
@@ -1477,6 +1534,7 @@ void EditorNode::push_item(Object *p_object,const String& p_property) {
if (!p_object) {
property_editor->edit(NULL);
+ node_dock->set_node(NULL);
scene_tree_dock->set_selected(NULL);
return;
}
@@ -1622,6 +1680,7 @@ void EditorNode::_edit_current() {
scene_tree_dock->set_selected(NULL);
property_editor->edit( NULL );
+ node_dock->set_node(NULL);
object_menu->set_disabled(true);
_display_top_editors(false);
@@ -1641,6 +1700,7 @@ void EditorNode::_edit_current() {
ERR_FAIL_COND(!current_res);
scene_tree_dock->set_selected(NULL);
property_editor->edit( current_res );
+ node_dock->set_node(NULL);
object_menu->set_disabled(false);
//resources_dock->add_resource(Ref<Resource>(current_res));
@@ -1657,6 +1717,7 @@ void EditorNode::_edit_current() {
property_editor->edit( current_node );
+ node_dock->set_node( current_node );
scene_tree_dock->set_selected(current_node);
object_menu->get_popup()->clear();
@@ -1665,6 +1726,7 @@ void EditorNode::_edit_current() {
} else {
property_editor->edit( current_obj );
+ node_dock->set_node(NULL);
//scene_tree_dock->set_selected(current_node);
//object_menu->get_popup()->clear();
@@ -1712,7 +1774,7 @@ void EditorNode::_edit_current() {
_set_top_editors(sub_plugins);
_set_editing_top_editors(current_obj);
_display_top_editors(true);
-
+
} else if (!editor_plugins_over->get_plugins_list().empty()) {
_hide_top_editors();
@@ -1733,18 +1795,18 @@ void EditorNode::_edit_current() {
PopupMenu *p=object_menu->get_popup();
p->clear();
- p->add_item(TTR("Copy Params"),OBJECT_COPY_PARAMS);
- p->add_item(TTR("Set Params"),OBJECT_PASTE_PARAMS);
+ p->add_shortcut(ED_SHORTCUT("property_editor/copy_params",TTR("Copy Params")),OBJECT_COPY_PARAMS);
+ p->add_shortcut(ED_SHORTCUT("property_editor/paste_params",TTR("Paste Params")),OBJECT_PASTE_PARAMS);
p->add_separator();
- p->add_item(TTR("Paste Resource"),RESOURCE_PASTE);
+ p->add_shortcut(ED_SHORTCUT("property_editor/paste_resource",TTR("Paste Resource")),RESOURCE_PASTE);
if (is_resource) {
- p->add_item(TTR("Copy Resource"),RESOURCE_COPY);
- p->add_item(TTR("Make Built-In"),RESOURCE_UNREF);
+ p->add_shortcut(ED_SHORTCUT("property_editor/copy_resource",TTR("Copy Resource")),RESOURCE_COPY);
+ p->add_shortcut(ED_SHORTCUT("property_editor/unref_resource",TTR("Make Built-In")),RESOURCE_UNREF);
}
p->add_separator();
- p->add_item(TTR("Make Sub-Resources Unique"),OBJECT_UNIQUE_RESOURCES);
+ p->add_shortcut(ED_SHORTCUT("property_editor/make_subresources_unique",TTR("Make Sub-Resources Unique")),OBJECT_UNIQUE_RESOURCES);
p->add_separator();
- p->add_icon_item(gui_base->get_icon("Help","EditorIcons"),"Class Reference",OBJECT_REQUEST_HELP);
+ p->add_icon_shortcut(gui_base->get_icon("Help","EditorIcons"),ED_SHORTCUT("property_editor/open_help",TTR("Open in Help")),OBJECT_REQUEST_HELP);
List<MethodInfo> methods;
current_obj->get_method_list(&methods);
@@ -1769,7 +1831,7 @@ void EditorNode::_edit_current() {
}
//p->add_separator();
- //p->add_item(TTR("All Methods"),OBJECT_CALL_METHOD);
+ //p->add_item("All Methods",OBJECT_CALL_METHOD);
update_keying();
@@ -1832,7 +1894,7 @@ void EditorNode::_run(bool p_current,const String& p_custom) {
current_option=-1;
//accept->get_cancel()->hide();
accept->get_ok()->set_text(TTR("I see.."));
- accept->set_text(TTR("No scene to run exists."));
+ accept->set_text(TTR("There is no defined scene to run."));
accept->popup_centered_minsize();
return;
}
@@ -1896,7 +1958,7 @@ void EditorNode::_run(bool p_current,const String& p_custom) {
current_option=-1;
//accept->get_cancel()->hide();
accept->get_ok()->set_text(TTR("I see.."));
- accept->set_text(TTR("Current scene was never saved, please save scene before running."));
+ accept->set_text(TTR("Current scene was never saved, please save it prior to running."));
accept->popup_centered_minsize();
return;
}
@@ -1998,11 +2060,12 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
switch( p_option ) {
case FILE_NEW_SCENE: {
+ // TODO: Drop such obsolete commented code
/*
if (!p_confirmed) {
- confirmation->get_ok()->set_text(TTR("Yes"));
+ confirmation->get_ok()->set_text("Yes");
//confirmation->get_cancel()->show();
- confirmation->set_text(TTR("Start a New Scene? (Current will be lost)"));
+ confirmation->set_text("Start a New Scene? (Current will be lost)");
confirmation->popup_centered_minsize();
break;
}*/
@@ -2058,7 +2121,7 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
//quick_open->popup("Resource", false, true);
- //quick_open->set_title(TTR("Quick Search File.."));
+ //quick_open->set_title("Quick Search File..");
scenes_dock->focus_on_filter();
} break;
@@ -2150,7 +2213,8 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
String existing;
if (extensions.size()) {
- existing="new_scene."+extensions.front()->get().to_lower();
+ String root_name(get_edited_scene()->get_name());
+ existing=root_name+"."+extensions.front()->get().to_lower();
}
file->set_current_path(existing);
@@ -2221,7 +2285,7 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
current_option=-1;
//confirmation->get_cancel()->hide();
- accept->get_ok()->set_text(TTR("I see.."));
+ accept->get_ok()->set_text("I see..");
accept->set_text("This operation can't be done without a tree root.");
accept->popup_centered(Size2(300,70));;
break;
@@ -2243,8 +2307,8 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
} else {
current_option=-1;
//confirmation->get_cancel()->hide();
- accept->get_ok()->set_text(TTR("I see.."));
- accept->set_text(TTR("Please save the scene first."));
+ accept->get_ok()->set_text("I see..");
+ accept->set_text("Please save the scene first.");
accept->popup_centered(Size2(300,70));;
break;
@@ -2259,7 +2323,7 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
String target = export_db->get_current_platform();
Ref<EditorExporter> exporter = export_db->get_exporter(target);
if (exporter.is_null()) {
- accept->set_text(TTR("No exporter for platform '")+target+"' yet.");
+ accept->set_text("No exporter for platform '"+target+"' yet.");
accept->popup_centered(Size2(300,70));;
return;
}
@@ -2343,8 +2407,8 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
confirmation->get_ok()->set_text(TTR("Quit"));
//confirmation->get_cancel()->show();
- confirmation->set_text(TTR("Exit the Editor?"));
- confirmation->popup_centered(Size2(180,70));
+ confirmation->set_text(TTR("Exit the editor?"));
+ confirmation->popup_centered(Size2(180,70)*EDSCALE);
break;
}
@@ -2411,7 +2475,7 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
String filename = scene->get_filename();
if (filename==String()) {
- show_warning(TTR("Can't reload a scene that was never saved.."));
+ show_warning(TTR("Can't reload a scene that was never saved."));
break;
}
@@ -2440,7 +2504,7 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
current_option=-1;
//accept->get_cancel()->hide();
- accept->get_ok()->set_text(TTR("I see.."));
+ accept->get_ok()->set_text("I see..");
accept->set_text("This operation can't be done without a selected node.");
accept->popup_centered(Size2(300,70));;
break;
@@ -2452,7 +2516,7 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
current_option=-1;
//confirmation->get_cancel()->hide();
- accept->get_ok()->set_text(TTR("I see.."));
+ accept->get_ok()->set_text("I see..");
accept->set_text("This operation can't be done without a selected node.");
accept->popup_centered(Size2(300,70));;
break;
@@ -2464,8 +2528,8 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
current_option=-1;
//accept->get_cancel()->hide();
- accept->get_ok()->set_text(TTR("Ugh"));
- accept->set_text(String(TTR("Error loading scene from "))+external_file);
+ accept->get_ok()->set_text("Ugh");
+ accept->set_text("Error loading scene from "+external_file);
accept->popup_centered(Size2(300,70));;
return;
}
@@ -2473,7 +2537,7 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
instanced_scene->generate_instance_state();
instanced_scene->set_filename( Globals::get_singleton()->localize_path(external_file) );
- editor_data.get_undo_redo().create_action(TTR("Instance Scene"));
+ editor_data.get_undo_redo().create_action("Instance Scene");
editor_data.get_undo_redo().add_do_method(parent,"add_child",instanced_scene);
editor_data.get_undo_redo().add_do_method(instanced_scene,"set_owner",edited_scene);
editor_data.get_undo_redo().add_do_reference(instanced_scene);
@@ -2636,11 +2700,6 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
}
} break;
- case RUN_PAUSE: {
-
- emit_signal("pause_pressed");
-
- } break;
case RUN_STOP: {
if (editor_run.get_status()==EditorRun::STATUS_STOP)
@@ -2682,7 +2741,7 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
if (!p_confirmed) {
confirmation->get_ok()->set_text(TTR("Yes"));
- confirmation->set_text("Open Project Manager? \n(Unsaved changes will be lost)");
+ confirmation->set_text(TTR("Open Project Manager? \n(Unsaved changes will be lost)"));
confirmation->popup_centered_minsize();
break;
}
@@ -2692,8 +2751,8 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
String exec = OS::get_singleton()->get_executable_path();
List<String> args;
- //args.push_back ( "-path" );
- //args.push_back (exec.get_base_dir() );
+ args.push_back("-path");
+ args.push_back(exec.get_base_dir());
args.push_back("-pm");
OS::ProcessID pid=0;
@@ -2707,12 +2766,14 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
if (ischecked) {
file_server->stop();
+ run_native->set_deploy_dumb(false);
//debug_button->set_icon(gui_base->get_icon("FileServer","EditorIcons"));
- //debug_button->get_popup()->set_item_text( debug_button->get_popup()->get_item_index(RUN_FILE_SERVER),TTR("Enable File Server"));
+ //debug_button->get_popup()->set_item_text( debug_button->get_popup()->get_item_index(RUN_FILE_SERVER),"Enable File Server");
} else {
file_server->start();
+ run_native->set_deploy_dumb(true);
//debug_button->set_icon(gui_base->get_icon("FileServerActive","EditorIcons"));
- //debug_button->get_popup()->set_item_text( debug_button->get_popup()->get_item_index(RUN_FILE_SERVER),TTR("Disable File Server"));
+ //debug_button->get_popup()->set_item_text( debug_button->get_popup()->get_item_index(RUN_FILE_SERVER),"Disable File Server");
}
debug_button->get_popup()->set_item_checked( debug_button->get_popup()->get_item_index(RUN_FILE_SERVER),!ischecked);
@@ -2726,13 +2787,13 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
ScriptEditor::get_singleton()->get_debugger()->set_live_debugging(!ischecked);
} break;
- case RUN_DEPLOY_DUMB_CLIENTS: {
+ /*case RUN_DEPLOY_DUMB_CLIENTS: {
bool ischecked = debug_button->get_popup()->is_item_checked( debug_button->get_popup()->get_item_index(RUN_DEPLOY_DUMB_CLIENTS));
debug_button->get_popup()->set_item_checked( debug_button->get_popup()->get_item_index(RUN_DEPLOY_DUMB_CLIENTS),!ischecked);
run_native->set_deploy_dumb(!ischecked);
- } break;
+ } break;*/
case RUN_DEPLOY_REMOTE_DEBUG: {
bool ischecked = debug_button->get_popup()->is_item_checked( debug_button->get_popup()->get_item_index(RUN_DEPLOY_REMOTE_DEBUG));
@@ -2754,6 +2815,14 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
run_native->set_debug_navigation(!ischecked);
editor_run.set_debug_navigation(!ischecked);
} break;
+ case RUN_RELOAD_SCRIPTS: {
+
+
+ bool ischecked = debug_button->get_popup()->is_item_checked( debug_button->get_popup()->get_item_index(RUN_RELOAD_SCRIPTS));
+ debug_button->get_popup()->set_item_checked( debug_button->get_popup()->get_item_index(RUN_RELOAD_SCRIPTS),!ischecked);
+
+ ScriptEditor::get_singleton()->set_live_auto_reload_running_scripts(!ischecked);
+ } break;
case SETTINGS_UPDATE_ALWAYS: {
update_menu->get_popup()->set_item_checked(0,true);
@@ -2786,7 +2855,7 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
} break;
case SETTINGS_ABOUT: {
- about->popup_centered(Size2(500,130));
+ about->popup_centered(Size2(500,130)*EDSCALE);
} break;
case SOURCES_REIMPORT: {
@@ -2824,9 +2893,9 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
if (!p_confirmed) {
- confirmation->get_ok()->set_text(TTR("Open"));
+ confirmation->get_ok()->set_text("Open");
//confirmation->get_cancel()->show();
- confirmation->set_text(TTR("Current scene changed, save and re-import ?"));
+ confirmation->set_text("Current scene changed, save and re-import ?");
confirmation->popup_centered(Size2(300,70));
break;
@@ -2839,8 +2908,8 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
current_option=-1;
//accept->get_cancel()->hide();
- accept->get_ok()->set_text(TTR("I see.."));
- accept->set_text(TTR("Can't import if edited scene was not saved.")); //i dont think this code will ever run
+ accept->get_ok()->set_text("I see..");
+ accept->set_text("Can't import if edited scene was not saved."); //i dont think this code will ever run
accept->popup_centered(Size2(300,70));;
break;
@@ -2858,6 +2927,7 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
} break;
+
default: {
if (p_option>=OBJECT_METHOD_BASE) {
@@ -3256,7 +3326,7 @@ Error EditorNode::save_optimized_copy(const String& p_scene,const String& p_pres
if (!get_edited_scene()) {
get_scene()->quit();
- ERR_EXPLAIN(TTR("No scene to optimize (loading failed?"));
+ ERR_EXPLAIN("No scene to optimize (loading failed?)");
ERR_FAIL_V(ERR_FILE_NOT_FOUND);
}
@@ -3281,10 +3351,10 @@ Error EditorNode::save_optimized_copy(const String& p_scene,const String& p_pres
if (!Globals::get_singleton()->has(preset)) {
//accept->"()->hide();
- accept->get_ok()->set_text(TTR("I see.."));
- accept->set_text(TTR("Optimizer preset not found: ")+p_preset);
+ accept->get_ok()->set_text("I see..");
+ accept->set_text("Optimizer preset not found: "+p_preset);
accept->popup_centered(Size2(300,70));;
- ERR_EXPLAIN(TTR("Optimizer preset not found: ")+p_preset);
+ ERR_EXPLAIN("Optimizer preset not found: "+p_preset);
ERR_FAIL_V(ERR_INVALID_PARAMETER);
}
@@ -3304,7 +3374,7 @@ Error EditorNode::save_optimized_copy(const String& p_scene,const String& p_pres
}
}
- ERR_EXPLAIN(TTR("Preset '")+p_preset+"' references nonexistent saver: "+type);
+ ERR_EXPLAIN("Preset '"+p_preset+"' references nonexistent saver: "+type);
ERR_FAIL_COND_V(saver.is_null(),ERR_INVALID_DATA);
List<Variant> keys;
@@ -3339,8 +3409,8 @@ Error EditorNode::save_optimized_copy(const String& p_scene,const String& p_pres
current_option=-1;
//accept->get_cancel()->hide();
- accept->get_ok()->set_text(TTR("I see.."));
- accept->set_text(TTR("Couldn't save scene. Likely dependencies (instances) couldn't be satisfied."));
+ accept->get_ok()->set_text("I see..");
+ accept->set_text("Couldn't save scene. Likely dependencies (instances) couldn't be satisfied.");
accept->popup_centered(Size2(300,70));;
return ERR_INVALID_DATA;
@@ -3350,8 +3420,8 @@ Error EditorNode::save_optimized_copy(const String& p_scene,const String& p_pres
if (err) {
//accept->"()->hide();
- accept->get_ok()->set_text(TTR("I see.."));
- accept->set_text(TTR("Error saving optimized scene: ")+path);
+ accept->get_ok()->set_text("I see..");
+ accept->set_text("Error saving optimized scene: "+path);
accept->popup_centered(Size2(300,70));;
ERR_FAIL_COND_V(err,err);
@@ -3640,7 +3710,7 @@ Error EditorNode::load_scene(const String& p_scene, bool p_ignore_broken_deps,bo
for (Map<String,Set<String> >::Element *E=dependency_errors.front();E;E=E->next()) {
- String txt=TTR("Scene '")+E->key()+"' has broken dependencies:\n";
+ String txt=vformat(TTR("Scene '%s' has broken dependencies:"),E->key())+"\n";
for(Set<String>::Element *F=E->get().front();F;F=F->next()) {
txt+="\t"+F->get()+"\n";
}
@@ -3753,6 +3823,10 @@ ScenesDock *EditorNode::get_scenes_dock() {
return scenes_dock;
}
+SceneTreeDock *EditorNode::get_scene_tree_dock() {
+
+ return scene_tree_dock;
+}
void EditorNode::_instance_request(const String& p_path){
@@ -3921,8 +3995,8 @@ void EditorNode::_save_optimized() {
if (err) {
//accept->"()->hide();
- accept->get_ok()->set_text(TTR("I see.."));
- accept->set_text(TTR("Error saving optimized scene: ")+path);
+ accept->get_ok()->set_text("I see..");
+ accept->set_text("Error saving optimized scene: "+path);
accept->popup_centered(Size2(300,70));;
return;
@@ -4476,32 +4550,59 @@ void EditorNode::_update_dock_slots_visibility() {
right_hsplit,
};
- for(int i=0;i<DOCK_SLOT_MAX;i++) {
+ if (!docks_visible) {
- if (dock_slot[i]->get_tab_count())
- dock_slot[i]->show();
- else
+ for(int i=0;i<DOCK_SLOT_MAX;i++) {
dock_slot[i]->hide();
+ }
- }
+ for(int i=0;i<DOCK_SLOT_MAX/2;i++) {
+ splits[i]->hide();
+ }
+ right_hsplit->hide();
+ bottom_panel->hide();
+ } else {
+ for(int i=0;i<DOCK_SLOT_MAX;i++) {
- for(int i=0;i<DOCK_SLOT_MAX/2;i++) {
- bool in_use = dock_slot[i*2+0]->get_tab_count() || dock_slot[i*2+1]->get_tab_count();
- if (in_use)
- splits[i]->show();
- else
- splits[i]->hide();
- }
+ if (dock_slot[i]->get_tab_count())
+ dock_slot[i]->show();
+ else
+ dock_slot[i]->hide();
- for(int i=0;i<DOCK_SLOT_MAX;i++) {
+ }
- if (!dock_slot[i]->is_hidden() && dock_slot[i]->get_tab_count()) {
- dock_slot[i]->set_current_tab(0);
+
+ for(int i=0;i<DOCK_SLOT_MAX/2;i++) {
+ bool in_use = dock_slot[i*2+0]->get_tab_count() || dock_slot[i*2+1]->get_tab_count();
+ if (in_use)
+ splits[i]->show();
+ else
+ splits[i]->hide();
}
+
+ for(int i=0;i<DOCK_SLOT_MAX;i++) {
+
+ if (!dock_slot[i]->is_hidden() && dock_slot[i]->get_tab_count()) {
+ dock_slot[i]->set_current_tab(0);
+ }
+ }
+ bottom_panel->show();
+ right_hsplit->show();
}
}
+void EditorNode::_update_top_menu_visibility() {
+ if (distraction_free_mode) {
+ play_cc->hide();
+ menu_hb->hide();
+ scene_tabs->hide();
+ } else {
+ play_cc->show();
+ menu_hb->show();
+ scene_tabs->show();
+ }
+}
void EditorNode::_load_docks_from_config(Ref<ConfigFile> p_layout, const String& p_section) {
@@ -4600,10 +4701,10 @@ void EditorNode::_update_layouts_menu() {
overridden_default_layout=-1;
editor_layouts->set_size(Vector2());
- editor_layouts->add_item(TTR("Save Layout"), SETTINGS_LAYOUT_SAVE);
- editor_layouts->add_item(TTR("Delete Layout"), SETTINGS_LAYOUT_DELETE);
+ editor_layouts->add_shortcut(ED_SHORTCUT("layout/save",TTR("Save Layout")), SETTINGS_LAYOUT_SAVE);
+ editor_layouts->add_shortcut(ED_SHORTCUT("layout/load",TTR("Load Layout")), SETTINGS_LAYOUT_DELETE);
editor_layouts->add_separator();
- editor_layouts->add_item(TTR("Default"), SETTINGS_LAYOUT_DEFAULT);
+ editor_layouts->add_shortcut(ED_SHORTCUT("property_editor/reset",TTR("Default")), SETTINGS_LAYOUT_DEFAULT);
Ref<ConfigFile> config;
config.instance();
@@ -4867,6 +4968,31 @@ void EditorNode::_bottom_panel_switch(bool p_enable,int p_idx) {
}
}
+void EditorNode::set_docks_visible(bool p_show) {
+ docks_visible = p_show;
+ _update_dock_slots_visibility();
+}
+
+bool EditorNode::get_docks_visible() const {
+ return docks_visible;
+}
+
+void EditorNode::set_distraction_free_mode(bool p_enter) {
+ distraction_free_mode = p_enter;
+
+ if (p_enter) {
+ if (docks_visible) {
+ set_docks_visible(false);
+ }
+ } else {
+ set_docks_visible(true);
+ }
+ _update_top_menu_visibility();
+}
+
+bool EditorNode::get_distraction_free_mode() const {
+ return distraction_free_mode;
+}
void EditorNode::add_control_to_dock(DockSlot p_slot,Control* p_control) {
ERR_FAIL_INDEX(p_slot,DOCK_SLOT_MAX);
@@ -4899,6 +5025,7 @@ Variant EditorNode::drag_resource(const Ref<Resource>& p_res,Control* p_from) {
TextureFrame *drag_preview = memnew( TextureFrame );
Label* label=memnew( Label );
+ waiting_for_sources_changed=true; //
Ref<Texture> preview;
{
@@ -4954,7 +5081,7 @@ Variant EditorNode::drag_files(const Vector<String>& p_files, Control *p_from){
if (p_files.size()>max_files) {
Label* label=memnew( Label );
- label->set_text(itos(p_files.size()-max_files)+" "+TTR("More File(s)"));
+ label->set_text(vformat(TTR("%d more file(s)"), p_files.size()-max_files));
files->add_child(label);
}
@@ -4985,7 +5112,7 @@ Variant EditorNode::drag_files_and_dirs(const Vector<String>& p_files, Control *
if (p_files.size()>max_files) {
Label* label=memnew( Label );
- label->set_text(itos(p_files.size()-max_files)+" "+TTR("More File(s) and/or Directory(s)"));
+ label->set_text(vformat(TTR("%d more file(s) or folder(s)"), p_files.size()-max_files));
files->add_child(label);
}
@@ -5000,6 +5127,15 @@ Variant EditorNode::drag_files_and_dirs(const Vector<String>& p_files, Control *
}
+
+void EditorNode::_dropped_files(const Vector<String>& p_files,int p_screen) {
+
+ String cur_path = scenes_dock->get_current_path();
+ for(int i=0;i<EditorImportExport::get_singleton()->get_import_plugin_count();i++) {
+ EditorImportExport::get_singleton()->get_import_plugin(i)->import_from_drop(p_files,cur_path);
+ }
+}
+
void EditorNode::_bind_methods() {
@@ -5067,6 +5203,9 @@ void EditorNode::_bind_methods() {
ObjectTypeDB::bind_method("_toggle_search_bar",&EditorNode::_toggle_search_bar);
ObjectTypeDB::bind_method("_clear_search_box",&EditorNode::_clear_search_box);
ObjectTypeDB::bind_method("_clear_undo_history",&EditorNode::_clear_undo_history);
+ ObjectTypeDB::bind_method("_dropped_files",&EditorNode::_dropped_files);
+
+
ObjectTypeDB::bind_method(_MD("add_editor_import_plugin", "plugin"), &EditorNode::add_editor_import_plugin);
ObjectTypeDB::bind_method(_MD("remove_editor_import_plugin", "plugin"), &EditorNode::remove_editor_import_plugin);
@@ -5108,6 +5247,8 @@ EditorNode::EditorNode() {
last_checked_version=0;
changing_scene=false;
_initializing_addons=false;
+ docks_visible = true;
+ distraction_free_mode=false;
FileAccess::set_backup_save(true);
@@ -5116,6 +5257,19 @@ EditorNode::EditorNode() {
// load settings
if (!EditorSettings::get_singleton())
EditorSettings::create();
+ {
+ int dpi_mode = EditorSettings::get_singleton()->get("global/hidpi_mode");
+ print_line("DPI MODE: "+itos(dpi_mode));
+ if (dpi_mode==0) {
+ editor_set_hidpi( OS::get_singleton()->get_screen_dpi(0) > 150 );
+ } else if (dpi_mode==2) {
+ editor_set_hidpi(true);
+ } else {
+ editor_set_hidpi(false);
+ }
+ }
+
+
ResourceLoader::set_abort_on_missing_resources(false);
FileDialog::set_default_show_hidden_files(EditorSettings::get_singleton()->get("file_dialog/show_hidden_files"));
@@ -5156,7 +5310,7 @@ EditorNode::EditorNode() {
ObjectTypeDB::set_type_enabled("CollisionShape",true);
ObjectTypeDB::set_type_enabled("CollisionShape2D",true);
ObjectTypeDB::set_type_enabled("CollisionPolygon2D",true);
- //ObjectTypeDB::set_type_enabled(TTR("BodyVolumeConvexPolygon"),true);
+ //ObjectTypeDB::set_type_enabled("BodyVolumeConvexPolygon",true);
gui_base = memnew( Panel );
add_child(gui_base);
@@ -5171,7 +5325,7 @@ EditorNode::EditorNode() {
//theme->set_icon("folder","EditorFileDialog",Theme::get_default()->get_icon("folder","EditorFileDialog"));
//theme->set_color("files_disabled","EditorFileDialog",Color(0,0,0,0.7));
- String global_font = EditorSettings::get_singleton()->get("global/font");
+ String global_font = EditorSettings::get_singleton()->get("global/custom_font");
if (global_font!="") {
Ref<Font> fnt = ResourceLoader::load(global_font);
if (fnt.is_valid()) {
@@ -5327,7 +5481,7 @@ EditorNode::EditorNode() {
dock_vb->add_child(dock_hb);
dock_select = memnew( Control );
- dock_select->set_custom_minimum_size(Size2(128,64));
+ dock_select->set_custom_minimum_size(Size2(128,64)*EDSCALE);
dock_select->connect("input_event",this,"_dock_select_input");
dock_select->connect("draw",this,"_dock_select_draw");
dock_select->connect("mouse_exit",this,"_dock_popup_exit");
@@ -5342,7 +5496,7 @@ EditorNode::EditorNode() {
//dock_select_popoup->set_(Size2(20,20));
for(int i=0;i<DOCK_SLOT_MAX;i++) {
- dock_slot[i]->set_custom_minimum_size(Size2(230,220));
+ dock_slot[i]->set_custom_minimum_size(Size2(230,220)*EDSCALE);
dock_slot[i]->set_v_size_flags(Control::SIZE_EXPAND_FILL);
dock_slot[i]->set_popup(dock_select_popoup);
dock_slot[i]->connect("pre_popup_pressed",this,"_dock_pre_popup",varray(i));
@@ -5382,7 +5536,7 @@ EditorNode::EditorNode() {
srt->add_child(scene_tabs);
scene_root_parent = memnew( PanelContainer );
- scene_root_parent->set_custom_minimum_size(Size2(0,80));
+ scene_root_parent->set_custom_minimum_size(Size2(0,80)*EDSCALE);
//Ref<StyleBox> sp = scene_root_parent->get_stylebox("panel","TabContainer");
@@ -5448,21 +5602,21 @@ EditorNode::EditorNode() {
file_menu->set_tooltip(TTR("Operations with scene files."));
p=file_menu->get_popup();
- p->add_item(TTR("New Scene"),FILE_NEW_SCENE);
- p->add_item(TTR("New Inherited Scene.."),FILE_NEW_INHERITED_SCENE);
- p->add_item(TTR("Open Scene.."),FILE_OPEN_SCENE,KEY_MASK_CMD+KEY_O);
+ p->add_shortcut(ED_SHORTCUT("editor/new_scene",TTR("New Scene")),FILE_NEW_SCENE);
+ p->add_shortcut(ED_SHORTCUT("editor/new_inherited_scene",TTR("New Inherited Scene..")),FILE_NEW_INHERITED_SCENE);
+ p->add_shortcut(ED_SHORTCUT("editor/open_scene",TTR("Open Scene.."),KEY_MASK_CMD+KEY_O),FILE_OPEN_SCENE);
p->add_separator();
- p->add_item(TTR("Save Scene"),FILE_SAVE_SCENE,KEY_MASK_CMD+KEY_S);
- p->add_item(TTR("Save Scene As.."),FILE_SAVE_AS_SCENE,KEY_MASK_SHIFT+KEY_MASK_CMD+KEY_S);
+ p->add_shortcut(ED_SHORTCUT("editor/save_scene",TTR("Save Scene"),KEY_MASK_CMD+KEY_S),FILE_SAVE_SCENE);
+ p->add_shortcut(ED_SHORTCUT("editor/save_scene_as",TTR("Save Scene As.."),KEY_MASK_SHIFT+KEY_MASK_CMD+KEY_S),FILE_SAVE_AS_SCENE);
p->add_separator();
- p->add_item(TTR("Close Scene"),FILE_CLOSE,KEY_MASK_SHIFT+KEY_MASK_CTRL+KEY_W);
+ p->add_shortcut(ED_SHORTCUT("editor/close_scene",TTR("Close Scene"),KEY_MASK_SHIFT+KEY_MASK_CTRL+KEY_W),FILE_CLOSE);
p->add_separator();
- p->add_item(TTR("Close Goto Prev. Scene"),FILE_OPEN_PREV,KEY_MASK_SHIFT+KEY_MASK_CMD+KEY_P);
+ //p->add_shortcut(ED_SHORTCUT("editor/save_scene",TTR("Close Goto Prev. Scene")),FILE_OPEN_PREV,KEY_MASK_SHIFT+KEY_MASK_CMD+KEY_P);
p->add_submenu_item(TTR("Open Recent"),"RecentScenes",FILE_OPEN_RECENT);
p->add_separator();
- p->add_item(TTR("Quick Open Scene.."),FILE_QUICK_OPEN_SCENE,KEY_MASK_SHIFT+KEY_MASK_CMD+KEY_O);
- p->add_item(TTR("Quick Open Script.."),FILE_QUICK_OPEN_SCRIPT,KEY_MASK_ALT+KEY_MASK_CMD+KEY_O);
- p->add_item(TTR("Quick Search File.."),FILE_QUICK_OPEN_FILE,KEY_MASK_ALT+KEY_MASK_CMD+KEY_P);
+ p->add_shortcut(ED_SHORTCUT("editor/quick_open_scene",TTR("Quick Open Scene.."),KEY_MASK_SHIFT+KEY_MASK_CMD+KEY_O),FILE_QUICK_OPEN_SCENE);
+ p->add_shortcut(ED_SHORTCUT("editor/quick_open_script",TTR("Quick Open Script.."),KEY_MASK_ALT+KEY_MASK_CMD+KEY_O),FILE_QUICK_OPEN_SCRIPT);
+ p->add_shortcut(ED_SHORTCUT("editor/quick_filter_files",TTR("Quick Filter Files.."),KEY_MASK_ALT+KEY_MASK_CMD+KEY_P),FILE_QUICK_OPEN_FILE);
p->add_separator();
PopupMenu *pm_export = memnew(PopupMenu );
@@ -5499,7 +5653,7 @@ EditorNode::EditorNode() {
{
Control *sp = memnew( Control );
- sp->set_custom_minimum_size(Size2(30,0));
+ sp->set_custom_minimum_size(Size2(30,0)*EDSCALE);
menu_hb->add_child(sp);
}
@@ -5517,20 +5671,20 @@ EditorNode::EditorNode() {
menu_panel->add_child( node_menu );
p=node_menu->get_popup();
- p->add_item(TTR("Create"),NODE_CREATE);
- p->add_item(TTR("Instance"),NODE_INSTANCE);
+ p->add_item("Create",NODE_CREATE);
+ p->add_item("Instance",NODE_INSTANCE);
p->add_separator();
- p->add_item(TTR("Reparent"),NODE_REPARENT);
- p->add_item(TTR("Move Up"),NODE_MOVE_UP);
- p->add_item(TTR("Move Down"),NODE_MOVE_DOWN);
+ p->add_item("Reparent",NODE_REPARENT);
+ p->add_item("Move Up",NODE_MOVE_UP);
+ p->add_item("Move Down",NODE_MOVE_DOWN);
p->add_separator();
- p->add_item(TTR("Duplicate"),NODE_DUPLICATE);
+ p->add_item("Duplicate",NODE_DUPLICATE);
p->add_separator();
- p->add_item(TTR("Remove (Branch)"),NODE_REMOVE_BRANCH);
- p->add_item(TTR("Remove (Element)"),NODE_REMOVE_ELEMENT);
+ p->add_item("Remove (Branch)",NODE_REMOVE_BRANCH);
+ p->add_item("Remove (Element)",NODE_REMOVE_ELEMENT);
p->add_separator();
- p->add_item(TTR("Edit Subscriptions.."),NODE_CONNECTIONS);
- p->add_item(TTR("Edit Groups.."),NODE_GROUPS);
+ p->add_item("Edit Subscriptions..",NODE_CONNECTIONS);
+ p->add_item("Edit Groups..",NODE_GROUPS);
resource_menu = memnew( MenuButton );
resource_menu->set_text("Resource");
@@ -5548,7 +5702,7 @@ EditorNode::EditorNode() {
p->connect("item_pressed",this,"_menu_option");
tool_menu = memnew( MenuButton );
- tool_menu->set_tooltip(TTR("Miscelaneous project or scene wide tools."));
+ tool_menu->set_tooltip(TTR("Miscellaneous project or scene-wide tools."));
tool_menu->set_text(TTR("Tools"));
//tool_menu->set_icon(gui_base->get_icon("Save","EditorIcons"));
@@ -5573,7 +5727,7 @@ EditorNode::EditorNode() {
//s1->set_size(Point2(10,15));
- CenterContainer *play_cc = memnew( CenterContainer );
+ play_cc = memnew( CenterContainer );
play_cc->set_ignore_mouse(true);
gui_base->add_child( play_cc );
play_cc->set_area_as_parent_rect();
@@ -5593,25 +5747,31 @@ EditorNode::EditorNode() {
play_button->set_icon(gui_base->get_icon("MainPlay","EditorIcons"));
play_button->set_focus_mode(Control::FOCUS_NONE);
play_button->connect("pressed", this,"_menu_option",make_binds(RUN_PLAY));
- play_button->set_tooltip(TTR("Play the project (F5)."));
+ play_button->set_tooltip(TTR("Play the project."));
+ play_button->set_shortcut(ED_SHORTCUT("editor/play",TTR("Play"),KEY_F5));
- /*pause_button = memnew( ToolButton );
+ pause_button = memnew( ToolButton );
//menu_panel->add_child(pause_button); - not needed for now?
pause_button->set_toggle_mode(true);
pause_button->set_icon(gui_base->get_icon("Pause","EditorIcons"));
pause_button->set_focus_mode(Control::FOCUS_NONE);
- pause_button->connect("pressed", this,"_menu_option",make_binds(RUN_PAUSE));
- pause_button->set_tooltip(TTR("Pause the scene (F7)."));
-*/
+ //pause_button->connect("pressed", this,"_menu_option",make_binds(RUN_PAUSE));
+ pause_button->set_tooltip(TTR("Pause the scene"));
+ pause_button->set_disabled(true);
+ play_hb->add_child(pause_button);
+ pause_button->set_shortcut(ED_SHORTCUT("editor/pause_scene",TTR("Pause Scene"),KEY_F7));
+
+
stop_button = memnew( ToolButton );
play_hb->add_child(stop_button);
//stop_button->set_toggle_mode(true);
stop_button->set_focus_mode(Control::FOCUS_NONE);
stop_button->set_icon(gui_base->get_icon("MainStop","EditorIcons"));
stop_button->connect("pressed", this,"_menu_option",make_binds(RUN_STOP));
- stop_button->set_tooltip(TTR("Stop the scene (F8)."));
+ stop_button->set_tooltip(TTR("Stop the scene."));
+ stop_button->set_shortcut(ED_SHORTCUT("editor/stop",TTR("Stop"),KEY_F8));
run_native = memnew( EditorRunNative);
play_hb->add_child(run_native);
@@ -5631,7 +5791,8 @@ EditorNode::EditorNode() {
play_scene_button->set_focus_mode(Control::FOCUS_NONE);
play_scene_button->set_icon(gui_base->get_icon("PlayScene","EditorIcons"));
play_scene_button->connect("pressed", this,"_menu_option",make_binds(RUN_PLAY_SCENE));
- play_scene_button->set_tooltip(TTR("Play the edited scene (F6)."));
+ play_scene_button->set_tooltip(TTR("Play the edited scene."));
+ play_scene_button->set_shortcut(ED_SHORTCUT("editor/play_scene",TTR("Play Scene"),KEY_F6));
play_custom_scene_button = memnew( ToolButton );
play_hb->add_child(play_custom_scene_button);
@@ -5639,7 +5800,7 @@ EditorNode::EditorNode() {
play_custom_scene_button->set_focus_mode(Control::FOCUS_NONE);
play_custom_scene_button->set_icon(gui_base->get_icon("PlayCustom","EditorIcons"));
play_custom_scene_button->connect("pressed", this,"_menu_option",make_binds(RUN_PLAY_CUSTOM_SCENE));
- play_custom_scene_button->set_tooltip(TTR("Play custom scene (")+keycode_get_string(KEY_MASK_CMD|KEY_MASK_SHIFT|KEY_F5)+").");
+ play_custom_scene_button->set_tooltip(TTR("Play custom scene")+" ("+keycode_get_string(KEY_MASK_CMD|KEY_MASK_SHIFT|KEY_F5)+").");
debug_button = memnew( MenuButton );
debug_button->set_flat(true);
@@ -5648,17 +5809,23 @@ EditorNode::EditorNode() {
debug_button->set_focus_mode(Control::FOCUS_NONE);
debug_button->set_icon(gui_base->get_icon("Remote","EditorIcons"));
//debug_button->connect("pressed", this,"_menu_option",make_binds(RUN_LIVE_DEBUG));
- debug_button->set_tooltip(TTR("Debug Options"));
+ debug_button->set_tooltip(TTR("Debug options"));
p=debug_button->get_popup();
- p->add_check_item(TTR("Live Editing"),RUN_LIVE_DEBUG);
- p->add_check_item(TTR("File Server"),RUN_FILE_SERVER);
- p->add_separator();
- p->add_check_item(TTR("Deploy Remote Debug"),RUN_DEPLOY_REMOTE_DEBUG);
- p->add_check_item(TTR("Deploy File Server Clients"),RUN_DEPLOY_DUMB_CLIENTS);
+ p->add_check_item(TTR("Deploy with Remote Debug"),RUN_DEPLOY_REMOTE_DEBUG);
+ p->set_item_tooltip(p->get_item_count()-1,TTR("When exporting or deploying, the resulting executable will attempt to connect to the IP of this computer in order to be debugged."));
+ p->add_check_item(TTR("Small Deploy with Network FS"),RUN_FILE_SERVER);
+ p->set_item_tooltip(p->get_item_count()-1,TTR("When this option is enabled, export or deploy will produce a minimal executable.\nThe filesystem will be provided from the project by the editor over the network.\nOn Android, deploy will use the USB cable for faster performance. This option speeds up testing for games with a large footprint."));
p->add_separator();
p->add_check_item(TTR("Visible Collision Shapes"),RUN_DEBUG_COLLISONS);
+ p->set_item_tooltip(p->get_item_count()-1,TTR("Collision shapes and raycast nodes (for 2D and 3D) will be visible on the running game if this option is turned on."));
p->add_check_item(TTR("Visible Navigation"),RUN_DEBUG_NAVIGATION);
+ p->set_item_tooltip(p->get_item_count()-1,TTR("Navigation meshes and polygons will be visible on the running game if this option is turned on."));
+ p->add_separator();
+ p->add_check_item(TTR("Sync Scene Changes"),RUN_LIVE_DEBUG);
+ p->set_item_tooltip(p->get_item_count()-1,TTR("When this option is turned on, any changes made to the scene in the editor will be replicated in the running game.\nWhen used remotely on a device, this is more efficient with network filesystem."));
+ p->add_check_item(TTR("Sync Script Changes"),RUN_RELOAD_SCRIPTS);
+ p->set_item_tooltip(p->get_item_count()-1,TTR("When this option is turned on, any script that is saved will be reloaded on the running game.\nWhen used remotely on a device, this is more efficient with network filesystem."));
p->connect("item_pressed",this,"_menu_option");
/*
@@ -5685,7 +5852,7 @@ EditorNode::EditorNode() {
{
Control *sp = memnew( Control );
- sp->set_custom_minimum_size(Size2(30,0));
+ sp->set_custom_minimum_size(Size2(30,0)*EDSCALE);
menu_hb->add_child(sp);
}
@@ -5707,7 +5874,7 @@ EditorNode::EditorNode() {
{
Control *sp = memnew( Control );
- sp->set_custom_minimum_size(Size2(30,0));
+ sp->set_custom_minimum_size(Size2(30,0)*EDSCALE);
menu_hb->add_child(sp);
}
@@ -5726,9 +5893,9 @@ EditorNode::EditorNode() {
right_menu_hb->add_child( settings_menu );
p=settings_menu->get_popup();
- //p->add_item(TTR("Export Settings"),SETTINGS_EXPORT_PREFERENCES);
+ //p->add_item("Export Settings",SETTINGS_EXPORT_PREFERENCES);
p->add_item(TTR("Editor Settings"),SETTINGS_PREFERENCES);
- //p->add_item(TTR("Optimization Presets"),SETTINGS_OPTIMIZED_PRESETS);
+ //p->add_item("Optimization Presets",SETTINGS_OPTIMIZED_PRESETS);
p->add_separator();
editor_layouts = memnew( PopupMenu );
editor_layouts->set_name("Layouts");
@@ -5743,7 +5910,7 @@ EditorNode::EditorNode() {
layout_dialog = memnew( EditorNameDialog );
gui_base->add_child(layout_dialog);
layout_dialog->set_hide_on_ok(false);
- layout_dialog->set_size(Size2(175, 70));
+ layout_dialog->set_size(Size2(175, 70)*EDSCALE);
layout_dialog->connect("name_confirmed", this,"_dialog_action");
sources_button = memnew( ToolButton );
@@ -5783,15 +5950,15 @@ EditorNode::EditorNode() {
scene_tree_dock = memnew( SceneTreeDock(this,scene_root,editor_selection,editor_data) );
scene_tree_dock->set_name(TTR("Scene"));
//top_pallete->add_child(scene_tree_dock);
- dock_slot[DOCK_SLOT_LEFT_UR]->add_child(scene_tree_dock);
+ dock_slot[DOCK_SLOT_RIGHT_UL]->add_child(scene_tree_dock);
#if 0
resources_dock = memnew( ResourcesDock(this) );
- resources_dock->set_name(TTR("Resources"));
+ resources_dock->set_name("Resources");
//top_pallete->add_child(resources_dock);
dock_slot[DOCK_SLOT_RIGHT_BL]->add_child(resources_dock);
//top_pallete->set_v_size_flags(Control::SIZE_EXPAND_FILL);
#endif
- dock_slot[DOCK_SLOT_RIGHT_BL]->hide();
+ dock_slot[DOCK_SLOT_LEFT_BR]->hide();
/*Control *editor_spacer = memnew( Control );
editor_spacer->set_custom_minimum_size(Size2(260,200));
editor_spacer->set_v_size_flags(Control::SIZE_EXPAND_FILL);
@@ -5813,28 +5980,29 @@ EditorNode::EditorNode() {
VBoxContainer *prop_editor_base = memnew( VBoxContainer );
prop_editor_base->set_name(TTR("Inspector")); // Properties?
- dock_slot[DOCK_SLOT_RIGHT_UL]->add_child(prop_editor_base);
+ dock_slot[DOCK_SLOT_RIGHT_BL]->add_child(prop_editor_base);
HBoxContainer *prop_editor_hb = memnew( HBoxContainer );
prop_editor_base->add_child(prop_editor_hb);
+ prop_editor_vb=prop_editor_base;
resource_new_button = memnew( ToolButton );
- resource_new_button->set_tooltip(TTR("Create a new resource in memory and edit it"));
+ resource_new_button->set_tooltip(TTR("Create a new resource in memory and edit it."));
resource_new_button->set_icon(gui_base->get_icon("New","EditorIcons"));
prop_editor_hb->add_child(resource_new_button);
resource_new_button->connect("pressed",this,"_menu_option",varray(RESOURCE_NEW));
resource_new_button->set_focus_mode(Control::FOCUS_NONE);
resource_load_button = memnew( ToolButton );
- resource_load_button->set_tooltip(TTR("Load an existing resource from disk and edit it"));
+ resource_load_button->set_tooltip(TTR("Load an existing resource from disk and edit it."));
resource_load_button->set_icon(gui_base->get_icon("Load","EditorIcons"));
prop_editor_hb->add_child(resource_load_button);
resource_load_button->connect("pressed",this,"_menu_option",varray(RESOURCE_LOAD));
resource_load_button->set_focus_mode(Control::FOCUS_NONE);
resource_save_button = memnew( MenuButton );
- resource_save_button->set_tooltip(TTR("Save the currently edited resource"));
+ resource_save_button->set_tooltip(TTR("Save the currently edited resource."));
resource_save_button->set_icon(gui_base->get_icon("Save","EditorIcons"));
prop_editor_hb->add_child(resource_save_button);
resource_save_button->get_popup()->add_item(TTR("Save"),RESOURCE_SAVE);
@@ -5863,7 +6031,7 @@ EditorNode::EditorNode() {
editor_history_menu = memnew( MenuButton );
- editor_history_menu->set_tooltip(TTR("History of recently edited objects"));
+ editor_history_menu->set_tooltip(TTR("History of recently edited objects."));
editor_history_menu->set_icon( gui_base->get_icon("History","EditorIcons"));
prop_editor_hb->add_child(editor_history_menu);
editor_history_menu->connect("about_to_show",this,"_prepare_history");
@@ -5899,7 +6067,7 @@ EditorNode::EditorNode() {
prop_editor_base->add_child(search_bar);
search_bar->hide();
- Label *l = memnew( Label(TTR("Search: ")) );
+ Label *l = memnew( Label(TTR("Search:")+" ") );
search_bar->add_child(l);
search_box = memnew( LineEdit );
@@ -5924,10 +6092,14 @@ EditorNode::EditorNode() {
property_editor->set_undo_redo(&editor_data.get_undo_redo());
+ node_dock = memnew( NodeDock );
+ //node_dock->set_undoredo(&editor_data.get_undo_redo());
+ dock_slot[DOCK_SLOT_RIGHT_BL]->add_child(node_dock);
+
scenes_dock = memnew( ScenesDock(this) );
scenes_dock->set_name(TTR("FileSystem"));
scenes_dock->set_use_thumbnails(int(EditorSettings::get_singleton()->get("file_dialog/display_mode"))==EditorFileDialog::DISPLAY_THUMBNAILS);
- dock_slot[DOCK_SLOT_LEFT_BR]->add_child(scenes_dock);
+ dock_slot[DOCK_SLOT_LEFT_UR]->add_child(scenes_dock);
//prop_pallete->add_child(scenes_dock);
scenes_dock->connect("open",this,"open_request");
scenes_dock->connect("instance",this,"_instance_request");
@@ -6084,7 +6256,7 @@ EditorNode::EditorNode() {
about = memnew( AcceptDialog );
- about->set_title(TTR("Thanks so Much!"));
+ about->set_title(TTR("Thanks from the Godot community!"));
//about->get_cancel()->hide();
about->get_ok()->set_text(TTR("Thanks!"));
about->set_hide_on_ok(true);
@@ -6104,7 +6276,7 @@ EditorNode::EditorNode() {
file_templates = memnew( FileDialog );
- file_templates->set_title(TTR("Import Templates from ZIP file"));
+ file_templates->set_title(TTR("Import Templates From ZIP File"));
gui_base->add_child( file_templates );
file_templates->set_mode(FileDialog::MODE_OPEN_FILE);
@@ -6181,10 +6353,7 @@ EditorNode::EditorNode() {
file_server = memnew( EditorFileServer );
- editor_import_export->add_import_plugin( Ref<EditorTextureImportPlugin>( memnew(EditorTextureImportPlugin(this,EditorTextureImportPlugin::MODE_TEXTURE_2D) )));
- editor_import_export->add_import_plugin( Ref<EditorTextureImportPlugin>( memnew(EditorTextureImportPlugin(this,EditorTextureImportPlugin::MODE_ATLAS) )));
- editor_import_export->add_import_plugin( Ref<EditorTextureImportPlugin>( memnew(EditorTextureImportPlugin(this,EditorTextureImportPlugin::MODE_LARGE) )));
- editor_import_export->add_import_plugin( Ref<EditorTextureImportPlugin>( memnew(EditorTextureImportPlugin(this,EditorTextureImportPlugin::MODE_TEXTURE_3D) )));
+ editor_import_export->add_import_plugin( Ref<EditorTextureImportPlugin>( memnew(EditorTextureImportPlugin(this) )));
Ref<EditorSceneImportPlugin> _scene_import = memnew(EditorSceneImportPlugin(this) );
Ref<EditorSceneImporterCollada> _collada_import = memnew( EditorSceneImporterCollada);
_scene_import->add_importer(_collada_import);
@@ -6197,6 +6366,8 @@ EditorNode::EditorNode() {
editor_import_export->add_import_plugin( Ref<EditorFontImportPlugin>( memnew(EditorFontImportPlugin(this))));
editor_import_export->add_import_plugin( Ref<EditorSampleImportPlugin>( memnew(EditorSampleImportPlugin(this))));
editor_import_export->add_import_plugin( Ref<EditorTranslationImportPlugin>( memnew(EditorTranslationImportPlugin(this))));
+ editor_import_export->add_import_plugin( Ref<EditorBitMaskImportPlugin>( memnew(EditorBitMaskImportPlugin(this))));
+
editor_import_export->add_export_plugin( Ref<EditorTextureExportPlugin>( memnew(EditorTextureExportPlugin)));
editor_import_export->add_export_plugin( Ref<EditorSampleExportPlugin>( memnew(EditorSampleExportPlugin)));
@@ -6223,9 +6394,9 @@ EditorNode::EditorNode() {
add_editor_plugin( memnew( MultiMeshEditorPlugin(this) ) );
add_editor_plugin( memnew( MeshInstanceEditorPlugin(this) ) );
add_editor_plugin( memnew( AnimationTreeEditorPlugin(this) ) );
- add_editor_plugin( memnew( SamplePlayerEditorPlugin(this) ) );
+ //add_editor_plugin( memnew( SamplePlayerEditorPlugin(this) ) ); - this is kind of useless at this point
add_editor_plugin( memnew( MeshLibraryEditorPlugin(this) ) );
- add_editor_plugin( memnew( StreamEditorPlugin(this) ) );
+ //add_editor_plugin( memnew( StreamEditorPlugin(this) ) );
add_editor_plugin( memnew( StyleBoxEditorPlugin(this) ) );
add_editor_plugin( memnew( ParticlesEditorPlugin(this) ) );
add_editor_plugin( memnew( ResourcePreloaderEditorPlugin(this) ) );
@@ -6236,7 +6407,7 @@ EditorNode::EditorNode() {
add_editor_plugin( memnew( TileSetEditorPlugin(this) ) );
add_editor_plugin( memnew( TileMapEditorPlugin(this) ) );
add_editor_plugin( memnew( SpriteFramesEditorPlugin(this) ) );
- add_editor_plugin( memnew( SpriteRegionEditorPlugin(this) ) );
+ add_editor_plugin( memnew( TextureRegionEditorPlugin(this) ) );
add_editor_plugin( memnew( Particles2DEditorPlugin(this) ) );
add_editor_plugin( memnew( Path2DEditorPlugin(this) ) );
add_editor_plugin( memnew( PathEditorPlugin(this) ) );
@@ -6244,9 +6415,11 @@ EditorNode::EditorNode() {
add_editor_plugin( memnew( Polygon2DEditorPlugin(this) ) );
add_editor_plugin( memnew( LightOccluder2DEditorPlugin(this) ) );
add_editor_plugin( memnew( NavigationPolygonEditorPlugin(this) ) );
- add_editor_plugin( memnew( ColorRampEditorPlugin(this,true) ) );
- add_editor_plugin( memnew( ColorRampEditorPlugin(this,false) ) );
+ add_editor_plugin( memnew( ColorRampEditorPlugin(this) ) );
add_editor_plugin( memnew( CollisionShape2DEditorPlugin(this) ) );
+ add_editor_plugin( memnew( TextureEditorPlugin(this) ) );
+ add_editor_plugin( memnew( MaterialEditorPlugin(this) ) );
+ add_editor_plugin( memnew( MeshEditorPlugin(this) ) );
for(int i=0;i<EditorPlugins::get_plugin_count();i++)
add_editor_plugin( EditorPlugins::create(i,this) );
@@ -6395,11 +6568,12 @@ EditorNode::EditorNode() {
_load_docks();
+
}
EditorNode::~EditorNode() {
-
+
memdelete( EditorHelp::get_doc_data() );
memdelete(editor_selection);
memdelete(editor_plugins_over);
@@ -6465,6 +6639,3 @@ EditorPluginList::EditorPluginList() {
EditorPluginList::~EditorPluginList() {
}
-
-
-
diff --git a/tools/editor/editor_node.h b/tools/editor/editor_node.h
index 8fa6cfefcf..7d9b11ed83 100644
--- a/tools/editor/editor_node.h
+++ b/tools/editor/editor_node.h
@@ -49,6 +49,7 @@
#include "tools/editor/call_dialog.h"
#include "tools/editor/reparent_dialog.h"
#include "tools/editor/connections_dialog.h"
+#include "tools/editor/node_dock.h"
#include "tools/editor/settings_config_dialog.h"
#include "tools/editor/groups_editor.h"
#include "tools/editor/editor_data.h"
@@ -85,6 +86,7 @@
#include "progress_dialog.h"
+#include "editor_scale.h"
/**
@author Juan Linietsky <reduzio@gmail.com>
*/
@@ -159,7 +161,7 @@ private:
OBJECT_CALL_METHOD,
OBJECT_REQUEST_HELP,
RUN_PLAY,
- RUN_PAUSE,
+
RUN_STOP,
RUN_PLAY_SCENE,
RUN_PLAY_NATIVE,
@@ -168,11 +170,12 @@ private:
RUN_SETTINGS,
RUN_PROJECT_MANAGER,
RUN_FILE_SERVER,
- RUN_DEPLOY_DUMB_CLIENTS,
+ //RUN_DEPLOY_DUMB_CLIENTS,
RUN_LIVE_DEBUG,
RUN_DEBUG_COLLISONS,
RUN_DEBUG_NAVIGATION,
RUN_DEPLOY_REMOTE_DEBUG,
+ RUN_RELOAD_SCRIPTS,
SETTINGS_UPDATE_ALWAYS,
SETTINGS_UPDATE_CHANGES,
SETTINGS_IMPORT,
@@ -236,6 +239,7 @@ private:
//HSplitContainer *editor_hsplit;
//VSplitContainer *editor_vsplit;
+ CenterContainer *play_cc;
HBoxContainer *menu_hb;
Control *viewport;
MenuButton *file_menu;
@@ -269,6 +273,8 @@ private:
SceneTreeDock *scene_tree_dock;
//ResourcesDock *resources_dock;
PropertyEditor *property_editor;
+ NodeDock *node_dock;
+ VBoxContainer *prop_editor_vb;
ScenesDock *scenes_dock;
EditorRunNative *run_native;
@@ -348,6 +354,8 @@ private:
ToolButton *dock_tab_move_right;
int dock_popup_selected;
Timer *dock_drag_timer;
+ bool docks_visible;
+ bool distraction_free_mode;
String _tmp_import_path;
@@ -365,6 +373,8 @@ private:
String open_navigate;
bool changing_scene;
+ bool waiting_for_sources_changed;
+
uint32_t circle_step_msec;
uint64_t circle_step_frame;
int circle_step;
@@ -451,7 +461,7 @@ private:
void _display_top_editors(bool p_display);
void _set_top_editors(Vector<EditorPlugin*> p_editor_plugins_over);
void _set_editing_top_editors(Object * p_current_object);
-
+
void _quick_opened();
void _quick_run();
@@ -463,6 +473,7 @@ private:
void _add_to_recent_scenes(const String& p_scene);
void _update_recent_scenes();
void _open_recent_scene(int p_idx);
+ void _dropped_files(const Vector<String>& p_files,int p_screen);
//void _open_recent_scene_confirm();
String _recent_scene;
@@ -551,7 +562,7 @@ private:
void _save_docks_to_config(Ref<ConfigFile> p_layout, const String& p_section);
void _load_docks_from_config(Ref<ConfigFile> p_layout, const String& p_section);
void _update_dock_slots_visibility();
-
+ void _update_top_menu_visibility();
void _update_layouts_menu();
void _layout_menu_option(int p_idx);
@@ -580,6 +591,7 @@ public:
EditorPlugin *get_editor_plugin_screen() { return editor_plugin_screen; }
EditorPluginList *get_editor_plugins_over() { return editor_plugins_over; }
PropertyEditor *get_property_editor() { return property_editor; }
+ VBoxContainer *get_property_editor_vb() { return prop_editor_vb; }
static void add_editor_plugin(EditorPlugin *p_editor);
static void remove_editor_plugin(EditorPlugin *p_editor);
@@ -587,6 +599,11 @@ public:
void new_inherited_scene() { _menu_option_confirm(FILE_NEW_INHERITED_SCENE,false); }
+ void set_docks_visible(bool p_show);
+ bool get_docks_visible() const;
+
+ void set_distraction_free_mode(bool p_enter);
+ bool get_distraction_free_mode() const;
void add_control_to_dock(DockSlot p_slot,Control* p_control);
void remove_control_from_dock(Control* p_control);
@@ -605,6 +622,8 @@ public:
void save_resource(const Ref<Resource>& p_resource);
void save_resource_as(const Ref<Resource>& p_resource, const String &p_at_path=String());
+ void merge_from_scene() { _menu_option_confirm(FILE_IMPORT_SUBSCENE,false); }
+
static bool has_unsaved_changes() { return singleton->unsaved_cache; }
static HBoxContainer *get_menu_hb() { return singleton->menu_hb; }
@@ -647,6 +666,7 @@ public:
void request_instance_scene(const String &p_path);
ScenesDock *get_scenes_dock();
+ SceneTreeDock *get_scene_tree_dock();
static UndoRedo* get_undo_redo() { return &singleton->editor_data.get_undo_redo(); }
EditorSelection *get_editor_selection() { return editor_selection; }
@@ -692,6 +712,8 @@ public:
void update_keying();
+ ToolButton *get_pause_button() { return pause_button; }
+
ToolButton* add_bottom_panel_item(String p_text,Control *p_item);
bool are_bottom_panels_hidden() const;
@@ -746,7 +768,7 @@ public:
EditorPluginList();
~EditorPluginList();
-} ;
+} ;
struct EditorProgressBG {
diff --git a/tools/editor/editor_plugin.cpp b/tools/editor/editor_plugin.cpp
index dc46361251..138e532ce8 100644
--- a/tools/editor/editor_plugin.cpp
+++ b/tools/editor/editor_plugin.cpp
@@ -110,6 +110,12 @@ void EditorPlugin::add_control_to_container(CustomControlContainer p_location,Co
CanvasItemEditor::get_singleton()->get_bottom_split()->add_child(p_control);
} break;
+ case CONTAINER_PROPERTY_EDITOR_BOTTOM: {
+
+ EditorNode::get_singleton()->get_property_editor_vb()->add_child(p_control);
+
+ } break;
+
}
}
@@ -319,6 +325,8 @@ void EditorPlugin::_bind_methods() {
BIND_CONSTANT( CONTAINER_SPATIAL_EDITOR_BOTTOM );
BIND_CONSTANT( CONTAINER_CANVAS_EDITOR_MENU );
BIND_CONSTANT( CONTAINER_CANVAS_EDITOR_SIDE );
+ BIND_CONSTANT( CONTAINER_PROPERTY_EDITOR_BOTTOM );
+
BIND_CONSTANT( DOCK_SLOT_LEFT_UL );
BIND_CONSTANT( DOCK_SLOT_LEFT_BL );
diff --git a/tools/editor/editor_plugin.h b/tools/editor/editor_plugin.h
index c572ab210e..b93b6624d0 100644
--- a/tools/editor/editor_plugin.h
+++ b/tools/editor/editor_plugin.h
@@ -73,7 +73,8 @@ public:
CONTAINER_SPATIAL_EDITOR_BOTTOM,
CONTAINER_CANVAS_EDITOR_MENU,
CONTAINER_CANVAS_EDITOR_SIDE,
- CONTAINER_CANVAS_EDITOR_BOTTOM
+ CONTAINER_CANVAS_EDITOR_BOTTOM,
+ CONTAINER_PROPERTY_EDITOR_BOTTOM
};
enum DockSlot {
diff --git a/tools/editor/editor_plugin_settings.cpp b/tools/editor/editor_plugin_settings.cpp
index 3eefe10448..1a6be05af3 100644
--- a/tools/editor/editor_plugin_settings.cpp
+++ b/tools/editor/editor_plugin_settings.cpp
@@ -150,7 +150,7 @@ void EditorPluginSettings::_bind_methods() {
EditorPluginSettings::EditorPluginSettings() {
HBoxContainer *title_hb = memnew( HBoxContainer );
- title_hb->add_child(memnew( Label("Installed Plugins:")));
+ title_hb->add_child(memnew( Label(TTR("Installed Plugins:"))));
title_hb->add_spacer();
update_list = memnew( Button(TTR("Update")) );
update_list->connect("pressed",this,"update_plugins");
@@ -162,9 +162,9 @@ EditorPluginSettings::EditorPluginSettings() {
plugin_list->set_columns(4);
plugin_list->set_column_titles_visible(true);
plugin_list->set_column_title(0,TTR("Name:"));
- plugin_list->set_column_title(1,"Version:");
- plugin_list->set_column_title(2,"Author:");
- plugin_list->set_column_title(3,"Status:");
+ plugin_list->set_column_title(1,TTR("Version:"));
+ plugin_list->set_column_title(2,TTR("Author:"));
+ plugin_list->set_column_title(3,TTR("Status:"));
plugin_list->set_column_expand(0,true);
plugin_list->set_column_expand(1,false);
plugin_list->set_column_expand(2,false);
@@ -185,4 +185,3 @@ EditorPluginSettings::EditorPluginSettings() {
updating=false;
}
-
diff --git a/tools/editor/editor_profiler.cpp b/tools/editor/editor_profiler.cpp
new file mode 100644
index 0000000000..c9ee60cd54
--- /dev/null
+++ b/tools/editor/editor_profiler.cpp
@@ -0,0 +1,753 @@
+#include "editor_profiler.h"
+#include "editor_settings.h"
+#include "os/os.h"
+
+void EditorProfiler::_make_metric_ptrs(Metric& m) {
+
+ for(int i=0;i<m.categories.size();i++) {
+ m.category_ptrs[m.categories[i].signature]=&m.categories[i];
+ for(int j=0;j<m.categories[i].items.size();j++) {
+ m.item_ptrs[m.categories[i].items[j].signature]=&m.categories[i].items[j];
+ }
+ }
+}
+
+void EditorProfiler::add_frame_metric(const Metric& p_metric,bool p_final) {
+
+ ++last_metric;
+ if (last_metric>=frame_metrics.size())
+ last_metric=0;
+
+
+ frame_metrics[last_metric]=p_metric;
+ _make_metric_ptrs(frame_metrics[last_metric]);
+
+ updating_frame=true;
+ cursor_metric_edit->set_max(frame_metrics[last_metric].frame_number);
+ cursor_metric_edit->set_min(MAX(frame_metrics[last_metric].frame_number-frame_metrics.size(),0));
+
+
+ if (!seeking) {
+ cursor_metric_edit->set_val(frame_metrics[last_metric].frame_number);
+ if (hover_metric!=-1) {
+ hover_metric++;
+ if (hover_metric>=frame_metrics.size()) {
+ hover_metric=0;
+ }
+ }
+
+ }
+ updating_frame=false;
+
+ if (!frame_delay->is_processing()) {
+
+ frame_delay->set_wait_time(p_final?0.1:1);
+ frame_delay->start();
+ }
+
+ if (!plot_delay->is_processing()) {
+ plot_delay->set_wait_time(0.1);
+ plot_delay->start();
+ }
+
+}
+
+
+
+void EditorProfiler::clear() {
+
+ int metric_size=EditorSettings::get_singleton()->get("debugger/profiler_frame_history_size");
+ metric_size = CLAMP(metric_size,60,1024);
+ frame_metrics.clear();
+ frame_metrics.resize(metric_size);
+ last_metric=-1;
+ variables->clear();
+ //activate->set_pressed(false);
+ plot_sigs.clear();
+ plot_sigs.insert("fixed_frame_time");
+ plot_sigs.insert("category_frame_time");
+
+ updating_frame=true;
+ cursor_metric_edit->set_min(0);
+ cursor_metric_edit->set_max(0);
+ cursor_metric_edit->set_val(0);
+ updating_frame=false;
+ hover_metric=-1;
+ seeking=false;
+}
+
+static String _get_percent_txt(float p_value,float p_total) {
+ if (p_total==0)
+ p_total=0.00001;
+ return String::num((p_value/p_total)*100,1)+"%";
+}
+
+
+String EditorProfiler::_get_time_as_text(Metric &m,float p_time,int p_calls) {
+
+ int dmode = display_mode->get_selected();
+
+
+ if (dmode==DISPLAY_FRAME_TIME) {
+ return rtos(p_time);
+ } else if (dmode==DISPLAY_AVERAGE_TIME) {
+ if (p_calls==0)
+ return "0";
+ else
+ return rtos(p_time/p_calls);
+ } else if (dmode==DISPLAY_FRAME_PERCENT) {
+ return _get_percent_txt(p_time,m.frame_time);
+ } else if (dmode==DISPLAY_FIXED_FRAME_PERCENT) {
+
+ return _get_percent_txt(p_time,m.fixed_frame_time);
+ }
+
+ return "err";
+}
+
+Color EditorProfiler::_get_color_from_signature(const StringName& p_signature) const {
+
+ double rot = ABS(double(p_signature.hash())/double(0x7FFFFFFF));
+ Color c;
+ c.set_hsv(rot,1,1);
+ return c;
+
+}
+
+void EditorProfiler::_item_edited() {
+
+ if (updating_frame)
+ return;
+
+ TreeItem *item=variables->get_edited();
+ if (!item)
+ return;
+ StringName signature=item->get_metadata(0);
+ bool checked=item->is_checked(0);
+
+
+ if (checked)
+ plot_sigs.insert(signature);
+ else
+ plot_sigs.erase(signature);
+
+ if (!frame_delay->is_processing()) {
+ frame_delay->set_wait_time(0.1);
+ frame_delay->start();
+ }
+}
+
+void EditorProfiler::_update_plot() {
+
+ int w = graph->get_size().width;
+ int h = graph->get_size().height;
+
+ bool reset_texture=false;
+
+ int desired_len = w * h * 4;
+
+ if (graph_image.size()!=desired_len) {
+ reset_texture=true;
+ graph_image.resize(desired_len);
+ }
+
+
+ DVector<uint8_t>::Write wr = graph_image.write();
+
+
+
+ //clear
+ for(int i=0;i<desired_len;i+=4) {
+ wr[i+0]=0;
+ wr[i+1]=0;
+ wr[i+2]=0;
+ wr[i+3]=255;
+ }
+
+
+ //find highest value
+
+ bool use_self = display_time->get_selected()==DISPLAY_SELF_TIME;
+ float highest=0;
+
+ for(int i=0;i<frame_metrics.size();i++) {
+ Metric &m = frame_metrics[i];
+ if (!m.valid)
+ continue;
+
+ for (Set<StringName>::Element *E=plot_sigs.front();E;E=E->next()) {
+
+ Map<StringName,Metric::Category*>::Element *F=m.category_ptrs.find(E->get());
+ if (F) {
+ highest=MAX(F->get()->total_time,highest);
+ }
+
+ Map<StringName,Metric::Category::Item*>::Element *G=m.item_ptrs.find(E->get());
+ if (G) {
+ if (use_self) {
+ highest=MAX(G->get()->self,highest);
+ } else {
+ highest=MAX(G->get()->total,highest);
+ }
+ }
+ }
+ }
+
+ if (highest>0) {
+ //means some data exists..
+ highest*=1.2; //leave some upper room
+ graph_height=highest;
+
+ Vector<int> columnv;
+ columnv.resize(h*4);
+
+ int *column = columnv.ptr();
+
+ Map<StringName,int> plot_prev;
+ //Map<StringName,int> plot_max;
+
+ uint64_t time = OS::get_singleton()->get_ticks_usec();
+
+ for(int i=0;i<w;i++) {
+
+
+ for(int j=0;j<h*4;j++) {
+ column[j]=0;
+ }
+
+ int current = i*frame_metrics.size()/w;
+ int next = (i+1)*frame_metrics.size()/w;
+ if (next>frame_metrics.size()) {
+ next=frame_metrics.size();
+ }
+ if (next==current)
+ next=current+1; //just because for loop must work
+
+ for (Set<StringName>::Element *E=plot_sigs.front();E;E=E->next()) {
+
+ int plot_pos=-1;
+
+ for(int j=current;j<next;j++) {
+
+ //wrap
+ int idx = last_metric+1+j;
+ while( idx >= frame_metrics.size() ) {
+ idx-=frame_metrics.size();
+ }
+
+ //get
+ Metric &m = frame_metrics[idx];
+ if (m.valid==false)
+ continue; //skip because invalid
+
+
+ float value=0;
+
+ Map<StringName,Metric::Category*>::Element *F=m.category_ptrs.find(E->get());
+ if (F) {
+ value=F->get()->total_time;
+ }
+
+ Map<StringName,Metric::Category::Item*>::Element *G=m.item_ptrs.find(E->get());
+ if (G) {
+ if (use_self) {
+ value=G->get()->self;
+ } else {
+ value=G->get()->total;
+ }
+ }
+
+
+ plot_pos = MAX( CLAMP(int(value*h/highest),0,h-1), plot_pos );
+
+
+ }
+
+ int prev_plot=plot_pos;
+ Map<StringName,int>::Element *H=plot_prev.find(E->get());
+ if (H) {
+ prev_plot=H->get();
+ H->get()=plot_pos;
+ } else {
+ plot_prev[E->get()]=plot_pos;
+ }
+
+ if (plot_pos==-1 && prev_plot==-1) {
+ //don't bother drawing
+ continue;
+ }
+
+ if (prev_plot!=-1 && plot_pos==-1) {
+
+ plot_pos=prev_plot;
+ }
+
+ if (prev_plot==-1 && plot_pos!=-1) {
+ prev_plot=plot_pos;
+ }
+
+ plot_pos = h- plot_pos -1;
+ prev_plot = h- prev_plot -1;
+
+ if (prev_plot > plot_pos) {
+ SWAP(prev_plot,plot_pos);
+ }
+
+ Color col = _get_color_from_signature(E->get());
+
+ for(int j=prev_plot;j<=plot_pos;j++) {
+
+ column[j*4+0]+=Math::fast_ftoi(CLAMP(col.r*255,0,255));
+ column[j*4+1]+=Math::fast_ftoi(CLAMP(col.g*255,0,255));
+ column[j*4+2]+=Math::fast_ftoi(CLAMP(col.b*255,0,255));
+ column[j*4+3]+=1;
+
+ }
+ }
+
+
+ for(int j=0;j<h*4;j+=4) {
+
+ int a = column[j+3];
+ if (a>0) {
+ column[j+0]/=a;
+ column[j+1]/=a;
+ column[j+2]/=a;
+
+ }
+
+ uint8_t r = uint8_t(column[j+0]);
+ uint8_t g = uint8_t(column[j+1]);
+ uint8_t b = uint8_t(column[j+2]);
+
+ int widx = ((j>>2)*w+i)*4;
+ wr[widx+0]=r;
+ wr[widx+1]=g;
+ wr[widx+2]=b;
+ wr[widx+3]=255;
+ }
+ }
+
+ time = OS::get_singleton()->get_ticks_usec() - time;
+ //print_line("Taken: "+rtos(USEC_TO_SEC(time)));
+
+ }
+
+
+ wr = DVector<uint8_t>::Write();
+
+ Image img(w,h,0,Image::FORMAT_RGBA,graph_image);
+
+ if (reset_texture) {
+
+ if (graph_texture.is_null()) {
+ graph_texture.instance();
+ }
+ graph_texture->create(img.get_width(),img.get_height(),img.get_format(),Texture::FLAG_VIDEO_SURFACE);
+
+ }
+
+ graph_texture->set_data(img);;
+
+
+ graph->set_texture(graph_texture);
+ graph->update();
+
+}
+
+void EditorProfiler::_update_frame() {
+
+ int cursor_metric = _get_cursor_index();
+
+
+ ERR_FAIL_INDEX(cursor_metric,frame_metrics.size());
+
+ updating_frame=true;
+ variables->clear();
+
+ TreeItem* root = variables->create_item();
+ Metric &m = frame_metrics[cursor_metric];
+
+
+ int dtime = display_time->get_selected();
+
+
+ for(int i=0;i<m.categories.size();i++) {
+
+ TreeItem *category = variables->create_item(root);
+ category->set_cell_mode(0,TreeItem::CELL_MODE_CHECK);
+ category->set_editable(0,true);
+ category->set_metadata(0,m.categories[i].signature);
+ category->set_text(0,String(m.categories[i].name));
+ category->set_text(1,_get_time_as_text(m,m.categories[i].total_time,1));
+
+ if (plot_sigs.has(m.categories[i].signature)) {
+ category->set_checked(0,true);
+ category->set_custom_bg_color(0,Color(0,0,0));
+ category->set_custom_color(0,_get_color_from_signature(m.categories[i].signature));
+ }
+
+
+ for(int j=0;j<m.categories[i].items.size();j++) {
+ Metric::Category::Item &it = m.categories[i].items[j];
+
+ TreeItem *item = variables->create_item(category);
+ item->set_cell_mode(0,TreeItem::CELL_MODE_CHECK);
+ item->set_editable(0,true);
+ item->set_text(0,it.name);
+ item->set_metadata(0,it.signature);
+ item->set_metadata(1,it.script);
+ item->set_metadata(2,it.line);
+ item->set_tooltip(0,it.script+":"+itos(it.line));
+
+ float time = dtime == DISPLAY_SELF_TIME ? it.self : it.total;
+
+ item->set_text(1,_get_time_as_text(m,time,it.calls));
+
+ item->set_text(2,itos(it.calls));
+
+ if (plot_sigs.has(it.signature)) {
+ item->set_checked(0,true);
+ item->set_custom_bg_color(0,Color(0,0,0));
+ item->set_custom_color(0,_get_color_from_signature(it.signature));
+ }
+
+ }
+ }
+
+ updating_frame=false;
+
+}
+
+
+void EditorProfiler::_activate_pressed() {
+
+ if (activate->is_pressed()) {
+ clear();
+ activate->set_icon(get_icon("Stop","EditorIcons"));
+ activate->set_text(TTR("Stop Profiling"));
+ } else {
+ activate->set_icon(get_icon("Play","EditorIcons"));
+ activate->set_text(TTR("Start Profiling"));
+
+
+ }
+ emit_signal("enable_profiling",activate->is_pressed());
+
+}
+
+
+void EditorProfiler::_notification(int p_what) {
+
+ if (p_what==NOTIFICATION_ENTER_TREE) {
+ activate->set_icon(get_icon("Play","EditorIcons"));
+ }
+}
+
+void EditorProfiler::_graph_tex_draw() {
+
+ if (last_metric<0)
+ return;
+ if (seeking) {
+
+ int max_frames = frame_metrics.size();
+ int frame = cursor_metric_edit->get_val() - (frame_metrics[last_metric].frame_number-max_frames+1);
+ if (frame<0)
+ frame=0;
+
+ int cur_x = frame * graph->get_size().x / max_frames;
+
+
+ graph->draw_line(Vector2(cur_x,0),Vector2(cur_x,graph->get_size().y),Color(1,1,1,0.8));
+ }
+
+
+ if (hover_metric!=-1 && frame_metrics[hover_metric].valid) {
+
+
+
+ int max_frames = frame_metrics.size();
+ int frame = frame_metrics[hover_metric].frame_number - (frame_metrics[last_metric].frame_number-max_frames+1);
+ if (frame<0)
+ frame=0;
+
+ int cur_x = frame * graph->get_size().x / max_frames;
+
+ graph->draw_line(Vector2(cur_x,0),Vector2(cur_x,graph->get_size().y),Color(1,1,1,0.4));
+
+
+ }
+
+}
+
+void EditorProfiler::_graph_tex_mouse_exit() {
+
+ hover_metric=-1;
+ graph->update();
+}
+
+
+void EditorProfiler::_cursor_metric_changed(double) {
+ if (updating_frame)
+ return;
+
+
+ graph->update();
+ _update_frame();
+
+}
+
+void EditorProfiler::_graph_tex_input(const InputEvent& p_ev){
+
+ if (last_metric<0)
+ return;
+
+ if (
+ (p_ev.type==InputEvent::MOUSE_BUTTON && p_ev.mouse_button.button_index==BUTTON_LEFT && p_ev.mouse_button.pressed) ||
+ (p_ev.type==InputEvent::MOUSE_MOTION) ) {
+
+ int x = p_ev.mouse_button.x;
+ x=x*frame_metrics.size()/graph->get_size().width;
+
+ bool show_hover = x>=0 && x<frame_metrics.size();
+
+ if (x<0) {
+ x=0;
+ }
+
+ if (x>=frame_metrics.size()) {
+ x=frame_metrics.size()-1;
+ }
+
+
+
+ int metric=frame_metrics.size()-x-1;
+ metric = last_metric-metric;
+ while(metric<0) {
+ metric+=frame_metrics.size();
+ }
+
+
+
+ if (show_hover) {
+
+ hover_metric=metric;
+
+ } else {
+ hover_metric=-1;
+ }
+
+
+ if (p_ev.type==InputEvent::MOUSE_BUTTON || p_ev.mouse_motion.button_mask&BUTTON_MASK_LEFT) {
+ //cursor_metric=x;
+ updating_frame=true;
+
+ //metric may be invalid, so look for closest metric that is valid, this makes snap feel better
+ bool valid=false;
+ for(int i=0;i<frame_metrics.size();i++) {
+
+ if (frame_metrics[metric].valid) {
+ valid=true;
+ break;
+ }
+
+ metric++;
+ if (metric>=frame_metrics.size())
+ metric=0;
+ }
+
+ if (valid)
+ cursor_metric_edit->set_val(frame_metrics[metric].frame_number);
+
+ updating_frame=false;
+
+ if (activate->is_pressed()) {
+ if (!seeking) {
+ emit_signal("break_request");
+ }
+ }
+
+ seeking=true;
+
+ if (!frame_delay->is_processing()) {
+ frame_delay->set_wait_time(0.1);
+ frame_delay->start();
+ }
+ }
+
+ graph->update();
+
+ }
+
+}
+
+int EditorProfiler::_get_cursor_index() const {
+
+ if (last_metric<0)
+ return 0;
+ if (!frame_metrics[last_metric].valid)
+ return 0;
+
+ int diff = (frame_metrics[last_metric].frame_number-cursor_metric_edit->get_val());
+
+ int idx = last_metric - diff;
+ while (idx<0) {
+ idx+=frame_metrics.size();
+ }
+
+
+ return idx;
+
+}
+
+void EditorProfiler::disable_seeking() {
+
+ seeking=false;
+ graph->update();
+
+}
+
+void EditorProfiler::_combo_changed(int) {
+
+ _update_frame();
+ _update_plot();
+}
+
+void EditorProfiler::_bind_methods() {
+
+ ObjectTypeDB::bind_method(_MD("_update_frame"),&EditorProfiler::_update_frame);
+ ObjectTypeDB::bind_method(_MD("_update_plot"),&EditorProfiler::_update_plot);
+ ObjectTypeDB::bind_method(_MD("_activate_pressed"),&EditorProfiler::_activate_pressed);
+ ObjectTypeDB::bind_method(_MD("_graph_tex_draw"),&EditorProfiler::_graph_tex_draw);
+ ObjectTypeDB::bind_method(_MD("_graph_tex_input"),&EditorProfiler::_graph_tex_input);
+ ObjectTypeDB::bind_method(_MD("_graph_tex_mouse_exit"),&EditorProfiler::_graph_tex_mouse_exit);
+ ObjectTypeDB::bind_method(_MD("_cursor_metric_changed"),&EditorProfiler::_cursor_metric_changed);
+ ObjectTypeDB::bind_method(_MD("_combo_changed"),&EditorProfiler::_combo_changed);
+
+ ObjectTypeDB::bind_method(_MD("_item_edited"),&EditorProfiler::_item_edited);
+ ADD_SIGNAL( MethodInfo("enable_profiling",PropertyInfo(Variant::BOOL,"enable")));
+ ADD_SIGNAL( MethodInfo("break_request"));
+
+}
+
+void EditorProfiler::set_enabled(bool p_enable) {
+
+ activate->set_disabled(!p_enable);
+}
+
+bool EditorProfiler::is_profiling() {
+ return activate->is_pressed();
+}
+
+EditorProfiler::EditorProfiler()
+{
+
+ HBoxContainer *hb = memnew( HBoxContainer );
+ add_child(hb);
+ activate = memnew( Button );
+ activate->set_toggle_mode(true);
+ activate->set_text(TTR("Start Profiling"));
+ activate->connect("pressed",this,"_activate_pressed");
+ hb->add_child(activate);
+
+ hb->add_child( memnew( Label(TTR("Measure:") ) ) );
+
+ display_mode = memnew( OptionButton );
+ display_mode->add_item(TTR("Frame Time (sec)"));
+ display_mode->add_item(TTR("Average Time (sec)"));
+ display_mode->add_item(TTR("Frame %"));
+ display_mode->add_item(TTR("Fixed Frame %"));
+ display_mode->connect("item_selected",this,"_combo_changed");
+
+ hb->add_child( display_mode );
+
+ hb->add_child( memnew( Label(TTR("Time:") ) ) );
+
+ display_time = memnew( OptionButton );
+ display_time->add_item(TTR("Inclusive"));
+ display_time->add_item(TTR("Self"));
+ display_time->connect("item_selected",this,"_combo_changed");
+
+ hb->add_child(display_time);
+
+ hb->add_spacer();
+
+ hb->add_child( memnew( Label(TTR("Frame #:") ) ) );
+
+ cursor_metric_edit = memnew( SpinBox );
+ cursor_metric_edit->set_h_size_flags(SIZE_FILL);
+ hb->add_child(cursor_metric_edit);
+ cursor_metric_edit->connect("value_changed",this,"_cursor_metric_changed");
+
+ hb->add_constant_override("separation",8);
+
+
+
+ h_split = memnew( HSplitContainer );
+ add_child(h_split);
+ h_split->set_v_size_flags(SIZE_EXPAND_FILL);
+
+ variables = memnew( Tree );
+ variables->set_custom_minimum_size(Size2(300,0));
+ variables->set_hide_folding(true);
+ h_split->add_child(variables);
+ variables->set_hide_root(true);
+ variables->set_columns(3);
+ variables->set_column_titles_visible(true);
+ variables->set_column_title(0,"Name");
+ variables->set_column_expand(0,true);
+ variables->set_column_min_width(0,60);
+ variables->set_column_title(1,"Time");
+ variables->set_column_expand(1,false);
+ variables->set_column_min_width(1,60);
+ variables->set_column_title(2,"Calls");
+ variables->set_column_expand(2,false);
+ variables->set_column_min_width(2,60);
+ variables->connect("item_edited",this,"_item_edited");
+
+
+ graph = memnew( TextureFrame );
+ graph->set_expand(true);
+ graph->set_stop_mouse(true);
+ graph->set_ignore_mouse(false);
+ graph->connect("draw",this,"_graph_tex_draw");
+ graph->connect("input_event",this,"_graph_tex_input");
+ graph->connect("mouse_exit",this,"_graph_tex_mouse_exit");
+
+ h_split->add_child(graph);
+ graph->set_h_size_flags(SIZE_EXPAND_FILL);
+
+ add_constant_override("separation",3);
+
+ int metric_size=CLAMP(int(EDITOR_DEF("debugger/profiler_frame_history_size",600)),60,1024);
+ frame_metrics.resize(metric_size);
+ last_metric=-1;
+// cursor_metric=-1;
+ hover_metric=-1;
+
+
+ EDITOR_DEF("debugger/profiler_frame_max_functions",64);
+
+ //display_mode=DISPLAY_FRAME_TIME;
+
+ frame_delay = memnew( Timer );
+ frame_delay->set_wait_time(0.1);
+ frame_delay->set_one_shot(true);
+ add_child(frame_delay);
+ frame_delay->connect("timeout",this,"_update_frame");
+
+ plot_delay = memnew( Timer );
+ plot_delay->set_wait_time(0.1);
+ plot_delay->set_one_shot(true);
+ add_child(plot_delay);
+ plot_delay->connect("timeout",this,"_update_plot");
+
+ plot_sigs.insert("fixed_frame_time");
+ plot_sigs.insert("category_frame_time");
+
+ seeking=false;
+ graph_height=1;
+
+// activate->set_disabled(true);
+
+}
diff --git a/tools/editor/editor_profiler.h b/tools/editor/editor_profiler.h
new file mode 100644
index 0000000000..f5cea118ce
--- /dev/null
+++ b/tools/editor/editor_profiler.h
@@ -0,0 +1,145 @@
+#ifndef EDITORPROFILER_H
+#define EDITORPROFILER_H
+
+
+#include "scene/gui/box_container.h"
+#include "scene/gui/texture_frame.h"
+#include "scene/gui/button.h"
+#include "scene/gui/label.h"
+#include "scene/gui/tree.h"
+#include "scene/gui/split_container.h"
+#include "scene/gui/option_button.h"
+#include "scene/gui/spin_box.h"
+
+
+class EditorProfiler : public VBoxContainer {
+
+ OBJ_TYPE(EditorProfiler,VBoxContainer)
+
+public:
+
+ struct Metric {
+
+ bool valid;
+
+ int frame_number;
+ float frame_time;
+ float idle_time;
+ float fixed_time;
+ float fixed_frame_time;
+
+ struct Category {
+
+ StringName signature;
+ String name;
+ float total_time; //total for category
+
+ struct Item {
+
+ StringName signature;
+ String name;
+ String script;
+ int line;
+ float self;
+ float total;
+ int calls;
+ };
+
+ Vector<Item> items;
+ };
+
+ Vector<Category> categories;
+
+ Map<StringName,Category*> category_ptrs;
+ Map<StringName,Category::Item*> item_ptrs;
+
+
+ Metric() { valid=false; frame_number=0; }
+ };
+
+ enum DisplayMode {
+ DISPLAY_FRAME_TIME,
+ DISPLAY_AVERAGE_TIME,
+ DISPLAY_FRAME_PERCENT,
+ DISPLAY_FIXED_FRAME_PERCENT,
+ };
+
+ enum DisplayTime {
+ DISPLAY_TOTAL_TIME,
+ DISPLAY_SELF_TIME,
+ };
+
+private:
+ Button *activate;
+ TextureFrame *graph;
+ Ref<ImageTexture> graph_texture;
+ DVector<uint8_t> graph_image;
+ Tree *variables;
+ HSplitContainer *h_split;
+
+ Set<StringName> plot_sigs;
+
+ OptionButton *display_mode;
+ OptionButton *display_time;
+
+ SpinBox * cursor_metric_edit;
+
+ Vector<Metric> frame_metrics;
+ int last_metric;
+
+ int max_functions;
+
+ bool updating_frame;
+
+ //int cursor_metric;
+ int hover_metric;
+
+ float graph_height;
+
+ bool seeking;
+
+ Timer *frame_delay;
+ Timer *plot_delay;
+
+ void _update_frame();
+
+ void _activate_pressed();
+
+ String _get_time_as_text(Metric &m,float p_time,int p_calls);
+
+ void _make_metric_ptrs(Metric& m);
+ void _item_edited();
+
+ void _update_plot();
+
+ void _graph_tex_mouse_exit();
+
+ void _graph_tex_draw();
+ void _graph_tex_input(const InputEvent& p_ev);
+
+ int _get_cursor_index() const;
+
+ Color _get_color_from_signature(const StringName& p_signature) const;
+
+ void _cursor_metric_changed(double);
+
+ void _combo_changed(int);
+
+protected:
+
+ void _notification(int p_what);
+ static void _bind_methods();
+public:
+
+ void add_frame_metric(const Metric& p_metric, bool p_final=false);
+ void set_enabled(bool p_enable);
+ bool is_profiling();
+ bool is_seeking() { return seeking; }
+ void disable_seeking();
+
+ void clear();
+
+ EditorProfiler();
+};
+
+#endif // EDITORPROFILER_H
diff --git a/tools/editor/editor_reimport_dialog.cpp b/tools/editor/editor_reimport_dialog.cpp
index 244642b7a6..b6311a7604 100644
--- a/tools/editor/editor_reimport_dialog.cpp
+++ b/tools/editor/editor_reimport_dialog.cpp
@@ -32,7 +32,7 @@
void EditorReImportDialog::popup_reimport() {
if (EditorFileSystem::get_singleton()->is_scanning()) {
- error->set_text(TTR("Please wait for scan to complete"));
+ error->set_text(TTR("Please wait for scan to complete."));
error->popup_centered_minsize();
return;
}
@@ -92,7 +92,7 @@ void EditorReImportDialog::popup_reimport() {
void EditorReImportDialog::ok_pressed() {
if (EditorFileSystem::get_singleton()->is_scanning()) {
- error->set_text(TTR("Please wait for scan to complete"));
+ error->set_text(TTR("Please wait for scan to complete."));
error->popup_centered_minsize();
return;
}
diff --git a/tools/editor/editor_resource_preview.cpp b/tools/editor/editor_resource_preview.cpp
index f684b49a2c..05b935f26c 100644
--- a/tools/editor/editor_resource_preview.cpp
+++ b/tools/editor/editor_resource_preview.cpp
@@ -4,7 +4,7 @@
#include "io/resource_loader.h"
#include "io/resource_saver.h"
#include "globals.h"
-
+#include "editor_scale.h"
Ref<Texture> EditorResourcePreviewGenerator::generate_from_path(const String& p_path) {
@@ -36,14 +36,24 @@ void EditorResourcePreview::_preview_ready(const String& p_str,const Ref<Texture
//print_line("preview is ready");
preview_mutex->lock();
+ String path = p_str;
+ uint32_t hash=0;
+
+ if (p_str.begins_with("ID:")) {
+ hash=p_str.get_slicec(':',2).to_int();
+ path="ID:"+p_str.get_slicec(':',1);
+ }
+
Item item;
item.order=order++;
item.preview=p_texture;
- cache[p_str]=item;
+ item.last_hash=hash;
+
+ cache[path]=item;
Object *recv = ObjectDB::get_instance(id);
if (recv) {
- recv->call_deferred(p_func,p_str,p_texture,p_ud);
+ recv->call_deferred(p_func,path,p_texture,p_ud);
}
preview_mutex->unlock();
@@ -51,7 +61,12 @@ void EditorResourcePreview::_preview_ready(const String& p_str,const Ref<Texture
Ref<Texture> EditorResourcePreview::_generate_preview(const QueueItem& p_item,const String& cache_base) {
- String type = ResourceLoader::get_resource_type(p_item.path);
+ String type;
+
+ if (p_item.resource.is_valid())
+ type=p_item.resource->get_type();
+ else
+ type=ResourceLoader::get_resource_type(p_item.path);
//print_line("resource type is: "+type);
if (type=="")
@@ -62,24 +77,32 @@ Ref<Texture> EditorResourcePreview::_generate_preview(const QueueItem& p_item,co
for(int i=0;i<preview_generators.size();i++) {
if (!preview_generators[i]->handles(type))
continue;
- generated = preview_generators[i]->generate_from_path(p_item.path);
+ if (p_item.resource.is_valid()) {
+ generated = preview_generators[i]->generate(p_item.resource);
+ } else {
+ generated = preview_generators[i]->generate_from_path(p_item.path);
+ }
break;
}
- if (generated.is_valid()) {
- //print_line("was generated");
- int thumbnail_size = EditorSettings::get_singleton()->get("file_dialog/thumbnail_size");
- //wow it generated a preview... save cache
- ResourceSaver::save(cache_base+".png",generated);
- FileAccess *f=FileAccess::open(cache_base+".txt",FileAccess::WRITE);
- f->store_line(itos(thumbnail_size));
- f->store_line(itos(FileAccess::get_modified_time(p_item.path)));
- f->store_line(FileAccess::get_md5(p_item.path));
- memdelete(f);
- } else {
- //print_line("was not generated");
+ if (!p_item.resource.is_valid()) {
+ // cache the preview in case it's a resource on disk
+ if (generated.is_valid()) {
+ //print_line("was generated");
+ int thumbnail_size = EditorSettings::get_singleton()->get("file_dialog/thumbnail_size");
+ thumbnail_size*=EDSCALE;
+ //wow it generated a preview... save cache
+ ResourceSaver::save(cache_base+".png",generated);
+ FileAccess *f=FileAccess::open(cache_base+".txt",FileAccess::WRITE);
+ f->store_line(itos(thumbnail_size));
+ f->store_line(itos(FileAccess::get_modified_time(p_item.path)));
+ f->store_line(FileAccess::get_md5(p_item.path));
+ memdelete(f);
+ } else {
+ //print_line("was not generated");
+ }
}
return generated;
@@ -108,13 +131,22 @@ void EditorResourcePreview::_thread() {
//print_line("pop from queue "+item.path);
- uint64_t modtime = FileAccess::get_modified_time(item.path);
int thumbnail_size = EditorSettings::get_singleton()->get("file_dialog/thumbnail_size");
+ thumbnail_size*=EDSCALE;
if (cache.has(item.path)) {
//already has it because someone loaded it, just let it know it's ready
+ if (item.resource.is_valid()) {
+ item.path+=":"+itos(cache[item.path].last_hash); //keep last hash (see description of what this is in condition below)
+ }
call_deferred("_preview_ready",item.path,cache[item.path].preview,item.id,item.function,item.userdata);
+ } else if (item.resource.is_valid()){
+
+ texture=_generate_preview(item,String());
+ //adding hash to the end of path (should be ID:<objid>:<hash>) because of 5 argument limit to call_deferred
+ call_deferred("_preview_ready",item.path+":"+itos(item.resource->hash_edited_version()),texture,item.id,item.function,item.userdata);
+
} else {
@@ -135,6 +167,7 @@ void EditorResourcePreview::_thread() {
texture=_generate_preview(item,cache_base);
} else {
+ uint64_t modtime = FileAccess::get_modified_time(item.path);
int tsize = f->get_line().to_int64();
uint64_t last_modtime = f->get_line().to_int64();
@@ -194,6 +227,35 @@ void EditorResourcePreview::_thread() {
+void EditorResourcePreview::queue_edited_resource_preview(const Ref<Resource>& p_res, Object* p_receiver, const StringName& p_receiver_func, const Variant& p_userdata) {
+
+ ERR_FAIL_NULL(p_receiver);
+ ERR_FAIL_COND(!p_res.is_valid());
+
+ preview_mutex->lock();
+
+ String path_id = "ID:"+itos(p_res->get_instance_ID());
+ if (cache.has(path_id) && cache[path_id].last_hash==p_res->hash_edited_version()) {
+
+ cache[path_id].order=order++;
+ p_receiver->call_deferred(p_receiver_func,path_id,cache[path_id].preview,p_userdata);
+ preview_mutex->unlock();
+ return;
+
+ }
+
+ //print_line("send to thread "+p_path);
+ QueueItem item;
+ item.function=p_receiver_func;
+ item.id=p_receiver->get_instance_ID();
+ item.resource=p_res;
+ item.path=path_id;
+ item.userdata=p_userdata;
+
+ queue.push_back(item);
+ preview_mutex->unlock();
+ preview_sem->post();
+}
void EditorResourcePreview::queue_resource_preview(const String& p_path, Object* p_receiver, const StringName& p_receiver_func, const Variant& p_userdata) {
@@ -204,7 +266,6 @@ void EditorResourcePreview::queue_resource_preview(const String& p_path, Object*
p_receiver->call_deferred(p_receiver_func,p_path,cache[p_path].preview,p_userdata);
preview_mutex->unlock();
return;
-
}
//print_line("send to thread "+p_path);
diff --git a/tools/editor/editor_resource_preview.h b/tools/editor/editor_resource_preview.h
index aadae75597..13c3d51313 100644
--- a/tools/editor/editor_resource_preview.h
+++ b/tools/editor/editor_resource_preview.h
@@ -47,6 +47,7 @@ class EditorResourcePreview : public Node {
static EditorResourcePreview* singleton;
struct QueueItem {
+ Ref<Resource> resource;
String path;
ObjectID id;
StringName function;
@@ -63,6 +64,7 @@ class EditorResourcePreview : public Node {
struct Item {
Ref<Texture> preview;
int order;
+ uint32_t last_hash;
};
int order;
@@ -84,7 +86,8 @@ public:
static EditorResourcePreview* get_singleton();
//callback funtion is callback(String p_path,Ref<Texture> preview,Variant udata) preview null if could not load
- void queue_resource_preview(const String& p_path, Object* p_receiver, const StringName& p_receiver_func, const Variant& p_userdata);
+ void queue_resource_preview(const String& p_res, Object* p_receiver, const StringName& p_receiver_func, const Variant& p_userdata);
+ void queue_edited_resource_preview(const Ref<Resource>& p_path, Object* p_receiver, const StringName& p_receiver_func, const Variant& p_userdata);
void add_preview_generator(const Ref<EditorResourcePreviewGenerator>& p_generator);
diff --git a/tools/editor/editor_run_script.cpp b/tools/editor/editor_run_script.cpp
index 65aaf3d734..d34cac1530 100644
--- a/tools/editor/editor_run_script.cpp
+++ b/tools/editor/editor_run_script.cpp
@@ -9,12 +9,12 @@
void EditorScript::add_root_node(Node *p_node) {
if (!editor) {
- EditorNode::add_io_error(TTR("EditorScript::add_root_node : Write your logic in the _run() method."));
+ EditorNode::add_io_error("EditorScript::add_root_node: "+TTR("Write your logic in the _run() method."));
return;
}
if (editor->get_edited_scene()) {
- EditorNode::add_io_error(TTR("EditorScript::add_root_node : There is an edited scene already."));
+ EditorNode::add_io_error("EditorScript::add_root_node: "+TTR("There is an edited scene already."));
return;
}
@@ -24,7 +24,7 @@ void EditorScript::add_root_node(Node *p_node) {
Node *EditorScript::get_scene() {
if (!editor) {
- EditorNode::add_io_error(TTR("EditorScript::get_scene : Write your logic in the _run() method."));
+ EditorNode::add_io_error("EditorScript::get_scene: "+TTR("Write your logic in the _run() method."));
return NULL;
}
@@ -36,7 +36,7 @@ void EditorScript::_run() {
Ref<Script> s = get_script();
ERR_FAIL_COND(!s.is_valid());
if (!get_script_instance()) {
- EditorNode::add_io_error("Couldn't instance script:\n "+s->get_path()+"\nDid you forget the 'tool' keyword?");
+ EditorNode::add_io_error(TTR("Couldn't instance script:")+"\n "+s->get_path()+"\n"+TTR("Did you forget the 'tool' keyword?"));
return;
}
@@ -46,7 +46,7 @@ void EditorScript::_run() {
get_script_instance()->call("_run",NULL,0,ce);
if (ce.error!=Variant::CallError::CALL_OK) {
- EditorNode::add_io_error("Couldn't run script:\n "+s->get_path()+"\nDid you forget the '_run' method?");
+ EditorNode::add_io_error(TTR("Couldn't run script:")+"\n "+s->get_path()+"\n"+TTR("Did you forget the '_run' method?"));
}
}
diff --git a/tools/editor/editor_scale.cpp b/tools/editor/editor_scale.cpp
new file mode 100644
index 0000000000..c332acc0ca
--- /dev/null
+++ b/tools/editor/editor_scale.cpp
@@ -0,0 +1,14 @@
+#include "editor_scale.h"
+#include "os/os.h"
+
+static bool editor_hidpi=false;
+
+void editor_set_hidpi(bool p_hidpi) {
+
+ editor_hidpi=p_hidpi;
+}
+
+bool editor_is_hidpi() {
+
+ return editor_hidpi;
+}
diff --git a/tools/editor/editor_scale.h b/tools/editor/editor_scale.h
new file mode 100644
index 0000000000..a60cf00f0a
--- /dev/null
+++ b/tools/editor/editor_scale.h
@@ -0,0 +1,8 @@
+#ifndef EDITOR_SCALE_H
+#define EDITOR_SCALE_H
+
+void editor_set_hidpi(bool p_hidpi);
+bool editor_is_hidpi();
+
+#define EDSCALE (editor_is_hidpi() ? 2 : 1)
+#endif // EDITOR_SCALE_H
diff --git a/tools/editor/editor_settings.cpp b/tools/editor/editor_settings.cpp
index 1d79dddac9..bf01e02330 100644
--- a/tools/editor/editor_settings.cpp
+++ b/tools/editor/editor_settings.cpp
@@ -41,6 +41,11 @@
#include "io/config_file.h"
#include "editor_node.h"
#include "globals.h"
+#include "translations.h"
+#include "io/file_access_memory.h"
+#include "io/translation_loader_po.h"
+#include "io/compression.h"
+#include "os/keyboard.h"
Ref<EditorSettings> EditorSettings::singleton=NULL;
@@ -53,6 +58,26 @@ EditorSettings *EditorSettings::get_singleton() {
bool EditorSettings::_set(const StringName& p_name, const Variant& p_value) {
_THREAD_SAFE_METHOD_
+
+ if (p_name.operator String()=="shortcuts") {
+
+ Array arr=p_value;
+ ERR_FAIL_COND_V(arr.size() && arr.size()&1,true);
+ print_line("shortcuts: "+Variant(arr).get_construct_string());
+ for(int i=0;i<arr.size();i+=2) {
+
+ String name = arr[i];
+ InputEvent shortcut = arr[i+1];
+
+ Ref<ShortCut> sc;
+ sc.instance();
+ sc->set_shortcut(shortcut);
+ add_shortcut(name,sc);
+ }
+
+ return true;
+ }
+
if (p_value.get_type()==Variant::NIL)
props.erase(p_name);
else {
@@ -70,6 +95,25 @@ bool EditorSettings::_get(const StringName& p_name,Variant &r_ret) const {
_THREAD_SAFE_METHOD_
+ if (p_name.operator String()=="shortcuts") {
+
+ Array arr;
+ for (const Map<String,Ref<ShortCut> >::Element *E=shortcuts.front();E;E=E->next()) {
+
+ Ref<ShortCut> sc=E->get();
+ if (!sc->has_meta("original"))
+ continue; //this came from settings but is not any longer used
+
+ InputEvent original = sc->get_meta("original");
+ if (sc->is_shortcut(original) || (original.type==InputEvent::NONE && sc->get_shortcut().type==InputEvent::NONE))
+ continue; //not changed from default, don't save
+ arr.push_back(E->key());
+ arr.push_back(sc->get_shortcut());
+ }
+ r_ret=arr;
+ return true;
+ }
+
const VariantContainer *v=props.getptr(p_name);
if (!v)
return false;
@@ -122,6 +166,8 @@ void EditorSettings::_get_property_list(List<PropertyInfo> *p_list) const {
p_list->push_back( pi );
}
+
+ p_list->push_back(PropertyInfo(Variant::ARRAY,"shortcuts",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_NOEDITOR)); //do not edit
}
bool EditorSettings::has(String p_var) const {
@@ -169,7 +215,7 @@ void EditorSettings::create() {
String config_path;
String config_dir;
- String config_file="editor_settings.xml";
+ //String config_file="editor_settings.xml";
Ref<ConfigFile> extra_config = memnew(ConfigFile);
String exe_path = OS::get_singleton()->get_executable_path().get_base_dir();
@@ -221,6 +267,12 @@ void EditorSettings::create() {
dir->change_dir("..");
}
+ if (dir->change_dir("text_editor_themes")!=OK) {
+ dir->make_dir("text_editor_themes");
+ } else {
+ dir->change_dir("..");
+ }
+
if (dir->change_dir("tmp")!=OK) {
dir->make_dir("tmp");
} else {
@@ -253,17 +305,26 @@ void EditorSettings::create() {
// path at least is validated, so validate config file
- config_file_path = config_path+"/"+config_dir+"/"+config_file;
+ config_file_path = config_path+"/"+config_dir+"/editor_settings.tres";
- if (!dir->file_exists(config_file)) {
- memdelete(dir);
- WARN_PRINT("Config file does not exist, creating.");
- goto fail;
+ String open_path = config_file_path;
+
+ if (!dir->file_exists("editor_settings.tres")) {
+
+ open_path = config_path+"/"+config_dir+"/editor_settings.xml";
+
+ if (!dir->file_exists("editor_settings.xml")) {
+
+ memdelete(dir);
+ WARN_PRINT("Config file does not exist, creating.");
+ goto fail;
+ }
}
memdelete(dir);
- singleton = ResourceLoader::load(config_file_path,TTR("EditorSettings"));
+ singleton = ResourceLoader::load(open_path,"EditorSettings");
+
if (singleton.is_null()) {
WARN_PRINT("Could not open config file.");
goto fail;
@@ -278,8 +339,10 @@ void EditorSettings::create() {
print_line("EditorSettings: Load OK!");
}
+ singleton->setup_language();
singleton->setup_network();
singleton->load_favorites();
+ singleton->list_text_editor_themes();
return;
@@ -302,8 +365,10 @@ void EditorSettings::create() {
singleton = Ref<EditorSettings>( memnew( EditorSettings ) );
singleton->config_file_path=config_file_path;
singleton->settings_path=config_path+"/"+config_dir;
- singleton->_load_defaults(extra_config);
+ singleton->_load_defaults(extra_config);
+ singleton->setup_language();
singleton->setup_network();
+ singleton->list_text_editor_themes();
}
@@ -315,6 +380,23 @@ String EditorSettings::get_settings_path() const {
+void EditorSettings::setup_language() {
+
+ String lang = get("global/editor_language");
+ print_line("LANG IS "+lang);
+ if (lang=="en")
+ return; //none to do
+
+ for(int i=0;i<translations.size();i++) {
+ print_line("TESTING "+translations[i]->get_locale());
+ if (translations[i]->get_locale()==lang) {
+ print_line("ok translation");
+ TranslationServer::get_singleton()->set_tool_translation(translations[i]);
+ break;
+ }
+ }
+}
+
void EditorSettings::setup_network() {
List<IP_Address> local_ip;
@@ -382,8 +464,44 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
_THREAD_SAFE_METHOD_
- set("global/font","");
- hints["global/font"]=PropertyInfo(Variant::STRING,"global/font",PROPERTY_HINT_GLOBAL_FILE,"*.fnt");
+
+ {
+ String lang_hint="en";
+ String host_lang = OS::get_singleton()->get_locale();
+
+ String best;
+
+ for(int i=0;i<translations.size();i++) {
+ String locale = translations[i]->get_locale();
+ lang_hint+=",";
+ lang_hint+=locale;
+
+ if (host_lang==locale) {
+ best=locale;
+ }
+
+ if (best==String() && host_lang.begins_with(locale)) {
+ best=locale;
+ }
+ }
+
+ if (best==String()) {
+ best="en";
+ }
+
+ set("global/editor_language",best);
+ hints["global/editor_language"]=PropertyInfo(Variant::STRING,"global/editor_language",PROPERTY_HINT_ENUM,lang_hint,PROPERTY_USAGE_DEFAULT|PROPERTY_USAGE_RESTART_IF_CHANGED);
+ }
+
+ set("global/hidpi_mode",0);
+ hints["global/hidpi_mode"]=PropertyInfo(Variant::INT,"global/hidpi_mode",PROPERTY_HINT_ENUM,"Auto,LoDPI,HiDPI",PROPERTY_USAGE_DEFAULT|PROPERTY_USAGE_RESTART_IF_CHANGED);
+ set("global/show_script_in_scene_tabs",false);
+ set("global/font_size",14);
+ hints["global/font_size"]=PropertyInfo(Variant::INT,"global/font_size",PROPERTY_HINT_RANGE,"10,40,1",PROPERTY_USAGE_DEFAULT|PROPERTY_USAGE_RESTART_IF_CHANGED);
+ set("global/source_font_size",14);
+ hints["global/source_font_size"]=PropertyInfo(Variant::INT,"global/source_font_size",PROPERTY_HINT_RANGE,"10,40,1",PROPERTY_USAGE_DEFAULT|PROPERTY_USAGE_RESTART_IF_CHANGED);
+ set("global/custom_font","");
+ hints["global/custom_font"]=PropertyInfo(Variant::STRING,"global/custom_font",PROPERTY_HINT_GLOBAL_FILE,"*.fnt",PROPERTY_USAGE_DEFAULT|PROPERTY_USAGE_RESTART_IF_CHANGED);
set("global/autoscan_project_path","");
hints["global/autoscan_project_path"]=PropertyInfo(Variant::STRING,"global/autoscan_project_path",PROPERTY_HINT_GLOBAL_DIR);
set("global/default_project_path","");
@@ -391,24 +509,12 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
set("global/default_project_export_path","");
hints["global/default_project_export_path"]=PropertyInfo(Variant::STRING,"global/default_project_export_path",PROPERTY_HINT_GLOBAL_DIR);
set("global/show_script_in_scene_tabs",false);
- set("text_editor/background_color",Color::html("3b000000"));
- set("text_editor/caret_color",Color::html("aaaaaa"));
- set("text_editor/line_number_color",Color::html("66aaaaaa"));
- set("text_editor/text_color",Color::html("aaaaaa"));
- set("text_editor/text_selected_color",Color::html("000000"));
- set("text_editor/keyword_color",Color::html("ffffb3"));
- set("text_editor/base_type_color",Color::html("a4ffd4"));
- set("text_editor/engine_type_color",Color::html("83d3ff"));
- set("text_editor/function_color",Color::html("66a2ce"));
- set("text_editor/member_variable_color",Color::html("e64e59"));
- set("text_editor/comment_color",Color::html("983d1b"));
- set("text_editor/string_color",Color::html("ef6ebe"));
- set("text_editor/number_color",Color::html("EB9532"));
- set("text_editor/symbol_color",Color::html("badfff"));
- set("text_editor/selection_color",Color::html("7b5dbe"));
- set("text_editor/brace_mismatch_color",Color(1,0.2,0.2));
- set("text_editor/current_line_color",Color(0.3,0.5,0.8,0.15));
- set("text_editor/word_highlighted_color",Color(0.8,0.9,0.9,0.15));
+
+
+ set("text_editor/color_theme","Default");
+ hints["text_editor/color_theme"]=PropertyInfo(Variant::STRING,"text_editor/color_theme",PROPERTY_HINT_ENUM,"Default");
+
+ _load_default_text_editor_theme();
set("text_editor/syntax_highlighting", true);
@@ -420,6 +526,7 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
set("text_editor/draw_tabs", true);
set("text_editor/show_line_numbers", true);
+ set("text_editor/show_breakpoint_gutter", true);
set("text_editor/trim_trailing_whitespace_on_save", false);
set("text_editor/idle_parse_delay",2);
@@ -439,6 +546,7 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
set("scenetree_editor/duplicate_node_name_num_separator",0);
hints["scenetree_editor/duplicate_node_name_num_separator"]=PropertyInfo(Variant::INT,"scenetree_editor/duplicate_node_name_num_separator",PROPERTY_HINT_ENUM, "None,Space,Underscore,Dash");
//set("scenetree_editor/display_old_action_buttons",false);
+ set("scenetree_editor/start_create_dialog_fully_expanded",false);
set("gridmap_editor/pick_distance", 5000.0);
@@ -464,7 +572,7 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
set("2d_editor/bone_color2",Color(0.75,0.75,0.75,0.9));
set("2d_editor/bone_selected_color",Color(0.9,0.45,0.45,0.9));
set("2d_editor/bone_ik_color",Color(0.9,0.9,0.45,0.9));
-
+
set("2d_editor/keep_margins_when_changing_anchors", false);
set("game_window_placement/rect",0);
@@ -505,13 +613,16 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
#else
hints["import/pvrtc_texture_tool"]=PropertyInfo(Variant::STRING,"import/pvrtc_texture_tool",PROPERTY_HINT_GLOBAL_FILE,"");
#endif
- set(TTR("PVRTC/fast_conversion"),false);
+ // TODO: Rename to "import/pvrtc_fast_conversion" to match other names?
+ set("PVRTC/fast_conversion",false);
set("run/auto_save_before_running",true);
set("resources/save_compressed_resources",true);
set("resources/auto_reload_modified_images",true);
+ set("import/automatic_reimport_on_sources_changed",true);
+
if (p_extra_config.is_valid()) {
if (p_extra_config->has_section("init_projects") && p_extra_config->has_section_key("init_projects", "list")) {
@@ -543,6 +654,31 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
}
+void EditorSettings::_load_default_text_editor_theme() {
+ set("text_editor/background_color",Color::html("3b000000"));
+ set("text_editor/caret_color",Color::html("aaaaaa"));
+ set("text_editor/line_number_color",Color::html("66aaaaaa"));
+ set("text_editor/text_color",Color::html("aaaaaa"));
+ set("text_editor/text_selected_color",Color::html("000000"));
+ set("text_editor/keyword_color",Color::html("ffffb3"));
+ set("text_editor/base_type_color",Color::html("a4ffd4"));
+ set("text_editor/engine_type_color",Color::html("83d3ff"));
+ set("text_editor/function_color",Color::html("66a2ce"));
+ set("text_editor/member_variable_color",Color::html("e64e59"));
+ set("text_editor/comment_color",Color::html("676767"));
+ set("text_editor/string_color",Color::html("ef6ebe"));
+ set("text_editor/number_color",Color::html("EB9532"));
+ set("text_editor/symbol_color",Color::html("badfff"));
+ set("text_editor/selection_color",Color::html("7b5dbe"));
+ set("text_editor/brace_mismatch_color",Color(1,0.2,0.2));
+ set("text_editor/current_line_color",Color(0.3,0.5,0.8,0.15));
+ set("text_editor/mark_color", Color(1.0,0.4,0.4,0.4));
+ set("text_editor/breakpoint_color", Color(0.8,0.8,0.4,0.2));
+ set("text_editor/word_highlighted_color",Color(0.8,0.9,0.9,0.15));
+ set("text_editor/search_result_color",Color(0.05,0.25,0.05,1));
+ set("text_editor/search_result_border_color",Color(0.1,0.45,0.1,1));
+}
+
void EditorSettings::notify_changes() {
_THREAD_SAFE_METHOD_
@@ -643,6 +779,180 @@ void EditorSettings::load_favorites() {
}
+void EditorSettings::list_text_editor_themes() {
+ String themes="Default";
+ DirAccess *d = DirAccess::open(settings_path + "/text_editor_themes");
+ if (d) {
+ d->list_dir_begin();
+ String file = d->get_next();
+ while(file != String()) {
+ if (file.extension() == "tet" && file.basename().to_lower() != "default") {
+ themes += "," + file.basename();
+ }
+ file = d->get_next();
+ }
+ d->list_dir_end();
+ memdelete(d);
+ }
+ add_property_hint(PropertyInfo(Variant::STRING,"text_editor/color_theme",PROPERTY_HINT_ENUM,themes));
+}
+
+void EditorSettings::load_text_editor_theme() {
+ if (get("text_editor/color_theme") == "Default") {
+ _load_default_text_editor_theme(); // sorry for "Settings changed" console spam
+ return;
+ }
+
+ String theme_path = get_settings_path() + "/text_editor_themes/" + get("text_editor/color_theme") + ".tet";
+
+ Ref<ConfigFile> cf = memnew( ConfigFile );
+ Error err = cf->load(theme_path);
+
+ if (err != OK) {
+ return;
+ }
+
+ List<String> keys;
+ cf->get_section_keys("color_theme", &keys);
+
+ for(List<String>::Element *E=keys.front();E;E=E->next()) {
+ String key = E->get();
+ String val = cf->get_value("color_theme", key);
+
+ // don't load if it's not already there!
+ if (has("text_editor/" + key)) {
+
+ // make sure it is actually a color
+ if (val.is_valid_html_color() && key.find("color") >= 0) {
+ props["text_editor/"+key].variant = Color::html(val); // change manually to prevent "Settings changed" console spam
+ }
+ }
+ }
+ emit_signal("settings_changed");
+ // if it doesn't load just use what is currently loaded
+}
+
+bool EditorSettings::import_text_editor_theme(String p_file) {
+
+ if (!p_file.ends_with(".tet")) {
+ return false;
+ } else {
+ if (p_file.get_file().to_lower() == "default.tet") {
+ return false;
+ }
+
+ DirAccess *d = DirAccess::open(settings_path + "/text_editor_themes");
+ if (d) {
+ d->copy(p_file, settings_path + "/text_editor_themes/" + p_file.get_file());
+ memdelete(d);
+ return true;
+ }
+ }
+ return false;
+}
+
+bool EditorSettings::save_text_editor_theme() {
+
+ String p_file = get("text_editor/color_theme");
+
+ if (p_file.get_file().to_lower() == "default") {
+ return false;
+ }
+ String theme_path = get_settings_path() + "/text_editor_themes/" + p_file + ".tet";
+ return _save_text_editor_theme(theme_path);
+}
+
+bool EditorSettings::save_text_editor_theme_as(String p_file) {
+ if (!p_file.ends_with(".tet")) {
+ p_file += ".tet";
+ }
+
+ if (p_file.get_file().to_lower() == "default.tet") {
+ return false;
+ }
+ if(_save_text_editor_theme(p_file)) {
+
+ // switch to theme is saved in the theme directory
+ list_text_editor_themes();
+ String theme_name = p_file.substr(0, p_file.length() - 4).get_file();
+
+ if (p_file.get_base_dir() == get_settings_path() + "/text_editor_themes") {
+ set("text_editor/color_theme", theme_name);
+ load_text_editor_theme();
+ }
+ return true;
+ }
+ return false;
+}
+
+bool EditorSettings::_save_text_editor_theme(String p_file) {
+ String theme_section = "color_theme";
+ Ref<ConfigFile> cf = memnew( ConfigFile ); // hex is better?
+ cf->set_value(theme_section, "background_color", ((Color)get("text_editor/background_color")).to_html());
+ cf->set_value(theme_section, "caret_color", ((Color)get("text_editor/caret_color")).to_html());
+ cf->set_value(theme_section, "line_number_color", ((Color)get("text_editor/line_number_color")).to_html());
+ cf->set_value(theme_section, "text_color", ((Color)get("text_editor/text_color")).to_html());
+ cf->set_value(theme_section, "text_selected_color", ((Color)get("text_editor/text_selected_color")).to_html());
+ cf->set_value(theme_section, "keyword_color", ((Color)get("text_editor/keyword_color")).to_html());
+ cf->set_value(theme_section, "base_type_color", ((Color)get("text_editor/base_type_color")).to_html());
+ cf->set_value(theme_section, "engine_type_color", ((Color)get("text_editor/engine_type_color")).to_html());
+ cf->set_value(theme_section, "function_color", ((Color)get("text_editor/function_color")).to_html());
+ cf->set_value(theme_section, "member_variable_color", ((Color)get("text_editor/member_variable_color")).to_html());
+ cf->set_value(theme_section, "comment_color", ((Color)get("text_editor/comment_color")).to_html());
+ cf->set_value(theme_section, "string_color", ((Color)get("text_editor/string_color")).to_html());
+ cf->set_value(theme_section, "number_color", ((Color)get("text_editor/number_color")).to_html());
+ cf->set_value(theme_section, "symbol_color", ((Color)get("text_editor/symbol_color")).to_html());
+ cf->set_value(theme_section, "selection_color", ((Color)get("text_editor/selection_color")).to_html());
+ cf->set_value(theme_section, "brace_mismatch_color", ((Color)get("text_editor/brace_mismatch_color")).to_html());
+ cf->set_value(theme_section, "current_line_color", ((Color)get("text_editor/current_line_color")).to_html());
+ cf->set_value(theme_section, "mark_color", ((Color)get("text_editor/mark_color")).to_html());
+ cf->set_value(theme_section, "breakpoint_color", ((Color)get("text_editor/breakpoint_color")).to_html());
+ cf->set_value(theme_section, "word_highlighted_color", ((Color)get("text_editor/word_highlighted_color")).to_html());
+ cf->set_value(theme_section, "search_result_color", ((Color)get("text_editor/search_result_color")).to_html());
+ cf->set_value(theme_section, "search_result_border_color", ((Color)get("text_editor/search_result_border_color")).to_html());
+ Error err = cf->save(p_file);
+
+ if (err == OK) {
+ return true;
+ }
+ return false;
+}
+
+
+void EditorSettings::add_shortcut(const String& p_name, Ref<ShortCut> &p_shortcut) {
+
+ shortcuts[p_name]=p_shortcut;
+}
+
+bool EditorSettings::is_shortcut(const String&p_name, const InputEvent &p_event) const{
+
+ const Map<String,Ref<ShortCut> >::Element *E=shortcuts.find(p_name);
+ if (!E) {
+ ERR_EXPLAIN("Unknown Shortcut: "+p_name);
+ ERR_FAIL_V(false);
+ }
+
+ return E->get()->is_shortcut(p_event);
+
+}
+
+Ref<ShortCut> EditorSettings::get_shortcut(const String&p_name) const{
+
+ const Map<String,Ref<ShortCut> >::Element *E=shortcuts.find(p_name);
+ if (!E)
+ return Ref<ShortCut>();
+
+ return E->get();
+}
+
+void EditorSettings::get_shortcut_list(List<String> *r_shortcuts) {
+
+ for (const Map<String,Ref<ShortCut> >::Element*E=shortcuts.front();E;E=E->next()) {
+
+ r_shortcuts->push_back(E->key());
+ }
+}
+
void EditorSettings::_bind_methods() {
@@ -665,7 +975,32 @@ EditorSettings::EditorSettings() {
//singleton=this;
last_order=0;
+
+ EditorTranslationList *etl=_editor_translations;
+
+ while(etl->data) {
+
+ Vector<uint8_t> data;
+ data.resize(etl->uncomp_size);
+ Compression::decompress(data.ptr(),etl->uncomp_size,etl->data,etl->comp_size,Compression::MODE_DEFLATE);
+
+ FileAccessMemory *fa = memnew (FileAccessMemory);
+ fa->open_custom(data.ptr(),data.size());
+
+ Ref<Translation> tr = TranslationLoaderPO::load_translation(fa,NULL,"translation_"+String(etl->lang));
+
+ if (tr.is_valid()) {
+ tr->set_locale(etl->lang);
+ translations.push_back(tr);
+ }
+
+ etl++;
+
+ }
+
_load_defaults();
+
+
}
@@ -674,4 +1009,44 @@ EditorSettings::~EditorSettings() {
// singleton=NULL;
}
+Ref<ShortCut> ED_GET_SHORTCUT(const String& p_path) {
+
+ Ref<ShortCut> sc = EditorSettings::get_singleton()->get_shortcut(p_path);
+ if (!sc.is_valid()) {
+ ERR_EXPLAIN("Used ED_GET_SHORTCUT with invalid shortcut: "+p_path);
+ ERR_FAIL_COND_V(!sc.is_valid(),sc);
+ }
+ return sc;
+}
+
+Ref<ShortCut> ED_SHORTCUT(const String& p_path,const String& p_name,uint32_t p_keycode) {
+
+ InputEvent ie;
+ if (p_keycode) {
+ ie.type=InputEvent::KEY;
+ ie.key.unicode=p_keycode&KEY_CODE_MASK;
+ ie.key.scancode=p_keycode&KEY_CODE_MASK;
+ ie.key.mod.shift=bool(p_keycode&KEY_MASK_SHIFT);
+ ie.key.mod.alt=bool(p_keycode&KEY_MASK_ALT);
+ ie.key.mod.control=bool(p_keycode&KEY_MASK_CTRL);
+ ie.key.mod.meta=bool(p_keycode&KEY_MASK_META);
+
+ }
+
+ Ref<ShortCut> sc = EditorSettings::get_singleton()->get_shortcut(p_path);
+ if (sc.is_valid()) {
+
+ sc->set_name(p_name); //keep name (the ones that come from disk have no name)
+ sc->set_meta("original",ie); //to compare against changes
+ return sc;
+ }
+
+ sc.instance();
+ sc->set_name(p_name);
+ sc->set_shortcut(ie);
+ sc->set_meta("original",ie); //to compare against changes
+ EditorSettings::get_singleton()->add_shortcut(p_path,sc);
+
+ return sc;
+}
diff --git a/tools/editor/editor_settings.h b/tools/editor/editor_settings.h
index ae5bbcca89..60333b5811 100644
--- a/tools/editor/editor_settings.h
+++ b/tools/editor/editor_settings.h
@@ -34,6 +34,8 @@
#include "resource.h"
#include "os/thread_safe.h"
#include "core/io/config_file.h"
+#include "translation.h"
+#include "scene/gui/input_action.h"
class EditorPlugin;
@@ -84,12 +86,19 @@ private:
void _load_defaults(Ref<ConfigFile> p_extra_config = NULL);
+ void _load_default_text_editor_theme();
+
+ bool _save_text_editor_theme(String p_file);
String project_config_path;
Vector<String> favorite_dirs;
Vector<String> recent_dirs;
+ Vector<Ref<Translation> > translations;
+
+ Map<String,Ref<ShortCut> > shortcuts;
+
protected:
static void _bind_methods();
@@ -108,6 +117,7 @@ public:
String get_project_settings_path() const;
+ void setup_language();
void setup_network();
void raise_order(const String& p_name);
@@ -130,6 +140,17 @@ public:
void load_favorites();
+ void list_text_editor_themes();
+ void load_text_editor_theme();
+ bool import_text_editor_theme(String p_file);
+ bool save_text_editor_theme();
+ bool save_text_editor_theme_as(String p_file);
+
+ void add_shortcut(const String& p_name,Ref<ShortCut>& p_shortcut);
+ bool is_shortcut(const String&p_name,const InputEvent& p_event) const;
+ Ref<ShortCut> get_shortcut(const String&p_name) const;
+ void get_shortcut_list(List<String> *r_shortcuts);
+
EditorSettings();
~EditorSettings();
@@ -140,4 +161,8 @@ public:
#define EDITOR_DEF(m_var,m_val) _EDITOR_DEF(m_var,Variant(m_val))
Variant _EDITOR_DEF( const String& p_var, const Variant& p_default);
+#define ED_IS_SHORTCUT(p_name,p_ev) (EditorSettings::get_singleton()->is_shortcut(p_name,p_ev))
+Ref<ShortCut> ED_SHORTCUT(const String& p_path,const String& p_name,uint32_t p_keycode=0);
+Ref<ShortCut> ED_GET_SHORTCUT(const String& p_path);
+
#endif // EDITOR_SETTINGS_H
diff --git a/tools/editor/editor_sub_scene.cpp b/tools/editor/editor_sub_scene.cpp
index 941ff6be1c..d32dbcd2e6 100644
--- a/tools/editor/editor_sub_scene.cpp
+++ b/tools/editor/editor_sub_scene.cpp
@@ -198,7 +198,7 @@ EditorSubScene::EditorSubScene() {
scene=NULL;
- set_title(TTR("Select Sub-Scene.."));
+ set_title(TTR("Select Node(s) to Import"));
set_hide_on_ok(false);
VBoxContainer *vb = memnew( VBoxContainer );
diff --git a/tools/editor/groups_editor.cpp b/tools/editor/groups_editor.cpp
index 906ee27d1b..898e1e115e 100644
--- a/tools/editor/groups_editor.cpp
+++ b/tools/editor/groups_editor.cpp
@@ -30,6 +30,7 @@
#include "scene/gui/box_container.h"
#include "scene/gui/label.h"
+#include "editor_node.h"
void GroupsEditor::_add_group(const String& p_group) {
@@ -47,8 +48,10 @@ void GroupsEditor::_add_group(const String& p_group) {
undo_redo->add_do_method(node,"add_to_group",name,true);
undo_redo->add_do_method(this,"update_tree");
- undo_redo->add_undo_method(node,"remove_from_group",name,get_text());
+ undo_redo->add_undo_method(node,"remove_from_group",name);
undo_redo->add_undo_method(this,"update_tree");
+ undo_redo->add_do_method(EditorNode::get_singleton()->get_scene_tree_dock()->get_tree_editor(),"update_tree"); //to force redraw of scene tree
+ undo_redo->add_undo_method(EditorNode::get_singleton()->get_scene_tree_dock()->get_tree_editor(),"update_tree"); //to force redraw of scene tree
undo_redo->commit_action();
@@ -72,6 +75,8 @@ void GroupsEditor::_remove_group(Object *p_item, int p_column, int p_id) {
undo_redo->add_do_method(this,"update_tree");
undo_redo->add_undo_method(node,"add_to_group",name,true);
undo_redo->add_undo_method(this,"update_tree");
+ undo_redo->add_do_method(EditorNode::get_singleton()->get_scene_tree_dock()->get_tree_editor(),"update_tree"); //to force redraw of scene tree
+ undo_redo->add_undo_method(EditorNode::get_singleton()->get_scene_tree_dock()->get_tree_editor(),"update_tree"); //to force redraw of scene tree
undo_redo->commit_action();
}
@@ -125,14 +130,10 @@ GroupsEditor::GroupsEditor() {
node=NULL;
- set_title(TTR("Group Editor"));
-
- VBoxContainer *vbc = memnew( VBoxContainer );
- add_child(vbc);
- set_child_rect(vbc);
+ VBoxContainer *vbc = this;
HBoxContainer *hbc = memnew( HBoxContainer );
- vbc->add_margin_child(TTR("Group"), hbc);
+ vbc->add_child(hbc);
group_name = memnew( LineEdit );
group_name->set_h_size_flags(SIZE_EXPAND_FILL);
@@ -147,10 +148,9 @@ GroupsEditor::GroupsEditor() {
tree = memnew( Tree );
tree->set_hide_root(true);
tree->set_v_size_flags(SIZE_EXPAND_FILL);
- vbc->add_margin_child(TTR("Node Group(s)"), tree, true);
+ vbc->add_child(tree);
tree->connect("button_pressed",this,"_remove_group");
-
- get_ok()->set_text(TTR("Close"));
+ add_constant_override("separation",3*EDSCALE);
}
GroupsEditor::~GroupsEditor()
diff --git a/tools/editor/groups_editor.h b/tools/editor/groups_editor.h
index 6a897d0cbb..6edb577140 100644
--- a/tools/editor/groups_editor.h
+++ b/tools/editor/groups_editor.h
@@ -39,9 +39,9 @@
@author Juan Linietsky <reduzio@gmail.com>
*/
-class GroupsEditor : public AcceptDialog {
+class GroupsEditor : public VBoxContainer {
- OBJ_TYPE(GroupsEditor,AcceptDialog);
+ OBJ_TYPE(GroupsEditor,VBoxContainer);
Node *node;
diff --git a/tools/editor/icons/2x/icon_accept_dialog.png b/tools/editor/icons/2x/icon_accept_dialog.png
new file mode 100644
index 0000000000..a1a613d1ad
--- /dev/null
+++ b/tools/editor/icons/2x/icon_accept_dialog.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_add.png b/tools/editor/icons/2x/icon_add.png
new file mode 100644
index 0000000000..a3c795e8f0
--- /dev/null
+++ b/tools/editor/icons/2x/icon_add.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_add_track.png b/tools/editor/icons/2x/icon_add_track.png
new file mode 100644
index 0000000000..a3c795e8f0
--- /dev/null
+++ b/tools/editor/icons/2x/icon_add_track.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_anchor.png b/tools/editor/icons/2x/icon_anchor.png
new file mode 100644
index 0000000000..e1d8711ed7
--- /dev/null
+++ b/tools/editor/icons/2x/icon_anchor.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_animated_sprite.png b/tools/editor/icons/2x/icon_animated_sprite.png
new file mode 100644
index 0000000000..7d3a9063ac
--- /dev/null
+++ b/tools/editor/icons/2x/icon_animated_sprite.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_animated_sprite_3d.png b/tools/editor/icons/2x/icon_animated_sprite_3d.png
new file mode 100644
index 0000000000..1f7b883641
--- /dev/null
+++ b/tools/editor/icons/2x/icon_animated_sprite_3d.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_animation.png b/tools/editor/icons/2x/icon_animation.png
new file mode 100644
index 0000000000..16b58515f5
--- /dev/null
+++ b/tools/editor/icons/2x/icon_animation.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_animation_player.png b/tools/editor/icons/2x/icon_animation_player.png
new file mode 100644
index 0000000000..ad313a1c91
--- /dev/null
+++ b/tools/editor/icons/2x/icon_animation_player.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_animation_tree.png b/tools/editor/icons/2x/icon_animation_tree.png
new file mode 100644
index 0000000000..61cb57259b
--- /dev/null
+++ b/tools/editor/icons/2x/icon_animation_tree.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_animation_tree_player.png b/tools/editor/icons/2x/icon_animation_tree_player.png
new file mode 100644
index 0000000000..61cb57259b
--- /dev/null
+++ b/tools/editor/icons/2x/icon_animation_tree_player.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_area.png b/tools/editor/icons/2x/icon_area.png
new file mode 100644
index 0000000000..0e07b37333
--- /dev/null
+++ b/tools/editor/icons/2x/icon_area.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_area_2d.png b/tools/editor/icons/2x/icon_area_2d.png
new file mode 100644
index 0000000000..f3fe9b8aaa
--- /dev/null
+++ b/tools/editor/icons/2x/icon_area_2d.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_arrow_left.png b/tools/editor/icons/2x/icon_arrow_left.png
new file mode 100644
index 0000000000..72a72d752a
--- /dev/null
+++ b/tools/editor/icons/2x/icon_arrow_left.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_arrow_right.png b/tools/editor/icons/2x/icon_arrow_right.png
new file mode 100644
index 0000000000..5efb9123e0
--- /dev/null
+++ b/tools/editor/icons/2x/icon_arrow_right.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_arrow_up.png b/tools/editor/icons/2x/icon_arrow_up.png
new file mode 100644
index 0000000000..0558431a75
--- /dev/null
+++ b/tools/editor/icons/2x/icon_arrow_up.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_atlas_texture.png b/tools/editor/icons/2x/icon_atlas_texture.png
new file mode 100644
index 0000000000..a9da8dfe8d
--- /dev/null
+++ b/tools/editor/icons/2x/icon_atlas_texture.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_audio_stream_gibberish.png b/tools/editor/icons/2x/icon_audio_stream_gibberish.png
new file mode 100644
index 0000000000..1c61e91ced
--- /dev/null
+++ b/tools/editor/icons/2x/icon_audio_stream_gibberish.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_auto_play.png b/tools/editor/icons/2x/icon_auto_play.png
new file mode 100644
index 0000000000..a404a1aa84
--- /dev/null
+++ b/tools/editor/icons/2x/icon_auto_play.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_back.png b/tools/editor/icons/2x/icon_back.png
new file mode 100644
index 0000000000..49fae9ab2e
--- /dev/null
+++ b/tools/editor/icons/2x/icon_back.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_back_buffer_copy.png b/tools/editor/icons/2x/icon_back_buffer_copy.png
new file mode 100644
index 0000000000..53f0f6c0b3
--- /dev/null
+++ b/tools/editor/icons/2x/icon_back_buffer_copy.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_bake.png b/tools/editor/icons/2x/icon_bake.png
new file mode 100644
index 0000000000..c05efa048f
--- /dev/null
+++ b/tools/editor/icons/2x/icon_bake.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_baked_light.png b/tools/editor/icons/2x/icon_baked_light.png
new file mode 100644
index 0000000000..c05efa048f
--- /dev/null
+++ b/tools/editor/icons/2x/icon_baked_light.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_baked_light_instance.png b/tools/editor/icons/2x/icon_baked_light_instance.png
new file mode 100644
index 0000000000..c84169c936
--- /dev/null
+++ b/tools/editor/icons/2x/icon_baked_light_instance.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_bitmap_font.png b/tools/editor/icons/2x/icon_bitmap_font.png
new file mode 100644
index 0000000000..84a92e4138
--- /dev/null
+++ b/tools/editor/icons/2x/icon_bitmap_font.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_blend.png b/tools/editor/icons/2x/icon_blend.png
new file mode 100644
index 0000000000..e5d8a3ae42
--- /dev/null
+++ b/tools/editor/icons/2x/icon_blend.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_bone.png b/tools/editor/icons/2x/icon_bone.png
new file mode 100644
index 0000000000..4b5bacab66
--- /dev/null
+++ b/tools/editor/icons/2x/icon_bone.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_bone_attachment.png b/tools/editor/icons/2x/icon_bone_attachment.png
new file mode 100644
index 0000000000..a137d3b157
--- /dev/null
+++ b/tools/editor/icons/2x/icon_bone_attachment.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_bone_track.png b/tools/editor/icons/2x/icon_bone_track.png
new file mode 100644
index 0000000000..563eca25bb
--- /dev/null
+++ b/tools/editor/icons/2x/icon_bone_track.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_bool.png b/tools/editor/icons/2x/icon_bool.png
new file mode 100644
index 0000000000..24b134ac3e
--- /dev/null
+++ b/tools/editor/icons/2x/icon_bool.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_box_shape.png b/tools/editor/icons/2x/icon_box_shape.png
new file mode 100644
index 0000000000..f96a7e7c3a
--- /dev/null
+++ b/tools/editor/icons/2x/icon_box_shape.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_button.png b/tools/editor/icons/2x/icon_button.png
new file mode 100644
index 0000000000..0ff54c0c77
--- /dev/null
+++ b/tools/editor/icons/2x/icon_button.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_button_group.png b/tools/editor/icons/2x/icon_button_group.png
new file mode 100644
index 0000000000..050e3972d2
--- /dev/null
+++ b/tools/editor/icons/2x/icon_button_group.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_camera.png b/tools/editor/icons/2x/icon_camera.png
new file mode 100644
index 0000000000..05ce5f8ced
--- /dev/null
+++ b/tools/editor/icons/2x/icon_camera.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_camera_2d.png b/tools/editor/icons/2x/icon_camera_2d.png
new file mode 100644
index 0000000000..ee4a09f96a
--- /dev/null
+++ b/tools/editor/icons/2x/icon_camera_2d.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_canvas_item.png b/tools/editor/icons/2x/icon_canvas_item.png
new file mode 100644
index 0000000000..ded4292fd2
--- /dev/null
+++ b/tools/editor/icons/2x/icon_canvas_item.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_canvas_item_material.png b/tools/editor/icons/2x/icon_canvas_item_material.png
new file mode 100644
index 0000000000..855323b82d
--- /dev/null
+++ b/tools/editor/icons/2x/icon_canvas_item_material.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_canvas_item_shader.png b/tools/editor/icons/2x/icon_canvas_item_shader.png
new file mode 100644
index 0000000000..14e3ef7a40
--- /dev/null
+++ b/tools/editor/icons/2x/icon_canvas_item_shader.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_canvas_item_shader_graph.png b/tools/editor/icons/2x/icon_canvas_item_shader_graph.png
new file mode 100644
index 0000000000..712b2013c4
--- /dev/null
+++ b/tools/editor/icons/2x/icon_canvas_item_shader_graph.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_canvas_layer.png b/tools/editor/icons/2x/icon_canvas_layer.png
new file mode 100644
index 0000000000..913d14b003
--- /dev/null
+++ b/tools/editor/icons/2x/icon_canvas_layer.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_canvas_modulate.png b/tools/editor/icons/2x/icon_canvas_modulate.png
new file mode 100644
index 0000000000..527fdda3b5
--- /dev/null
+++ b/tools/editor/icons/2x/icon_canvas_modulate.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_capsule_shape.png b/tools/editor/icons/2x/icon_capsule_shape.png
new file mode 100644
index 0000000000..d868c6fb26
--- /dev/null
+++ b/tools/editor/icons/2x/icon_capsule_shape.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_center_container.png b/tools/editor/icons/2x/icon_center_container.png
new file mode 100644
index 0000000000..03aa9d6fa6
--- /dev/null
+++ b/tools/editor/icons/2x/icon_center_container.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_check_box.png b/tools/editor/icons/2x/icon_check_box.png
new file mode 100644
index 0000000000..839c0c6d1c
--- /dev/null
+++ b/tools/editor/icons/2x/icon_check_box.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_check_button.png b/tools/editor/icons/2x/icon_check_button.png
new file mode 100644
index 0000000000..fe6747ce30
--- /dev/null
+++ b/tools/editor/icons/2x/icon_check_button.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_class_list.png b/tools/editor/icons/2x/icon_class_list.png
new file mode 100644
index 0000000000..2940db7007
--- /dev/null
+++ b/tools/editor/icons/2x/icon_class_list.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_close.png b/tools/editor/icons/2x/icon_close.png
new file mode 100644
index 0000000000..de16e3ab04
--- /dev/null
+++ b/tools/editor/icons/2x/icon_close.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_collapse.png b/tools/editor/icons/2x/icon_collapse.png
new file mode 100644
index 0000000000..7c533dbfef
--- /dev/null
+++ b/tools/editor/icons/2x/icon_collapse.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_collision_2d.png b/tools/editor/icons/2x/icon_collision_2d.png
new file mode 100644
index 0000000000..05d6f10d58
--- /dev/null
+++ b/tools/editor/icons/2x/icon_collision_2d.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_collision_polygon.png b/tools/editor/icons/2x/icon_collision_polygon.png
new file mode 100644
index 0000000000..9463edd59e
--- /dev/null
+++ b/tools/editor/icons/2x/icon_collision_polygon.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_collision_polygon_2d.png b/tools/editor/icons/2x/icon_collision_polygon_2d.png
new file mode 100644
index 0000000000..05d6f10d58
--- /dev/null
+++ b/tools/editor/icons/2x/icon_collision_polygon_2d.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_collision_shape.png b/tools/editor/icons/2x/icon_collision_shape.png
new file mode 100644
index 0000000000..9e0d55bce4
--- /dev/null
+++ b/tools/editor/icons/2x/icon_collision_shape.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_collision_shape_2d.png b/tools/editor/icons/2x/icon_collision_shape_2d.png
new file mode 100644
index 0000000000..476bf51744
--- /dev/null
+++ b/tools/editor/icons/2x/icon_collision_shape_2d.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_color.png b/tools/editor/icons/2x/icon_color.png
new file mode 100644
index 0000000000..24cc5f793c
--- /dev/null
+++ b/tools/editor/icons/2x/icon_color.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_color_pick.png b/tools/editor/icons/2x/icon_color_pick.png
new file mode 100644
index 0000000000..fc6fe437bc
--- /dev/null
+++ b/tools/editor/icons/2x/icon_color_pick.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_color_picker.png b/tools/editor/icons/2x/icon_color_picker.png
new file mode 100644
index 0000000000..902b7c1fca
--- /dev/null
+++ b/tools/editor/icons/2x/icon_color_picker.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_color_picker_button.png b/tools/editor/icons/2x/icon_color_picker_button.png
new file mode 100644
index 0000000000..1f5af70d04
--- /dev/null
+++ b/tools/editor/icons/2x/icon_color_picker_button.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_color_ramp.png b/tools/editor/icons/2x/icon_color_ramp.png
new file mode 100644
index 0000000000..b59b1c7be4
--- /dev/null
+++ b/tools/editor/icons/2x/icon_color_ramp.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_concave_polygon_shape.png b/tools/editor/icons/2x/icon_concave_polygon_shape.png
new file mode 100644
index 0000000000..747a75c4d9
--- /dev/null
+++ b/tools/editor/icons/2x/icon_concave_polygon_shape.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_confirmation_dialog.png b/tools/editor/icons/2x/icon_confirmation_dialog.png
new file mode 100644
index 0000000000..86650a633a
--- /dev/null
+++ b/tools/editor/icons/2x/icon_confirmation_dialog.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_connect.png b/tools/editor/icons/2x/icon_connect.png
new file mode 100644
index 0000000000..fb6603473f
--- /dev/null
+++ b/tools/editor/icons/2x/icon_connect.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_connection_and_groups.png b/tools/editor/icons/2x/icon_connection_and_groups.png
new file mode 100644
index 0000000000..bdbfee2987
--- /dev/null
+++ b/tools/editor/icons/2x/icon_connection_and_groups.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_container.png b/tools/editor/icons/2x/icon_container.png
new file mode 100644
index 0000000000..b5a645ee85
--- /dev/null
+++ b/tools/editor/icons/2x/icon_container.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_control.png b/tools/editor/icons/2x/icon_control.png
new file mode 100644
index 0000000000..ecef620e09
--- /dev/null
+++ b/tools/editor/icons/2x/icon_control.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_control_align_bottom_center.png b/tools/editor/icons/2x/icon_control_align_bottom_center.png
new file mode 100644
index 0000000000..d176b350f7
--- /dev/null
+++ b/tools/editor/icons/2x/icon_control_align_bottom_center.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_control_align_bottom_left.png b/tools/editor/icons/2x/icon_control_align_bottom_left.png
new file mode 100644
index 0000000000..03520ca327
--- /dev/null
+++ b/tools/editor/icons/2x/icon_control_align_bottom_left.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_control_align_bottom_right.png b/tools/editor/icons/2x/icon_control_align_bottom_right.png
new file mode 100644
index 0000000000..56ace004a7
--- /dev/null
+++ b/tools/editor/icons/2x/icon_control_align_bottom_right.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_control_align_bottom_wide.png b/tools/editor/icons/2x/icon_control_align_bottom_wide.png
new file mode 100644
index 0000000000..5fceb11ecd
--- /dev/null
+++ b/tools/editor/icons/2x/icon_control_align_bottom_wide.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_control_align_center.png b/tools/editor/icons/2x/icon_control_align_center.png
new file mode 100644
index 0000000000..bb09020f57
--- /dev/null
+++ b/tools/editor/icons/2x/icon_control_align_center.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_control_align_center_left.png b/tools/editor/icons/2x/icon_control_align_center_left.png
new file mode 100644
index 0000000000..027d083354
--- /dev/null
+++ b/tools/editor/icons/2x/icon_control_align_center_left.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_control_align_center_right.png b/tools/editor/icons/2x/icon_control_align_center_right.png
new file mode 100644
index 0000000000..e75c482d84
--- /dev/null
+++ b/tools/editor/icons/2x/icon_control_align_center_right.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_control_align_left_center.png b/tools/editor/icons/2x/icon_control_align_left_center.png
new file mode 100644
index 0000000000..4357453ed3
--- /dev/null
+++ b/tools/editor/icons/2x/icon_control_align_left_center.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_control_align_left_wide.png b/tools/editor/icons/2x/icon_control_align_left_wide.png
new file mode 100644
index 0000000000..2c52ba94c5
--- /dev/null
+++ b/tools/editor/icons/2x/icon_control_align_left_wide.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_control_align_right_center.png b/tools/editor/icons/2x/icon_control_align_right_center.png
new file mode 100644
index 0000000000..560f2c2895
--- /dev/null
+++ b/tools/editor/icons/2x/icon_control_align_right_center.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_control_align_right_wide.png b/tools/editor/icons/2x/icon_control_align_right_wide.png
new file mode 100644
index 0000000000..126bdf7d71
--- /dev/null
+++ b/tools/editor/icons/2x/icon_control_align_right_wide.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_control_align_top_center.png b/tools/editor/icons/2x/icon_control_align_top_center.png
new file mode 100644
index 0000000000..5f163c5032
--- /dev/null
+++ b/tools/editor/icons/2x/icon_control_align_top_center.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_control_align_top_left.png b/tools/editor/icons/2x/icon_control_align_top_left.png
new file mode 100644
index 0000000000..e20e142044
--- /dev/null
+++ b/tools/editor/icons/2x/icon_control_align_top_left.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_control_align_top_right.png b/tools/editor/icons/2x/icon_control_align_top_right.png
new file mode 100644
index 0000000000..e82cd32ebf
--- /dev/null
+++ b/tools/editor/icons/2x/icon_control_align_top_right.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_control_align_top_wide.png b/tools/editor/icons/2x/icon_control_align_top_wide.png
new file mode 100644
index 0000000000..841634d1c6
--- /dev/null
+++ b/tools/editor/icons/2x/icon_control_align_top_wide.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_control_align_wide.png b/tools/editor/icons/2x/icon_control_align_wide.png
new file mode 100644
index 0000000000..5b8cb9e3a4
--- /dev/null
+++ b/tools/editor/icons/2x/icon_control_align_wide.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_control_hcenter_wide.png b/tools/editor/icons/2x/icon_control_hcenter_wide.png
new file mode 100644
index 0000000000..76b5cc99f4
--- /dev/null
+++ b/tools/editor/icons/2x/icon_control_hcenter_wide.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_control_vcenter_wide.png b/tools/editor/icons/2x/icon_control_vcenter_wide.png
new file mode 100644
index 0000000000..71a891b52a
--- /dev/null
+++ b/tools/editor/icons/2x/icon_control_vcenter_wide.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_convex_polygon_shape.png b/tools/editor/icons/2x/icon_convex_polygon_shape.png
new file mode 100644
index 0000000000..2e985223a2
--- /dev/null
+++ b/tools/editor/icons/2x/icon_convex_polygon_shape.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_create_new_scene_from.png b/tools/editor/icons/2x/icon_create_new_scene_from.png
new file mode 100644
index 0000000000..2e8f01e201
--- /dev/null
+++ b/tools/editor/icons/2x/icon_create_new_scene_from.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_curve_close.png b/tools/editor/icons/2x/icon_curve_close.png
new file mode 100644
index 0000000000..08314b8a04
--- /dev/null
+++ b/tools/editor/icons/2x/icon_curve_close.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_curve_constant.png b/tools/editor/icons/2x/icon_curve_constant.png
new file mode 100644
index 0000000000..c8dbd41966
--- /dev/null
+++ b/tools/editor/icons/2x/icon_curve_constant.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_curve_create.png b/tools/editor/icons/2x/icon_curve_create.png
new file mode 100644
index 0000000000..07022eb902
--- /dev/null
+++ b/tools/editor/icons/2x/icon_curve_create.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_curve_curve.png b/tools/editor/icons/2x/icon_curve_curve.png
new file mode 100644
index 0000000000..e5a903ddd7
--- /dev/null
+++ b/tools/editor/icons/2x/icon_curve_curve.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_curve_delete.png b/tools/editor/icons/2x/icon_curve_delete.png
new file mode 100644
index 0000000000..b02cc170db
--- /dev/null
+++ b/tools/editor/icons/2x/icon_curve_delete.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_curve_edit.png b/tools/editor/icons/2x/icon_curve_edit.png
new file mode 100644
index 0000000000..d06a0309ae
--- /dev/null
+++ b/tools/editor/icons/2x/icon_curve_edit.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_curve_in.png b/tools/editor/icons/2x/icon_curve_in.png
new file mode 100644
index 0000000000..fcc7985496
--- /dev/null
+++ b/tools/editor/icons/2x/icon_curve_in.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_curve_in_out.png b/tools/editor/icons/2x/icon_curve_in_out.png
new file mode 100644
index 0000000000..88bbf26ab7
--- /dev/null
+++ b/tools/editor/icons/2x/icon_curve_in_out.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_curve_linear.png b/tools/editor/icons/2x/icon_curve_linear.png
new file mode 100644
index 0000000000..16b949fea4
--- /dev/null
+++ b/tools/editor/icons/2x/icon_curve_linear.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_curve_out.png b/tools/editor/icons/2x/icon_curve_out.png
new file mode 100644
index 0000000000..699ceda1d5
--- /dev/null
+++ b/tools/editor/icons/2x/icon_curve_out.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_curve_out_in.png b/tools/editor/icons/2x/icon_curve_out_in.png
new file mode 100644
index 0000000000..e60e978bf9
--- /dev/null
+++ b/tools/editor/icons/2x/icon_curve_out_in.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_damped_spring_joint_2d.png b/tools/editor/icons/2x/icon_damped_spring_joint_2d.png
new file mode 100644
index 0000000000..91ef51401f
--- /dev/null
+++ b/tools/editor/icons/2x/icon_damped_spring_joint_2d.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_debug_continue.png b/tools/editor/icons/2x/icon_debug_continue.png
new file mode 100644
index 0000000000..4e1039f2c7
--- /dev/null
+++ b/tools/editor/icons/2x/icon_debug_continue.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_debug_next.png b/tools/editor/icons/2x/icon_debug_next.png
new file mode 100644
index 0000000000..f54b81202c
--- /dev/null
+++ b/tools/editor/icons/2x/icon_debug_next.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_debug_step.png b/tools/editor/icons/2x/icon_debug_step.png
new file mode 100644
index 0000000000..ef6fdfe4dc
--- /dev/null
+++ b/tools/editor/icons/2x/icon_debug_step.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_dependency_changed.png b/tools/editor/icons/2x/icon_dependency_changed.png
new file mode 100644
index 0000000000..fb4f81fc02
--- /dev/null
+++ b/tools/editor/icons/2x/icon_dependency_changed.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_dependency_changed_hl.png b/tools/editor/icons/2x/icon_dependency_changed_hl.png
new file mode 100644
index 0000000000..c5544097d1
--- /dev/null
+++ b/tools/editor/icons/2x/icon_dependency_changed_hl.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_dependency_local_changed.png b/tools/editor/icons/2x/icon_dependency_local_changed.png
new file mode 100644
index 0000000000..d2e2557312
--- /dev/null
+++ b/tools/editor/icons/2x/icon_dependency_local_changed.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_dependency_local_changed_hl.png b/tools/editor/icons/2x/icon_dependency_local_changed_hl.png
new file mode 100644
index 0000000000..e885119d52
--- /dev/null
+++ b/tools/editor/icons/2x/icon_dependency_local_changed_hl.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_dependency_ok.png b/tools/editor/icons/2x/icon_dependency_ok.png
new file mode 100644
index 0000000000..5ce4a8ab17
--- /dev/null
+++ b/tools/editor/icons/2x/icon_dependency_ok.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_dependency_ok_hl.png b/tools/editor/icons/2x/icon_dependency_ok_hl.png
new file mode 100644
index 0000000000..dbfb28885e
--- /dev/null
+++ b/tools/editor/icons/2x/icon_dependency_ok_hl.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_directional_light.png b/tools/editor/icons/2x/icon_directional_light.png
new file mode 100644
index 0000000000..36c8c9e092
--- /dev/null
+++ b/tools/editor/icons/2x/icon_directional_light.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_duplicate.png b/tools/editor/icons/2x/icon_duplicate.png
new file mode 100644
index 0000000000..cef940f9f2
--- /dev/null
+++ b/tools/editor/icons/2x/icon_duplicate.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_dynamic_font.png b/tools/editor/icons/2x/icon_dynamic_font.png
new file mode 100644
index 0000000000..092c22eae1
--- /dev/null
+++ b/tools/editor/icons/2x/icon_dynamic_font.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_dynamic_font_data.png b/tools/editor/icons/2x/icon_dynamic_font_data.png
new file mode 100644
index 0000000000..27be1e0197
--- /dev/null
+++ b/tools/editor/icons/2x/icon_dynamic_font_data.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_edit.png b/tools/editor/icons/2x/icon_edit.png
new file mode 100644
index 0000000000..c764a80064
--- /dev/null
+++ b/tools/editor/icons/2x/icon_edit.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_edit_key.png b/tools/editor/icons/2x/icon_edit_key.png
new file mode 100644
index 0000000000..224e6baa37
--- /dev/null
+++ b/tools/editor/icons/2x/icon_edit_key.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_edit_pivot.png b/tools/editor/icons/2x/icon_edit_pivot.png
new file mode 100644
index 0000000000..950c777b16
--- /dev/null
+++ b/tools/editor/icons/2x/icon_edit_pivot.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_edit_resource.png b/tools/editor/icons/2x/icon_edit_resource.png
new file mode 100644
index 0000000000..4ec3b1fdf1
--- /dev/null
+++ b/tools/editor/icons/2x/icon_edit_resource.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_editor_3d_handle.png b/tools/editor/icons/2x/icon_editor_3d_handle.png
new file mode 100644
index 0000000000..7835fd5fe3
--- /dev/null
+++ b/tools/editor/icons/2x/icon_editor_3d_handle.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_editor_handle.png b/tools/editor/icons/2x/icon_editor_handle.png
new file mode 100644
index 0000000000..e3389cdabb
--- /dev/null
+++ b/tools/editor/icons/2x/icon_editor_handle.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_editor_pivot.png b/tools/editor/icons/2x/icon_editor_pivot.png
new file mode 100644
index 0000000000..7791369138
--- /dev/null
+++ b/tools/editor/icons/2x/icon_editor_pivot.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_editor_plugin.png b/tools/editor/icons/2x/icon_editor_plugin.png
new file mode 100644
index 0000000000..c0e10886a2
--- /dev/null
+++ b/tools/editor/icons/2x/icon_editor_plugin.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_enum.png b/tools/editor/icons/2x/icon_enum.png
new file mode 100644
index 0000000000..8151eb03f1
--- /dev/null
+++ b/tools/editor/icons/2x/icon_enum.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_error.png b/tools/editor/icons/2x/icon_error.png
new file mode 100644
index 0000000000..e8153dfada
--- /dev/null
+++ b/tools/editor/icons/2x/icon_error.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_error_sign.png b/tools/editor/icons/2x/icon_error_sign.png
new file mode 100644
index 0000000000..ab29dde170
--- /dev/null
+++ b/tools/editor/icons/2x/icon_error_sign.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_event_player.png b/tools/editor/icons/2x/icon_event_player.png
new file mode 100644
index 0000000000..ee87514f2c
--- /dev/null
+++ b/tools/editor/icons/2x/icon_event_player.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_favorites.png b/tools/editor/icons/2x/icon_favorites.png
new file mode 100644
index 0000000000..49c3c57671
--- /dev/null
+++ b/tools/editor/icons/2x/icon_favorites.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_file.png b/tools/editor/icons/2x/icon_file.png
new file mode 100644
index 0000000000..a495efee09
--- /dev/null
+++ b/tools/editor/icons/2x/icon_file.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_file_big.png b/tools/editor/icons/2x/icon_file_big.png
new file mode 100644
index 0000000000..c5b347f71f
--- /dev/null
+++ b/tools/editor/icons/2x/icon_file_big.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_file_dialog.png b/tools/editor/icons/2x/icon_file_dialog.png
new file mode 100644
index 0000000000..1bc9d2dc1d
--- /dev/null
+++ b/tools/editor/icons/2x/icon_file_dialog.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_file_list.png b/tools/editor/icons/2x/icon_file_list.png
new file mode 100644
index 0000000000..8151eb03f1
--- /dev/null
+++ b/tools/editor/icons/2x/icon_file_list.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_file_server.png b/tools/editor/icons/2x/icon_file_server.png
new file mode 100644
index 0000000000..2912b8466b
--- /dev/null
+++ b/tools/editor/icons/2x/icon_file_server.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_file_server_active.png b/tools/editor/icons/2x/icon_file_server_active.png
new file mode 100644
index 0000000000..8652d65039
--- /dev/null
+++ b/tools/editor/icons/2x/icon_file_server_active.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_file_thumbnail.png b/tools/editor/icons/2x/icon_file_thumbnail.png
new file mode 100644
index 0000000000..025bde5d65
--- /dev/null
+++ b/tools/editor/icons/2x/icon_file_thumbnail.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_filesystem.png b/tools/editor/icons/2x/icon_filesystem.png
new file mode 100644
index 0000000000..2940db7007
--- /dev/null
+++ b/tools/editor/icons/2x/icon_filesystem.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_fixed_material.png b/tools/editor/icons/2x/icon_fixed_material.png
new file mode 100644
index 0000000000..ac5336b893
--- /dev/null
+++ b/tools/editor/icons/2x/icon_fixed_material.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_folder.png b/tools/editor/icons/2x/icon_folder.png
new file mode 100644
index 0000000000..daa81bdf4a
--- /dev/null
+++ b/tools/editor/icons/2x/icon_folder.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_folder_big.png b/tools/editor/icons/2x/icon_folder_big.png
new file mode 100644
index 0000000000..f960bb7e57
--- /dev/null
+++ b/tools/editor/icons/2x/icon_folder_big.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_font.png b/tools/editor/icons/2x/icon_font.png
new file mode 100644
index 0000000000..815904ddd4
--- /dev/null
+++ b/tools/editor/icons/2x/icon_font.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_forward.png b/tools/editor/icons/2x/icon_forward.png
new file mode 100644
index 0000000000..ac87f0ec75
--- /dev/null
+++ b/tools/editor/icons/2x/icon_forward.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_g_d_script.png b/tools/editor/icons/2x/icon_g_d_script.png
new file mode 100644
index 0000000000..bd6b161c91
--- /dev/null
+++ b/tools/editor/icons/2x/icon_g_d_script.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_gizmo_directional_light.png b/tools/editor/icons/2x/icon_gizmo_directional_light.png
new file mode 100644
index 0000000000..8bf19df1e8
--- /dev/null
+++ b/tools/editor/icons/2x/icon_gizmo_directional_light.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_gizmo_light.png b/tools/editor/icons/2x/icon_gizmo_light.png
new file mode 100644
index 0000000000..12bec8ec1e
--- /dev/null
+++ b/tools/editor/icons/2x/icon_gizmo_light.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_gizmo_spatial_sample_player.png b/tools/editor/icons/2x/icon_gizmo_spatial_sample_player.png
new file mode 100644
index 0000000000..3e6bf48bc8
--- /dev/null
+++ b/tools/editor/icons/2x/icon_gizmo_spatial_sample_player.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_gizmo_spatial_stream_player.png b/tools/editor/icons/2x/icon_gizmo_spatial_stream_player.png
new file mode 100644
index 0000000000..621922b035
--- /dev/null
+++ b/tools/editor/icons/2x/icon_gizmo_spatial_stream_player.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_godot.png b/tools/editor/icons/2x/icon_godot.png
new file mode 100644
index 0000000000..cac2cff73f
--- /dev/null
+++ b/tools/editor/icons/2x/icon_godot.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_color_ramp.png b/tools/editor/icons/2x/icon_graph_color_ramp.png
new file mode 100644
index 0000000000..b59b1c7be4
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_color_ramp.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_comment.png b/tools/editor/icons/2x/icon_graph_comment.png
new file mode 100644
index 0000000000..d178bac5a5
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_comment.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_cube_uniform.png b/tools/editor/icons/2x/icon_graph_cube_uniform.png
new file mode 100644
index 0000000000..8750d86bd3
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_cube_uniform.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_curve_map.png b/tools/editor/icons/2x/icon_graph_curve_map.png
new file mode 100644
index 0000000000..33a4757b2f
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_curve_map.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_default_texture.png b/tools/editor/icons/2x/icon_graph_default_texture.png
new file mode 100644
index 0000000000..886d515deb
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_default_texture.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_edit.png b/tools/editor/icons/2x/icon_graph_edit.png
new file mode 100644
index 0000000000..3002c9e44e
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_edit.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_input.png b/tools/editor/icons/2x/icon_graph_input.png
new file mode 100644
index 0000000000..a0c5a12912
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_input.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_node.png b/tools/editor/icons/2x/icon_graph_node.png
new file mode 100644
index 0000000000..203bb22c84
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_node.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_rgb.png b/tools/editor/icons/2x/icon_graph_rgb.png
new file mode 100644
index 0000000000..b798322a3e
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_rgb.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_rgb_op.png b/tools/editor/icons/2x/icon_graph_rgb_op.png
new file mode 100644
index 0000000000..cad34b2039
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_rgb_op.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_rgb_uniform.png b/tools/editor/icons/2x/icon_graph_rgb_uniform.png
new file mode 100644
index 0000000000..339385c972
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_rgb_uniform.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_scalar.png b/tools/editor/icons/2x/icon_graph_scalar.png
new file mode 100644
index 0000000000..4787c199de
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_scalar.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_scalar_interp.png b/tools/editor/icons/2x/icon_graph_scalar_interp.png
new file mode 100644
index 0000000000..f4859ac234
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_scalar_interp.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_scalar_op.png b/tools/editor/icons/2x/icon_graph_scalar_op.png
new file mode 100644
index 0000000000..0228580fd5
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_scalar_op.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_scalar_uniform.png b/tools/editor/icons/2x/icon_graph_scalar_uniform.png
new file mode 100644
index 0000000000..4a833f28e2
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_scalar_uniform.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_scalars_to_vec.png b/tools/editor/icons/2x/icon_graph_scalars_to_vec.png
new file mode 100644
index 0000000000..626da0fb26
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_scalars_to_vec.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_texscreen.png b/tools/editor/icons/2x/icon_graph_texscreen.png
new file mode 100644
index 0000000000..e7548f94b8
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_texscreen.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_texture_uniform.png b/tools/editor/icons/2x/icon_graph_texture_uniform.png
new file mode 100644
index 0000000000..0c65625a18
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_texture_uniform.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_time.png b/tools/editor/icons/2x/icon_graph_time.png
new file mode 100644
index 0000000000..5dac94179c
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_time.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_vec_dp.png b/tools/editor/icons/2x/icon_graph_vec_dp.png
new file mode 100644
index 0000000000..7e1b8e8a1d
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_vec_dp.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_vec_interp.png b/tools/editor/icons/2x/icon_graph_vec_interp.png
new file mode 100644
index 0000000000..0751808a5a
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_vec_interp.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_vec_length.png b/tools/editor/icons/2x/icon_graph_vec_length.png
new file mode 100644
index 0000000000..df180542c4
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_vec_length.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_vec_op.png b/tools/editor/icons/2x/icon_graph_vec_op.png
new file mode 100644
index 0000000000..43f0c27406
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_vec_op.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_vec_scalar_op.png b/tools/editor/icons/2x/icon_graph_vec_scalar_op.png
new file mode 100644
index 0000000000..d443bfb615
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_vec_scalar_op.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_vec_to_scalars.png b/tools/editor/icons/2x/icon_graph_vec_to_scalars.png
new file mode 100644
index 0000000000..38bb0ecddc
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_vec_to_scalars.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_vecs_to_xform.png b/tools/editor/icons/2x/icon_graph_vecs_to_xform.png
new file mode 100644
index 0000000000..8fc1723396
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_vecs_to_xform.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_vector.png b/tools/editor/icons/2x/icon_graph_vector.png
new file mode 100644
index 0000000000..3b5ae0c643
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_vector.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_vector_uniform.png b/tools/editor/icons/2x/icon_graph_vector_uniform.png
new file mode 100644
index 0000000000..0a8b272650
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_vector_uniform.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_xform.png b/tools/editor/icons/2x/icon_graph_xform.png
new file mode 100644
index 0000000000..241239139f
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_xform.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_xform_mult.png b/tools/editor/icons/2x/icon_graph_xform_mult.png
new file mode 100644
index 0000000000..ef4c6b78e6
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_xform_mult.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_xform_scalar_func.png b/tools/editor/icons/2x/icon_graph_xform_scalar_func.png
new file mode 100644
index 0000000000..91b719b1cc
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_xform_scalar_func.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_xform_to_vecs.png b/tools/editor/icons/2x/icon_graph_xform_to_vecs.png
new file mode 100644
index 0000000000..0eebd26f67
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_xform_to_vecs.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_xform_uniform.png b/tools/editor/icons/2x/icon_graph_xform_uniform.png
new file mode 100644
index 0000000000..f2d8205509
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_xform_uniform.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_xform_vec_func.png b/tools/editor/icons/2x/icon_graph_xform_vec_func.png
new file mode 100644
index 0000000000..4cc6084071
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_xform_vec_func.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_xform_vec_imult.png b/tools/editor/icons/2x/icon_graph_xform_vec_imult.png
new file mode 100644
index 0000000000..f9e37c109a
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_xform_vec_imult.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_graph_xform_vec_mult.png b/tools/editor/icons/2x/icon_graph_xform_vec_mult.png
new file mode 100644
index 0000000000..b8fd10cdb3
--- /dev/null
+++ b/tools/editor/icons/2x/icon_graph_xform_vec_mult.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_grid.png b/tools/editor/icons/2x/icon_grid.png
new file mode 100644
index 0000000000..5699fd220f
--- /dev/null
+++ b/tools/editor/icons/2x/icon_grid.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_grid_container.png b/tools/editor/icons/2x/icon_grid_container.png
new file mode 100644
index 0000000000..594a1cf834
--- /dev/null
+++ b/tools/editor/icons/2x/icon_grid_container.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_grid_map.png b/tools/editor/icons/2x/icon_grid_map.png
new file mode 100644
index 0000000000..084e1f7e27
--- /dev/null
+++ b/tools/editor/icons/2x/icon_grid_map.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_groove_joint_2d.png b/tools/editor/icons/2x/icon_groove_joint_2d.png
new file mode 100644
index 0000000000..76a394a021
--- /dev/null
+++ b/tools/editor/icons/2x/icon_groove_joint_2d.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_group.png b/tools/editor/icons/2x/icon_group.png
new file mode 100644
index 0000000000..d1d866e2ca
--- /dev/null
+++ b/tools/editor/icons/2x/icon_group.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_groups.png b/tools/editor/icons/2x/icon_groups.png
new file mode 100644
index 0000000000..b2cf6e9c90
--- /dev/null
+++ b/tools/editor/icons/2x/icon_groups.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_h_box_container.png b/tools/editor/icons/2x/icon_h_box_container.png
new file mode 100644
index 0000000000..318a0155d3
--- /dev/null
+++ b/tools/editor/icons/2x/icon_h_box_container.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_h_button_array.png b/tools/editor/icons/2x/icon_h_button_array.png
new file mode 100644
index 0000000000..0c24a1985c
--- /dev/null
+++ b/tools/editor/icons/2x/icon_h_button_array.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_h_scroll_bar.png b/tools/editor/icons/2x/icon_h_scroll_bar.png
new file mode 100644
index 0000000000..f56a1f570e
--- /dev/null
+++ b/tools/editor/icons/2x/icon_h_scroll_bar.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_h_separator.png b/tools/editor/icons/2x/icon_h_separator.png
new file mode 100644
index 0000000000..c9392192ec
--- /dev/null
+++ b/tools/editor/icons/2x/icon_h_separator.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_h_slider.png b/tools/editor/icons/2x/icon_h_slider.png
new file mode 100644
index 0000000000..c0e86b9651
--- /dev/null
+++ b/tools/editor/icons/2x/icon_h_slider.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_h_split_container.png b/tools/editor/icons/2x/icon_h_split_container.png
new file mode 100644
index 0000000000..bee094cfc9
--- /dev/null
+++ b/tools/editor/icons/2x/icon_h_split_container.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_h_t_t_p_request.png b/tools/editor/icons/2x/icon_h_t_t_p_request.png
new file mode 100644
index 0000000000..52359a29a4
--- /dev/null
+++ b/tools/editor/icons/2x/icon_h_t_t_p_request.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_help.png b/tools/editor/icons/2x/icon_help.png
new file mode 100644
index 0000000000..8489118d07
--- /dev/null
+++ b/tools/editor/icons/2x/icon_help.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_hidden.png b/tools/editor/icons/2x/icon_hidden.png
new file mode 100644
index 0000000000..0a1b85c70a
--- /dev/null
+++ b/tools/editor/icons/2x/icon_hidden.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_history.png b/tools/editor/icons/2x/icon_history.png
new file mode 100644
index 0000000000..cd6e20b8a9
--- /dev/null
+++ b/tools/editor/icons/2x/icon_history.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_hsize.png b/tools/editor/icons/2x/icon_hsize.png
new file mode 100644
index 0000000000..793c72bc9c
--- /dev/null
+++ b/tools/editor/icons/2x/icon_hsize.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_image.png b/tools/editor/icons/2x/icon_image.png
new file mode 100644
index 0000000000..b3a43ffa23
--- /dev/null
+++ b/tools/editor/icons/2x/icon_image.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_image_texture.png b/tools/editor/icons/2x/icon_image_texture.png
new file mode 100644
index 0000000000..b67cebe3e0
--- /dev/null
+++ b/tools/editor/icons/2x/icon_image_texture.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_immediate_geometry.png b/tools/editor/icons/2x/icon_immediate_geometry.png
new file mode 100644
index 0000000000..937bf9eddb
--- /dev/null
+++ b/tools/editor/icons/2x/icon_immediate_geometry.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_import_check.png b/tools/editor/icons/2x/icon_import_check.png
new file mode 100644
index 0000000000..f1cd259b5a
--- /dev/null
+++ b/tools/editor/icons/2x/icon_import_check.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_import_fail.png b/tools/editor/icons/2x/icon_import_fail.png
new file mode 100644
index 0000000000..6c0e8f4e8a
--- /dev/null
+++ b/tools/editor/icons/2x/icon_import_fail.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_instance.png b/tools/editor/icons/2x/icon_instance.png
new file mode 100644
index 0000000000..1b2df0c511
--- /dev/null
+++ b/tools/editor/icons/2x/icon_instance.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_instance_options.png b/tools/editor/icons/2x/icon_instance_options.png
new file mode 100644
index 0000000000..7939021ae0
--- /dev/null
+++ b/tools/editor/icons/2x/icon_instance_options.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_integer.png b/tools/editor/icons/2x/icon_integer.png
new file mode 100644
index 0000000000..a34dcfab56
--- /dev/null
+++ b/tools/editor/icons/2x/icon_integer.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_interp_cubic.png b/tools/editor/icons/2x/icon_interp_cubic.png
new file mode 100644
index 0000000000..7b2729ff10
--- /dev/null
+++ b/tools/editor/icons/2x/icon_interp_cubic.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_interp_linear.png b/tools/editor/icons/2x/icon_interp_linear.png
new file mode 100644
index 0000000000..1123f63b8f
--- /dev/null
+++ b/tools/editor/icons/2x/icon_interp_linear.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_interp_raw.png b/tools/editor/icons/2x/icon_interp_raw.png
new file mode 100644
index 0000000000..1d400ff045
--- /dev/null
+++ b/tools/editor/icons/2x/icon_interp_raw.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_invalid_key.png b/tools/editor/icons/2x/icon_invalid_key.png
new file mode 100644
index 0000000000..621764ccdd
--- /dev/null
+++ b/tools/editor/icons/2x/icon_invalid_key.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_inverse_kinematics.png b/tools/editor/icons/2x/icon_inverse_kinematics.png
new file mode 100644
index 0000000000..8f9e58af18
--- /dev/null
+++ b/tools/editor/icons/2x/icon_inverse_kinematics.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_item_list.png b/tools/editor/icons/2x/icon_item_list.png
new file mode 100644
index 0000000000..bd45fe081d
--- /dev/null
+++ b/tools/editor/icons/2x/icon_item_list.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_joy_axis.png b/tools/editor/icons/2x/icon_joy_axis.png
new file mode 100644
index 0000000000..1fbaa53109
--- /dev/null
+++ b/tools/editor/icons/2x/icon_joy_axis.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_joy_button.png b/tools/editor/icons/2x/icon_joy_button.png
new file mode 100644
index 0000000000..0398450139
--- /dev/null
+++ b/tools/editor/icons/2x/icon_joy_button.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_joystick.png b/tools/editor/icons/2x/icon_joystick.png
new file mode 100644
index 0000000000..5bc87d81c6
--- /dev/null
+++ b/tools/editor/icons/2x/icon_joystick.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_key.png b/tools/editor/icons/2x/icon_key.png
new file mode 100644
index 0000000000..0d390022b3
--- /dev/null
+++ b/tools/editor/icons/2x/icon_key.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_key_hover.png b/tools/editor/icons/2x/icon_key_hover.png
new file mode 100644
index 0000000000..dd5181b930
--- /dev/null
+++ b/tools/editor/icons/2x/icon_key_hover.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_key_invalid.png b/tools/editor/icons/2x/icon_key_invalid.png
new file mode 100644
index 0000000000..621764ccdd
--- /dev/null
+++ b/tools/editor/icons/2x/icon_key_invalid.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_key_next.png b/tools/editor/icons/2x/icon_key_next.png
new file mode 100644
index 0000000000..1b85aa111e
--- /dev/null
+++ b/tools/editor/icons/2x/icon_key_next.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_key_selected.png b/tools/editor/icons/2x/icon_key_selected.png
new file mode 100644
index 0000000000..c1e4cd622a
--- /dev/null
+++ b/tools/editor/icons/2x/icon_key_selected.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_key_value.png b/tools/editor/icons/2x/icon_key_value.png
new file mode 100644
index 0000000000..ce113932fe
--- /dev/null
+++ b/tools/editor/icons/2x/icon_key_value.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_key_xform.png b/tools/editor/icons/2x/icon_key_xform.png
new file mode 100644
index 0000000000..3d44a54cb3
--- /dev/null
+++ b/tools/editor/icons/2x/icon_key_xform.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_keyboard.png b/tools/editor/icons/2x/icon_keyboard.png
new file mode 100644
index 0000000000..61a137cba8
--- /dev/null
+++ b/tools/editor/icons/2x/icon_keyboard.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_kinematic_body.png b/tools/editor/icons/2x/icon_kinematic_body.png
new file mode 100644
index 0000000000..2119c20c02
--- /dev/null
+++ b/tools/editor/icons/2x/icon_kinematic_body.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_kinematic_body_2d.png b/tools/editor/icons/2x/icon_kinematic_body_2d.png
new file mode 100644
index 0000000000..793a11d7c4
--- /dev/null
+++ b/tools/editor/icons/2x/icon_kinematic_body_2d.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_label.png b/tools/editor/icons/2x/icon_label.png
new file mode 100644
index 0000000000..24d4c632b1
--- /dev/null
+++ b/tools/editor/icons/2x/icon_label.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_light_2d.png b/tools/editor/icons/2x/icon_light_2d.png
new file mode 100644
index 0000000000..dc2111a37f
--- /dev/null
+++ b/tools/editor/icons/2x/icon_light_2d.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_light_occluder_2d.png b/tools/editor/icons/2x/icon_light_occluder_2d.png
new file mode 100644
index 0000000000..bb0858c3f1
--- /dev/null
+++ b/tools/editor/icons/2x/icon_light_occluder_2d.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_line_edit.png b/tools/editor/icons/2x/icon_line_edit.png
new file mode 100644
index 0000000000..630c8e4ea3
--- /dev/null
+++ b/tools/editor/icons/2x/icon_line_edit.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_link_button.png b/tools/editor/icons/2x/icon_link_button.png
new file mode 100644
index 0000000000..d891b5e40b
--- /dev/null
+++ b/tools/editor/icons/2x/icon_link_button.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_list_select.png b/tools/editor/icons/2x/icon_list_select.png
new file mode 100644
index 0000000000..00ff941d04
--- /dev/null
+++ b/tools/editor/icons/2x/icon_list_select.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_load.png b/tools/editor/icons/2x/icon_load.png
new file mode 100644
index 0000000000..daa81bdf4a
--- /dev/null
+++ b/tools/editor/icons/2x/icon_load.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_lock.png b/tools/editor/icons/2x/icon_lock.png
new file mode 100644
index 0000000000..822fc207d6
--- /dev/null
+++ b/tools/editor/icons/2x/icon_lock.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_loop.png b/tools/editor/icons/2x/icon_loop.png
new file mode 100644
index 0000000000..f2bb6ed417
--- /dev/null
+++ b/tools/editor/icons/2x/icon_loop.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_main_play.png b/tools/editor/icons/2x/icon_main_play.png
new file mode 100644
index 0000000000..3e61f5b8bf
--- /dev/null
+++ b/tools/editor/icons/2x/icon_main_play.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_main_stop.png b/tools/editor/icons/2x/icon_main_stop.png
new file mode 100644
index 0000000000..23f73f322c
--- /dev/null
+++ b/tools/editor/icons/2x/icon_main_stop.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_margin_container.png b/tools/editor/icons/2x/icon_margin_container.png
new file mode 100644
index 0000000000..fa38dd7962
--- /dev/null
+++ b/tools/editor/icons/2x/icon_margin_container.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_material_preview_cube.png b/tools/editor/icons/2x/icon_material_preview_cube.png
new file mode 100644
index 0000000000..d99b8db013
--- /dev/null
+++ b/tools/editor/icons/2x/icon_material_preview_cube.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_material_preview_cube_off.png b/tools/editor/icons/2x/icon_material_preview_cube_off.png
new file mode 100644
index 0000000000..afc2ef7e61
--- /dev/null
+++ b/tools/editor/icons/2x/icon_material_preview_cube_off.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_material_preview_light_1.png b/tools/editor/icons/2x/icon_material_preview_light_1.png
new file mode 100644
index 0000000000..e014bb1ddf
--- /dev/null
+++ b/tools/editor/icons/2x/icon_material_preview_light_1.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_material_preview_light_1_off.png b/tools/editor/icons/2x/icon_material_preview_light_1_off.png
new file mode 100644
index 0000000000..9bfd8c27c4
--- /dev/null
+++ b/tools/editor/icons/2x/icon_material_preview_light_1_off.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_material_preview_light_2.png b/tools/editor/icons/2x/icon_material_preview_light_2.png
new file mode 100644
index 0000000000..db9e458a5b
--- /dev/null
+++ b/tools/editor/icons/2x/icon_material_preview_light_2.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_material_preview_light_2_off.png b/tools/editor/icons/2x/icon_material_preview_light_2_off.png
new file mode 100644
index 0000000000..59d8fcbd67
--- /dev/null
+++ b/tools/editor/icons/2x/icon_material_preview_light_2_off.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_material_preview_sphere.png b/tools/editor/icons/2x/icon_material_preview_sphere.png
new file mode 100644
index 0000000000..a108366dcb
--- /dev/null
+++ b/tools/editor/icons/2x/icon_material_preview_sphere.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_material_preview_sphere_off.png b/tools/editor/icons/2x/icon_material_preview_sphere_off.png
new file mode 100644
index 0000000000..26aba9f94e
--- /dev/null
+++ b/tools/editor/icons/2x/icon_material_preview_sphere_off.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_material_shader.png b/tools/editor/icons/2x/icon_material_shader.png
new file mode 100644
index 0000000000..366496b0e6
--- /dev/null
+++ b/tools/editor/icons/2x/icon_material_shader.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_material_shader_graph.png b/tools/editor/icons/2x/icon_material_shader_graph.png
new file mode 100644
index 0000000000..712b2013c4
--- /dev/null
+++ b/tools/editor/icons/2x/icon_material_shader_graph.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_matrix.png b/tools/editor/icons/2x/icon_matrix.png
new file mode 100644
index 0000000000..1a9f542ff6
--- /dev/null
+++ b/tools/editor/icons/2x/icon_matrix.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_menu_button.png b/tools/editor/icons/2x/icon_menu_button.png
new file mode 100644
index 0000000000..bd79d93d58
--- /dev/null
+++ b/tools/editor/icons/2x/icon_menu_button.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mesh.png b/tools/editor/icons/2x/icon_mesh.png
new file mode 100644
index 0000000000..ec987b46ed
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mesh.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mesh_instance.png b/tools/editor/icons/2x/icon_mesh_instance.png
new file mode 100644
index 0000000000..daa9cf3c68
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mesh_instance.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mirror_x.png b/tools/editor/icons/2x/icon_mirror_x.png
new file mode 100644
index 0000000000..793c72bc9c
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mirror_x.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mirror_y.png b/tools/editor/icons/2x/icon_mirror_y.png
new file mode 100644
index 0000000000..57e044c843
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mirror_y.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mouse.png b/tools/editor/icons/2x/icon_mouse.png
new file mode 100644
index 0000000000..7de98a3970
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mouse.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_move_down.png b/tools/editor/icons/2x/icon_move_down.png
new file mode 100644
index 0000000000..fedaaf89ed
--- /dev/null
+++ b/tools/editor/icons/2x/icon_move_down.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_move_point.png b/tools/editor/icons/2x/icon_move_point.png
new file mode 100644
index 0000000000..fd906870b7
--- /dev/null
+++ b/tools/editor/icons/2x/icon_move_point.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_move_up.png b/tools/editor/icons/2x/icon_move_up.png
new file mode 100644
index 0000000000..697b887fb7
--- /dev/null
+++ b/tools/editor/icons/2x/icon_move_up.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_multi_edit.png b/tools/editor/icons/2x/icon_multi_edit.png
new file mode 100644
index 0000000000..d818247d0e
--- /dev/null
+++ b/tools/editor/icons/2x/icon_multi_edit.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_multi_line.png b/tools/editor/icons/2x/icon_multi_line.png
new file mode 100644
index 0000000000..0760b233cf
--- /dev/null
+++ b/tools/editor/icons/2x/icon_multi_line.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_multi_mesh.png b/tools/editor/icons/2x/icon_multi_mesh.png
new file mode 100644
index 0000000000..48ada14e8f
--- /dev/null
+++ b/tools/editor/icons/2x/icon_multi_mesh.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_multi_mesh_instance.png b/tools/editor/icons/2x/icon_multi_mesh_instance.png
new file mode 100644
index 0000000000..4662d10b36
--- /dev/null
+++ b/tools/editor/icons/2x/icon_multi_mesh_instance.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_multi_node_edit.png b/tools/editor/icons/2x/icon_multi_node_edit.png
new file mode 100644
index 0000000000..d818247d0e
--- /dev/null
+++ b/tools/editor/icons/2x/icon_multi_node_edit.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_navigation.png b/tools/editor/icons/2x/icon_navigation.png
new file mode 100644
index 0000000000..bce0ccf893
--- /dev/null
+++ b/tools/editor/icons/2x/icon_navigation.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_navigation_2d.png b/tools/editor/icons/2x/icon_navigation_2d.png
new file mode 100644
index 0000000000..152748d334
--- /dev/null
+++ b/tools/editor/icons/2x/icon_navigation_2d.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_navigation_mesh_instance.png b/tools/editor/icons/2x/icon_navigation_mesh_instance.png
new file mode 100644
index 0000000000..514bbb8609
--- /dev/null
+++ b/tools/editor/icons/2x/icon_navigation_mesh_instance.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_navigation_polygon_instance.png b/tools/editor/icons/2x/icon_navigation_polygon_instance.png
new file mode 100644
index 0000000000..4c73132a4d
--- /dev/null
+++ b/tools/editor/icons/2x/icon_navigation_polygon_instance.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_new.png b/tools/editor/icons/2x/icon_new.png
new file mode 100644
index 0000000000..a495efee09
--- /dev/null
+++ b/tools/editor/icons/2x/icon_new.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_node.png b/tools/editor/icons/2x/icon_node.png
new file mode 100644
index 0000000000..540c7193b3
--- /dev/null
+++ b/tools/editor/icons/2x/icon_node.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_node_2d.png b/tools/editor/icons/2x/icon_node_2d.png
new file mode 100644
index 0000000000..3ab0be6607
--- /dev/null
+++ b/tools/editor/icons/2x/icon_node_2d.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_node_warning.png b/tools/editor/icons/2x/icon_node_warning.png
new file mode 100644
index 0000000000..bf59d6d247
--- /dev/null
+++ b/tools/editor/icons/2x/icon_node_warning.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_non_favorite.png b/tools/editor/icons/2x/icon_non_favorite.png
new file mode 100644
index 0000000000..7790066577
--- /dev/null
+++ b/tools/editor/icons/2x/icon_non_favorite.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_object.png b/tools/editor/icons/2x/icon_object.png
new file mode 100644
index 0000000000..66da378b33
--- /dev/null
+++ b/tools/editor/icons/2x/icon_object.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_occluder_polygon_2d.png b/tools/editor/icons/2x/icon_occluder_polygon_2d.png
new file mode 100644
index 0000000000..fe8de406ef
--- /dev/null
+++ b/tools/editor/icons/2x/icon_occluder_polygon_2d.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_omni_light.png b/tools/editor/icons/2x/icon_omni_light.png
new file mode 100644
index 0000000000..2548319015
--- /dev/null
+++ b/tools/editor/icons/2x/icon_omni_light.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_option_button.png b/tools/editor/icons/2x/icon_option_button.png
new file mode 100644
index 0000000000..981e1277a0
--- /dev/null
+++ b/tools/editor/icons/2x/icon_option_button.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_p_hash_translation.png b/tools/editor/icons/2x/icon_p_hash_translation.png
new file mode 100644
index 0000000000..c11e541dc9
--- /dev/null
+++ b/tools/editor/icons/2x/icon_p_hash_translation.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_packed_scene.png b/tools/editor/icons/2x/icon_packed_scene.png
new file mode 100644
index 0000000000..1a799ff649
--- /dev/null
+++ b/tools/editor/icons/2x/icon_packed_scene.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_panel.png b/tools/editor/icons/2x/icon_panel.png
new file mode 100644
index 0000000000..8467d39394
--- /dev/null
+++ b/tools/editor/icons/2x/icon_panel.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_panel_container.png b/tools/editor/icons/2x/icon_panel_container.png
new file mode 100644
index 0000000000..dae4097050
--- /dev/null
+++ b/tools/editor/icons/2x/icon_panel_container.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_panels_1.png b/tools/editor/icons/2x/icon_panels_1.png
new file mode 100644
index 0000000000..2a179e7fd3
--- /dev/null
+++ b/tools/editor/icons/2x/icon_panels_1.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_panels_2.png b/tools/editor/icons/2x/icon_panels_2.png
new file mode 100644
index 0000000000..cc75aa5b71
--- /dev/null
+++ b/tools/editor/icons/2x/icon_panels_2.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_panels_2_alt.png b/tools/editor/icons/2x/icon_panels_2_alt.png
new file mode 100644
index 0000000000..ebf1b6b9e1
--- /dev/null
+++ b/tools/editor/icons/2x/icon_panels_2_alt.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_panels_3.png b/tools/editor/icons/2x/icon_panels_3.png
new file mode 100644
index 0000000000..18546af102
--- /dev/null
+++ b/tools/editor/icons/2x/icon_panels_3.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_panels_3_alt.png b/tools/editor/icons/2x/icon_panels_3_alt.png
new file mode 100644
index 0000000000..4d60195d3f
--- /dev/null
+++ b/tools/editor/icons/2x/icon_panels_3_alt.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_panels_4.png b/tools/editor/icons/2x/icon_panels_4.png
new file mode 100644
index 0000000000..34b4384da6
--- /dev/null
+++ b/tools/editor/icons/2x/icon_panels_4.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_parallax_background.png b/tools/editor/icons/2x/icon_parallax_background.png
new file mode 100644
index 0000000000..7970d3e95a
--- /dev/null
+++ b/tools/editor/icons/2x/icon_parallax_background.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_parallax_layer.png b/tools/editor/icons/2x/icon_parallax_layer.png
new file mode 100644
index 0000000000..4a04feb9f0
--- /dev/null
+++ b/tools/editor/icons/2x/icon_parallax_layer.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_particle_attractor_2d.png b/tools/editor/icons/2x/icon_particle_attractor_2d.png
new file mode 100644
index 0000000000..46658d7348
--- /dev/null
+++ b/tools/editor/icons/2x/icon_particle_attractor_2d.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_particles.png b/tools/editor/icons/2x/icon_particles.png
new file mode 100644
index 0000000000..1fbd2d8955
--- /dev/null
+++ b/tools/editor/icons/2x/icon_particles.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_particles_2d.png b/tools/editor/icons/2x/icon_particles_2d.png
new file mode 100644
index 0000000000..4a973fa431
--- /dev/null
+++ b/tools/editor/icons/2x/icon_particles_2d.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_patch_9_frame.png b/tools/editor/icons/2x/icon_patch_9_frame.png
new file mode 100644
index 0000000000..46315d200f
--- /dev/null
+++ b/tools/editor/icons/2x/icon_patch_9_frame.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_path.png b/tools/editor/icons/2x/icon_path.png
new file mode 100644
index 0000000000..d884b79c2c
--- /dev/null
+++ b/tools/editor/icons/2x/icon_path.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_path_2d.png b/tools/editor/icons/2x/icon_path_2d.png
new file mode 100644
index 0000000000..ee46a3bb59
--- /dev/null
+++ b/tools/editor/icons/2x/icon_path_2d.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_path_follow.png b/tools/editor/icons/2x/icon_path_follow.png
new file mode 100644
index 0000000000..b824b4bb1b
--- /dev/null
+++ b/tools/editor/icons/2x/icon_path_follow.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_path_follow_2d.png b/tools/editor/icons/2x/icon_path_follow_2d.png
new file mode 100644
index 0000000000..3ca3b930a0
--- /dev/null
+++ b/tools/editor/icons/2x/icon_path_follow_2d.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_pause.png b/tools/editor/icons/2x/icon_pause.png
new file mode 100644
index 0000000000..ab2c377fc2
--- /dev/null
+++ b/tools/editor/icons/2x/icon_pause.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_pin.png b/tools/editor/icons/2x/icon_pin.png
new file mode 100644
index 0000000000..4e359612b8
--- /dev/null
+++ b/tools/editor/icons/2x/icon_pin.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_pin_joint.png b/tools/editor/icons/2x/icon_pin_joint.png
new file mode 100644
index 0000000000..3f2c260f94
--- /dev/null
+++ b/tools/editor/icons/2x/icon_pin_joint.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_pin_joint_2d.png b/tools/editor/icons/2x/icon_pin_joint_2d.png
new file mode 100644
index 0000000000..2396d3e315
--- /dev/null
+++ b/tools/editor/icons/2x/icon_pin_joint_2d.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_pin_pressed.png b/tools/editor/icons/2x/icon_pin_pressed.png
new file mode 100644
index 0000000000..4e359612b8
--- /dev/null
+++ b/tools/editor/icons/2x/icon_pin_pressed.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_plane.png b/tools/editor/icons/2x/icon_plane.png
new file mode 100644
index 0000000000..33f54d5e70
--- /dev/null
+++ b/tools/editor/icons/2x/icon_plane.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_plane_shape.png b/tools/editor/icons/2x/icon_plane_shape.png
new file mode 100644
index 0000000000..b554a395ea
--- /dev/null
+++ b/tools/editor/icons/2x/icon_plane_shape.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_play.png b/tools/editor/icons/2x/icon_play.png
new file mode 100644
index 0000000000..bf80d5bbbb
--- /dev/null
+++ b/tools/editor/icons/2x/icon_play.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_play_backwards.png b/tools/editor/icons/2x/icon_play_backwards.png
new file mode 100644
index 0000000000..3bc2d651b1
--- /dev/null
+++ b/tools/editor/icons/2x/icon_play_backwards.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_play_custom.png b/tools/editor/icons/2x/icon_play_custom.png
new file mode 100644
index 0000000000..adc451eb1c
--- /dev/null
+++ b/tools/editor/icons/2x/icon_play_custom.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_play_scene.png b/tools/editor/icons/2x/icon_play_scene.png
new file mode 100644
index 0000000000..c81ec7d203
--- /dev/null
+++ b/tools/editor/icons/2x/icon_play_scene.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_play_start.png b/tools/editor/icons/2x/icon_play_start.png
new file mode 100644
index 0000000000..fc963e3d16
--- /dev/null
+++ b/tools/editor/icons/2x/icon_play_start.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_play_start_backwards.png b/tools/editor/icons/2x/icon_play_start_backwards.png
new file mode 100644
index 0000000000..75707602e2
--- /dev/null
+++ b/tools/editor/icons/2x/icon_play_start_backwards.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_polygon_2d.png b/tools/editor/icons/2x/icon_polygon_2d.png
new file mode 100644
index 0000000000..05d6f10d58
--- /dev/null
+++ b/tools/editor/icons/2x/icon_polygon_2d.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_popup.png b/tools/editor/icons/2x/icon_popup.png
new file mode 100644
index 0000000000..8c7c325c57
--- /dev/null
+++ b/tools/editor/icons/2x/icon_popup.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_popup_dialog.png b/tools/editor/icons/2x/icon_popup_dialog.png
new file mode 100644
index 0000000000..d8cfa94b7f
--- /dev/null
+++ b/tools/editor/icons/2x/icon_popup_dialog.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_popup_menu.png b/tools/editor/icons/2x/icon_popup_menu.png
new file mode 100644
index 0000000000..9858d39bdb
--- /dev/null
+++ b/tools/editor/icons/2x/icon_popup_menu.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_popup_panel.png b/tools/editor/icons/2x/icon_popup_panel.png
new file mode 100644
index 0000000000..5f12521f73
--- /dev/null
+++ b/tools/editor/icons/2x/icon_popup_panel.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_portal.png b/tools/editor/icons/2x/icon_portal.png
new file mode 100644
index 0000000000..3c2c8a7f48
--- /dev/null
+++ b/tools/editor/icons/2x/icon_portal.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_position_2d.png b/tools/editor/icons/2x/icon_position_2d.png
new file mode 100644
index 0000000000..1ad5067e5e
--- /dev/null
+++ b/tools/editor/icons/2x/icon_position_2d.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_position_3d.png b/tools/editor/icons/2x/icon_position_3d.png
new file mode 100644
index 0000000000..c2195b4c2a
--- /dev/null
+++ b/tools/editor/icons/2x/icon_position_3d.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_progress_1.png b/tools/editor/icons/2x/icon_progress_1.png
new file mode 100644
index 0000000000..b3c2e08351
--- /dev/null
+++ b/tools/editor/icons/2x/icon_progress_1.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_progress_2.png b/tools/editor/icons/2x/icon_progress_2.png
new file mode 100644
index 0000000000..2e1de1b192
--- /dev/null
+++ b/tools/editor/icons/2x/icon_progress_2.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_progress_3.png b/tools/editor/icons/2x/icon_progress_3.png
new file mode 100644
index 0000000000..bf23a2f72b
--- /dev/null
+++ b/tools/editor/icons/2x/icon_progress_3.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_progress_4.png b/tools/editor/icons/2x/icon_progress_4.png
new file mode 100644
index 0000000000..9e1daf5385
--- /dev/null
+++ b/tools/editor/icons/2x/icon_progress_4.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_progress_5.png b/tools/editor/icons/2x/icon_progress_5.png
new file mode 100644
index 0000000000..97388bb242
--- /dev/null
+++ b/tools/editor/icons/2x/icon_progress_5.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_progress_6.png b/tools/editor/icons/2x/icon_progress_6.png
new file mode 100644
index 0000000000..3c49797433
--- /dev/null
+++ b/tools/editor/icons/2x/icon_progress_6.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_progress_7.png b/tools/editor/icons/2x/icon_progress_7.png
new file mode 100644
index 0000000000..dd959b0ee6
--- /dev/null
+++ b/tools/editor/icons/2x/icon_progress_7.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_progress_8.png b/tools/editor/icons/2x/icon_progress_8.png
new file mode 100644
index 0000000000..c3b411c672
--- /dev/null
+++ b/tools/editor/icons/2x/icon_progress_8.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_progress_bar.png b/tools/editor/icons/2x/icon_progress_bar.png
new file mode 100644
index 0000000000..aa1ec42911
--- /dev/null
+++ b/tools/editor/icons/2x/icon_progress_bar.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_proximity_group.png b/tools/editor/icons/2x/icon_proximity_group.png
new file mode 100644
index 0000000000..2805fef73b
--- /dev/null
+++ b/tools/editor/icons/2x/icon_proximity_group.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_quad.png b/tools/editor/icons/2x/icon_quad.png
new file mode 100644
index 0000000000..d26234ab3c
--- /dev/null
+++ b/tools/editor/icons/2x/icon_quad.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_quat.png b/tools/editor/icons/2x/icon_quat.png
new file mode 100644
index 0000000000..97bad80684
--- /dev/null
+++ b/tools/editor/icons/2x/icon_quat.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_range.png b/tools/editor/icons/2x/icon_range.png
new file mode 100644
index 0000000000..f0fac7c480
--- /dev/null
+++ b/tools/editor/icons/2x/icon_range.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_ray_cast.png b/tools/editor/icons/2x/icon_ray_cast.png
new file mode 100644
index 0000000000..89a99664eb
--- /dev/null
+++ b/tools/editor/icons/2x/icon_ray_cast.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_ray_cast_2d.png b/tools/editor/icons/2x/icon_ray_cast_2d.png
new file mode 100644
index 0000000000..d0fefe468b
--- /dev/null
+++ b/tools/editor/icons/2x/icon_ray_cast_2d.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_ray_shape.png b/tools/editor/icons/2x/icon_ray_shape.png
new file mode 100644
index 0000000000..a95dc48059
--- /dev/null
+++ b/tools/editor/icons/2x/icon_ray_shape.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_rayito.png b/tools/editor/icons/2x/icon_rayito.png
new file mode 100644
index 0000000000..06dfc8b005
--- /dev/null
+++ b/tools/editor/icons/2x/icon_rayito.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_real.png b/tools/editor/icons/2x/icon_real.png
new file mode 100644
index 0000000000..08448f206d
--- /dev/null
+++ b/tools/editor/icons/2x/icon_real.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_reference_frame.png b/tools/editor/icons/2x/icon_reference_frame.png
new file mode 100644
index 0000000000..36c30a4735
--- /dev/null
+++ b/tools/editor/icons/2x/icon_reference_frame.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_region_edit.png b/tools/editor/icons/2x/icon_region_edit.png
new file mode 100644
index 0000000000..28dbe172d5
--- /dev/null
+++ b/tools/editor/icons/2x/icon_region_edit.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_reload.png b/tools/editor/icons/2x/icon_reload.png
new file mode 100644
index 0000000000..1158caa9e8
--- /dev/null
+++ b/tools/editor/icons/2x/icon_reload.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_reload_small.png b/tools/editor/icons/2x/icon_reload_small.png
new file mode 100644
index 0000000000..3396df7069
--- /dev/null
+++ b/tools/editor/icons/2x/icon_reload_small.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_remote.png b/tools/editor/icons/2x/icon_remote.png
new file mode 100644
index 0000000000..247bae0c3d
--- /dev/null
+++ b/tools/editor/icons/2x/icon_remote.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_remote_transform_2d.png b/tools/editor/icons/2x/icon_remote_transform_2d.png
new file mode 100644
index 0000000000..5644c6f256
--- /dev/null
+++ b/tools/editor/icons/2x/icon_remote_transform_2d.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_remove.png b/tools/editor/icons/2x/icon_remove.png
new file mode 100644
index 0000000000..a80deef48b
--- /dev/null
+++ b/tools/editor/icons/2x/icon_remove.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_rename.png b/tools/editor/icons/2x/icon_rename.png
new file mode 100644
index 0000000000..addcbee2cd
--- /dev/null
+++ b/tools/editor/icons/2x/icon_rename.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_reparent.png b/tools/editor/icons/2x/icon_reparent.png
new file mode 100644
index 0000000000..92ffafc594
--- /dev/null
+++ b/tools/editor/icons/2x/icon_reparent.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_resource_preloader.png b/tools/editor/icons/2x/icon_resource_preloader.png
new file mode 100644
index 0000000000..6911269bdc
--- /dev/null
+++ b/tools/editor/icons/2x/icon_resource_preloader.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_rich_text_label.png b/tools/editor/icons/2x/icon_rich_text_label.png
new file mode 100644
index 0000000000..e7dd5574db
--- /dev/null
+++ b/tools/editor/icons/2x/icon_rich_text_label.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_rigid_body.png b/tools/editor/icons/2x/icon_rigid_body.png
new file mode 100644
index 0000000000..bd2d240b96
--- /dev/null
+++ b/tools/editor/icons/2x/icon_rigid_body.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_rigid_body_2d.png b/tools/editor/icons/2x/icon_rigid_body_2d.png
new file mode 100644
index 0000000000..f5b2b1db18
--- /dev/null
+++ b/tools/editor/icons/2x/icon_rigid_body_2d.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_room.png b/tools/editor/icons/2x/icon_room.png
new file mode 100644
index 0000000000..0ca7d32e1e
--- /dev/null
+++ b/tools/editor/icons/2x/icon_room.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_rotate_0.png b/tools/editor/icons/2x/icon_rotate_0.png
new file mode 100644
index 0000000000..40da71d47a
--- /dev/null
+++ b/tools/editor/icons/2x/icon_rotate_0.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_rotate_180.png b/tools/editor/icons/2x/icon_rotate_180.png
new file mode 100644
index 0000000000..b58c25d577
--- /dev/null
+++ b/tools/editor/icons/2x/icon_rotate_180.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_rotate_270.png b/tools/editor/icons/2x/icon_rotate_270.png
new file mode 100644
index 0000000000..f17ab02d10
--- /dev/null
+++ b/tools/editor/icons/2x/icon_rotate_270.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_rotate_90.png b/tools/editor/icons/2x/icon_rotate_90.png
new file mode 100644
index 0000000000..0b3940686a
--- /dev/null
+++ b/tools/editor/icons/2x/icon_rotate_90.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_sample.png b/tools/editor/icons/2x/icon_sample.png
new file mode 100644
index 0000000000..860ea998ef
--- /dev/null
+++ b/tools/editor/icons/2x/icon_sample.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_sample_player.png b/tools/editor/icons/2x/icon_sample_player.png
new file mode 100644
index 0000000000..67e5e69c2a
--- /dev/null
+++ b/tools/editor/icons/2x/icon_sample_player.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_sample_player_2d.png b/tools/editor/icons/2x/icon_sample_player_2d.png
new file mode 100644
index 0000000000..6bf3658d3e
--- /dev/null
+++ b/tools/editor/icons/2x/icon_sample_player_2d.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_save.png b/tools/editor/icons/2x/icon_save.png
new file mode 100644
index 0000000000..9fdc4c568c
--- /dev/null
+++ b/tools/editor/icons/2x/icon_save.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_script.png b/tools/editor/icons/2x/icon_script.png
new file mode 100644
index 0000000000..25b2ad1c08
--- /dev/null
+++ b/tools/editor/icons/2x/icon_script.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_scroll_bar.png b/tools/editor/icons/2x/icon_scroll_bar.png
new file mode 100644
index 0000000000..f56a1f570e
--- /dev/null
+++ b/tools/editor/icons/2x/icon_scroll_bar.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_scroll_container.png b/tools/editor/icons/2x/icon_scroll_container.png
new file mode 100644
index 0000000000..5ecc0cb535
--- /dev/null
+++ b/tools/editor/icons/2x/icon_scroll_container.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_shader.png b/tools/editor/icons/2x/icon_shader.png
new file mode 100644
index 0000000000..366496b0e6
--- /dev/null
+++ b/tools/editor/icons/2x/icon_shader.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_shader_material.png b/tools/editor/icons/2x/icon_shader_material.png
new file mode 100644
index 0000000000..366496b0e6
--- /dev/null
+++ b/tools/editor/icons/2x/icon_shader_material.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_signal.png b/tools/editor/icons/2x/icon_signal.png
new file mode 100644
index 0000000000..73355a1466
--- /dev/null
+++ b/tools/editor/icons/2x/icon_signal.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_skeleton.png b/tools/editor/icons/2x/icon_skeleton.png
new file mode 100644
index 0000000000..92eafb3f2c
--- /dev/null
+++ b/tools/editor/icons/2x/icon_skeleton.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_slider_joint.png b/tools/editor/icons/2x/icon_slider_joint.png
new file mode 100644
index 0000000000..40963ce03c
--- /dev/null
+++ b/tools/editor/icons/2x/icon_slider_joint.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_slot.png b/tools/editor/icons/2x/icon_slot.png
new file mode 100644
index 0000000000..eab8da30a3
--- /dev/null
+++ b/tools/editor/icons/2x/icon_slot.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_snap.png b/tools/editor/icons/2x/icon_snap.png
new file mode 100644
index 0000000000..2a381ca2de
--- /dev/null
+++ b/tools/editor/icons/2x/icon_snap.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_sound_room_params.png b/tools/editor/icons/2x/icon_sound_room_params.png
new file mode 100644
index 0000000000..80a0c78b9a
--- /dev/null
+++ b/tools/editor/icons/2x/icon_sound_room_params.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_spatial.png b/tools/editor/icons/2x/icon_spatial.png
new file mode 100644
index 0000000000..3d7e0502be
--- /dev/null
+++ b/tools/editor/icons/2x/icon_spatial.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_spatial_sample_player.png b/tools/editor/icons/2x/icon_spatial_sample_player.png
new file mode 100644
index 0000000000..6e5e609791
--- /dev/null
+++ b/tools/editor/icons/2x/icon_spatial_sample_player.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_spatial_stream_player.png b/tools/editor/icons/2x/icon_spatial_stream_player.png
new file mode 100644
index 0000000000..0ae4c80c39
--- /dev/null
+++ b/tools/editor/icons/2x/icon_spatial_stream_player.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_sphere_shape.png b/tools/editor/icons/2x/icon_sphere_shape.png
new file mode 100644
index 0000000000..dd4e438c6f
--- /dev/null
+++ b/tools/editor/icons/2x/icon_sphere_shape.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_spin_box.png b/tools/editor/icons/2x/icon_spin_box.png
new file mode 100644
index 0000000000..c5513f72d4
--- /dev/null
+++ b/tools/editor/icons/2x/icon_spin_box.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_spot_light.png b/tools/editor/icons/2x/icon_spot_light.png
new file mode 100644
index 0000000000..5d62b609ee
--- /dev/null
+++ b/tools/editor/icons/2x/icon_spot_light.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_sprite.png b/tools/editor/icons/2x/icon_sprite.png
new file mode 100644
index 0000000000..32fcd32250
--- /dev/null
+++ b/tools/editor/icons/2x/icon_sprite.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_sprite_3d.png b/tools/editor/icons/2x/icon_sprite_3d.png
new file mode 100644
index 0000000000..e24779ae99
--- /dev/null
+++ b/tools/editor/icons/2x/icon_sprite_3d.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_static_body.png b/tools/editor/icons/2x/icon_static_body.png
new file mode 100644
index 0000000000..3fc3e6f928
--- /dev/null
+++ b/tools/editor/icons/2x/icon_static_body.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_static_body_2d.png b/tools/editor/icons/2x/icon_static_body_2d.png
new file mode 100644
index 0000000000..6c199981e4
--- /dev/null
+++ b/tools/editor/icons/2x/icon_static_body_2d.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_stream_player.png b/tools/editor/icons/2x/icon_stream_player.png
new file mode 100644
index 0000000000..3d00238dee
--- /dev/null
+++ b/tools/editor/icons/2x/icon_stream_player.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_string.png b/tools/editor/icons/2x/icon_string.png
new file mode 100644
index 0000000000..b0bf611c51
--- /dev/null
+++ b/tools/editor/icons/2x/icon_string.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_tab_container.png b/tools/editor/icons/2x/icon_tab_container.png
new file mode 100644
index 0000000000..ceff71e2a5
--- /dev/null
+++ b/tools/editor/icons/2x/icon_tab_container.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_tabs.png b/tools/editor/icons/2x/icon_tabs.png
new file mode 100644
index 0000000000..b265ba7cdf
--- /dev/null
+++ b/tools/editor/icons/2x/icon_tabs.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_test_cube.png b/tools/editor/icons/2x/icon_test_cube.png
new file mode 100644
index 0000000000..05d704fe78
--- /dev/null
+++ b/tools/editor/icons/2x/icon_test_cube.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_text_edit.png b/tools/editor/icons/2x/icon_text_edit.png
new file mode 100644
index 0000000000..7eb9719715
--- /dev/null
+++ b/tools/editor/icons/2x/icon_text_edit.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_texture.png b/tools/editor/icons/2x/icon_texture.png
new file mode 100644
index 0000000000..b67cebe3e0
--- /dev/null
+++ b/tools/editor/icons/2x/icon_texture.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_texture_button.png b/tools/editor/icons/2x/icon_texture_button.png
new file mode 100644
index 0000000000..9c742a903b
--- /dev/null
+++ b/tools/editor/icons/2x/icon_texture_button.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_texture_frame.png b/tools/editor/icons/2x/icon_texture_frame.png
new file mode 100644
index 0000000000..00c8c83844
--- /dev/null
+++ b/tools/editor/icons/2x/icon_texture_frame.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_texture_progress.png b/tools/editor/icons/2x/icon_texture_progress.png
new file mode 100644
index 0000000000..711d778e5c
--- /dev/null
+++ b/tools/editor/icons/2x/icon_texture_progress.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_tile_map.png b/tools/editor/icons/2x/icon_tile_map.png
new file mode 100644
index 0000000000..089c27e2ae
--- /dev/null
+++ b/tools/editor/icons/2x/icon_tile_map.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_timer.png b/tools/editor/icons/2x/icon_timer.png
new file mode 100644
index 0000000000..ff7ce1e0a4
--- /dev/null
+++ b/tools/editor/icons/2x/icon_timer.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_tool_move.png b/tools/editor/icons/2x/icon_tool_move.png
new file mode 100644
index 0000000000..9adec53bc0
--- /dev/null
+++ b/tools/editor/icons/2x/icon_tool_move.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_tool_pan.png b/tools/editor/icons/2x/icon_tool_pan.png
new file mode 100644
index 0000000000..e23f9c9941
--- /dev/null
+++ b/tools/editor/icons/2x/icon_tool_pan.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_tool_rotate.png b/tools/editor/icons/2x/icon_tool_rotate.png
new file mode 100644
index 0000000000..1158caa9e8
--- /dev/null
+++ b/tools/editor/icons/2x/icon_tool_rotate.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_tool_scale.png b/tools/editor/icons/2x/icon_tool_scale.png
new file mode 100644
index 0000000000..ec5f7968be
--- /dev/null
+++ b/tools/editor/icons/2x/icon_tool_scale.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_tool_select.png b/tools/editor/icons/2x/icon_tool_select.png
new file mode 100644
index 0000000000..e863ac455e
--- /dev/null
+++ b/tools/editor/icons/2x/icon_tool_select.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_tools.png b/tools/editor/icons/2x/icon_tools.png
new file mode 100644
index 0000000000..bd6b161c91
--- /dev/null
+++ b/tools/editor/icons/2x/icon_tools.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_touch_screen_button.png b/tools/editor/icons/2x/icon_touch_screen_button.png
new file mode 100644
index 0000000000..66ac0a2f56
--- /dev/null
+++ b/tools/editor/icons/2x/icon_touch_screen_button.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_track_add_key.png b/tools/editor/icons/2x/icon_track_add_key.png
new file mode 100644
index 0000000000..0f816e54b6
--- /dev/null
+++ b/tools/editor/icons/2x/icon_track_add_key.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_track_add_key_hl.png b/tools/editor/icons/2x/icon_track_add_key_hl.png
new file mode 100644
index 0000000000..9e00828926
--- /dev/null
+++ b/tools/editor/icons/2x/icon_track_add_key_hl.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_track_continuous.png b/tools/editor/icons/2x/icon_track_continuous.png
new file mode 100644
index 0000000000..ff9ab8c7d8
--- /dev/null
+++ b/tools/editor/icons/2x/icon_track_continuous.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_track_discrete.png b/tools/editor/icons/2x/icon_track_discrete.png
new file mode 100644
index 0000000000..986b6cf5d5
--- /dev/null
+++ b/tools/editor/icons/2x/icon_track_discrete.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_translation.png b/tools/editor/icons/2x/icon_translation.png
new file mode 100644
index 0000000000..c11e541dc9
--- /dev/null
+++ b/tools/editor/icons/2x/icon_translation.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_transpose.png b/tools/editor/icons/2x/icon_transpose.png
new file mode 100644
index 0000000000..9ce50bc294
--- /dev/null
+++ b/tools/editor/icons/2x/icon_transpose.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_tree.png b/tools/editor/icons/2x/icon_tree.png
new file mode 100644
index 0000000000..00935fca75
--- /dev/null
+++ b/tools/editor/icons/2x/icon_tree.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_tween.png b/tools/editor/icons/2x/icon_tween.png
new file mode 100644
index 0000000000..62a01e819a
--- /dev/null
+++ b/tools/editor/icons/2x/icon_tween.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_unbone.png b/tools/editor/icons/2x/icon_unbone.png
new file mode 100644
index 0000000000..6a44ef681f
--- /dev/null
+++ b/tools/editor/icons/2x/icon_unbone.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_ungroup.png b/tools/editor/icons/2x/icon_ungroup.png
new file mode 100644
index 0000000000..45c039da5a
--- /dev/null
+++ b/tools/editor/icons/2x/icon_ungroup.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_unlock.png b/tools/editor/icons/2x/icon_unlock.png
new file mode 100644
index 0000000000..63c121a507
--- /dev/null
+++ b/tools/editor/icons/2x/icon_unlock.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_uv.png b/tools/editor/icons/2x/icon_uv.png
new file mode 100644
index 0000000000..0403ebbeab
--- /dev/null
+++ b/tools/editor/icons/2x/icon_uv.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_v_box_container.png b/tools/editor/icons/2x/icon_v_box_container.png
new file mode 100644
index 0000000000..2035ffe616
--- /dev/null
+++ b/tools/editor/icons/2x/icon_v_box_container.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_v_button_array.png b/tools/editor/icons/2x/icon_v_button_array.png
new file mode 100644
index 0000000000..fd64203cf3
--- /dev/null
+++ b/tools/editor/icons/2x/icon_v_button_array.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_v_scroll_bar.png b/tools/editor/icons/2x/icon_v_scroll_bar.png
new file mode 100644
index 0000000000..313aab2ee0
--- /dev/null
+++ b/tools/editor/icons/2x/icon_v_scroll_bar.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_v_separator.png b/tools/editor/icons/2x/icon_v_separator.png
new file mode 100644
index 0000000000..2c263cb87b
--- /dev/null
+++ b/tools/editor/icons/2x/icon_v_separator.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_v_slider.png b/tools/editor/icons/2x/icon_v_slider.png
new file mode 100644
index 0000000000..92ff4f1b13
--- /dev/null
+++ b/tools/editor/icons/2x/icon_v_slider.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_v_split_container.png b/tools/editor/icons/2x/icon_v_split_container.png
new file mode 100644
index 0000000000..7b20187e1a
--- /dev/null
+++ b/tools/editor/icons/2x/icon_v_split_container.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_vector.png b/tools/editor/icons/2x/icon_vector.png
new file mode 100644
index 0000000000..89d8827e20
--- /dev/null
+++ b/tools/editor/icons/2x/icon_vector.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_vector2.png b/tools/editor/icons/2x/icon_vector2.png
new file mode 100644
index 0000000000..501735c734
--- /dev/null
+++ b/tools/editor/icons/2x/icon_vector2.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_vehicle_body.png b/tools/editor/icons/2x/icon_vehicle_body.png
new file mode 100644
index 0000000000..2887165e9f
--- /dev/null
+++ b/tools/editor/icons/2x/icon_vehicle_body.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_vehicle_wheel.png b/tools/editor/icons/2x/icon_vehicle_wheel.png
new file mode 100644
index 0000000000..110743b72d
--- /dev/null
+++ b/tools/editor/icons/2x/icon_vehicle_wheel.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_video_player.png b/tools/editor/icons/2x/icon_video_player.png
new file mode 100644
index 0000000000..bc41e46214
--- /dev/null
+++ b/tools/editor/icons/2x/icon_video_player.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_viewport.png b/tools/editor/icons/2x/icon_viewport.png
new file mode 100644
index 0000000000..383e751b20
--- /dev/null
+++ b/tools/editor/icons/2x/icon_viewport.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_viewport_sprite.png b/tools/editor/icons/2x/icon_viewport_sprite.png
new file mode 100644
index 0000000000..75b3155c6e
--- /dev/null
+++ b/tools/editor/icons/2x/icon_viewport_sprite.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_visibility_enabler.png b/tools/editor/icons/2x/icon_visibility_enabler.png
new file mode 100644
index 0000000000..7089cb3a41
--- /dev/null
+++ b/tools/editor/icons/2x/icon_visibility_enabler.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_visibility_enabler_2d.png b/tools/editor/icons/2x/icon_visibility_enabler_2d.png
new file mode 100644
index 0000000000..fd1e8c7cbb
--- /dev/null
+++ b/tools/editor/icons/2x/icon_visibility_enabler_2d.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_visibility_notifier.png b/tools/editor/icons/2x/icon_visibility_notifier.png
new file mode 100644
index 0000000000..293ac223b8
--- /dev/null
+++ b/tools/editor/icons/2x/icon_visibility_notifier.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_visibility_notifier_2d.png b/tools/editor/icons/2x/icon_visibility_notifier_2d.png
new file mode 100644
index 0000000000..3ef01403fe
--- /dev/null
+++ b/tools/editor/icons/2x/icon_visibility_notifier_2d.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_visible.png b/tools/editor/icons/2x/icon_visible.png
new file mode 100644
index 0000000000..b56cf6f3d3
--- /dev/null
+++ b/tools/editor/icons/2x/icon_visible.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_vu_empty.png b/tools/editor/icons/2x/icon_vu_empty.png
new file mode 100644
index 0000000000..54772cf047
--- /dev/null
+++ b/tools/editor/icons/2x/icon_vu_empty.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_vu_full.png b/tools/editor/icons/2x/icon_vu_full.png
new file mode 100644
index 0000000000..caa40539fe
--- /dev/null
+++ b/tools/editor/icons/2x/icon_vu_full.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_warning.png b/tools/editor/icons/2x/icon_warning.png
new file mode 100644
index 0000000000..ba6a7cf957
--- /dev/null
+++ b/tools/editor/icons/2x/icon_warning.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_window_dialog.png b/tools/editor/icons/2x/icon_window_dialog.png
new file mode 100644
index 0000000000..badf721f11
--- /dev/null
+++ b/tools/editor/icons/2x/icon_window_dialog.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_world_environment.png b/tools/editor/icons/2x/icon_world_environment.png
new file mode 100644
index 0000000000..d25e2d5c0d
--- /dev/null
+++ b/tools/editor/icons/2x/icon_world_environment.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_y_sort.png b/tools/editor/icons/2x/icon_y_sort.png
new file mode 100644
index 0000000000..b9845d56dc
--- /dev/null
+++ b/tools/editor/icons/2x/icon_y_sort.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_zoom.png b/tools/editor/icons/2x/icon_zoom.png
new file mode 100644
index 0000000000..88524fa3a6
--- /dev/null
+++ b/tools/editor/icons/2x/icon_zoom.png
Binary files differ
diff --git a/tools/editor/icons/SCsub b/tools/editor/icons/SCsub
index addf6879a2..f3216b092d 100644
--- a/tools/editor/icons/SCsub
+++ b/tools/editor/icons/SCsub
@@ -11,6 +11,7 @@ def make_editor_icons_action(target, source, env):
s = cStringIO.StringIO()
s.write("#include \"editor_icons.h\"\n\n")
+ s.write("#include \"editor_scale.h\"\n\n")
s.write("#include \"scene/resources/theme.h\"\n\n")
for x in pixmaps:
@@ -35,7 +36,9 @@ def make_editor_icons_action(target, source, env):
s.write("static Ref<ImageTexture> make_icon(const uint8_t* p_png) {\n")
s.write("\tRef<ImageTexture> texture( memnew( ImageTexture ) );\n")
- s.write("\ttexture->create_from_image( Image(p_png),ImageTexture::FLAG_FILTER );\n")
+ s.write("\tImage img(p_png);\n")
+ s.write("\tif (editor_is_hidpi()) img.expand_x2_hq2x();\n")
+ s.write("\ttexture->create_from_image( img,ImageTexture::FLAG_FILTER );\n")
s.write("\treturn texture;\n")
s.write("}\n\n")
diff --git a/tools/editor/icons/icon_accept_dialog.png b/tools/editor/icons/icon_accept_dialog.png
index 4c9b558a69..a6528ce34a 100644
--- a/tools/editor/icons/icon_accept_dialog.png
+++ b/tools/editor/icons/icon_accept_dialog.png
Binary files differ
diff --git a/tools/editor/icons/icon_add.png b/tools/editor/icons/icon_add.png
index 26283ca67c..0f37ecadb0 100644
--- a/tools/editor/icons/icon_add.png
+++ b/tools/editor/icons/icon_add.png
Binary files differ
diff --git a/tools/editor/icons/icon_add_track.png b/tools/editor/icons/icon_add_track.png
index 6a90950173..0f37ecadb0 100644
--- a/tools/editor/icons/icon_add_track.png
+++ b/tools/editor/icons/icon_add_track.png
Binary files differ
diff --git a/tools/editor/icons/icon_anchor.png b/tools/editor/icons/icon_anchor.png
index 1f9f9fa139..173ba61cf8 100644
--- a/tools/editor/icons/icon_anchor.png
+++ b/tools/editor/icons/icon_anchor.png
Binary files differ
diff --git a/tools/editor/icons/icon_animated_sprite.png b/tools/editor/icons/icon_animated_sprite.png
index 2b1bad861f..58d8652a14 100644
--- a/tools/editor/icons/icon_animated_sprite.png
+++ b/tools/editor/icons/icon_animated_sprite.png
Binary files differ
diff --git a/tools/editor/icons/icon_animated_sprite_3d.png b/tools/editor/icons/icon_animated_sprite_3d.png
index 19aa7ea207..8a54560181 100644
--- a/tools/editor/icons/icon_animated_sprite_3d.png
+++ b/tools/editor/icons/icon_animated_sprite_3d.png
Binary files differ
diff --git a/tools/editor/icons/icon_animation.png b/tools/editor/icons/icon_animation.png
index ac663c0554..ff42602723 100644
--- a/tools/editor/icons/icon_animation.png
+++ b/tools/editor/icons/icon_animation.png
Binary files differ
diff --git a/tools/editor/icons/icon_animation_player.png b/tools/editor/icons/icon_animation_player.png
index 2afba491ef..16e3959bd5 100644
--- a/tools/editor/icons/icon_animation_player.png
+++ b/tools/editor/icons/icon_animation_player.png
Binary files differ
diff --git a/tools/editor/icons/icon_animation_tree.png b/tools/editor/icons/icon_animation_tree.png
index cc29de17a5..4b09b67549 100644
--- a/tools/editor/icons/icon_animation_tree.png
+++ b/tools/editor/icons/icon_animation_tree.png
Binary files differ
diff --git a/tools/editor/icons/icon_animation_tree_player.png b/tools/editor/icons/icon_animation_tree_player.png
index a0698ab622..4b09b67549 100644
--- a/tools/editor/icons/icon_animation_tree_player.png
+++ b/tools/editor/icons/icon_animation_tree_player.png
Binary files differ
diff --git a/tools/editor/icons/icon_area.png b/tools/editor/icons/icon_area.png
index 17dc436cab..59ac99548a 100644
--- a/tools/editor/icons/icon_area.png
+++ b/tools/editor/icons/icon_area.png
Binary files differ
diff --git a/tools/editor/icons/icon_area_2d.png b/tools/editor/icons/icon_area_2d.png
index 34f576fff5..81df39f597 100644
--- a/tools/editor/icons/icon_area_2d.png
+++ b/tools/editor/icons/icon_area_2d.png
Binary files differ
diff --git a/tools/editor/icons/icon_arrow_left.png b/tools/editor/icons/icon_arrow_left.png
index b72ac2a10d..95238a3c0a 100644
--- a/tools/editor/icons/icon_arrow_left.png
+++ b/tools/editor/icons/icon_arrow_left.png
Binary files differ
diff --git a/tools/editor/icons/icon_arrow_right.png b/tools/editor/icons/icon_arrow_right.png
index d0a48b01ac..b3db42490f 100644
--- a/tools/editor/icons/icon_arrow_right.png
+++ b/tools/editor/icons/icon_arrow_right.png
Binary files differ
diff --git a/tools/editor/icons/icon_arrow_up.png b/tools/editor/icons/icon_arrow_up.png
index 10aac0e0f6..2e907641b5 100644
--- a/tools/editor/icons/icon_arrow_up.png
+++ b/tools/editor/icons/icon_arrow_up.png
Binary files differ
diff --git a/tools/editor/icons/icon_atlas_texture.png b/tools/editor/icons/icon_atlas_texture.png
index 0051b0cda4..f0bd47fba7 100644
--- a/tools/editor/icons/icon_atlas_texture.png
+++ b/tools/editor/icons/icon_atlas_texture.png
Binary files differ
diff --git a/tools/editor/icons/icon_audio_stream_gibberish.png b/tools/editor/icons/icon_audio_stream_gibberish.png
index 95470c298e..776296b136 100644
--- a/tools/editor/icons/icon_audio_stream_gibberish.png
+++ b/tools/editor/icons/icon_audio_stream_gibberish.png
Binary files differ
diff --git a/tools/editor/icons/icon_auto_play.png b/tools/editor/icons/icon_auto_play.png
index 1d5c957cc7..4467191f47 100644
--- a/tools/editor/icons/icon_auto_play.png
+++ b/tools/editor/icons/icon_auto_play.png
Binary files differ
diff --git a/tools/editor/icons/icon_back.png b/tools/editor/icons/icon_back.png
index f7e507d92b..b0ce0d086d 100644
--- a/tools/editor/icons/icon_back.png
+++ b/tools/editor/icons/icon_back.png
Binary files differ
diff --git a/tools/editor/icons/icon_back_buffer_copy.png b/tools/editor/icons/icon_back_buffer_copy.png
index b27eb39108..5a551b399f 100644
--- a/tools/editor/icons/icon_back_buffer_copy.png
+++ b/tools/editor/icons/icon_back_buffer_copy.png
Binary files differ
diff --git a/tools/editor/icons/icon_bake.png b/tools/editor/icons/icon_bake.png
index ae06ce48e6..3316ec5591 100644
--- a/tools/editor/icons/icon_bake.png
+++ b/tools/editor/icons/icon_bake.png
Binary files differ
diff --git a/tools/editor/icons/icon_baked_light.png b/tools/editor/icons/icon_baked_light.png
index 48039e264c..3316ec5591 100644
--- a/tools/editor/icons/icon_baked_light.png
+++ b/tools/editor/icons/icon_baked_light.png
Binary files differ
diff --git a/tools/editor/icons/icon_baked_light_instance.png b/tools/editor/icons/icon_baked_light_instance.png
index 77e53aa8f6..485bcc8e0d 100644
--- a/tools/editor/icons/icon_baked_light_instance.png
+++ b/tools/editor/icons/icon_baked_light_instance.png
Binary files differ
diff --git a/tools/editor/icons/icon_bitmap_font.png b/tools/editor/icons/icon_bitmap_font.png
index 45de2b0f0a..b578ca2ab4 100644
--- a/tools/editor/icons/icon_bitmap_font.png
+++ b/tools/editor/icons/icon_bitmap_font.png
Binary files differ
diff --git a/tools/editor/icons/icon_blend.png b/tools/editor/icons/icon_blend.png
index 2a75f0b2f4..a4b1232590 100644
--- a/tools/editor/icons/icon_blend.png
+++ b/tools/editor/icons/icon_blend.png
Binary files differ
diff --git a/tools/editor/icons/icon_bone.png b/tools/editor/icons/icon_bone.png
index 81b6d8856e..49cba1bdac 100644
--- a/tools/editor/icons/icon_bone.png
+++ b/tools/editor/icons/icon_bone.png
Binary files differ
diff --git a/tools/editor/icons/icon_bone_attachment.png b/tools/editor/icons/icon_bone_attachment.png
index 0d1d69f21f..0fa9dade42 100644
--- a/tools/editor/icons/icon_bone_attachment.png
+++ b/tools/editor/icons/icon_bone_attachment.png
Binary files differ
diff --git a/tools/editor/icons/icon_bone_track.png b/tools/editor/icons/icon_bone_track.png
index 9916112069..9b4a42a1d2 100644
--- a/tools/editor/icons/icon_bone_track.png
+++ b/tools/editor/icons/icon_bone_track.png
Binary files differ
diff --git a/tools/editor/icons/icon_bool.png b/tools/editor/icons/icon_bool.png
index 80b3a9deb7..9a22cd4750 100644
--- a/tools/editor/icons/icon_bool.png
+++ b/tools/editor/icons/icon_bool.png
Binary files differ
diff --git a/tools/editor/icons/icon_box_shape.png b/tools/editor/icons/icon_box_shape.png
index 69c1fb2184..b888dfe39d 100644
--- a/tools/editor/icons/icon_box_shape.png
+++ b/tools/editor/icons/icon_box_shape.png
Binary files differ
diff --git a/tools/editor/icons/icon_button.png b/tools/editor/icons/icon_button.png
index 296b508719..063c50ba43 100644
--- a/tools/editor/icons/icon_button.png
+++ b/tools/editor/icons/icon_button.png
Binary files differ
diff --git a/tools/editor/icons/icon_button_group.png b/tools/editor/icons/icon_button_group.png
new file mode 100644
index 0000000000..2a42396fc1
--- /dev/null
+++ b/tools/editor/icons/icon_button_group.png
Binary files differ
diff --git a/tools/editor/icons/icon_camera.png b/tools/editor/icons/icon_camera.png
index 6dce543162..fe9ebd4162 100644
--- a/tools/editor/icons/icon_camera.png
+++ b/tools/editor/icons/icon_camera.png
Binary files differ
diff --git a/tools/editor/icons/icon_camera_2d.png b/tools/editor/icons/icon_camera_2d.png
index fe278fe15b..c04e14e960 100644
--- a/tools/editor/icons/icon_camera_2d.png
+++ b/tools/editor/icons/icon_camera_2d.png
Binary files differ
diff --git a/tools/editor/icons/icon_canvas_item.png b/tools/editor/icons/icon_canvas_item.png
index add54ba1af..6951ac07ed 100644
--- a/tools/editor/icons/icon_canvas_item.png
+++ b/tools/editor/icons/icon_canvas_item.png
Binary files differ
diff --git a/tools/editor/icons/icon_canvas_item_material.png b/tools/editor/icons/icon_canvas_item_material.png
index 2fe8921653..42e919cc60 100644
--- a/tools/editor/icons/icon_canvas_item_material.png
+++ b/tools/editor/icons/icon_canvas_item_material.png
Binary files differ
diff --git a/tools/editor/icons/icon_canvas_item_shader.png b/tools/editor/icons/icon_canvas_item_shader.png
index a5f4e7bf85..9d7595207f 100644
--- a/tools/editor/icons/icon_canvas_item_shader.png
+++ b/tools/editor/icons/icon_canvas_item_shader.png
Binary files differ
diff --git a/tools/editor/icons/icon_canvas_item_shader_graph.png b/tools/editor/icons/icon_canvas_item_shader_graph.png
index bba966b43e..b9ebe7b028 100644
--- a/tools/editor/icons/icon_canvas_item_shader_graph.png
+++ b/tools/editor/icons/icon_canvas_item_shader_graph.png
Binary files differ
diff --git a/tools/editor/icons/icon_canvas_layer.png b/tools/editor/icons/icon_canvas_layer.png
new file mode 100644
index 0000000000..13450c4062
--- /dev/null
+++ b/tools/editor/icons/icon_canvas_layer.png
Binary files differ
diff --git a/tools/editor/icons/icon_canvas_modulate.png b/tools/editor/icons/icon_canvas_modulate.png
index 2a34df7793..e287f26877 100644
--- a/tools/editor/icons/icon_canvas_modulate.png
+++ b/tools/editor/icons/icon_canvas_modulate.png
Binary files differ
diff --git a/tools/editor/icons/icon_capsule_shape.png b/tools/editor/icons/icon_capsule_shape.png
index 6e6de12a8f..0c2b2f6bd2 100644
--- a/tools/editor/icons/icon_capsule_shape.png
+++ b/tools/editor/icons/icon_capsule_shape.png
Binary files differ
diff --git a/tools/editor/icons/icon_center_container.png b/tools/editor/icons/icon_center_container.png
index fd5be79559..776f34239a 100644
--- a/tools/editor/icons/icon_center_container.png
+++ b/tools/editor/icons/icon_center_container.png
Binary files differ
diff --git a/tools/editor/icons/icon_check_box.png b/tools/editor/icons/icon_check_box.png
index 8a2b56cc3e..3de79825de 100644
--- a/tools/editor/icons/icon_check_box.png
+++ b/tools/editor/icons/icon_check_box.png
Binary files differ
diff --git a/tools/editor/icons/icon_check_button.png b/tools/editor/icons/icon_check_button.png
index 9b44e6714f..f80454aa48 100644
--- a/tools/editor/icons/icon_check_button.png
+++ b/tools/editor/icons/icon_check_button.png
Binary files differ
diff --git a/tools/editor/icons/icon_checkerboard.png b/tools/editor/icons/icon_checkerboard.png
new file mode 100644
index 0000000000..5f658c765e
--- /dev/null
+++ b/tools/editor/icons/icon_checkerboard.png
Binary files differ
diff --git a/tools/editor/icons/icon_class_list.png b/tools/editor/icons/icon_class_list.png
index fb756c0fe1..523a675fc1 100644
--- a/tools/editor/icons/icon_class_list.png
+++ b/tools/editor/icons/icon_class_list.png
Binary files differ
diff --git a/tools/editor/icons/icon_close.png b/tools/editor/icons/icon_close.png
index 10e56d5bb8..b9736cd52d 100644
--- a/tools/editor/icons/icon_close.png
+++ b/tools/editor/icons/icon_close.png
Binary files differ
diff --git a/tools/editor/icons/icon_collapse.png b/tools/editor/icons/icon_collapse.png
index 23db9e42a7..bdb1ae960b 100644
--- a/tools/editor/icons/icon_collapse.png
+++ b/tools/editor/icons/icon_collapse.png
Binary files differ
diff --git a/tools/editor/icons/icon_collision_2d.png b/tools/editor/icons/icon_collision_2d.png
index f195569753..57c1453cc4 100644
--- a/tools/editor/icons/icon_collision_2d.png
+++ b/tools/editor/icons/icon_collision_2d.png
Binary files differ
diff --git a/tools/editor/icons/icon_collision_polygon.png b/tools/editor/icons/icon_collision_polygon.png
index a82b43589e..a5b527fcc6 100644
--- a/tools/editor/icons/icon_collision_polygon.png
+++ b/tools/editor/icons/icon_collision_polygon.png
Binary files differ
diff --git a/tools/editor/icons/icon_collision_polygon_2d.png b/tools/editor/icons/icon_collision_polygon_2d.png
index 9f89e10b01..57c1453cc4 100644
--- a/tools/editor/icons/icon_collision_polygon_2d.png
+++ b/tools/editor/icons/icon_collision_polygon_2d.png
Binary files differ
diff --git a/tools/editor/icons/icon_collision_shape.png b/tools/editor/icons/icon_collision_shape.png
index 8389885e0c..68f1d2b0b4 100644
--- a/tools/editor/icons/icon_collision_shape.png
+++ b/tools/editor/icons/icon_collision_shape.png
Binary files differ
diff --git a/tools/editor/icons/icon_collision_shape_2d.png b/tools/editor/icons/icon_collision_shape_2d.png
index 4c60513e75..929b1b1150 100644
--- a/tools/editor/icons/icon_collision_shape_2d.png
+++ b/tools/editor/icons/icon_collision_shape_2d.png
Binary files differ
diff --git a/tools/editor/icons/icon_color.png b/tools/editor/icons/icon_color.png
index 3ab87c98ea..14d7278846 100644
--- a/tools/editor/icons/icon_color.png
+++ b/tools/editor/icons/icon_color.png
Binary files differ
diff --git a/tools/editor/icons/icon_color_pick.png b/tools/editor/icons/icon_color_pick.png
new file mode 100644
index 0000000000..d40a8d4795
--- /dev/null
+++ b/tools/editor/icons/icon_color_pick.png
Binary files differ
diff --git a/tools/editor/icons/icon_color_picker.png b/tools/editor/icons/icon_color_picker.png
index 3a7510d201..67cba9e085 100644
--- a/tools/editor/icons/icon_color_picker.png
+++ b/tools/editor/icons/icon_color_picker.png
Binary files differ
diff --git a/tools/editor/icons/icon_color_picker_button.png b/tools/editor/icons/icon_color_picker_button.png
index f441c4f18b..27f6b24282 100644
--- a/tools/editor/icons/icon_color_picker_button.png
+++ b/tools/editor/icons/icon_color_picker_button.png
Binary files differ
diff --git a/tools/editor/icons/icon_color_ramp.png b/tools/editor/icons/icon_color_ramp.png
index 9031b5ec53..f5fbda6d21 100644
--- a/tools/editor/icons/icon_color_ramp.png
+++ b/tools/editor/icons/icon_color_ramp.png
Binary files differ
diff --git a/tools/editor/icons/icon_concave_polygon_shape.png b/tools/editor/icons/icon_concave_polygon_shape.png
index 1a3b52ccce..6c0832f700 100644
--- a/tools/editor/icons/icon_concave_polygon_shape.png
+++ b/tools/editor/icons/icon_concave_polygon_shape.png
Binary files differ
diff --git a/tools/editor/icons/icon_confirmation_dialog.png b/tools/editor/icons/icon_confirmation_dialog.png
index 024ffaff19..ed3b3c1f08 100644
--- a/tools/editor/icons/icon_confirmation_dialog.png
+++ b/tools/editor/icons/icon_confirmation_dialog.png
Binary files differ
diff --git a/tools/editor/icons/icon_connect.png b/tools/editor/icons/icon_connect.png
index 745e445a61..36b52f1b4a 100644
--- a/tools/editor/icons/icon_connect.png
+++ b/tools/editor/icons/icon_connect.png
Binary files differ
diff --git a/tools/editor/icons/icon_connection_and_groups.png b/tools/editor/icons/icon_connection_and_groups.png
new file mode 100644
index 0000000000..c32ddc2ae6
--- /dev/null
+++ b/tools/editor/icons/icon_connection_and_groups.png
Binary files differ
diff --git a/tools/editor/icons/icon_container.png b/tools/editor/icons/icon_container.png
new file mode 100644
index 0000000000..31985c5b46
--- /dev/null
+++ b/tools/editor/icons/icon_container.png
Binary files differ
diff --git a/tools/editor/icons/icon_control.png b/tools/editor/icons/icon_control.png
index 23e4ee6191..cef5961f05 100644
--- a/tools/editor/icons/icon_control.png
+++ b/tools/editor/icons/icon_control.png
Binary files differ
diff --git a/tools/editor/icons/icon_control_align_bottom_center.png b/tools/editor/icons/icon_control_align_bottom_center.png
index 5ce9fe5c1c..fb18804db8 100644
--- a/tools/editor/icons/icon_control_align_bottom_center.png
+++ b/tools/editor/icons/icon_control_align_bottom_center.png
Binary files differ
diff --git a/tools/editor/icons/icon_control_align_bottom_left.png b/tools/editor/icons/icon_control_align_bottom_left.png
index 6c5129bf95..d0b4bed896 100644
--- a/tools/editor/icons/icon_control_align_bottom_left.png
+++ b/tools/editor/icons/icon_control_align_bottom_left.png
Binary files differ
diff --git a/tools/editor/icons/icon_control_align_bottom_right.png b/tools/editor/icons/icon_control_align_bottom_right.png
index 8857f4e940..e098493415 100644
--- a/tools/editor/icons/icon_control_align_bottom_right.png
+++ b/tools/editor/icons/icon_control_align_bottom_right.png
Binary files differ
diff --git a/tools/editor/icons/icon_control_align_bottom_wide.png b/tools/editor/icons/icon_control_align_bottom_wide.png
index 56f009b8e4..44f5405737 100644
--- a/tools/editor/icons/icon_control_align_bottom_wide.png
+++ b/tools/editor/icons/icon_control_align_bottom_wide.png
Binary files differ
diff --git a/tools/editor/icons/icon_control_align_center.png b/tools/editor/icons/icon_control_align_center.png
index acd42525fa..4156db40fd 100644
--- a/tools/editor/icons/icon_control_align_center.png
+++ b/tools/editor/icons/icon_control_align_center.png
Binary files differ
diff --git a/tools/editor/icons/icon_control_align_center_left.png b/tools/editor/icons/icon_control_align_center_left.png
index 997074b097..b8d527e27a 100644
--- a/tools/editor/icons/icon_control_align_center_left.png
+++ b/tools/editor/icons/icon_control_align_center_left.png
Binary files differ
diff --git a/tools/editor/icons/icon_control_align_center_right.png b/tools/editor/icons/icon_control_align_center_right.png
index b5cae63f7a..251fbcd314 100644
--- a/tools/editor/icons/icon_control_align_center_right.png
+++ b/tools/editor/icons/icon_control_align_center_right.png
Binary files differ
diff --git a/tools/editor/icons/icon_control_align_left_center.png b/tools/editor/icons/icon_control_align_left_center.png
index 7bb4dfb567..d22cff3f18 100644
--- a/tools/editor/icons/icon_control_align_left_center.png
+++ b/tools/editor/icons/icon_control_align_left_center.png
Binary files differ
diff --git a/tools/editor/icons/icon_control_align_left_wide.png b/tools/editor/icons/icon_control_align_left_wide.png
index 1b0a6cff95..f95b8ead02 100644
--- a/tools/editor/icons/icon_control_align_left_wide.png
+++ b/tools/editor/icons/icon_control_align_left_wide.png
Binary files differ
diff --git a/tools/editor/icons/icon_control_align_right_center.png b/tools/editor/icons/icon_control_align_right_center.png
index cf12d44c6a..4fc5a34b79 100644
--- a/tools/editor/icons/icon_control_align_right_center.png
+++ b/tools/editor/icons/icon_control_align_right_center.png
Binary files differ
diff --git a/tools/editor/icons/icon_control_align_right_wide.png b/tools/editor/icons/icon_control_align_right_wide.png
index 406ed25aed..a21b7da5d5 100644
--- a/tools/editor/icons/icon_control_align_right_wide.png
+++ b/tools/editor/icons/icon_control_align_right_wide.png
Binary files differ
diff --git a/tools/editor/icons/icon_control_align_top_center.png b/tools/editor/icons/icon_control_align_top_center.png
index da7ede984a..afe8936d68 100644
--- a/tools/editor/icons/icon_control_align_top_center.png
+++ b/tools/editor/icons/icon_control_align_top_center.png
Binary files differ
diff --git a/tools/editor/icons/icon_control_align_top_left.png b/tools/editor/icons/icon_control_align_top_left.png
index 84a224fbbe..45153eec41 100644
--- a/tools/editor/icons/icon_control_align_top_left.png
+++ b/tools/editor/icons/icon_control_align_top_left.png
Binary files differ
diff --git a/tools/editor/icons/icon_control_align_top_right.png b/tools/editor/icons/icon_control_align_top_right.png
index 3b58eead9c..4aaa97f392 100644
--- a/tools/editor/icons/icon_control_align_top_right.png
+++ b/tools/editor/icons/icon_control_align_top_right.png
Binary files differ
diff --git a/tools/editor/icons/icon_control_align_top_wide.png b/tools/editor/icons/icon_control_align_top_wide.png
index 869ae26134..79e2bb98b0 100644
--- a/tools/editor/icons/icon_control_align_top_wide.png
+++ b/tools/editor/icons/icon_control_align_top_wide.png
Binary files differ
diff --git a/tools/editor/icons/icon_control_align_wide.png b/tools/editor/icons/icon_control_align_wide.png
index 57a2933b25..603d0c1b0b 100644
--- a/tools/editor/icons/icon_control_align_wide.png
+++ b/tools/editor/icons/icon_control_align_wide.png
Binary files differ
diff --git a/tools/editor/icons/icon_control_hcenter_wide.png b/tools/editor/icons/icon_control_hcenter_wide.png
index 739ea5baeb..f147cc7562 100644
--- a/tools/editor/icons/icon_control_hcenter_wide.png
+++ b/tools/editor/icons/icon_control_hcenter_wide.png
Binary files differ
diff --git a/tools/editor/icons/icon_control_vcenter_wide.png b/tools/editor/icons/icon_control_vcenter_wide.png
index 44cbb8f344..aef4f094db 100644
--- a/tools/editor/icons/icon_control_vcenter_wide.png
+++ b/tools/editor/icons/icon_control_vcenter_wide.png
Binary files differ
diff --git a/tools/editor/icons/icon_convex_polygon_shape.png b/tools/editor/icons/icon_convex_polygon_shape.png
index 1f2e1bf2a8..91a270e3b5 100644
--- a/tools/editor/icons/icon_convex_polygon_shape.png
+++ b/tools/editor/icons/icon_convex_polygon_shape.png
Binary files differ
diff --git a/tools/editor/icons/icon_create_new_scene_from.png b/tools/editor/icons/icon_create_new_scene_from.png
index e747c4f59f..dadc09af95 100644
--- a/tools/editor/icons/icon_create_new_scene_from.png
+++ b/tools/editor/icons/icon_create_new_scene_from.png
Binary files differ
diff --git a/tools/editor/icons/icon_curve_close.png b/tools/editor/icons/icon_curve_close.png
index 9ee92badba..cd89dc74dd 100644
--- a/tools/editor/icons/icon_curve_close.png
+++ b/tools/editor/icons/icon_curve_close.png
Binary files differ
diff --git a/tools/editor/icons/icon_curve_constant.png b/tools/editor/icons/icon_curve_constant.png
index cdeac1785e..507f25ff58 100644
--- a/tools/editor/icons/icon_curve_constant.png
+++ b/tools/editor/icons/icon_curve_constant.png
Binary files differ
diff --git a/tools/editor/icons/icon_curve_create.png b/tools/editor/icons/icon_curve_create.png
index 61f785c704..073726b0db 100644
--- a/tools/editor/icons/icon_curve_create.png
+++ b/tools/editor/icons/icon_curve_create.png
Binary files differ
diff --git a/tools/editor/icons/icon_curve_curve.png b/tools/editor/icons/icon_curve_curve.png
index 52625a3438..816d2bdb1c 100644
--- a/tools/editor/icons/icon_curve_curve.png
+++ b/tools/editor/icons/icon_curve_curve.png
Binary files differ
diff --git a/tools/editor/icons/icon_curve_delete.png b/tools/editor/icons/icon_curve_delete.png
index 8d3b1ec1f8..f6083e7edd 100644
--- a/tools/editor/icons/icon_curve_delete.png
+++ b/tools/editor/icons/icon_curve_delete.png
Binary files differ
diff --git a/tools/editor/icons/icon_curve_edit.png b/tools/editor/icons/icon_curve_edit.png
index 0c50f586c7..3bdc558948 100644
--- a/tools/editor/icons/icon_curve_edit.png
+++ b/tools/editor/icons/icon_curve_edit.png
Binary files differ
diff --git a/tools/editor/icons/icon_curve_in.png b/tools/editor/icons/icon_curve_in.png
index 2db202632e..bc63a3e04b 100644
--- a/tools/editor/icons/icon_curve_in.png
+++ b/tools/editor/icons/icon_curve_in.png
Binary files differ
diff --git a/tools/editor/icons/icon_curve_in_out.png b/tools/editor/icons/icon_curve_in_out.png
index f4cb593496..594d3410c4 100644
--- a/tools/editor/icons/icon_curve_in_out.png
+++ b/tools/editor/icons/icon_curve_in_out.png
Binary files differ
diff --git a/tools/editor/icons/icon_curve_linear.png b/tools/editor/icons/icon_curve_linear.png
index 9467dc97a3..22854cf09b 100644
--- a/tools/editor/icons/icon_curve_linear.png
+++ b/tools/editor/icons/icon_curve_linear.png
Binary files differ
diff --git a/tools/editor/icons/icon_curve_out.png b/tools/editor/icons/icon_curve_out.png
index c91ade6f4a..5030c9a688 100644
--- a/tools/editor/icons/icon_curve_out.png
+++ b/tools/editor/icons/icon_curve_out.png
Binary files differ
diff --git a/tools/editor/icons/icon_curve_out_in.png b/tools/editor/icons/icon_curve_out_in.png
index 6499fa753e..0fff9104e9 100644
--- a/tools/editor/icons/icon_curve_out_in.png
+++ b/tools/editor/icons/icon_curve_out_in.png
Binary files differ
diff --git a/tools/editor/icons/icon_damped_spring_joint_2d.png b/tools/editor/icons/icon_damped_spring_joint_2d.png
index 8a56e8b1ed..4daca03751 100644
--- a/tools/editor/icons/icon_damped_spring_joint_2d.png
+++ b/tools/editor/icons/icon_damped_spring_joint_2d.png
Binary files differ
diff --git a/tools/editor/icons/icon_debug_continue.png b/tools/editor/icons/icon_debug_continue.png
index 83b06210fb..ba05f3bd6e 100644
--- a/tools/editor/icons/icon_debug_continue.png
+++ b/tools/editor/icons/icon_debug_continue.png
Binary files differ
diff --git a/tools/editor/icons/icon_debug_next.png b/tools/editor/icons/icon_debug_next.png
index 3eadd7517a..671cce15e7 100644
--- a/tools/editor/icons/icon_debug_next.png
+++ b/tools/editor/icons/icon_debug_next.png
Binary files differ
diff --git a/tools/editor/icons/icon_debug_step.png b/tools/editor/icons/icon_debug_step.png
index 8d3a69ae85..14e10b7390 100644
--- a/tools/editor/icons/icon_debug_step.png
+++ b/tools/editor/icons/icon_debug_step.png
Binary files differ
diff --git a/tools/editor/icons/icon_dependency_changed.png b/tools/editor/icons/icon_dependency_changed.png
index ecf8a011cf..78aedd4019 100644
--- a/tools/editor/icons/icon_dependency_changed.png
+++ b/tools/editor/icons/icon_dependency_changed.png
Binary files differ
diff --git a/tools/editor/icons/icon_dependency_changed_hl.png b/tools/editor/icons/icon_dependency_changed_hl.png
index a5e6adfe56..838f5740b0 100644
--- a/tools/editor/icons/icon_dependency_changed_hl.png
+++ b/tools/editor/icons/icon_dependency_changed_hl.png
Binary files differ
diff --git a/tools/editor/icons/icon_dependency_local_changed.png b/tools/editor/icons/icon_dependency_local_changed.png
index 8630f36450..f5db031c19 100644
--- a/tools/editor/icons/icon_dependency_local_changed.png
+++ b/tools/editor/icons/icon_dependency_local_changed.png
Binary files differ
diff --git a/tools/editor/icons/icon_dependency_local_changed_hl.png b/tools/editor/icons/icon_dependency_local_changed_hl.png
index 825b047ca6..68f0e1ab7d 100644
--- a/tools/editor/icons/icon_dependency_local_changed_hl.png
+++ b/tools/editor/icons/icon_dependency_local_changed_hl.png
Binary files differ
diff --git a/tools/editor/icons/icon_dependency_ok.png b/tools/editor/icons/icon_dependency_ok.png
index f4d4c9ea29..c2f62c0b00 100644
--- a/tools/editor/icons/icon_dependency_ok.png
+++ b/tools/editor/icons/icon_dependency_ok.png
Binary files differ
diff --git a/tools/editor/icons/icon_dependency_ok_hl.png b/tools/editor/icons/icon_dependency_ok_hl.png
index d590bb763d..956617c923 100644
--- a/tools/editor/icons/icon_dependency_ok_hl.png
+++ b/tools/editor/icons/icon_dependency_ok_hl.png
Binary files differ
diff --git a/tools/editor/icons/icon_directional_light.png b/tools/editor/icons/icon_directional_light.png
index 766f5934e6..9ff67750e3 100644
--- a/tools/editor/icons/icon_directional_light.png
+++ b/tools/editor/icons/icon_directional_light.png
Binary files differ
diff --git a/tools/editor/icons/icon_down.png b/tools/editor/icons/icon_down.png
index 908e06836b..d2fcdb4c9f 100644
--- a/tools/editor/icons/icon_down.png
+++ b/tools/editor/icons/icon_down.png
Binary files differ
diff --git a/tools/editor/icons/icon_duplicate.png b/tools/editor/icons/icon_duplicate.png
index f854a14fd3..1742586414 100644
--- a/tools/editor/icons/icon_duplicate.png
+++ b/tools/editor/icons/icon_duplicate.png
Binary files differ
diff --git a/tools/editor/icons/icon_dynamic_font.png b/tools/editor/icons/icon_dynamic_font.png
index 52b423f75b..223d66921e 100644
--- a/tools/editor/icons/icon_dynamic_font.png
+++ b/tools/editor/icons/icon_dynamic_font.png
Binary files differ
diff --git a/tools/editor/icons/icon_dynamic_font_data.png b/tools/editor/icons/icon_dynamic_font_data.png
index 568349e4db..f99a0ddc52 100644
--- a/tools/editor/icons/icon_dynamic_font_data.png
+++ b/tools/editor/icons/icon_dynamic_font_data.png
Binary files differ
diff --git a/tools/editor/icons/icon_edit.png b/tools/editor/icons/icon_edit.png
index 157f785b83..e29a543dae 100644
--- a/tools/editor/icons/icon_edit.png
+++ b/tools/editor/icons/icon_edit.png
Binary files differ
diff --git a/tools/editor/icons/icon_edit_key.png b/tools/editor/icons/icon_edit_key.png
index 9ab1287fc6..d6743bc127 100644
--- a/tools/editor/icons/icon_edit_key.png
+++ b/tools/editor/icons/icon_edit_key.png
Binary files differ
diff --git a/tools/editor/icons/icon_edit_pivot.png b/tools/editor/icons/icon_edit_pivot.png
index d68f7bbf25..772e28d849 100644
--- a/tools/editor/icons/icon_edit_pivot.png
+++ b/tools/editor/icons/icon_edit_pivot.png
Binary files differ
diff --git a/tools/editor/icons/icon_edit_resource.png b/tools/editor/icons/icon_edit_resource.png
index 31d0c68fc6..890c6758be 100644
--- a/tools/editor/icons/icon_edit_resource.png
+++ b/tools/editor/icons/icon_edit_resource.png
Binary files differ
diff --git a/tools/editor/icons/icon_editor_3d_handle.png b/tools/editor/icons/icon_editor_3d_handle.png
index 7af2c734e3..f52b53f53a 100644
--- a/tools/editor/icons/icon_editor_3d_handle.png
+++ b/tools/editor/icons/icon_editor_3d_handle.png
Binary files differ
diff --git a/tools/editor/icons/icon_editor_handle.png b/tools/editor/icons/icon_editor_handle.png
index a562f9b34c..0acfdf4a1d 100644
--- a/tools/editor/icons/icon_editor_handle.png
+++ b/tools/editor/icons/icon_editor_handle.png
Binary files differ
diff --git a/tools/editor/icons/icon_editor_pivot.png b/tools/editor/icons/icon_editor_pivot.png
index d44526f301..f653c3903f 100644
--- a/tools/editor/icons/icon_editor_pivot.png
+++ b/tools/editor/icons/icon_editor_pivot.png
Binary files differ
diff --git a/tools/editor/icons/icon_editor_plugin.png b/tools/editor/icons/icon_editor_plugin.png
new file mode 100644
index 0000000000..fd1405602c
--- /dev/null
+++ b/tools/editor/icons/icon_editor_plugin.png
Binary files differ
diff --git a/tools/editor/icons/icon_enum.png b/tools/editor/icons/icon_enum.png
index ac36c96e28..415857f3c5 100644
--- a/tools/editor/icons/icon_enum.png
+++ b/tools/editor/icons/icon_enum.png
Binary files differ
diff --git a/tools/editor/icons/icon_error.png b/tools/editor/icons/icon_error.png
index 6c4e78e480..f3c09dbfba 100644
--- a/tools/editor/icons/icon_error.png
+++ b/tools/editor/icons/icon_error.png
Binary files differ
diff --git a/tools/editor/icons/icon_error_sign.png b/tools/editor/icons/icon_error_sign.png
index 751175e74d..1846965756 100644
--- a/tools/editor/icons/icon_error_sign.png
+++ b/tools/editor/icons/icon_error_sign.png
Binary files differ
diff --git a/tools/editor/icons/icon_event_player.png b/tools/editor/icons/icon_event_player.png
index 68646b3dfe..43cd63c292 100644
--- a/tools/editor/icons/icon_event_player.png
+++ b/tools/editor/icons/icon_event_player.png
Binary files differ
diff --git a/tools/editor/icons/icon_favorites.png b/tools/editor/icons/icon_favorites.png
index 4a3b575f95..890d25f4fc 100644
--- a/tools/editor/icons/icon_favorites.png
+++ b/tools/editor/icons/icon_favorites.png
Binary files differ
diff --git a/tools/editor/icons/icon_file.png b/tools/editor/icons/icon_file.png
index bd5d84a9d6..5407b500cc 100644
--- a/tools/editor/icons/icon_file.png
+++ b/tools/editor/icons/icon_file.png
Binary files differ
diff --git a/tools/editor/icons/icon_file_big.png b/tools/editor/icons/icon_file_big.png
index 887a4ee05c..9680f601fe 100644
--- a/tools/editor/icons/icon_file_big.png
+++ b/tools/editor/icons/icon_file_big.png
Binary files differ
diff --git a/tools/editor/icons/icon_file_dialog.png b/tools/editor/icons/icon_file_dialog.png
index 62ad0404eb..5e9ef64420 100644
--- a/tools/editor/icons/icon_file_dialog.png
+++ b/tools/editor/icons/icon_file_dialog.png
Binary files differ
diff --git a/tools/editor/icons/icon_file_list.png b/tools/editor/icons/icon_file_list.png
index ab790a85a5..415857f3c5 100644
--- a/tools/editor/icons/icon_file_list.png
+++ b/tools/editor/icons/icon_file_list.png
Binary files differ
diff --git a/tools/editor/icons/icon_file_server.png b/tools/editor/icons/icon_file_server.png
index 4bd94fa8c8..c4c618255a 100644
--- a/tools/editor/icons/icon_file_server.png
+++ b/tools/editor/icons/icon_file_server.png
Binary files differ
diff --git a/tools/editor/icons/icon_file_server_active.png b/tools/editor/icons/icon_file_server_active.png
index 0987bb9978..e6dbf9b495 100644
--- a/tools/editor/icons/icon_file_server_active.png
+++ b/tools/editor/icons/icon_file_server_active.png
Binary files differ
diff --git a/tools/editor/icons/icon_file_thumbnail.png b/tools/editor/icons/icon_file_thumbnail.png
index c32be5e8f8..8293bab902 100644
--- a/tools/editor/icons/icon_file_thumbnail.png
+++ b/tools/editor/icons/icon_file_thumbnail.png
Binary files differ
diff --git a/tools/editor/icons/icon_filesystem.png b/tools/editor/icons/icon_filesystem.png
index 6841f9a792..523a675fc1 100644
--- a/tools/editor/icons/icon_filesystem.png
+++ b/tools/editor/icons/icon_filesystem.png
Binary files differ
diff --git a/tools/editor/icons/icon_fixed_material.png b/tools/editor/icons/icon_fixed_material.png
index f43e2b7dcd..3f5e97b33d 100644
--- a/tools/editor/icons/icon_fixed_material.png
+++ b/tools/editor/icons/icon_fixed_material.png
Binary files differ
diff --git a/tools/editor/icons/icon_folder.png b/tools/editor/icons/icon_folder.png
index a450a7b297..2263028afe 100644
--- a/tools/editor/icons/icon_folder.png
+++ b/tools/editor/icons/icon_folder.png
Binary files differ
diff --git a/tools/editor/icons/icon_folder_big.png b/tools/editor/icons/icon_folder_big.png
index 988e070f98..8c39a99bd4 100644
--- a/tools/editor/icons/icon_folder_big.png
+++ b/tools/editor/icons/icon_folder_big.png
Binary files differ
diff --git a/tools/editor/icons/icon_font.png b/tools/editor/icons/icon_font.png
index 3ffe4f1b17..6ebc2f9e6b 100644
--- a/tools/editor/icons/icon_font.png
+++ b/tools/editor/icons/icon_font.png
Binary files differ
diff --git a/tools/editor/icons/icon_forward.png b/tools/editor/icons/icon_forward.png
index 14e8bc9a5a..e6d2d919be 100644
--- a/tools/editor/icons/icon_forward.png
+++ b/tools/editor/icons/icon_forward.png
Binary files differ
diff --git a/tools/editor/icons/icon_g_d_script.png b/tools/editor/icons/icon_g_d_script.png
index 88d865356c..0a7d7f0e4e 100644
--- a/tools/editor/icons/icon_g_d_script.png
+++ b/tools/editor/icons/icon_g_d_script.png
Binary files differ
diff --git a/tools/editor/icons/icon_gizmo_directional_light.png b/tools/editor/icons/icon_gizmo_directional_light.png
index 8584e1a4c9..6c72fcc8b0 100644
--- a/tools/editor/icons/icon_gizmo_directional_light.png
+++ b/tools/editor/icons/icon_gizmo_directional_light.png
Binary files differ
diff --git a/tools/editor/icons/icon_gizmo_light.png b/tools/editor/icons/icon_gizmo_light.png
index 66f1854675..9d9c45348d 100644
--- a/tools/editor/icons/icon_gizmo_light.png
+++ b/tools/editor/icons/icon_gizmo_light.png
Binary files differ
diff --git a/tools/editor/icons/icon_gizmo_listener.png b/tools/editor/icons/icon_gizmo_listener.png
new file mode 100644
index 0000000000..b6267e779a
--- /dev/null
+++ b/tools/editor/icons/icon_gizmo_listener.png
Binary files differ
diff --git a/tools/editor/icons/icon_gizmo_spatial_sample_player.png b/tools/editor/icons/icon_gizmo_spatial_sample_player.png
index 61718721b8..8cc43f36d5 100644
--- a/tools/editor/icons/icon_gizmo_spatial_sample_player.png
+++ b/tools/editor/icons/icon_gizmo_spatial_sample_player.png
Binary files differ
diff --git a/tools/editor/icons/icon_gizmo_spatial_stream_player.png b/tools/editor/icons/icon_gizmo_spatial_stream_player.png
index 90bb795919..4cea13e4c0 100644
--- a/tools/editor/icons/icon_gizmo_spatial_stream_player.png
+++ b/tools/editor/icons/icon_gizmo_spatial_stream_player.png
Binary files differ
diff --git a/tools/editor/icons/icon_godot.png b/tools/editor/icons/icon_godot.png
index e80820fc10..3b6aac8b7e 100644
--- a/tools/editor/icons/icon_godot.png
+++ b/tools/editor/icons/icon_godot.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_color_ramp.png b/tools/editor/icons/icon_graph_color_ramp.png
index 9031b5ec53..f5fbda6d21 100644
--- a/tools/editor/icons/icon_graph_color_ramp.png
+++ b/tools/editor/icons/icon_graph_color_ramp.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_comment.png b/tools/editor/icons/icon_graph_comment.png
index bf7889c510..44fce1e5ba 100644
--- a/tools/editor/icons/icon_graph_comment.png
+++ b/tools/editor/icons/icon_graph_comment.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_cube_uniform.png b/tools/editor/icons/icon_graph_cube_uniform.png
index d1b92b4943..595054d7c1 100644
--- a/tools/editor/icons/icon_graph_cube_uniform.png
+++ b/tools/editor/icons/icon_graph_cube_uniform.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_curve_map.png b/tools/editor/icons/icon_graph_curve_map.png
index de5c32f09e..c89dea52fc 100644
--- a/tools/editor/icons/icon_graph_curve_map.png
+++ b/tools/editor/icons/icon_graph_curve_map.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_default_texture.png b/tools/editor/icons/icon_graph_default_texture.png
index da77ec9364..27830ab008 100644
--- a/tools/editor/icons/icon_graph_default_texture.png
+++ b/tools/editor/icons/icon_graph_default_texture.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_edit.png b/tools/editor/icons/icon_graph_edit.png
new file mode 100644
index 0000000000..3f8bd3be25
--- /dev/null
+++ b/tools/editor/icons/icon_graph_edit.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_input.png b/tools/editor/icons/icon_graph_input.png
index a396bc2350..91b51108c6 100644
--- a/tools/editor/icons/icon_graph_input.png
+++ b/tools/editor/icons/icon_graph_input.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_node.png b/tools/editor/icons/icon_graph_node.png
new file mode 100644
index 0000000000..0982154201
--- /dev/null
+++ b/tools/editor/icons/icon_graph_node.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_rgb.png b/tools/editor/icons/icon_graph_rgb.png
index abffaedd34..da4eacb63a 100644
--- a/tools/editor/icons/icon_graph_rgb.png
+++ b/tools/editor/icons/icon_graph_rgb.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_rgb_op.png b/tools/editor/icons/icon_graph_rgb_op.png
index 642fc838c2..1becf91f59 100644
--- a/tools/editor/icons/icon_graph_rgb_op.png
+++ b/tools/editor/icons/icon_graph_rgb_op.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_rgb_uniform.png b/tools/editor/icons/icon_graph_rgb_uniform.png
index 92c79997ef..e0c125cabb 100644
--- a/tools/editor/icons/icon_graph_rgb_uniform.png
+++ b/tools/editor/icons/icon_graph_rgb_uniform.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_scalar.png b/tools/editor/icons/icon_graph_scalar.png
index 028d0e9ea4..e07289a132 100644
--- a/tools/editor/icons/icon_graph_scalar.png
+++ b/tools/editor/icons/icon_graph_scalar.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_scalar_interp.png b/tools/editor/icons/icon_graph_scalar_interp.png
index 4f178a27c4..2f0159e01e 100644
--- a/tools/editor/icons/icon_graph_scalar_interp.png
+++ b/tools/editor/icons/icon_graph_scalar_interp.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_scalar_op.png b/tools/editor/icons/icon_graph_scalar_op.png
index 0fc4cae94c..17cb652bcc 100644
--- a/tools/editor/icons/icon_graph_scalar_op.png
+++ b/tools/editor/icons/icon_graph_scalar_op.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_scalar_uniform.png b/tools/editor/icons/icon_graph_scalar_uniform.png
index fc6590a8cf..56e047edff 100644
--- a/tools/editor/icons/icon_graph_scalar_uniform.png
+++ b/tools/editor/icons/icon_graph_scalar_uniform.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_scalars_to_vec.png b/tools/editor/icons/icon_graph_scalars_to_vec.png
index 7ca39a2f56..5d146ddc2b 100644
--- a/tools/editor/icons/icon_graph_scalars_to_vec.png
+++ b/tools/editor/icons/icon_graph_scalars_to_vec.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_texscreen.png b/tools/editor/icons/icon_graph_texscreen.png
index e183a8fa56..dcedd80d6b 100644
--- a/tools/editor/icons/icon_graph_texscreen.png
+++ b/tools/editor/icons/icon_graph_texscreen.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_texture_uniform.png b/tools/editor/icons/icon_graph_texture_uniform.png
index 7517ac1d92..711da8dbf1 100644
--- a/tools/editor/icons/icon_graph_texture_uniform.png
+++ b/tools/editor/icons/icon_graph_texture_uniform.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_time.png b/tools/editor/icons/icon_graph_time.png
index b61e45589f..489fec6779 100644
--- a/tools/editor/icons/icon_graph_time.png
+++ b/tools/editor/icons/icon_graph_time.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_vec_dp.png b/tools/editor/icons/icon_graph_vec_dp.png
index 059c3025e7..4df4180332 100644
--- a/tools/editor/icons/icon_graph_vec_dp.png
+++ b/tools/editor/icons/icon_graph_vec_dp.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_vec_interp.png b/tools/editor/icons/icon_graph_vec_interp.png
index daf7a00203..71f31c334a 100644
--- a/tools/editor/icons/icon_graph_vec_interp.png
+++ b/tools/editor/icons/icon_graph_vec_interp.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_vec_length.png b/tools/editor/icons/icon_graph_vec_length.png
index 60ade8c90a..d0bf8e4f81 100644
--- a/tools/editor/icons/icon_graph_vec_length.png
+++ b/tools/editor/icons/icon_graph_vec_length.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_vec_op.png b/tools/editor/icons/icon_graph_vec_op.png
index f2a7a51123..32f133dd9a 100644
--- a/tools/editor/icons/icon_graph_vec_op.png
+++ b/tools/editor/icons/icon_graph_vec_op.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_vec_scalar_op.png b/tools/editor/icons/icon_graph_vec_scalar_op.png
index f0f4e7a196..6058e25908 100644
--- a/tools/editor/icons/icon_graph_vec_scalar_op.png
+++ b/tools/editor/icons/icon_graph_vec_scalar_op.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_vec_to_scalars.png b/tools/editor/icons/icon_graph_vec_to_scalars.png
index a677a7cc53..1ccf50b6b7 100644
--- a/tools/editor/icons/icon_graph_vec_to_scalars.png
+++ b/tools/editor/icons/icon_graph_vec_to_scalars.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_vecs_to_xform.png b/tools/editor/icons/icon_graph_vecs_to_xform.png
index 51216c93eb..e439bcd46b 100644
--- a/tools/editor/icons/icon_graph_vecs_to_xform.png
+++ b/tools/editor/icons/icon_graph_vecs_to_xform.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_vector.png b/tools/editor/icons/icon_graph_vector.png
index 9dfe47d757..04447e3f51 100644
--- a/tools/editor/icons/icon_graph_vector.png
+++ b/tools/editor/icons/icon_graph_vector.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_vector_uniform.png b/tools/editor/icons/icon_graph_vector_uniform.png
index 611539fca7..374518d163 100644
--- a/tools/editor/icons/icon_graph_vector_uniform.png
+++ b/tools/editor/icons/icon_graph_vector_uniform.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_xform.png b/tools/editor/icons/icon_graph_xform.png
index 22df472be4..df486fc638 100644
--- a/tools/editor/icons/icon_graph_xform.png
+++ b/tools/editor/icons/icon_graph_xform.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_xform_mult.png b/tools/editor/icons/icon_graph_xform_mult.png
index 5d0ce7982d..374ee6d568 100644
--- a/tools/editor/icons/icon_graph_xform_mult.png
+++ b/tools/editor/icons/icon_graph_xform_mult.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_xform_scalar_func.png b/tools/editor/icons/icon_graph_xform_scalar_func.png
index e53f08a564..a0fd0e6351 100644
--- a/tools/editor/icons/icon_graph_xform_scalar_func.png
+++ b/tools/editor/icons/icon_graph_xform_scalar_func.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_xform_to_vecs.png b/tools/editor/icons/icon_graph_xform_to_vecs.png
index 847261f726..19e9aea07b 100644
--- a/tools/editor/icons/icon_graph_xform_to_vecs.png
+++ b/tools/editor/icons/icon_graph_xform_to_vecs.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_xform_uniform.png b/tools/editor/icons/icon_graph_xform_uniform.png
index 94c9759b25..7e20df22de 100644
--- a/tools/editor/icons/icon_graph_xform_uniform.png
+++ b/tools/editor/icons/icon_graph_xform_uniform.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_xform_vec_func.png b/tools/editor/icons/icon_graph_xform_vec_func.png
index f3ba528896..23207a29e0 100644
--- a/tools/editor/icons/icon_graph_xform_vec_func.png
+++ b/tools/editor/icons/icon_graph_xform_vec_func.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_xform_vec_imult.png b/tools/editor/icons/icon_graph_xform_vec_imult.png
index 7e7330cb8c..0866b1c772 100644
--- a/tools/editor/icons/icon_graph_xform_vec_imult.png
+++ b/tools/editor/icons/icon_graph_xform_vec_imult.png
Binary files differ
diff --git a/tools/editor/icons/icon_graph_xform_vec_mult.png b/tools/editor/icons/icon_graph_xform_vec_mult.png
index f80a28c80d..7373179ed2 100644
--- a/tools/editor/icons/icon_graph_xform_vec_mult.png
+++ b/tools/editor/icons/icon_graph_xform_vec_mult.png
Binary files differ
diff --git a/tools/editor/icons/icon_grid.png b/tools/editor/icons/icon_grid.png
index dcdd86c9b5..b98d1f7734 100644
--- a/tools/editor/icons/icon_grid.png
+++ b/tools/editor/icons/icon_grid.png
Binary files differ
diff --git a/tools/editor/icons/icon_grid_container.png b/tools/editor/icons/icon_grid_container.png
index bd181c4936..3a2feae631 100644
--- a/tools/editor/icons/icon_grid_container.png
+++ b/tools/editor/icons/icon_grid_container.png
Binary files differ
diff --git a/tools/editor/icons/icon_grid_map.png b/tools/editor/icons/icon_grid_map.png
index f967242ad1..20d8ff7912 100644
--- a/tools/editor/icons/icon_grid_map.png
+++ b/tools/editor/icons/icon_grid_map.png
Binary files differ
diff --git a/tools/editor/icons/icon_groove_joint_2d.png b/tools/editor/icons/icon_groove_joint_2d.png
index 090859a5ee..eb568d1126 100644
--- a/tools/editor/icons/icon_groove_joint_2d.png
+++ b/tools/editor/icons/icon_groove_joint_2d.png
Binary files differ
diff --git a/tools/editor/icons/icon_group.png b/tools/editor/icons/icon_group.png
index d43b4958c9..de644eefa4 100644
--- a/tools/editor/icons/icon_group.png
+++ b/tools/editor/icons/icon_group.png
Binary files differ
diff --git a/tools/editor/icons/icon_groups.png b/tools/editor/icons/icon_groups.png
index f4386821ed..de16f2b7c8 100644
--- a/tools/editor/icons/icon_groups.png
+++ b/tools/editor/icons/icon_groups.png
Binary files differ
diff --git a/tools/editor/icons/icon_h_box_container.png b/tools/editor/icons/icon_h_box_container.png
index fe67ecef21..576dc4405e 100644
--- a/tools/editor/icons/icon_h_box_container.png
+++ b/tools/editor/icons/icon_h_box_container.png
Binary files differ
diff --git a/tools/editor/icons/icon_h_button_array.png b/tools/editor/icons/icon_h_button_array.png
index aa71e4e212..2f29a5ae30 100644
--- a/tools/editor/icons/icon_h_button_array.png
+++ b/tools/editor/icons/icon_h_button_array.png
Binary files differ
diff --git a/tools/editor/icons/icon_h_scroll_bar.png b/tools/editor/icons/icon_h_scroll_bar.png
index 98922a56f1..c9adc582db 100644
--- a/tools/editor/icons/icon_h_scroll_bar.png
+++ b/tools/editor/icons/icon_h_scroll_bar.png
Binary files differ
diff --git a/tools/editor/icons/icon_h_separator.png b/tools/editor/icons/icon_h_separator.png
index 243a37f22c..daf232c695 100644
--- a/tools/editor/icons/icon_h_separator.png
+++ b/tools/editor/icons/icon_h_separator.png
Binary files differ
diff --git a/tools/editor/icons/icon_h_slider.png b/tools/editor/icons/icon_h_slider.png
index 4ed777b450..00d92bc647 100644
--- a/tools/editor/icons/icon_h_slider.png
+++ b/tools/editor/icons/icon_h_slider.png
Binary files differ
diff --git a/tools/editor/icons/icon_h_split_container.png b/tools/editor/icons/icon_h_split_container.png
index 62acd643b4..208dbc813a 100644
--- a/tools/editor/icons/icon_h_split_container.png
+++ b/tools/editor/icons/icon_h_split_container.png
Binary files differ
diff --git a/tools/editor/icons/icon_h_t_t_p_request.png b/tools/editor/icons/icon_h_t_t_p_request.png
index 6c7f1885ce..4dd712c886 100644
--- a/tools/editor/icons/icon_h_t_t_p_request.png
+++ b/tools/editor/icons/icon_h_t_t_p_request.png
Binary files differ
diff --git a/tools/editor/icons/icon_help.png b/tools/editor/icons/icon_help.png
index d2085589ae..e3360dad9c 100644
--- a/tools/editor/icons/icon_help.png
+++ b/tools/editor/icons/icon_help.png
Binary files differ
diff --git a/tools/editor/icons/icon_hidden.png b/tools/editor/icons/icon_hidden.png
index e51b9ad03a..d147f2317b 100644
--- a/tools/editor/icons/icon_hidden.png
+++ b/tools/editor/icons/icon_hidden.png
Binary files differ
diff --git a/tools/editor/icons/icon_history.png b/tools/editor/icons/icon_history.png
index 5c306c3ac9..ffb0eb0c1c 100644
--- a/tools/editor/icons/icon_history.png
+++ b/tools/editor/icons/icon_history.png
Binary files differ
diff --git a/tools/editor/icons/icon_hsize.png b/tools/editor/icons/icon_hsize.png
index 85be098446..56e63e4100 100644
--- a/tools/editor/icons/icon_hsize.png
+++ b/tools/editor/icons/icon_hsize.png
Binary files differ
diff --git a/tools/editor/icons/icon_image.png b/tools/editor/icons/icon_image.png
index 5919ca8c6d..b9961a56ac 100644
--- a/tools/editor/icons/icon_image.png
+++ b/tools/editor/icons/icon_image.png
Binary files differ
diff --git a/tools/editor/icons/icon_image_texture.png b/tools/editor/icons/icon_image_texture.png
index b87e284a52..fac47441ed 100644
--- a/tools/editor/icons/icon_image_texture.png
+++ b/tools/editor/icons/icon_image_texture.png
Binary files differ
diff --git a/tools/editor/icons/icon_immediate_geometry.png b/tools/editor/icons/icon_immediate_geometry.png
index e7fa8a9e42..768be1c8c9 100644
--- a/tools/editor/icons/icon_immediate_geometry.png
+++ b/tools/editor/icons/icon_immediate_geometry.png
Binary files differ
diff --git a/tools/editor/icons/icon_import_check.png b/tools/editor/icons/icon_import_check.png
index 91556f6117..783253e0fc 100644
--- a/tools/editor/icons/icon_import_check.png
+++ b/tools/editor/icons/icon_import_check.png
Binary files differ
diff --git a/tools/editor/icons/icon_import_fail.png b/tools/editor/icons/icon_import_fail.png
index e758f7fd32..9481451e37 100644
--- a/tools/editor/icons/icon_import_fail.png
+++ b/tools/editor/icons/icon_import_fail.png
Binary files differ
diff --git a/tools/editor/icons/icon_instance.png b/tools/editor/icons/icon_instance.png
index 6ad9f38e53..6d50ec4ecb 100644
--- a/tools/editor/icons/icon_instance.png
+++ b/tools/editor/icons/icon_instance.png
Binary files differ
diff --git a/tools/editor/icons/icon_instance_options.png b/tools/editor/icons/icon_instance_options.png
index 9108448095..6d4e15bae4 100644
--- a/tools/editor/icons/icon_instance_options.png
+++ b/tools/editor/icons/icon_instance_options.png
Binary files differ
diff --git a/tools/editor/icons/icon_integer.png b/tools/editor/icons/icon_integer.png
index b49390aeb1..a2e3a46591 100644
--- a/tools/editor/icons/icon_integer.png
+++ b/tools/editor/icons/icon_integer.png
Binary files differ
diff --git a/tools/editor/icons/icon_interp_cubic.png b/tools/editor/icons/icon_interp_cubic.png
index a946d70947..19f7282031 100644
--- a/tools/editor/icons/icon_interp_cubic.png
+++ b/tools/editor/icons/icon_interp_cubic.png
Binary files differ
diff --git a/tools/editor/icons/icon_interp_linear.png b/tools/editor/icons/icon_interp_linear.png
index 9174af39e7..f3293ac6b5 100644
--- a/tools/editor/icons/icon_interp_linear.png
+++ b/tools/editor/icons/icon_interp_linear.png
Binary files differ
diff --git a/tools/editor/icons/icon_interp_raw.png b/tools/editor/icons/icon_interp_raw.png
index f12936493b..f5a54461af 100644
--- a/tools/editor/icons/icon_interp_raw.png
+++ b/tools/editor/icons/icon_interp_raw.png
Binary files differ
diff --git a/tools/editor/icons/icon_inverse_kinematics.png b/tools/editor/icons/icon_inverse_kinematics.png
new file mode 100644
index 0000000000..30f542bf2f
--- /dev/null
+++ b/tools/editor/icons/icon_inverse_kinematics.png
Binary files differ
diff --git a/tools/editor/icons/icon_item_list.png b/tools/editor/icons/icon_item_list.png
index f930e7ecaa..7a041dc414 100644
--- a/tools/editor/icons/icon_item_list.png
+++ b/tools/editor/icons/icon_item_list.png
Binary files differ
diff --git a/tools/editor/icons/icon_joy_axis.png b/tools/editor/icons/icon_joy_axis.png
index fa4c8d6016..82167ba40b 100644
--- a/tools/editor/icons/icon_joy_axis.png
+++ b/tools/editor/icons/icon_joy_axis.png
Binary files differ
diff --git a/tools/editor/icons/icon_joy_button.png b/tools/editor/icons/icon_joy_button.png
index 43052d22a6..be43a6d3d5 100644
--- a/tools/editor/icons/icon_joy_button.png
+++ b/tools/editor/icons/icon_joy_button.png
Binary files differ
diff --git a/tools/editor/icons/icon_joystick.png b/tools/editor/icons/icon_joystick.png
index fae60e6697..16838ec3ec 100644
--- a/tools/editor/icons/icon_joystick.png
+++ b/tools/editor/icons/icon_joystick.png
Binary files differ
diff --git a/tools/editor/icons/icon_key.png b/tools/editor/icons/icon_key.png
index d6096ef41f..d50e48d6d0 100644
--- a/tools/editor/icons/icon_key.png
+++ b/tools/editor/icons/icon_key.png
Binary files differ
diff --git a/tools/editor/icons/icon_key_hover.png b/tools/editor/icons/icon_key_hover.png
index 36d6815756..2f99cc43ca 100644
--- a/tools/editor/icons/icon_key_hover.png
+++ b/tools/editor/icons/icon_key_hover.png
Binary files differ
diff --git a/tools/editor/icons/icon_key_invalid.png b/tools/editor/icons/icon_key_invalid.png
index e8e6c87180..f771ac8059 100644
--- a/tools/editor/icons/icon_key_invalid.png
+++ b/tools/editor/icons/icon_key_invalid.png
Binary files differ
diff --git a/tools/editor/icons/icon_key_next.png b/tools/editor/icons/icon_key_next.png
index 759008d064..6d4bb3a588 100644
--- a/tools/editor/icons/icon_key_next.png
+++ b/tools/editor/icons/icon_key_next.png
Binary files differ
diff --git a/tools/editor/icons/icon_key_selected.png b/tools/editor/icons/icon_key_selected.png
index 562beef98a..6e62d5ec51 100644
--- a/tools/editor/icons/icon_key_selected.png
+++ b/tools/editor/icons/icon_key_selected.png
Binary files differ
diff --git a/tools/editor/icons/icon_key_value.png b/tools/editor/icons/icon_key_value.png
index 72e786211a..df02e1c93f 100644
--- a/tools/editor/icons/icon_key_value.png
+++ b/tools/editor/icons/icon_key_value.png
Binary files differ
diff --git a/tools/editor/icons/icon_key_xform.png b/tools/editor/icons/icon_key_xform.png
index 2cdcb1f80d..61abd92c07 100644
--- a/tools/editor/icons/icon_key_xform.png
+++ b/tools/editor/icons/icon_key_xform.png
Binary files differ
diff --git a/tools/editor/icons/icon_keyboard.png b/tools/editor/icons/icon_keyboard.png
index d8aa2c4b0d..985da2c264 100644
--- a/tools/editor/icons/icon_keyboard.png
+++ b/tools/editor/icons/icon_keyboard.png
Binary files differ
diff --git a/tools/editor/icons/icon_kinematic_body.png b/tools/editor/icons/icon_kinematic_body.png
index 7feb38f6ba..2ab4d4bf8c 100644
--- a/tools/editor/icons/icon_kinematic_body.png
+++ b/tools/editor/icons/icon_kinematic_body.png
Binary files differ
diff --git a/tools/editor/icons/icon_kinematic_body_2d.png b/tools/editor/icons/icon_kinematic_body_2d.png
index 3d8e09a179..6052f24ef7 100644
--- a/tools/editor/icons/icon_kinematic_body_2d.png
+++ b/tools/editor/icons/icon_kinematic_body_2d.png
Binary files differ
diff --git a/tools/editor/icons/icon_label.png b/tools/editor/icons/icon_label.png
index 92b40600f1..9baececb3e 100644
--- a/tools/editor/icons/icon_label.png
+++ b/tools/editor/icons/icon_label.png
Binary files differ
diff --git a/tools/editor/icons/icon_light_2d.png b/tools/editor/icons/icon_light_2d.png
index 9162b33090..be5181654e 100644
--- a/tools/editor/icons/icon_light_2d.png
+++ b/tools/editor/icons/icon_light_2d.png
Binary files differ
diff --git a/tools/editor/icons/icon_light_occluder_2d.png b/tools/editor/icons/icon_light_occluder_2d.png
index c66dd536d3..c77904d7ae 100644
--- a/tools/editor/icons/icon_light_occluder_2d.png
+++ b/tools/editor/icons/icon_light_occluder_2d.png
Binary files differ
diff --git a/tools/editor/icons/icon_line_edit.png b/tools/editor/icons/icon_line_edit.png
index 78cc066302..730cbd9f32 100644
--- a/tools/editor/icons/icon_line_edit.png
+++ b/tools/editor/icons/icon_line_edit.png
Binary files differ
diff --git a/tools/editor/icons/icon_link_button.png b/tools/editor/icons/icon_link_button.png
index b6b9868e11..32b21f8eb0 100644
--- a/tools/editor/icons/icon_link_button.png
+++ b/tools/editor/icons/icon_link_button.png
Binary files differ
diff --git a/tools/editor/icons/icon_list_select.png b/tools/editor/icons/icon_list_select.png
index cbe81d4328..8935e5c155 100644
--- a/tools/editor/icons/icon_list_select.png
+++ b/tools/editor/icons/icon_list_select.png
Binary files differ
diff --git a/tools/editor/icons/icon_listener.png b/tools/editor/icons/icon_listener.png
new file mode 100644
index 0000000000..1fa4cb4a9f
--- /dev/null
+++ b/tools/editor/icons/icon_listener.png
Binary files differ
diff --git a/tools/editor/icons/icon_load.png b/tools/editor/icons/icon_load.png
index a450a7b297..2263028afe 100644
--- a/tools/editor/icons/icon_load.png
+++ b/tools/editor/icons/icon_load.png
Binary files differ
diff --git a/tools/editor/icons/icon_lock.png b/tools/editor/icons/icon_lock.png
index 995d87b6fb..a741e13849 100644
--- a/tools/editor/icons/icon_lock.png
+++ b/tools/editor/icons/icon_lock.png
Binary files differ
diff --git a/tools/editor/icons/icon_loop.png b/tools/editor/icons/icon_loop.png
index 7bde451ca0..19d0fecd5c 100644
--- a/tools/editor/icons/icon_loop.png
+++ b/tools/editor/icons/icon_loop.png
Binary files differ
diff --git a/tools/editor/icons/icon_main_play.png b/tools/editor/icons/icon_main_play.png
index 9e8cc6c4a9..24d6c50823 100644
--- a/tools/editor/icons/icon_main_play.png
+++ b/tools/editor/icons/icon_main_play.png
Binary files differ
diff --git a/tools/editor/icons/icon_main_stop.png b/tools/editor/icons/icon_main_stop.png
index 31a6cd601e..adcedfc6ce 100644
--- a/tools/editor/icons/icon_main_stop.png
+++ b/tools/editor/icons/icon_main_stop.png
Binary files differ
diff --git a/tools/editor/icons/icon_margin_container.png b/tools/editor/icons/icon_margin_container.png
index 43f1fb8f79..079ffce48b 100644
--- a/tools/editor/icons/icon_margin_container.png
+++ b/tools/editor/icons/icon_margin_container.png
Binary files differ
diff --git a/tools/editor/icons/icon_material_preview_cube.png b/tools/editor/icons/icon_material_preview_cube.png
new file mode 100644
index 0000000000..941c9904ea
--- /dev/null
+++ b/tools/editor/icons/icon_material_preview_cube.png
Binary files differ
diff --git a/tools/editor/icons/icon_material_preview_cube_off.png b/tools/editor/icons/icon_material_preview_cube_off.png
new file mode 100644
index 0000000000..9d6d5171d1
--- /dev/null
+++ b/tools/editor/icons/icon_material_preview_cube_off.png
Binary files differ
diff --git a/tools/editor/icons/icon_material_preview_light_1.png b/tools/editor/icons/icon_material_preview_light_1.png
new file mode 100644
index 0000000000..587845eca7
--- /dev/null
+++ b/tools/editor/icons/icon_material_preview_light_1.png
Binary files differ
diff --git a/tools/editor/icons/icon_material_preview_light_1_off.png b/tools/editor/icons/icon_material_preview_light_1_off.png
new file mode 100644
index 0000000000..91f7f9c2f2
--- /dev/null
+++ b/tools/editor/icons/icon_material_preview_light_1_off.png
Binary files differ
diff --git a/tools/editor/icons/icon_material_preview_light_2.png b/tools/editor/icons/icon_material_preview_light_2.png
new file mode 100644
index 0000000000..9f9e0a5f0e
--- /dev/null
+++ b/tools/editor/icons/icon_material_preview_light_2.png
Binary files differ
diff --git a/tools/editor/icons/icon_material_preview_light_2_off.png b/tools/editor/icons/icon_material_preview_light_2_off.png
new file mode 100644
index 0000000000..e18b4be703
--- /dev/null
+++ b/tools/editor/icons/icon_material_preview_light_2_off.png
Binary files differ
diff --git a/tools/editor/icons/icon_material_preview_sphere.png b/tools/editor/icons/icon_material_preview_sphere.png
new file mode 100644
index 0000000000..5236c65fb7
--- /dev/null
+++ b/tools/editor/icons/icon_material_preview_sphere.png
Binary files differ
diff --git a/tools/editor/icons/icon_material_preview_sphere_off.png b/tools/editor/icons/icon_material_preview_sphere_off.png
new file mode 100644
index 0000000000..0316a8588a
--- /dev/null
+++ b/tools/editor/icons/icon_material_preview_sphere_off.png
Binary files differ
diff --git a/tools/editor/icons/icon_material_shader.png b/tools/editor/icons/icon_material_shader.png
index 0e476b2540..69da895997 100644
--- a/tools/editor/icons/icon_material_shader.png
+++ b/tools/editor/icons/icon_material_shader.png
Binary files differ
diff --git a/tools/editor/icons/icon_material_shader_graph.png b/tools/editor/icons/icon_material_shader_graph.png
index 68d8b4cb49..b9ebe7b028 100644
--- a/tools/editor/icons/icon_material_shader_graph.png
+++ b/tools/editor/icons/icon_material_shader_graph.png
Binary files differ
diff --git a/tools/editor/icons/icon_matrix.png b/tools/editor/icons/icon_matrix.png
index d2e36b5534..f10a24be5f 100644
--- a/tools/editor/icons/icon_matrix.png
+++ b/tools/editor/icons/icon_matrix.png
Binary files differ
diff --git a/tools/editor/icons/icon_menu_button.png b/tools/editor/icons/icon_menu_button.png
index 52bc88e08f..989e1a0d88 100644
--- a/tools/editor/icons/icon_menu_button.png
+++ b/tools/editor/icons/icon_menu_button.png
Binary files differ
diff --git a/tools/editor/icons/icon_mesh.png b/tools/editor/icons/icon_mesh.png
index dbb0157866..ebb34623a7 100644
--- a/tools/editor/icons/icon_mesh.png
+++ b/tools/editor/icons/icon_mesh.png
Binary files differ
diff --git a/tools/editor/icons/icon_mesh_instance.png b/tools/editor/icons/icon_mesh_instance.png
index eca0eafa32..45f7fae7a0 100644
--- a/tools/editor/icons/icon_mesh_instance.png
+++ b/tools/editor/icons/icon_mesh_instance.png
Binary files differ
diff --git a/tools/editor/icons/icon_mirror_x.png b/tools/editor/icons/icon_mirror_x.png
index 657e7f5458..56e63e4100 100644
--- a/tools/editor/icons/icon_mirror_x.png
+++ b/tools/editor/icons/icon_mirror_x.png
Binary files differ
diff --git a/tools/editor/icons/icon_mirror_y.png b/tools/editor/icons/icon_mirror_y.png
index 111aa5e4ae..e22477d93d 100644
--- a/tools/editor/icons/icon_mirror_y.png
+++ b/tools/editor/icons/icon_mirror_y.png
Binary files differ
diff --git a/tools/editor/icons/icon_mouse.png b/tools/editor/icons/icon_mouse.png
index 7b3487aac6..678efa2b04 100644
--- a/tools/editor/icons/icon_mouse.png
+++ b/tools/editor/icons/icon_mouse.png
Binary files differ
diff --git a/tools/editor/icons/icon_move_down.png b/tools/editor/icons/icon_move_down.png
index 06c7246084..a998a360c3 100644
--- a/tools/editor/icons/icon_move_down.png
+++ b/tools/editor/icons/icon_move_down.png
Binary files differ
diff --git a/tools/editor/icons/icon_move_point.png b/tools/editor/icons/icon_move_point.png
index b0e5215682..55820064c5 100644
--- a/tools/editor/icons/icon_move_point.png
+++ b/tools/editor/icons/icon_move_point.png
Binary files differ
diff --git a/tools/editor/icons/icon_move_up.png b/tools/editor/icons/icon_move_up.png
index ca6c64f7a1..3974957944 100644
--- a/tools/editor/icons/icon_move_up.png
+++ b/tools/editor/icons/icon_move_up.png
Binary files differ
diff --git a/tools/editor/icons/icon_multi_edit.png b/tools/editor/icons/icon_multi_edit.png
index 70faee3d6a..8422131694 100644
--- a/tools/editor/icons/icon_multi_edit.png
+++ b/tools/editor/icons/icon_multi_edit.png
Binary files differ
diff --git a/tools/editor/icons/icon_multi_line.png b/tools/editor/icons/icon_multi_line.png
index c3e77f0fbe..dfb67f522b 100644
--- a/tools/editor/icons/icon_multi_line.png
+++ b/tools/editor/icons/icon_multi_line.png
Binary files differ
diff --git a/tools/editor/icons/icon_multi_mesh.png b/tools/editor/icons/icon_multi_mesh.png
index 44d2788d84..6e68cd4da3 100644
--- a/tools/editor/icons/icon_multi_mesh.png
+++ b/tools/editor/icons/icon_multi_mesh.png
Binary files differ
diff --git a/tools/editor/icons/icon_multi_mesh_instance.png b/tools/editor/icons/icon_multi_mesh_instance.png
index b3ad2bc52e..5d5821f3c9 100644
--- a/tools/editor/icons/icon_multi_mesh_instance.png
+++ b/tools/editor/icons/icon_multi_mesh_instance.png
Binary files differ
diff --git a/tools/editor/icons/icon_multi_node_edit.png b/tools/editor/icons/icon_multi_node_edit.png
index 357c062cbd..8422131694 100644
--- a/tools/editor/icons/icon_multi_node_edit.png
+++ b/tools/editor/icons/icon_multi_node_edit.png
Binary files differ
diff --git a/tools/editor/icons/icon_navigation.png b/tools/editor/icons/icon_navigation.png
index eeaa660f8d..ca36dff048 100644
--- a/tools/editor/icons/icon_navigation.png
+++ b/tools/editor/icons/icon_navigation.png
Binary files differ
diff --git a/tools/editor/icons/icon_navigation_2d.png b/tools/editor/icons/icon_navigation_2d.png
index 8170ecf68c..7dba2e67e7 100644
--- a/tools/editor/icons/icon_navigation_2d.png
+++ b/tools/editor/icons/icon_navigation_2d.png
Binary files differ
diff --git a/tools/editor/icons/icon_navigation_mesh_instance.png b/tools/editor/icons/icon_navigation_mesh_instance.png
index 163bd0cdb3..b94723333b 100644
--- a/tools/editor/icons/icon_navigation_mesh_instance.png
+++ b/tools/editor/icons/icon_navigation_mesh_instance.png
Binary files differ
diff --git a/tools/editor/icons/icon_navigation_polygon_instance.png b/tools/editor/icons/icon_navigation_polygon_instance.png
index 9f9c318906..c7d58a4c50 100644
--- a/tools/editor/icons/icon_navigation_polygon_instance.png
+++ b/tools/editor/icons/icon_navigation_polygon_instance.png
Binary files differ
diff --git a/tools/editor/icons/icon_new.png b/tools/editor/icons/icon_new.png
index c04785fc3f..5407b500cc 100644
--- a/tools/editor/icons/icon_new.png
+++ b/tools/editor/icons/icon_new.png
Binary files differ
diff --git a/tools/editor/icons/icon_node.png b/tools/editor/icons/icon_node.png
index d8ce1b7538..0c0b030469 100644
--- a/tools/editor/icons/icon_node.png
+++ b/tools/editor/icons/icon_node.png
Binary files differ
diff --git a/tools/editor/icons/icon_node_2d.png b/tools/editor/icons/icon_node_2d.png
index b288cf1fa3..8214267643 100644
--- a/tools/editor/icons/icon_node_2d.png
+++ b/tools/editor/icons/icon_node_2d.png
Binary files differ
diff --git a/tools/editor/icons/icon_node_warning.png b/tools/editor/icons/icon_node_warning.png
index de799ac30f..5f735a60a9 100644
--- a/tools/editor/icons/icon_node_warning.png
+++ b/tools/editor/icons/icon_node_warning.png
Binary files differ
diff --git a/tools/editor/icons/icon_non_favorite.png b/tools/editor/icons/icon_non_favorite.png
index edd806fbe8..ca11148388 100644
--- a/tools/editor/icons/icon_non_favorite.png
+++ b/tools/editor/icons/icon_non_favorite.png
Binary files differ
diff --git a/tools/editor/icons/icon_object.png b/tools/editor/icons/icon_object.png
index 8b35aa7f2f..5543ccc03f 100644
--- a/tools/editor/icons/icon_object.png
+++ b/tools/editor/icons/icon_object.png
Binary files differ
diff --git a/tools/editor/icons/icon_occluder_polygon_2d.png b/tools/editor/icons/icon_occluder_polygon_2d.png
index 705794b729..f27d7eb4cc 100644
--- a/tools/editor/icons/icon_occluder_polygon_2d.png
+++ b/tools/editor/icons/icon_occluder_polygon_2d.png
Binary files differ
diff --git a/tools/editor/icons/icon_omni_light.png b/tools/editor/icons/icon_omni_light.png
index 214e435d9e..9d00a75fbf 100644
--- a/tools/editor/icons/icon_omni_light.png
+++ b/tools/editor/icons/icon_omni_light.png
Binary files differ
diff --git a/tools/editor/icons/icon_option_button.png b/tools/editor/icons/icon_option_button.png
index 65964adf36..878f78e53c 100644
--- a/tools/editor/icons/icon_option_button.png
+++ b/tools/editor/icons/icon_option_button.png
Binary files differ
diff --git a/tools/editor/icons/icon_p_hash_translation.png b/tools/editor/icons/icon_p_hash_translation.png
index e18ef6a76f..7dfd00e83c 100644
--- a/tools/editor/icons/icon_p_hash_translation.png
+++ b/tools/editor/icons/icon_p_hash_translation.png
Binary files differ
diff --git a/tools/editor/icons/icon_packed_scene.png b/tools/editor/icons/icon_packed_scene.png
index c9802f2b66..89ed256ed2 100644
--- a/tools/editor/icons/icon_packed_scene.png
+++ b/tools/editor/icons/icon_packed_scene.png
Binary files differ
diff --git a/tools/editor/icons/icon_panel.png b/tools/editor/icons/icon_panel.png
index 6dcee0fa90..373ac480ed 100644
--- a/tools/editor/icons/icon_panel.png
+++ b/tools/editor/icons/icon_panel.png
Binary files differ
diff --git a/tools/editor/icons/icon_panel_container.png b/tools/editor/icons/icon_panel_container.png
new file mode 100644
index 0000000000..991db6ae63
--- /dev/null
+++ b/tools/editor/icons/icon_panel_container.png
Binary files differ
diff --git a/tools/editor/icons/icon_panels_1.png b/tools/editor/icons/icon_panels_1.png
index 546ca61c89..b38f324b22 100644
--- a/tools/editor/icons/icon_panels_1.png
+++ b/tools/editor/icons/icon_panels_1.png
Binary files differ
diff --git a/tools/editor/icons/icon_panels_2.png b/tools/editor/icons/icon_panels_2.png
index 5a4750bda2..cd8d51014c 100644
--- a/tools/editor/icons/icon_panels_2.png
+++ b/tools/editor/icons/icon_panels_2.png
Binary files differ
diff --git a/tools/editor/icons/icon_panels_2_alt.png b/tools/editor/icons/icon_panels_2_alt.png
index 2006f212ce..9563618164 100644
--- a/tools/editor/icons/icon_panels_2_alt.png
+++ b/tools/editor/icons/icon_panels_2_alt.png
Binary files differ
diff --git a/tools/editor/icons/icon_panels_3.png b/tools/editor/icons/icon_panels_3.png
index 13988de93a..5f77c97ec0 100644
--- a/tools/editor/icons/icon_panels_3.png
+++ b/tools/editor/icons/icon_panels_3.png
Binary files differ
diff --git a/tools/editor/icons/icon_panels_3_alt.png b/tools/editor/icons/icon_panels_3_alt.png
index 5195b799a5..2f57f9baa5 100644
--- a/tools/editor/icons/icon_panels_3_alt.png
+++ b/tools/editor/icons/icon_panels_3_alt.png
Binary files differ
diff --git a/tools/editor/icons/icon_panels_4.png b/tools/editor/icons/icon_panels_4.png
index c217330d43..e673290de7 100644
--- a/tools/editor/icons/icon_panels_4.png
+++ b/tools/editor/icons/icon_panels_4.png
Binary files differ
diff --git a/tools/editor/icons/icon_parallax_background.png b/tools/editor/icons/icon_parallax_background.png
new file mode 100644
index 0000000000..6fff88a438
--- /dev/null
+++ b/tools/editor/icons/icon_parallax_background.png
Binary files differ
diff --git a/tools/editor/icons/icon_parallax_layer.png b/tools/editor/icons/icon_parallax_layer.png
new file mode 100644
index 0000000000..0b3d051cb4
--- /dev/null
+++ b/tools/editor/icons/icon_parallax_layer.png
Binary files differ
diff --git a/tools/editor/icons/icon_particle_attractor_2d.png b/tools/editor/icons/icon_particle_attractor_2d.png
index bb66611e45..9fbee6dc2e 100644
--- a/tools/editor/icons/icon_particle_attractor_2d.png
+++ b/tools/editor/icons/icon_particle_attractor_2d.png
Binary files differ
diff --git a/tools/editor/icons/icon_particles.png b/tools/editor/icons/icon_particles.png
index 4abc04ecb8..a5322f0766 100644
--- a/tools/editor/icons/icon_particles.png
+++ b/tools/editor/icons/icon_particles.png
Binary files differ
diff --git a/tools/editor/icons/icon_particles_2d.png b/tools/editor/icons/icon_particles_2d.png
index b72160b9ce..e36f0038f5 100644
--- a/tools/editor/icons/icon_particles_2d.png
+++ b/tools/editor/icons/icon_particles_2d.png
Binary files differ
diff --git a/tools/editor/icons/icon_patch_9_frame.png b/tools/editor/icons/icon_patch_9_frame.png
index c8f38fa61a..0fb376c6f0 100644
--- a/tools/editor/icons/icon_patch_9_frame.png
+++ b/tools/editor/icons/icon_patch_9_frame.png
Binary files differ
diff --git a/tools/editor/icons/icon_path.png b/tools/editor/icons/icon_path.png
index 9b193c41bf..96d159523f 100644
--- a/tools/editor/icons/icon_path.png
+++ b/tools/editor/icons/icon_path.png
Binary files differ
diff --git a/tools/editor/icons/icon_path_2d.png b/tools/editor/icons/icon_path_2d.png
index 2a1e618469..cf31b39f28 100644
--- a/tools/editor/icons/icon_path_2d.png
+++ b/tools/editor/icons/icon_path_2d.png
Binary files differ
diff --git a/tools/editor/icons/icon_path_follow.png b/tools/editor/icons/icon_path_follow.png
index f1d8237f5a..ba132cf5fd 100644
--- a/tools/editor/icons/icon_path_follow.png
+++ b/tools/editor/icons/icon_path_follow.png
Binary files differ
diff --git a/tools/editor/icons/icon_path_follow_2d.png b/tools/editor/icons/icon_path_follow_2d.png
index ba95d15275..2866999067 100644
--- a/tools/editor/icons/icon_path_follow_2d.png
+++ b/tools/editor/icons/icon_path_follow_2d.png
Binary files differ
diff --git a/tools/editor/icons/icon_pause.png b/tools/editor/icons/icon_pause.png
index 7c0a57003e..411aba221b 100644
--- a/tools/editor/icons/icon_pause.png
+++ b/tools/editor/icons/icon_pause.png
Binary files differ
diff --git a/tools/editor/icons/icon_pin.png b/tools/editor/icons/icon_pin.png
index 4862ee8f71..ca42166827 100644
--- a/tools/editor/icons/icon_pin.png
+++ b/tools/editor/icons/icon_pin.png
Binary files differ
diff --git a/tools/editor/icons/icon_pin_joint.png b/tools/editor/icons/icon_pin_joint.png
index cdfae660d8..ec83680aaf 100644
--- a/tools/editor/icons/icon_pin_joint.png
+++ b/tools/editor/icons/icon_pin_joint.png
Binary files differ
diff --git a/tools/editor/icons/icon_pin_joint_2d.png b/tools/editor/icons/icon_pin_joint_2d.png
index 2f1ec59df4..c8fafb78d4 100644
--- a/tools/editor/icons/icon_pin_joint_2d.png
+++ b/tools/editor/icons/icon_pin_joint_2d.png
Binary files differ
diff --git a/tools/editor/icons/icon_pin_pressed.png b/tools/editor/icons/icon_pin_pressed.png
index 5738e6856f..ca42166827 100644
--- a/tools/editor/icons/icon_pin_pressed.png
+++ b/tools/editor/icons/icon_pin_pressed.png
Binary files differ
diff --git a/tools/editor/icons/icon_plane.png b/tools/editor/icons/icon_plane.png
index fbdc247e5a..e7506922f7 100644
--- a/tools/editor/icons/icon_plane.png
+++ b/tools/editor/icons/icon_plane.png
Binary files differ
diff --git a/tools/editor/icons/icon_plane_shape.png b/tools/editor/icons/icon_plane_shape.png
index ec7a3da4a4..92095caea8 100644
--- a/tools/editor/icons/icon_plane_shape.png
+++ b/tools/editor/icons/icon_plane_shape.png
Binary files differ
diff --git a/tools/editor/icons/icon_play.png b/tools/editor/icons/icon_play.png
index d2bd9d310c..c2f73c9fc3 100644
--- a/tools/editor/icons/icon_play.png
+++ b/tools/editor/icons/icon_play.png
Binary files differ
diff --git a/tools/editor/icons/icon_play_backwards.png b/tools/editor/icons/icon_play_backwards.png
index 8dff5f20e3..d1c9633ee6 100644
--- a/tools/editor/icons/icon_play_backwards.png
+++ b/tools/editor/icons/icon_play_backwards.png
Binary files differ
diff --git a/tools/editor/icons/icon_play_custom.png b/tools/editor/icons/icon_play_custom.png
index 8e8ab8c62a..635c5f496d 100644
--- a/tools/editor/icons/icon_play_custom.png
+++ b/tools/editor/icons/icon_play_custom.png
Binary files differ
diff --git a/tools/editor/icons/icon_play_scene.png b/tools/editor/icons/icon_play_scene.png
index 7079cc9677..45625755a4 100644
--- a/tools/editor/icons/icon_play_scene.png
+++ b/tools/editor/icons/icon_play_scene.png
Binary files differ
diff --git a/tools/editor/icons/icon_play_start.png b/tools/editor/icons/icon_play_start.png
index 5b085aa1ed..438c555e81 100644
--- a/tools/editor/icons/icon_play_start.png
+++ b/tools/editor/icons/icon_play_start.png
Binary files differ
diff --git a/tools/editor/icons/icon_play_start_backwards.png b/tools/editor/icons/icon_play_start_backwards.png
index 09afac637c..4cc1f75c20 100644
--- a/tools/editor/icons/icon_play_start_backwards.png
+++ b/tools/editor/icons/icon_play_start_backwards.png
Binary files differ
diff --git a/tools/editor/icons/icon_polygon_2d.png b/tools/editor/icons/icon_polygon_2d.png
index 9deb63a248..57c1453cc4 100644
--- a/tools/editor/icons/icon_polygon_2d.png
+++ b/tools/editor/icons/icon_polygon_2d.png
Binary files differ
diff --git a/tools/editor/icons/icon_popup.png b/tools/editor/icons/icon_popup.png
index a77a068986..bc6a18f143 100644
--- a/tools/editor/icons/icon_popup.png
+++ b/tools/editor/icons/icon_popup.png
Binary files differ
diff --git a/tools/editor/icons/icon_popup_dialog.png b/tools/editor/icons/icon_popup_dialog.png
index b6df84580d..11f574339e 100644
--- a/tools/editor/icons/icon_popup_dialog.png
+++ b/tools/editor/icons/icon_popup_dialog.png
Binary files differ
diff --git a/tools/editor/icons/icon_popup_menu.png b/tools/editor/icons/icon_popup_menu.png
index 2050b933ae..2ab402f7ea 100644
--- a/tools/editor/icons/icon_popup_menu.png
+++ b/tools/editor/icons/icon_popup_menu.png
Binary files differ
diff --git a/tools/editor/icons/icon_popup_panel.png b/tools/editor/icons/icon_popup_panel.png
index 79c3c29a36..7e998e75f3 100644
--- a/tools/editor/icons/icon_popup_panel.png
+++ b/tools/editor/icons/icon_popup_panel.png
Binary files differ
diff --git a/tools/editor/icons/icon_portal.png b/tools/editor/icons/icon_portal.png
index 6f555a55a1..5fb5e379ca 100644
--- a/tools/editor/icons/icon_portal.png
+++ b/tools/editor/icons/icon_portal.png
Binary files differ
diff --git a/tools/editor/icons/icon_position_2d.png b/tools/editor/icons/icon_position_2d.png
index fd07e8f619..c2feb19c15 100644
--- a/tools/editor/icons/icon_position_2d.png
+++ b/tools/editor/icons/icon_position_2d.png
Binary files differ
diff --git a/tools/editor/icons/icon_position_3d.png b/tools/editor/icons/icon_position_3d.png
index 5941083308..45dffe46b3 100644
--- a/tools/editor/icons/icon_position_3d.png
+++ b/tools/editor/icons/icon_position_3d.png
Binary files differ
diff --git a/tools/editor/icons/icon_progress_1.png b/tools/editor/icons/icon_progress_1.png
index c28482ca92..7046af3ad9 100644
--- a/tools/editor/icons/icon_progress_1.png
+++ b/tools/editor/icons/icon_progress_1.png
Binary files differ
diff --git a/tools/editor/icons/icon_progress_2.png b/tools/editor/icons/icon_progress_2.png
index 1d898fe3e0..343d2b195d 100644
--- a/tools/editor/icons/icon_progress_2.png
+++ b/tools/editor/icons/icon_progress_2.png
Binary files differ
diff --git a/tools/editor/icons/icon_progress_3.png b/tools/editor/icons/icon_progress_3.png
index 2de0cfbc09..b0e8ab2335 100644
--- a/tools/editor/icons/icon_progress_3.png
+++ b/tools/editor/icons/icon_progress_3.png
Binary files differ
diff --git a/tools/editor/icons/icon_progress_4.png b/tools/editor/icons/icon_progress_4.png
index fe8dce245e..5e35386022 100644
--- a/tools/editor/icons/icon_progress_4.png
+++ b/tools/editor/icons/icon_progress_4.png
Binary files differ
diff --git a/tools/editor/icons/icon_progress_5.png b/tools/editor/icons/icon_progress_5.png
index f2417c38c6..ff4b50a05b 100644
--- a/tools/editor/icons/icon_progress_5.png
+++ b/tools/editor/icons/icon_progress_5.png
Binary files differ
diff --git a/tools/editor/icons/icon_progress_6.png b/tools/editor/icons/icon_progress_6.png
index 44d809e329..d1918d75fc 100644
--- a/tools/editor/icons/icon_progress_6.png
+++ b/tools/editor/icons/icon_progress_6.png
Binary files differ
diff --git a/tools/editor/icons/icon_progress_7.png b/tools/editor/icons/icon_progress_7.png
index 01b8409c1e..ea0dfca807 100644
--- a/tools/editor/icons/icon_progress_7.png
+++ b/tools/editor/icons/icon_progress_7.png
Binary files differ
diff --git a/tools/editor/icons/icon_progress_8.png b/tools/editor/icons/icon_progress_8.png
index fa7f81c137..5df3581462 100644
--- a/tools/editor/icons/icon_progress_8.png
+++ b/tools/editor/icons/icon_progress_8.png
Binary files differ
diff --git a/tools/editor/icons/icon_progress_bar.png b/tools/editor/icons/icon_progress_bar.png
index e4e93e8fe9..c6a9c456b7 100644
--- a/tools/editor/icons/icon_progress_bar.png
+++ b/tools/editor/icons/icon_progress_bar.png
Binary files differ
diff --git a/tools/editor/icons/icon_proximity_group.png b/tools/editor/icons/icon_proximity_group.png
index 63a6702db1..525e95edb3 100644
--- a/tools/editor/icons/icon_proximity_group.png
+++ b/tools/editor/icons/icon_proximity_group.png
Binary files differ
diff --git a/tools/editor/icons/icon_quad.png b/tools/editor/icons/icon_quad.png
index 7cef29496c..873ed7a8a3 100644
--- a/tools/editor/icons/icon_quad.png
+++ b/tools/editor/icons/icon_quad.png
Binary files differ
diff --git a/tools/editor/icons/icon_quat.png b/tools/editor/icons/icon_quat.png
index f09d2fcaba..44a9eada98 100644
--- a/tools/editor/icons/icon_quat.png
+++ b/tools/editor/icons/icon_quat.png
Binary files differ
diff --git a/tools/editor/icons/icon_range.png b/tools/editor/icons/icon_range.png
new file mode 100644
index 0000000000..1b7141012b
--- /dev/null
+++ b/tools/editor/icons/icon_range.png
Binary files differ
diff --git a/tools/editor/icons/icon_ray_cast.png b/tools/editor/icons/icon_ray_cast.png
index a53ef0b516..e22343873c 100644
--- a/tools/editor/icons/icon_ray_cast.png
+++ b/tools/editor/icons/icon_ray_cast.png
Binary files differ
diff --git a/tools/editor/icons/icon_ray_cast_2d.png b/tools/editor/icons/icon_ray_cast_2d.png
index 890f69b7cb..a90d89d53e 100644
--- a/tools/editor/icons/icon_ray_cast_2d.png
+++ b/tools/editor/icons/icon_ray_cast_2d.png
Binary files differ
diff --git a/tools/editor/icons/icon_ray_shape.png b/tools/editor/icons/icon_ray_shape.png
index 851d2ac7bf..3b6fbe52dc 100644
--- a/tools/editor/icons/icon_ray_shape.png
+++ b/tools/editor/icons/icon_ray_shape.png
Binary files differ
diff --git a/tools/editor/icons/icon_rayito.png b/tools/editor/icons/icon_rayito.png
index f0717fe068..0271816ffa 100644
--- a/tools/editor/icons/icon_rayito.png
+++ b/tools/editor/icons/icon_rayito.png
Binary files differ
diff --git a/tools/editor/icons/icon_real.png b/tools/editor/icons/icon_real.png
index 7f5bf08ede..2ea15ab9e0 100644
--- a/tools/editor/icons/icon_real.png
+++ b/tools/editor/icons/icon_real.png
Binary files differ
diff --git a/tools/editor/icons/icon_reference_frame.png b/tools/editor/icons/icon_reference_frame.png
index ab153a18dc..23d78df1db 100644
--- a/tools/editor/icons/icon_reference_frame.png
+++ b/tools/editor/icons/icon_reference_frame.png
Binary files differ
diff --git a/tools/editor/icons/icon_region_edit.png b/tools/editor/icons/icon_region_edit.png
index 824607f2cc..ce2549df7f 100644
--- a/tools/editor/icons/icon_region_edit.png
+++ b/tools/editor/icons/icon_region_edit.png
Binary files differ
diff --git a/tools/editor/icons/icon_reload.png b/tools/editor/icons/icon_reload.png
index f7c6530d77..fc7b1796e9 100644
--- a/tools/editor/icons/icon_reload.png
+++ b/tools/editor/icons/icon_reload.png
Binary files differ
diff --git a/tools/editor/icons/icon_reload_small.png b/tools/editor/icons/icon_reload_small.png
index 957cdfcf4f..6809c4feab 100644
--- a/tools/editor/icons/icon_reload_small.png
+++ b/tools/editor/icons/icon_reload_small.png
Binary files differ
diff --git a/tools/editor/icons/icon_remote.png b/tools/editor/icons/icon_remote.png
index 792d958a46..0d7d390441 100644
--- a/tools/editor/icons/icon_remote.png
+++ b/tools/editor/icons/icon_remote.png
Binary files differ
diff --git a/tools/editor/icons/icon_remote_transform_2d.png b/tools/editor/icons/icon_remote_transform_2d.png
index d4f0b4bd62..d788a666d6 100644
--- a/tools/editor/icons/icon_remote_transform_2d.png
+++ b/tools/editor/icons/icon_remote_transform_2d.png
Binary files differ
diff --git a/tools/editor/icons/icon_remove.png b/tools/editor/icons/icon_remove.png
index f0f814e304..5111013367 100644
--- a/tools/editor/icons/icon_remove.png
+++ b/tools/editor/icons/icon_remove.png
Binary files differ
diff --git a/tools/editor/icons/icon_rename.png b/tools/editor/icons/icon_rename.png
index 7b6a10df93..e553a0f1a0 100644
--- a/tools/editor/icons/icon_rename.png
+++ b/tools/editor/icons/icon_rename.png
Binary files differ
diff --git a/tools/editor/icons/icon_reparent.png b/tools/editor/icons/icon_reparent.png
index 59aee5e42d..005b848243 100644
--- a/tools/editor/icons/icon_reparent.png
+++ b/tools/editor/icons/icon_reparent.png
Binary files differ
diff --git a/tools/editor/icons/icon_resource_preloader.png b/tools/editor/icons/icon_resource_preloader.png
index 14b8c4de3c..eb30a9e5ab 100644
--- a/tools/editor/icons/icon_resource_preloader.png
+++ b/tools/editor/icons/icon_resource_preloader.png
Binary files differ
diff --git a/tools/editor/icons/icon_rich_text_label.png b/tools/editor/icons/icon_rich_text_label.png
index 6a38c1e9da..aa9b9d5af0 100644
--- a/tools/editor/icons/icon_rich_text_label.png
+++ b/tools/editor/icons/icon_rich_text_label.png
Binary files differ
diff --git a/tools/editor/icons/icon_rigid_body.png b/tools/editor/icons/icon_rigid_body.png
index 98408294bd..20d2db573a 100644
--- a/tools/editor/icons/icon_rigid_body.png
+++ b/tools/editor/icons/icon_rigid_body.png
Binary files differ
diff --git a/tools/editor/icons/icon_rigid_body_2d.png b/tools/editor/icons/icon_rigid_body_2d.png
index 8e855e97f0..0f0b760219 100644
--- a/tools/editor/icons/icon_rigid_body_2d.png
+++ b/tools/editor/icons/icon_rigid_body_2d.png
Binary files differ
diff --git a/tools/editor/icons/icon_room.png b/tools/editor/icons/icon_room.png
index 589d4d2843..13aa5b9882 100644
--- a/tools/editor/icons/icon_room.png
+++ b/tools/editor/icons/icon_room.png
Binary files differ
diff --git a/tools/editor/icons/icon_rotate_0.png b/tools/editor/icons/icon_rotate_0.png
index 85a4b4c420..9c0118a307 100644
--- a/tools/editor/icons/icon_rotate_0.png
+++ b/tools/editor/icons/icon_rotate_0.png
Binary files differ
diff --git a/tools/editor/icons/icon_rotate_180.png b/tools/editor/icons/icon_rotate_180.png
index c4c516cff5..5fb48a5ab8 100644
--- a/tools/editor/icons/icon_rotate_180.png
+++ b/tools/editor/icons/icon_rotate_180.png
Binary files differ
diff --git a/tools/editor/icons/icon_rotate_270.png b/tools/editor/icons/icon_rotate_270.png
index 6e0f2e62b8..5739767fd9 100644
--- a/tools/editor/icons/icon_rotate_270.png
+++ b/tools/editor/icons/icon_rotate_270.png
Binary files differ
diff --git a/tools/editor/icons/icon_rotate_90.png b/tools/editor/icons/icon_rotate_90.png
index f25b0e99a3..c1f4f9c8c1 100644
--- a/tools/editor/icons/icon_rotate_90.png
+++ b/tools/editor/icons/icon_rotate_90.png
Binary files differ
diff --git a/tools/editor/icons/icon_sample.png b/tools/editor/icons/icon_sample.png
index 5362971a1b..6216e7531f 100644
--- a/tools/editor/icons/icon_sample.png
+++ b/tools/editor/icons/icon_sample.png
Binary files differ
diff --git a/tools/editor/icons/icon_sample_player.png b/tools/editor/icons/icon_sample_player.png
index 92d9cc77bf..f9755f94bf 100644
--- a/tools/editor/icons/icon_sample_player.png
+++ b/tools/editor/icons/icon_sample_player.png
Binary files differ
diff --git a/tools/editor/icons/icon_sample_player_2d.png b/tools/editor/icons/icon_sample_player_2d.png
index 59391f3ae0..52fcb04744 100644
--- a/tools/editor/icons/icon_sample_player_2d.png
+++ b/tools/editor/icons/icon_sample_player_2d.png
Binary files differ
diff --git a/tools/editor/icons/icon_save.png b/tools/editor/icons/icon_save.png
index ddef66688d..77c0cccc94 100644
--- a/tools/editor/icons/icon_save.png
+++ b/tools/editor/icons/icon_save.png
Binary files differ
diff --git a/tools/editor/icons/icon_script.png b/tools/editor/icons/icon_script.png
index baf5927c18..6df988c2c9 100644
--- a/tools/editor/icons/icon_script.png
+++ b/tools/editor/icons/icon_script.png
Binary files differ
diff --git a/tools/editor/icons/icon_scroll_bar.png b/tools/editor/icons/icon_scroll_bar.png
index 057cedcde4..c9adc582db 100644
--- a/tools/editor/icons/icon_scroll_bar.png
+++ b/tools/editor/icons/icon_scroll_bar.png
Binary files differ
diff --git a/tools/editor/icons/icon_scroll_container.png b/tools/editor/icons/icon_scroll_container.png
index 1fb7ebb538..dea8b63c88 100644
--- a/tools/editor/icons/icon_scroll_container.png
+++ b/tools/editor/icons/icon_scroll_container.png
Binary files differ
diff --git a/tools/editor/icons/icon_shader.png b/tools/editor/icons/icon_shader.png
index 5cccb1731a..69da895997 100644
--- a/tools/editor/icons/icon_shader.png
+++ b/tools/editor/icons/icon_shader.png
Binary files differ
diff --git a/tools/editor/icons/icon_shader_material.png b/tools/editor/icons/icon_shader_material.png
index a52981a17e..69da895997 100644
--- a/tools/editor/icons/icon_shader_material.png
+++ b/tools/editor/icons/icon_shader_material.png
Binary files differ
diff --git a/tools/editor/icons/icon_signal.png b/tools/editor/icons/icon_signal.png
index 210a2fd987..14ff48898b 100644
--- a/tools/editor/icons/icon_signal.png
+++ b/tools/editor/icons/icon_signal.png
Binary files differ
diff --git a/tools/editor/icons/icon_skeleton.png b/tools/editor/icons/icon_skeleton.png
index 1eb27fcd81..f49ddc35a5 100644
--- a/tools/editor/icons/icon_skeleton.png
+++ b/tools/editor/icons/icon_skeleton.png
Binary files differ
diff --git a/tools/editor/icons/icon_slider_joint.png b/tools/editor/icons/icon_slider_joint.png
index ce35b6bfa2..5abde77e61 100644
--- a/tools/editor/icons/icon_slider_joint.png
+++ b/tools/editor/icons/icon_slider_joint.png
Binary files differ
diff --git a/tools/editor/icons/icon_slot.png b/tools/editor/icons/icon_slot.png
index e384f636ca..69eeec0844 100644
--- a/tools/editor/icons/icon_slot.png
+++ b/tools/editor/icons/icon_slot.png
Binary files differ
diff --git a/tools/editor/icons/icon_snap.png b/tools/editor/icons/icon_snap.png
index 49fd77b040..dbcb0d1159 100644
--- a/tools/editor/icons/icon_snap.png
+++ b/tools/editor/icons/icon_snap.png
Binary files differ
diff --git a/tools/editor/icons/icon_sound_room_params.png b/tools/editor/icons/icon_sound_room_params.png
index 2d37a4b49f..14c79b7eeb 100644
--- a/tools/editor/icons/icon_sound_room_params.png
+++ b/tools/editor/icons/icon_sound_room_params.png
Binary files differ
diff --git a/tools/editor/icons/icon_spatial.png b/tools/editor/icons/icon_spatial.png
index 00932018a4..aaf7ff5406 100644
--- a/tools/editor/icons/icon_spatial.png
+++ b/tools/editor/icons/icon_spatial.png
Binary files differ
diff --git a/tools/editor/icons/icon_spatial_sample_player.png b/tools/editor/icons/icon_spatial_sample_player.png
index e680c269ce..0b97ddad9e 100644
--- a/tools/editor/icons/icon_spatial_sample_player.png
+++ b/tools/editor/icons/icon_spatial_sample_player.png
Binary files differ
diff --git a/tools/editor/icons/icon_spatial_stream_player.png b/tools/editor/icons/icon_spatial_stream_player.png
index 39de04bcbf..fc2a211fff 100644
--- a/tools/editor/icons/icon_spatial_stream_player.png
+++ b/tools/editor/icons/icon_spatial_stream_player.png
Binary files differ
diff --git a/tools/editor/icons/icon_sphere_shape.png b/tools/editor/icons/icon_sphere_shape.png
index 22ab1ac860..830780e74a 100644
--- a/tools/editor/icons/icon_sphere_shape.png
+++ b/tools/editor/icons/icon_sphere_shape.png
Binary files differ
diff --git a/tools/editor/icons/icon_spin_box.png b/tools/editor/icons/icon_spin_box.png
index fd8a99d91f..59cd5de6d7 100644
--- a/tools/editor/icons/icon_spin_box.png
+++ b/tools/editor/icons/icon_spin_box.png
Binary files differ
diff --git a/tools/editor/icons/icon_spot_light.png b/tools/editor/icons/icon_spot_light.png
index dc97591336..f0b453d837 100644
--- a/tools/editor/icons/icon_spot_light.png
+++ b/tools/editor/icons/icon_spot_light.png
Binary files differ
diff --git a/tools/editor/icons/icon_sprite.png b/tools/editor/icons/icon_sprite.png
index 957278e112..3973c7d3c9 100644
--- a/tools/editor/icons/icon_sprite.png
+++ b/tools/editor/icons/icon_sprite.png
Binary files differ
diff --git a/tools/editor/icons/icon_sprite_3d.png b/tools/editor/icons/icon_sprite_3d.png
index 260f7d4920..1acb63ff8d 100644
--- a/tools/editor/icons/icon_sprite_3d.png
+++ b/tools/editor/icons/icon_sprite_3d.png
Binary files differ
diff --git a/tools/editor/icons/icon_static_body.png b/tools/editor/icons/icon_static_body.png
index cdd20b9d5f..a4c901dee5 100644
--- a/tools/editor/icons/icon_static_body.png
+++ b/tools/editor/icons/icon_static_body.png
Binary files differ
diff --git a/tools/editor/icons/icon_static_body_2d.png b/tools/editor/icons/icon_static_body_2d.png
index f2dec31d12..a7668d8f77 100644
--- a/tools/editor/icons/icon_static_body_2d.png
+++ b/tools/editor/icons/icon_static_body_2d.png
Binary files differ
diff --git a/tools/editor/icons/icon_stream_player.png b/tools/editor/icons/icon_stream_player.png
index cf8fdcbaea..2f6b68fba3 100644
--- a/tools/editor/icons/icon_stream_player.png
+++ b/tools/editor/icons/icon_stream_player.png
Binary files differ
diff --git a/tools/editor/icons/icon_string.png b/tools/editor/icons/icon_string.png
index 4a747f7c62..8cf133c7ef 100644
--- a/tools/editor/icons/icon_string.png
+++ b/tools/editor/icons/icon_string.png
Binary files differ
diff --git a/tools/editor/icons/icon_tab_container.png b/tools/editor/icons/icon_tab_container.png
index 96da9d02c0..6778c5c1c5 100644
--- a/tools/editor/icons/icon_tab_container.png
+++ b/tools/editor/icons/icon_tab_container.png
Binary files differ
diff --git a/tools/editor/icons/icon_tabs.png b/tools/editor/icons/icon_tabs.png
new file mode 100644
index 0000000000..1b56782d28
--- /dev/null
+++ b/tools/editor/icons/icon_tabs.png
Binary files differ
diff --git a/tools/editor/icons/icon_test_cube.png b/tools/editor/icons/icon_test_cube.png
index dd0f5522d4..e379d5326d 100644
--- a/tools/editor/icons/icon_test_cube.png
+++ b/tools/editor/icons/icon_test_cube.png
Binary files differ
diff --git a/tools/editor/icons/icon_text_edit.png b/tools/editor/icons/icon_text_edit.png
index 8181f9127a..ae9a9718b3 100644
--- a/tools/editor/icons/icon_text_edit.png
+++ b/tools/editor/icons/icon_text_edit.png
Binary files differ
diff --git a/tools/editor/icons/icon_texture.png b/tools/editor/icons/icon_texture.png
index bbcc54bd6e..fac47441ed 100644
--- a/tools/editor/icons/icon_texture.png
+++ b/tools/editor/icons/icon_texture.png
Binary files differ
diff --git a/tools/editor/icons/icon_texture_button.png b/tools/editor/icons/icon_texture_button.png
index 81d60b4ddc..0233272dd1 100644
--- a/tools/editor/icons/icon_texture_button.png
+++ b/tools/editor/icons/icon_texture_button.png
Binary files differ
diff --git a/tools/editor/icons/icon_texture_frame.png b/tools/editor/icons/icon_texture_frame.png
index 8cdd91a753..c4b4cdb233 100644
--- a/tools/editor/icons/icon_texture_frame.png
+++ b/tools/editor/icons/icon_texture_frame.png
Binary files differ
diff --git a/tools/editor/icons/icon_texture_progress.png b/tools/editor/icons/icon_texture_progress.png
index 88b964f454..c223b973e4 100644
--- a/tools/editor/icons/icon_texture_progress.png
+++ b/tools/editor/icons/icon_texture_progress.png
Binary files differ
diff --git a/tools/editor/icons/icon_tile_map.png b/tools/editor/icons/icon_tile_map.png
index f7b0bdbf8f..14efcc2566 100644
--- a/tools/editor/icons/icon_tile_map.png
+++ b/tools/editor/icons/icon_tile_map.png
Binary files differ
diff --git a/tools/editor/icons/icon_timer.png b/tools/editor/icons/icon_timer.png
index e8c36ae893..20cf05a55c 100644
--- a/tools/editor/icons/icon_timer.png
+++ b/tools/editor/icons/icon_timer.png
Binary files differ
diff --git a/tools/editor/icons/icon_tool_move.png b/tools/editor/icons/icon_tool_move.png
index 7257d3897b..5d05e5e8ff 100644
--- a/tools/editor/icons/icon_tool_move.png
+++ b/tools/editor/icons/icon_tool_move.png
Binary files differ
diff --git a/tools/editor/icons/icon_tool_pan.png b/tools/editor/icons/icon_tool_pan.png
index bfe6fddf45..c94dbd476b 100644
--- a/tools/editor/icons/icon_tool_pan.png
+++ b/tools/editor/icons/icon_tool_pan.png
Binary files differ
diff --git a/tools/editor/icons/icon_tool_rotate.png b/tools/editor/icons/icon_tool_rotate.png
index 9575ceb54e..fc7b1796e9 100644
--- a/tools/editor/icons/icon_tool_rotate.png
+++ b/tools/editor/icons/icon_tool_rotate.png
Binary files differ
diff --git a/tools/editor/icons/icon_tool_scale.png b/tools/editor/icons/icon_tool_scale.png
index a94a6e7c98..bf62a7afc3 100644
--- a/tools/editor/icons/icon_tool_scale.png
+++ b/tools/editor/icons/icon_tool_scale.png
Binary files differ
diff --git a/tools/editor/icons/icon_tool_select.png b/tools/editor/icons/icon_tool_select.png
index 47683228e9..588b417df9 100644
--- a/tools/editor/icons/icon_tool_select.png
+++ b/tools/editor/icons/icon_tool_select.png
Binary files differ
diff --git a/tools/editor/icons/icon_tools.png b/tools/editor/icons/icon_tools.png
index f02d924203..0a7d7f0e4e 100644
--- a/tools/editor/icons/icon_tools.png
+++ b/tools/editor/icons/icon_tools.png
Binary files differ
diff --git a/tools/editor/icons/icon_touch_screen_button.png b/tools/editor/icons/icon_touch_screen_button.png
index 16e84927f1..e15b63f71f 100644
--- a/tools/editor/icons/icon_touch_screen_button.png
+++ b/tools/editor/icons/icon_touch_screen_button.png
Binary files differ
diff --git a/tools/editor/icons/icon_track_add_key.png b/tools/editor/icons/icon_track_add_key.png
index cc9d214387..600c7e81eb 100644
--- a/tools/editor/icons/icon_track_add_key.png
+++ b/tools/editor/icons/icon_track_add_key.png
Binary files differ
diff --git a/tools/editor/icons/icon_track_add_key_hl.png b/tools/editor/icons/icon_track_add_key_hl.png
index c78bb300b8..d9d9332131 100644
--- a/tools/editor/icons/icon_track_add_key_hl.png
+++ b/tools/editor/icons/icon_track_add_key_hl.png
Binary files differ
diff --git a/tools/editor/icons/icon_track_continuous.png b/tools/editor/icons/icon_track_continuous.png
index 9f99891c21..a7494a71b4 100644
--- a/tools/editor/icons/icon_track_continuous.png
+++ b/tools/editor/icons/icon_track_continuous.png
Binary files differ
diff --git a/tools/editor/icons/icon_track_discrete.png b/tools/editor/icons/icon_track_discrete.png
index 4e65e49afb..b2e8c7a69e 100644
--- a/tools/editor/icons/icon_track_discrete.png
+++ b/tools/editor/icons/icon_track_discrete.png
Binary files differ
diff --git a/tools/editor/icons/icon_translation.png b/tools/editor/icons/icon_translation.png
index 917c6f548a..7dfd00e83c 100644
--- a/tools/editor/icons/icon_translation.png
+++ b/tools/editor/icons/icon_translation.png
Binary files differ
diff --git a/tools/editor/icons/icon_transpose.png b/tools/editor/icons/icon_transpose.png
index f9b78bc0fd..4a119e44f4 100644
--- a/tools/editor/icons/icon_transpose.png
+++ b/tools/editor/icons/icon_transpose.png
Binary files differ
diff --git a/tools/editor/icons/icon_tree.png b/tools/editor/icons/icon_tree.png
index 3694a90060..2126f09eb5 100644
--- a/tools/editor/icons/icon_tree.png
+++ b/tools/editor/icons/icon_tree.png
Binary files differ
diff --git a/tools/editor/icons/icon_tween.png b/tools/editor/icons/icon_tween.png
new file mode 100644
index 0000000000..ce33013b36
--- /dev/null
+++ b/tools/editor/icons/icon_tween.png
Binary files differ
diff --git a/tools/editor/icons/icon_unbone.png b/tools/editor/icons/icon_unbone.png
index c8cd774460..726d41527b 100644
--- a/tools/editor/icons/icon_unbone.png
+++ b/tools/editor/icons/icon_unbone.png
Binary files differ
diff --git a/tools/editor/icons/icon_ungroup.png b/tools/editor/icons/icon_ungroup.png
index 4ea620bf96..38a1983785 100644
--- a/tools/editor/icons/icon_ungroup.png
+++ b/tools/editor/icons/icon_ungroup.png
Binary files differ
diff --git a/tools/editor/icons/icon_unlock.png b/tools/editor/icons/icon_unlock.png
index f9fa31c3e0..591a887a6c 100644
--- a/tools/editor/icons/icon_unlock.png
+++ b/tools/editor/icons/icon_unlock.png
Binary files differ
diff --git a/tools/editor/icons/icon_up.png b/tools/editor/icons/icon_up.png
index ec1e090f86..346c4cdba8 100644
--- a/tools/editor/icons/icon_up.png
+++ b/tools/editor/icons/icon_up.png
Binary files differ
diff --git a/tools/editor/icons/icon_uv.png b/tools/editor/icons/icon_uv.png
index 39bc737a37..0ce9ec2942 100644
--- a/tools/editor/icons/icon_uv.png
+++ b/tools/editor/icons/icon_uv.png
Binary files differ
diff --git a/tools/editor/icons/icon_v_box_container.png b/tools/editor/icons/icon_v_box_container.png
index 38b5a4f3f2..4f962e8793 100644
--- a/tools/editor/icons/icon_v_box_container.png
+++ b/tools/editor/icons/icon_v_box_container.png
Binary files differ
diff --git a/tools/editor/icons/icon_v_button_array.png b/tools/editor/icons/icon_v_button_array.png
index cf7c269020..5c7747be3a 100644
--- a/tools/editor/icons/icon_v_button_array.png
+++ b/tools/editor/icons/icon_v_button_array.png
Binary files differ
diff --git a/tools/editor/icons/icon_v_scroll_bar.png b/tools/editor/icons/icon_v_scroll_bar.png
index ac57e8abec..bb4243cd8c 100644
--- a/tools/editor/icons/icon_v_scroll_bar.png
+++ b/tools/editor/icons/icon_v_scroll_bar.png
Binary files differ
diff --git a/tools/editor/icons/icon_v_separator.png b/tools/editor/icons/icon_v_separator.png
index 49fcc830e3..40d1fb7b88 100644
--- a/tools/editor/icons/icon_v_separator.png
+++ b/tools/editor/icons/icon_v_separator.png
Binary files differ
diff --git a/tools/editor/icons/icon_v_slider.png b/tools/editor/icons/icon_v_slider.png
index 91ba0c70db..a03042d5f5 100644
--- a/tools/editor/icons/icon_v_slider.png
+++ b/tools/editor/icons/icon_v_slider.png
Binary files differ
diff --git a/tools/editor/icons/icon_v_split_container.png b/tools/editor/icons/icon_v_split_container.png
index b39574c72b..306e591087 100644
--- a/tools/editor/icons/icon_v_split_container.png
+++ b/tools/editor/icons/icon_v_split_container.png
Binary files differ
diff --git a/tools/editor/icons/icon_vector.png b/tools/editor/icons/icon_vector.png
index 0bda8ff7c0..e2581aad2f 100644
--- a/tools/editor/icons/icon_vector.png
+++ b/tools/editor/icons/icon_vector.png
Binary files differ
diff --git a/tools/editor/icons/icon_vector2.png b/tools/editor/icons/icon_vector2.png
index 5bfd08f52a..6b3857b04b 100644
--- a/tools/editor/icons/icon_vector2.png
+++ b/tools/editor/icons/icon_vector2.png
Binary files differ
diff --git a/tools/editor/icons/icon_vehicle_body.png b/tools/editor/icons/icon_vehicle_body.png
index 1c6af388eb..23709b0918 100644
--- a/tools/editor/icons/icon_vehicle_body.png
+++ b/tools/editor/icons/icon_vehicle_body.png
Binary files differ
diff --git a/tools/editor/icons/icon_vehicle_wheel.png b/tools/editor/icons/icon_vehicle_wheel.png
index 161283e1bf..0f3b49bec9 100644
--- a/tools/editor/icons/icon_vehicle_wheel.png
+++ b/tools/editor/icons/icon_vehicle_wheel.png
Binary files differ
diff --git a/tools/editor/icons/icon_video_player.png b/tools/editor/icons/icon_video_player.png
index 785678cc2a..3231bb191e 100644
--- a/tools/editor/icons/icon_video_player.png
+++ b/tools/editor/icons/icon_video_player.png
Binary files differ
diff --git a/tools/editor/icons/icon_viewport.png b/tools/editor/icons/icon_viewport.png
index 3859f6c7e9..6bec84ef4a 100644
--- a/tools/editor/icons/icon_viewport.png
+++ b/tools/editor/icons/icon_viewport.png
Binary files differ
diff --git a/tools/editor/icons/icon_viewport_sprite.png b/tools/editor/icons/icon_viewport_sprite.png
new file mode 100644
index 0000000000..c37fcdf144
--- /dev/null
+++ b/tools/editor/icons/icon_viewport_sprite.png
Binary files differ
diff --git a/tools/editor/icons/icon_visibility_enabler.png b/tools/editor/icons/icon_visibility_enabler.png
index 7216ddc34e..579921a8c0 100644
--- a/tools/editor/icons/icon_visibility_enabler.png
+++ b/tools/editor/icons/icon_visibility_enabler.png
Binary files differ
diff --git a/tools/editor/icons/icon_visibility_enabler_2d.png b/tools/editor/icons/icon_visibility_enabler_2d.png
index aad3fbc70f..97d4b0c128 100644
--- a/tools/editor/icons/icon_visibility_enabler_2d.png
+++ b/tools/editor/icons/icon_visibility_enabler_2d.png
Binary files differ
diff --git a/tools/editor/icons/icon_visibility_notifier.png b/tools/editor/icons/icon_visibility_notifier.png
index 5fd3162522..f3c0099706 100644
--- a/tools/editor/icons/icon_visibility_notifier.png
+++ b/tools/editor/icons/icon_visibility_notifier.png
Binary files differ
diff --git a/tools/editor/icons/icon_visibility_notifier_2d.png b/tools/editor/icons/icon_visibility_notifier_2d.png
index 1ac868584d..6f9b6556bb 100644
--- a/tools/editor/icons/icon_visibility_notifier_2d.png
+++ b/tools/editor/icons/icon_visibility_notifier_2d.png
Binary files differ
diff --git a/tools/editor/icons/icon_visible.png b/tools/editor/icons/icon_visible.png
index cbc44c4e30..b34368ab52 100644
--- a/tools/editor/icons/icon_visible.png
+++ b/tools/editor/icons/icon_visible.png
Binary files differ
diff --git a/tools/editor/icons/icon_vu_empty.png b/tools/editor/icons/icon_vu_empty.png
index aefc7b77ad..94534ecc1d 100644
--- a/tools/editor/icons/icon_vu_empty.png
+++ b/tools/editor/icons/icon_vu_empty.png
Binary files differ
diff --git a/tools/editor/icons/icon_vu_full.png b/tools/editor/icons/icon_vu_full.png
index 41f02b8d10..f5cd415321 100644
--- a/tools/editor/icons/icon_vu_full.png
+++ b/tools/editor/icons/icon_vu_full.png
Binary files differ
diff --git a/tools/editor/icons/icon_warning.png b/tools/editor/icons/icon_warning.png
index e8dc3496ed..a6c067db68 100644
--- a/tools/editor/icons/icon_warning.png
+++ b/tools/editor/icons/icon_warning.png
Binary files differ
diff --git a/tools/editor/icons/icon_window_dialog.png b/tools/editor/icons/icon_window_dialog.png
index 336da61d57..ae2f5c2b21 100644
--- a/tools/editor/icons/icon_window_dialog.png
+++ b/tools/editor/icons/icon_window_dialog.png
Binary files differ
diff --git a/tools/editor/icons/icon_world_environment.png b/tools/editor/icons/icon_world_environment.png
index b5cc110bbd..5daca30c2e 100644
--- a/tools/editor/icons/icon_world_environment.png
+++ b/tools/editor/icons/icon_world_environment.png
Binary files differ
diff --git a/tools/editor/icons/icon_y_sort.png b/tools/editor/icons/icon_y_sort.png
index 6f80fac156..1cb4df64af 100644
--- a/tools/editor/icons/icon_y_sort.png
+++ b/tools/editor/icons/icon_y_sort.png
Binary files differ
diff --git a/tools/editor/icons/icon_zoom.png b/tools/editor/icons/icon_zoom.png
index e4bbbfe7c3..c89672c8cb 100644
--- a/tools/editor/icons/icon_zoom.png
+++ b/tools/editor/icons/icon_zoom.png
Binary files differ
diff --git a/tools/editor/icons/source/icon_accept_dialog.svg b/tools/editor/icons/source/icon_accept_dialog.svg
new file mode 100644
index 0000000000..8d2c307691
--- /dev/null
+++ b/tools/editor/icons/source/icon_accept_dialog.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_confirmation_dialog.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_accept_dialog.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="6.0807642"
+ inkscape:cy="9.1331382"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3 1 C 1.89543 1 1 1.8954 1 3 L 1 4 L 15 4 L 15 3 C 15 1.8954 14.104569 1 13 1 L 3 1 z M 12 2 L 13 2 L 13 3 L 12 3 L 12 2 z M 1 5 L 1 13 C 1 14.1046 1.89543 15 3 15 L 13 15 C 14.104569 15 15 14.1046 15 13 L 15 5 L 1 5 z M 10.474609 6.6367188 L 11.888672 8.0507812 L 8.3535156 11.585938 L 6.9394531 13 L 5.5253906 11.585938 L 4.1113281 10.171875 L 5.5253906 8.7578125 L 6.9394531 10.171875 L 10.474609 6.6367188 z "
+ transform="translate(0,1036.3622)"
+ id="rect4140" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_add_track.svg b/tools/editor/icons/source/icon_add_track.svg
new file mode 100644
index 0000000000..916199d29e
--- /dev/null
+++ b/tools/editor/icons/source/icon_add_track.svg
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_add_track (copy).svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000001"
+ inkscape:cx="4.2247291"
+ inkscape:cy="8.9595523"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4137"
+ width="14"
+ height="1.9999478"
+ x="1"
+ y="1043.3622" />
+ <rect
+ y="-9"
+ x="1037.3622"
+ height="2.0000017"
+ width="13.999966"
+ id="rect4158"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="matrix(0,1,-1,0,0,0)" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_anchor.svg b/tools/editor/icons/source/icon_anchor.svg
new file mode 100644
index 0000000000..ff43271224
--- /dev/null
+++ b/tools/editor/icons/source/icon_anchor.svg
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_anchor.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_anchor (copy).svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="5.8188721"
+ inkscape:cy="10.181863"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 1 A 3 3.0000043 0 0 0 5 4 A 3 3.0000043 0 0 0 8 7 A 3 3.0000043 0 0 0 11 4 A 3 3.0000043 0 0 0 8 1 z M 8 3 A 1.000016 1.0000174 0 0 1 9 4 A 1.000016 1.0000174 0 0 1 8 5 A 1.000016 1.0000174 0 0 1 7 4 A 1.000016 1.0000174 0 0 1 8 3 z "
+ transform="translate(0,1036.3622)"
+ id="path4142" />
+ <rect
+ y="1042.3622"
+ x="7"
+ height="7.0000172"
+ width="2"
+ id="rect4148"
+ style="fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 12.824219 9.2929688 A 5.0000172 5.0000172 0 0 1 8 13 A 5.0000172 5.0000172 0 0 1 3.171875 9.2949219 L 1.2382812 9.8125 A 7 7 0 0 0 8 15 A 7 7 0 0 0 14.761719 9.8125 L 12.824219 9.2929688 z "
+ transform="translate(0,1036.3622)"
+ id="path4150" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4155"
+ width="6"
+ height="2"
+ x="5"
+ y="1043.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_animated_sprite.svg b/tools/editor/icons/source/icon_animated_sprite.svg
new file mode 100644
index 0000000000..36ccd8bca2
--- /dev/null
+++ b/tools/editor/icons/source/icon_animated_sprite.svg
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_animated_sprite.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_animated_sprite (copy).svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="5.8151157"
+ inkscape:cy="10.058181"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#c4d0f5;fill-opacity:0.39215687;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 10.5 0 A 5.5 5.4999914 0 0 0 5.1699219 4.1699219 A 5.5 5.4999914 0 0 1 6.5 4 A 5.5 5.4999914 0 0 1 12 9.5 A 5.5 5.4999914 0 0 1 11.830078 10.830078 A 5.5 5.4999914 0 0 0 16 5.5 A 5.5 5.4999914 0 0 0 10.5 0 z "
+ transform="translate(0,1036.3622)"
+ id="ellipse4157" />
+ <path
+ style="opacity:1;fill:#a5b7f1;fill-opacity:0.58823532;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8.5 2 A 5.5 5.4999914 0 0 0 3.7441406 4.7480469 A 5.5 5.4999914 0 0 1 6.5 4 A 5.5 5.4999914 0 0 1 12 9.5 A 5.5 5.4999914 0 0 1 11.255859 12.251953 A 5.5 5.4999914 0 0 0 14 7.5 A 5.5 5.4999914 0 0 0 8.5 2 z "
+ transform="translate(0,1036.3622)"
+ id="ellipse4155" />
+ <path
+ style="opacity:1;fill:#a5b7f0;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 6.5 4 A 5.5 5.4999914 0 0 0 1 9.5 A 5.5 5.4999914 0 0 0 6.5 15 A 5.5 5.4999914 0 0 0 12 9.5 A 5.5 5.4999914 0 0 0 6.5 4 z M 4 8 A 1.0000174 1.0000174 0 0 1 5 9 A 1.0000174 1.0000174 0 0 1 4 10 A 1.0000174 1.0000174 0 0 1 3 9 A 1.0000174 1.0000174 0 0 1 4 8 z M 9 8 A 1.0000174 1.0000174 0 0 1 10 9 A 1.0000174 1.0000174 0 0 1 9 10 A 1.0000174 1.0000174 0 0 1 8 9 A 1.0000174 1.0000174 0 0 1 9 8 z M 4 11 L 9 11 A 2.5 1.9999825 0 0 1 7.75 12.732422 A 2.5 1.9999825 0 0 1 5.25 12.732422 A 2.5 1.9999825 0 0 1 4 11 z "
+ transform="translate(0,1036.3622)"
+ id="path4139" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_animated_sprite_3d.svg b/tools/editor/icons/source/icon_animated_sprite_3d.svg
new file mode 100644
index 0000000000..f088c9e32d
--- /dev/null
+++ b/tools/editor/icons/source/icon_animated_sprite_3d.svg
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_animated_sprite.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_animated_sprite_3d.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="1.5963657"
+ inkscape:cy="10.401931"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.39215687;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 10.5 0 A 5.5 5.4999914 0 0 0 5.1699219 4.1699219 A 5.5 5.4999914 0 0 1 6.5 4 A 5.5 5.4999914 0 0 1 12 9.5 A 5.5 5.4999914 0 0 1 11.830078 10.830078 A 5.5 5.4999914 0 0 0 16 5.5 A 5.5 5.4999914 0 0 0 10.5 0 z "
+ transform="translate(0,1036.3622)"
+ id="ellipse4157" />
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.58823532;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8.5 2 A 5.5 5.4999914 0 0 0 3.7441406 4.7480469 A 5.5 5.4999914 0 0 1 6.5 4 A 5.5 5.4999914 0 0 1 12 9.5 A 5.5 5.4999914 0 0 1 11.255859 12.251953 A 5.5 5.4999914 0 0 0 14 7.5 A 5.5 5.4999914 0 0 0 8.5 2 z "
+ transform="translate(0,1036.3622)"
+ id="ellipse4155" />
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 6.5 4 A 5.5 5.4999914 0 0 0 1 9.5 A 5.5 5.4999914 0 0 0 6.5 15 A 5.5 5.4999914 0 0 0 12 9.5 A 5.5 5.4999914 0 0 0 6.5 4 z M 4 8 A 1.0000174 1.0000174 0 0 1 5 9 A 1.0000174 1.0000174 0 0 1 4 10 A 1.0000174 1.0000174 0 0 1 3 9 A 1.0000174 1.0000174 0 0 1 4 8 z M 9 8 A 1.0000174 1.0000174 0 0 1 10 9 A 1.0000174 1.0000174 0 0 1 9 10 A 1.0000174 1.0000174 0 0 1 8 9 A 1.0000174 1.0000174 0 0 1 9 8 z M 4 11 L 9 11 A 2.5 1.9999825 0 0 1 7.75 12.732422 A 2.5 1.9999825 0 0 1 5.25 12.732422 A 2.5 1.9999825 0 0 1 4 11 z "
+ transform="translate(0,1036.3622)"
+ id="path4139" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_animation.svg b/tools/editor/icons/source/icon_animation.svg
new file mode 100644
index 0000000000..38d73cf5bb
--- /dev/null
+++ b/tools/editor/icons/source/icon_animation.svg
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_animation.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_animation.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="64"
+ inkscape:cx="10.327464"
+ inkscape:cy="2.5689331"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 2 A 6 6 0 0 0 2 8 A 6 6 0 0 0 8 14 A 6 6 0 0 0 14 8 A 6 6 0 0 0 8 2 z M 8 3 A 1 1 0 0 1 9 4 A 1 1 0 0 1 8 5 A 1 1 0 0 1 7 4 A 1 1 0 0 1 8 3 z M 11.441406 5 A 1 1 0 0 1 12.330078 5.5 A 1 1 0 0 1 11.964844 6.8652344 A 1 1 0 0 1 10.597656 6.5 A 1 1 0 0 1 10.964844 5.1347656 A 1 1 0 0 1 11.441406 5 z M 4.4882812 5.0019531 A 1 1 0 0 1 5.0351562 5.1347656 A 1 1 0 0 1 5.4023438 6.5 A 1 1 0 0 1 4.0351562 6.8652344 A 1 1 0 0 1 3.6699219 5.5 A 1 1 0 0 1 4.4882812 5.0019531 z M 4.5117188 9 A 1 1 0 0 1 5.4023438 9.5 A 1 1 0 0 1 5.0351562 10.865234 A 1 1 0 0 1 3.6699219 10.5 A 1 1 0 0 1 4.0351562 9.1347656 A 1 1 0 0 1 4.5117188 9 z M 11.416016 9.0019531 A 1 1 0 0 1 11.964844 9.1347656 A 1 1 0 0 1 12.330078 10.5 A 1 1 0 0 1 10.964844 10.865234 A 1 1 0 0 1 10.597656 9.5 A 1 1 0 0 1 11.416016 9.0019531 z M 8 11 A 1 1 0 0 1 9 12 A 1 1 0 0 1 8 13 A 1 1 0 0 1 7 12 A 1 1 0 0 1 8 11 z "
+ transform="translate(0,1036.3622)"
+ id="path4140" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 13 8 L 13 14 A 1 1 0 0 0 14 15 L 15 15 L 15 14 L 14 14 L 14 13 L 14 8 L 13 8 z "
+ transform="translate(0,1036.3622)"
+ id="rect4202" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 14 13.5 L 14 14 L 14.5 14 A 0.5 0.4999913 0 0 1 14 13.5 z "
+ transform="translate(0,1036.3622)"
+ id="rect4215" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4137"
+ width="1"
+ height="3.0000174"
+ x="12"
+ y="1047.3622" />
+ <path
+ id="path4139"
+ transform="translate(0,1036.3622)"
+ d="M 13 8 L 13 14 A 1 1 0 0 0 14 15 L 15 15 L 15 14 L 14 14 L 14 13 L 14 8 L 13 8 z "
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="1050.3622"
+ x="14"
+ height="2"
+ width="1"
+ id="rect4141"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="path4145"
+ sodipodi:type="arc"
+ sodipodi:cx="14"
+ sodipodi:cy="1050.3622"
+ sodipodi:rx="2"
+ sodipodi:ry="2"
+ sodipodi:start="1.5707963"
+ sodipodi:end="4.712389"
+ d="m 14,1052.3622 a 2,2 0 0 1 -1.732051,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.732051,-1"
+ sodipodi:open="true" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_animation_player.svg b/tools/editor/icons/source/icon_animation_player.svg
new file mode 100644
index 0000000000..add4d5ac42
--- /dev/null
+++ b/tools/editor/icons/source/icon_animation_player.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_animation_player.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_animation_player (copy).svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999998"
+ inkscape:cx="8.7610995"
+ inkscape:cy="9.3751685"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e1cb50;fill-opacity:0.98431373;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 1,1037.3622 0,14 1.1666666,0 0,-2 1.8333334,0 0,2 8,0 0,-2 2,0 0,2 1,0 0,-14 -1,0 0,2 -2,0 0,-2 -8,0 0,2 -1.8333334,0 0,-2 z m 1.1666666,4 1.8333334,0 0,2 -1.8333334,0 z m 9.8333334,0 2,0 0,2 -2,0 z m -9.8333334,4 1.8333334,0 0,2 -1.8333334,0 z m 9.8333334,0 2,0 0,2 -2,0 z"
+ id="rect4136"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_animation_tree_player.svg b/tools/editor/icons/source/icon_animation_tree_player.svg
new file mode 100644
index 0000000000..ab81cb226a
--- /dev/null
+++ b/tools/editor/icons/source/icon_animation_tree_player.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_animation_tree_player.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_animation_tree_player (copy).svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254831"
+ inkscape:cx="9.7184474"
+ inkscape:cy="8.2407739"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e1cb50;fill-opacity:0.98431373;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 1 1 L 1 15 L 2.1660156 15 L 2.1660156 13 L 4 13 L 4 15 L 12 15 L 12 13 L 14 13 L 14 15 L 15 15 L 15 1 L 14 1 L 14 3 L 12 3 L 12 1 L 4 1 L 4 3 L 2.1660156 3 L 2.1660156 1 L 1 1 z M 2.1660156 5 L 4 5 L 4 7 L 2.1660156 7 L 2.1660156 5 z M 8 5 A 1 1 0 0 1 9 6 A 1 1 0 0 1 8.8339844 6.5507812 L 10.060547 9.0039062 A 1 1 0 0 1 11 10 A 1 1 0 0 1 10 11 A 1 1 0 0 1 9 10 A 1 1 0 0 1 9.1660156 9.4492188 L 8 7.1171875 L 6.8339844 9.4492188 A 1 1 0 0 1 7 10 A 1 1 0 0 1 6 11 A 1 1 0 0 1 5 10 A 1 1 0 0 1 5.9414062 9.0019531 L 7.1660156 6.5507812 A 1 1 0 0 1 7 6 A 1 1 0 0 1 8 5 z M 12 5 L 14 5 L 14 7 L 12 7 L 12 5 z M 2.1660156 9 L 4 9 L 4 11 L 2.1660156 11 L 2.1660156 9 z M 12 9 L 14 9 L 14 11 L 12 11 L 12 9 z "
+ transform="translate(0,1036.3622)"
+ id="rect4136" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_area.svg b/tools/editor/icons/source/icon_area.svg
new file mode 100644
index 0000000000..d56043cf3b
--- /dev/null
+++ b/tools/editor/icons/source/icon_area.svg
@@ -0,0 +1,164 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_area.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_area.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="5.5000497"
+ inkscape:cy="8.7464605"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4148"
+ width="2"
+ height="4"
+ x="1"
+ y="1047.3622" />
+ <rect
+ y="1049.3622"
+ x="1"
+ height="1.9999304"
+ width="4"
+ id="rect4150"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="1040.3622"
+ x="4"
+ height="8.0000172"
+ width="2"
+ id="rect4152"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="-1041.3622"
+ x="1"
+ height="4"
+ width="2"
+ id="rect4154"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="scale(1,-1)" />
+ <rect
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4156"
+ width="4"
+ height="1.9999304"
+ x="1"
+ y="-1039.3622"
+ transform="scale(1,-1)" />
+ <rect
+ transform="scale(-1,-1)"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4158"
+ width="2"
+ height="4"
+ x="-15"
+ y="-1041.3622" />
+ <rect
+ transform="scale(-1,-1)"
+ y="-1039.3622"
+ x="-15"
+ height="1.9999304"
+ width="4"
+ id="rect4160"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="1047.3623"
+ x="-15"
+ height="4"
+ width="2"
+ id="rect4162"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="scale(-1,1)" />
+ <rect
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4164"
+ width="4"
+ height="1.9999304"
+ x="-15"
+ y="1049.3623"
+ transform="scale(-1,1)" />
+ <rect
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4168"
+ width="8"
+ height="1.9999998"
+ x="4"
+ y="1046.3622" />
+ <rect
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4170"
+ width="2"
+ height="8.0000172"
+ x="-12"
+ y="-1048.3622"
+ transform="scale(-1,-1)" />
+ <rect
+ y="-1042.3622"
+ x="-12"
+ height="1.9999998"
+ width="8"
+ id="rect4172"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="scale(-1,-1)" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_area_2d.svg b/tools/editor/icons/source/icon_area_2d.svg
new file mode 100644
index 0000000000..1373d9f0e4
--- /dev/null
+++ b/tools/editor/icons/source/icon_area_2d.svg
@@ -0,0 +1,164 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_area.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_area_2d.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.313709"
+ inkscape:cx="14.936968"
+ inkscape:cy="11.331549"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#a5b7f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4148"
+ width="2"
+ height="4"
+ x="1"
+ y="1047.3622" />
+ <rect
+ y="1049.3622"
+ x="1"
+ height="1.9999304"
+ width="4"
+ id="rect4150"
+ style="opacity:1;fill:#a5b7f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="1040.3622"
+ x="4"
+ height="8.0000172"
+ width="2"
+ id="rect4152"
+ style="opacity:1;fill:#a5b7f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="-1041.3622"
+ x="1"
+ height="4"
+ width="2"
+ id="rect4154"
+ style="opacity:1;fill:#a5b7f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="scale(1,-1)" />
+ <rect
+ style="opacity:1;fill:#a5b7f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4156"
+ width="4"
+ height="1.9999304"
+ x="1"
+ y="-1039.3622"
+ transform="scale(1,-1)" />
+ <rect
+ transform="scale(-1,-1)"
+ style="opacity:1;fill:#a5b7f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4158"
+ width="2"
+ height="4"
+ x="-15"
+ y="-1041.3622" />
+ <rect
+ transform="scale(-1,-1)"
+ y="-1039.3622"
+ x="-15"
+ height="1.9999304"
+ width="4"
+ id="rect4160"
+ style="opacity:1;fill:#a5b7f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="1047.3623"
+ x="-15"
+ height="4"
+ width="2"
+ id="rect4162"
+ style="opacity:1;fill:#a5b7f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="scale(-1,1)" />
+ <rect
+ style="opacity:1;fill:#a5b7f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4164"
+ width="4"
+ height="1.9999304"
+ x="-15"
+ y="1049.3623"
+ transform="scale(-1,1)" />
+ <rect
+ style="opacity:1;fill:#a5b7f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4168"
+ width="8"
+ height="1.9999998"
+ x="4"
+ y="1046.3622" />
+ <rect
+ style="opacity:1;fill:#a5b7f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4170"
+ width="2"
+ height="8.0000172"
+ x="-12"
+ y="-1048.3622"
+ transform="scale(-1,-1)" />
+ <rect
+ y="-1042.3622"
+ x="-12"
+ height="1.9999998"
+ width="8"
+ id="rect4172"
+ style="opacity:1;fill:#a5b7f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="scale(-1,-1)" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_arrow_left.svg b/tools/editor/icons/source/icon_arrow_left.svg
new file mode 100644
index 0000000000..7af9be05d8
--- /dev/null
+++ b/tools/editor/icons/source/icon_arrow_left.svg
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_arrow_left.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_arrow_left.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="5.5903114"
+ inkscape:cy="9.1977698"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4352"
+ width="9"
+ height="2.0000174"
+ x="6"
+ y="1043.3622" />
+ <path
+ transform="matrix(0,1.2810265,0.92450034,0,964.29952,1037.9571)"
+ inkscape:transform-center-y="-9.6789057e-05"
+ d="m 8.122499,-1036.5594 -3.122499,0 -3.122499,0 1.5612495,-2.7042 L 5,-1041.9677 l 1.5612495,2.7041 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="false"
+ sodipodi:arg2="1.5707963"
+ sodipodi:arg1="0.52359878"
+ sodipodi:r2="1.8027756"
+ sodipodi:r1="3.6055512"
+ sodipodi:cy="-1038.3622"
+ sodipodi:cx="5"
+ sodipodi:sides="3"
+ id="path4435"
+ style="fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-linecap:round;stroke-opacity:1"
+ sodipodi:type="star"
+ inkscape:transform-center-x="1.1667546" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_arrow_right.svg b/tools/editor/icons/source/icon_arrow_right.svg
new file mode 100644
index 0000000000..860a6f1481
--- /dev/null
+++ b/tools/editor/icons/source/icon_arrow_right.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_arrow_left.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_arrow_right.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="6.7465614"
+ inkscape:cy="9.3227698"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 10,1048.3622 2.5,-2 2.5,-2 -2.5,-2 -2.5,-2 0,3 -9,0 0,2 9,0 0,3 z"
+ id="rect4352"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_arrow_up.svg b/tools/editor/icons/source/icon_arrow_up.svg
new file mode 100644
index 0000000000..c1839cd69e
--- /dev/null
+++ b/tools/editor/icons/source/icon_arrow_up.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_arrow_left.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_arrow_up.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="6.7465614"
+ inkscape:cy="9.3227698"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 12,1042.3622 -2,-2.5 -2,-2.5 -2,2.5 -2,2.5 3,0 0,9 2,0 0,-9 3,0 z"
+ id="rect4352"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_atlas_texture.svg b/tools/editor/icons/source/icon_atlas_texture.svg
new file mode 100644
index 0000000000..10c8b745b6
--- /dev/null
+++ b/tools/editor/icons/source/icon_atlas_texture.svg
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_atlas_texture.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_atlas_texture (copy).svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="4.5596884"
+ inkscape:cy="8.8938998"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 6,1037.3622 -5,2 0,12 5,-2 4,2 5,-2 0,-12 -5,2 z m 0,2 4,2 0,8 -4,-2 z"
+ id="rect4139"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_audio_stream_gibberish.svg b/tools/editor/icons/source/icon_audio_stream_gibberish.svg
new file mode 100644
index 0000000000..82b48c7004
--- /dev/null
+++ b/tools/editor/icons/source/icon_audio_stream_gibberish.svg
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_audio_stream_gibberish.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="5.8942052"
+ inkscape:cy="11.683238"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99215686;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3 2 A 2 1.9999913 0 0 0 1 4 L 1 9 A 2 1.9999913 0 0 0 3 11 L 13 11 A 2 1.9999913 0 0 0 15 9 L 15 4 A 2 1.9999913 0 0 0 13 2 L 3 2 z M 3 6 L 5 6 L 5 7 L 3 7 L 3 6 z M 8 6 A 1 1 0 0 1 9 7 L 9 8 A 1 1 0 0 1 8 9 A 1 1 0 0 1 7 8 L 7 7 A 1 1 0 0 1 8 6 z M 11 6 L 13 6 L 13 7 L 11 7 L 11 6 z "
+ transform="translate(0,1036.3622)"
+ id="rect4154" />
+ <path
+ style="fill:#e1e1e1;fill-opacity:0.99215686;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 6,1047.3622 0,3 3,-3 z"
+ id="path4173"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_auto_play.svg b/tools/editor/icons/source/icon_auto_play.svg
new file mode 100644
index 0000000000..00bc96aac5
--- /dev/null
+++ b/tools/editor/icons/source/icon_auto_play.svg
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_auto_play.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="64"
+ inkscape:cx="6.4431479"
+ inkscape:cy="7.7277865"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ d="m 2,1049.3622 0,-10 8,0 4,5 -4,5 z"
+ id="path4164"
+ inkscape:connector-curvature="0" />
+ <rect
+ y="1043.3622"
+ x="4"
+ height="3.9999824"
+ width="1"
+ id="rect4162"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="fill:#e0e0e0;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
+ d="m 11,1044.3622 -2,-2 0,4 z"
+ id="path4166"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4168"
+ width="1"
+ height="3.9999824"
+ x="7"
+ y="1043.3622" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4170"
+ width="2"
+ height="0.99994755"
+ x="5"
+ y="1044.3622" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 6 5 C 4.8954305 5 4 5.8954 4 7 L 5 7 A 1 1 0 0 1 6 6 A 1 1 0 0 1 7 7 L 8 7 C 8 5.8954 7.1045695 5 6 5 z "
+ transform="translate(0,1036.3622)"
+ id="path4172" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_back.svg b/tools/editor/icons/source/icon_back.svg
new file mode 100644
index 0000000000..597a1c3068
--- /dev/null
+++ b/tools/editor/icons/source/icon_back.svg
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="8"
+ height="16"
+ viewBox="0 0 8 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_back.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="4.4850647"
+ inkscape:cy="8.9717887"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#e0e0e0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 5.9707031,1037.3633 c -0.3235485,0.01 -0.622658,0.1743 -0.8027343,0.4433 l -4,6 c -0.22390586,0.3359 -0.22390586,0.7735 0,1.1094 l 4,6 C 5.716941,1051.7388 6.999645,1051.3504 7,1050.3613 l 0,-12 c -9.424e-4,-0.5631 -0.4664154,-1.0144 -1.0292969,-0.998 z"
+ id="path4159"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_back_buffer_copy.svg b/tools/editor/icons/source/icon_back_buffer_copy.svg
new file mode 100644
index 0000000000..150421d7dd
--- /dev/null
+++ b/tools/editor/icons/source/icon_back_buffer_copy.svg
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_back_buffer_copy.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_back_buffer_copy.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="12.102474"
+ inkscape:cy="8.4888344"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#a5b7f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4146"
+ width="2"
+ height="9"
+ x="1"
+ y="1037.3622" />
+ <rect
+ y="1037.3622"
+ x="1"
+ height="2.0000174"
+ width="8"
+ id="rect4148"
+ style="opacity:1;fill:#a5b7f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="-1051.3622"
+ x="-15"
+ height="9"
+ width="2"
+ id="rect4150"
+ style="opacity:1;fill:#a5b7f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="scale(-1,-1)" />
+ <rect
+ style="opacity:1;fill:#a5b7f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4152"
+ width="7"
+ height="2.0000174"
+ x="-15"
+ y="-1051.3622"
+ transform="scale(-1,-1)" />
+ <rect
+ transform="scale(-1,-1)"
+ style="opacity:1;fill:#a5b7f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4154"
+ width="2"
+ height="9"
+ x="-9"
+ y="-1051.3622" />
+ <rect
+ style="opacity:1;fill:#a5b7f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4156"
+ width="8"
+ height="2.0000174"
+ x="7"
+ y="1040.3622" />
+ <rect
+ style="opacity:1;fill:#a5b7f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4158"
+ width="5"
+ height="2.0000174"
+ x="1"
+ y="1046.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_bake.svg b/tools/editor/icons/source/icon_bake.svg
new file mode 100644
index 0000000000..7f1e9b4ae8
--- /dev/null
+++ b/tools/editor/icons/source/icon_bake.svg
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_bake.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="4.5449307"
+ inkscape:cy="12.981869"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 1 4 L 1 13 A 2 2.0000174 0 0 0 3 15 L 13 15 A 2 2.0000174 0 0 0 15 13 L 15 4 L 1 4 z M 3 5 L 4 5 L 4 6 L 3 6 L 3 5 z M 6 5 L 7 5 L 7 6 L 6 6 L 6 5 z M 9 5 L 10 5 L 10 6 L 9 6 L 9 5 z M 12 5 L 13 5 L 13 6 L 12 6 L 12 5 z M 3 7 L 13 7 L 13 13 L 3 13 L 3 7 z "
+ transform="translate(0,1036.3622)"
+ id="rect4155" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4173"
+ width="12"
+ height="2.0000174"
+ x="2"
+ y="1037.3622" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4159"
+ width="4"
+ height="1.0000174"
+ x="6"
+ y="1044.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_baked_light.svg b/tools/editor/icons/source/icon_baked_light.svg
new file mode 100644
index 0000000000..7f1e9b4ae8
--- /dev/null
+++ b/tools/editor/icons/source/icon_baked_light.svg
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_bake.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="4.5449307"
+ inkscape:cy="12.981869"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 1 4 L 1 13 A 2 2.0000174 0 0 0 3 15 L 13 15 A 2 2.0000174 0 0 0 15 13 L 15 4 L 1 4 z M 3 5 L 4 5 L 4 6 L 3 6 L 3 5 z M 6 5 L 7 5 L 7 6 L 6 6 L 6 5 z M 9 5 L 10 5 L 10 6 L 9 6 L 9 5 z M 12 5 L 13 5 L 13 6 L 12 6 L 12 5 z M 3 7 L 13 7 L 13 13 L 3 13 L 3 7 z "
+ transform="translate(0,1036.3622)"
+ id="rect4155" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4173"
+ width="12"
+ height="2.0000174"
+ x="2"
+ y="1037.3622" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4159"
+ width="4"
+ height="1.0000174"
+ x="6"
+ y="1044.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_baked_light_instance.svg b/tools/editor/icons/source/icon_baked_light_instance.svg
new file mode 100644
index 0000000000..434bf0f6fc
--- /dev/null
+++ b/tools/editor/icons/source/icon_baked_light_instance.svg
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_baked_light_instance.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="-3.1006614"
+ inkscape:cy="12.893481"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 1 4 L 1 13 A 2 2.0000174 0 0 0 3 15 L 13 15 A 2 2.0000174 0 0 0 15 13 L 15 4 L 1 4 z M 3 5 L 4 5 L 4 6 L 3 6 L 3 5 z M 6 5 L 7 5 L 7 6 L 6 6 L 6 5 z M 9 5 L 10 5 L 10 6 L 9 6 L 9 5 z M 12 5 L 13 5 L 13 6 L 12 6 L 12 5 z M 3 7 L 13 7 L 13 13 L 3 13 L 3 7 z "
+ transform="translate(0,1036.3622)"
+ id="rect4155" />
+ <rect
+ style="opacity:1;fill:#fc9c9c;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4173"
+ width="12"
+ height="2.0000174"
+ x="2"
+ y="1037.3622" />
+ <rect
+ style="opacity:1;fill:#fc9c9c;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4159"
+ width="4"
+ height="1.0000174"
+ x="6"
+ y="1044.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_bitmap_font.svg b/tools/editor/icons/source/icon_bitmap_font.svg
new file mode 100644
index 0000000000..fa9fdaf5c5
--- /dev/null
+++ b/tools/editor/icons/source/icon_bitmap_font.svg
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_bitmap_font.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="10.302728"
+ inkscape:cy="7.9861624"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4212"
+ width="14"
+ height="2"
+ x="1"
+ y="1037.3622" />
+ <rect
+ y="1037.3622"
+ x="7"
+ height="14.000017"
+ width="2"
+ id="rect4214"
+ style="opacity:1;fill:#fcef9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ style="opacity:1;fill:#fcef9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4216"
+ width="6"
+ height="0.99999976"
+ x="5"
+ y="1050.3622" />
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 1 1 L 1 3 L 1 5 L 2 5 L 2 4 L 3 4 L 3 3 L 4 3 L 4 1 L 2 1 L 1 1 z "
+ transform="translate(0,1036.3622)"
+ id="rect4218" />
+ <path
+ style="opacity:1;fill:#be9cfc;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 12 1 L 12 3 L 13 3 L 13 4 L 14 4 L 14 5 L 15 5 L 15 3 L 15 1 L 14 1 L 12 1 z "
+ transform="translate(0,1036.3622)"
+ id="rect4220" />
+ <rect
+ style="opacity:1;fill:#fcef9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4259"
+ width="1"
+ height="1"
+ x="9"
+ y="1049.3622" />
+ <rect
+ y="1049.3622"
+ x="6"
+ height="1"
+ width="1"
+ id="rect4261"
+ style="opacity:1;fill:#fcef9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 4 1 L 4 3 L 7 3 L 7 6 L 9 6 L 9 3 L 12 3 L 12 1 L 4 1 z "
+ transform="translate(0,1036.3622)"
+ id="rect4276" />
+ <rect
+ style="opacity:1;fill:#a5b7f8;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4307"
+ width="2"
+ height="5"
+ x="7"
+ y="1042.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_blend.svg b/tools/editor/icons/source/icon_blend.svg
new file mode 100644
index 0000000000..64d2aeec83
--- /dev/null
+++ b/tools/editor/icons/source/icon_blend.svg
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_blend.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_blend.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627418"
+ inkscape:cx="2.5037806"
+ inkscape:cy="10.535433"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <g
+ id="layer1-8"
+ inkscape:label="Layer 1"
+ transform="matrix(0,-1,1,0,-1021.3622,1033.3622)" />
+ <path
+ style="fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2.979185,1050.6622 4.2426407,-4.2 -1.4142136,-1.4 -4.2426407,4.1999 1.4142136,1.4001 z m 5.6568542,0 3.1819808,0.35 3.18198,0.35 -0.353553,-3.15 -0.353554,-3.15 -2.12132,2.1 -2.828427,-2.8 -1.4142136,-1.4 -4.9497474,-4.9 -1.4142136,1.4001 4.9497475,4.8999 1.4142135,1.4 2.8284276,2.7999 -2.1213208,2.1001 z m 1.4142138,-7 2.12132,-2.1 2.12132,2.1 0.353554,-3.15 0.353553,-3.15 -3.18198,0.35 -3.1819808,0.35 2.1213208,2.1001 -2.1213208,2.0999 1.4142138,1.4 z"
+ id="rect4352"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_bone.svg b/tools/editor/icons/source/icon_bone.svg
new file mode 100644
index 0000000000..c87902a336
--- /dev/null
+++ b/tools/editor/icons/source/icon_bone.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_bone.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="4.7029555"
+ inkscape:cy="10.983314"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 10.477991,1037.3625 a 2.4664114,2.4663006 0 0 0 -1.780445,0.7205 2.4664114,2.4663006 0 0 0 -0.3140829,3.1041 l -3.5589636,3.5608 a 2.4664114,2.4663006 0 0 0 -3.1022911,0.3121 2.4664114,2.4663006 0 0 0 0,3.4876 2.4664114,2.4663006 0 0 0 1.3969945,0.6955 2.4664198,2.4663006 0 0 0 0.6956069,1.397 2.4664198,2.4663006 0 0 0 3.4876687,0 2.4664198,2.4663006 0 0 0 0.3140829,-3.1041 l 3.5608896,-3.5608 a 2.4664198,2.4663006 0 0 0 3.100365,-0.3102 2.4664198,2.4663006 0 0 0 0,-3.4875 2.4664198,2.4663006 0 0 0 -1.396994,-0.6974 2.4664114,2.4663006 0 0 0 -0.695607,-1.3971 2.4664114,2.4663006 0 0 0 -1.707224,-0.7205 z"
+ id="path4139"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_bone_attachment.svg b/tools/editor/icons/source/icon_bone_attachment.svg
new file mode 100644
index 0000000000..5cb85c3c17
--- /dev/null
+++ b/tools/editor/icons/source/icon_bone_attachment.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_bone_attachment.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="1.6535575"
+ inkscape:cy="9.9668477"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 10.477991,1037.3625 a 2.4664114,2.4663006 0 0 0 -1.780445,0.7205 2.4664114,2.4663006 0 0 0 -0.3140829,3.1041 l -3.5589636,3.5608 a 2.4664114,2.4663006 0 0 0 -3.1022911,0.3121 2.4664114,2.4663006 0 0 0 0,3.4876 2.4664114,2.4663006 0 0 0 1.3969945,0.6955 2.4664198,2.4663006 0 0 0 0.6956069,1.397 2.4664198,2.4663006 0 0 0 3.4876687,0 2.4664198,2.4663006 0 0 0 0.3140829,-3.1041 l 3.5608896,-3.5608 a 2.4664198,2.4663006 0 0 0 3.100365,-0.3102 2.4664198,2.4663006 0 0 0 0,-3.4875 2.4664198,2.4663006 0 0 0 -1.396994,-0.6974 2.4664114,2.4663006 0 0 0 -0.695607,-1.3971 2.4664114,2.4663006 0 0 0 -1.707224,-0.7205 z"
+ id="path4139"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_bone_track.svg b/tools/editor/icons/source/icon_bone_track.svg
new file mode 100644
index 0000000000..cdaab7e34a
--- /dev/null
+++ b/tools/editor/icons/source/icon_bone_track.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_bone_track.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="9.2991496"
+ inkscape:cy="10.055236"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#ffd684;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 10.477991,1037.3625 a 2.4664114,2.4663006 0 0 0 -1.780445,0.7205 2.4664114,2.4663006 0 0 0 -0.3140829,3.1041 l -3.5589636,3.5608 a 2.4664114,2.4663006 0 0 0 -3.1022911,0.3121 2.4664114,2.4663006 0 0 0 0,3.4876 2.4664114,2.4663006 0 0 0 1.3969945,0.6955 2.4664198,2.4663006 0 0 0 0.6956069,1.397 2.4664198,2.4663006 0 0 0 3.4876687,0 2.4664198,2.4663006 0 0 0 0.3140829,-3.1041 l 3.5608896,-3.5608 a 2.4664198,2.4663006 0 0 0 3.100365,-0.3102 2.4664198,2.4663006 0 0 0 0,-3.4875 2.4664198,2.4663006 0 0 0 -1.396994,-0.6974 2.4664114,2.4663006 0 0 0 -0.695607,-1.3971 2.4664114,2.4663006 0 0 0 -1.707224,-0.7205 z"
+ id="path4139"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_bool.svg b/tools/editor/icons/source/icon_bool.svg
new file mode 100644
index 0000000000..e471871adf
--- /dev/null
+++ b/tools/editor/icons/source/icon_bool.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bool.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_bool.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16"
+ inkscape:cx="-0.0405559"
+ inkscape:cy="11.453214"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3 1 L 3 3 L 4 3 L 4 13 L 3 13 L 3 15 L 11 15 L 11 13 L 6 13 L 6 3 L 9 3 L 9 1 L 3 1 z M 9 3 L 9 8 L 11 8 L 11 3 L 9 3 z M 11 8 L 11 13 L 13 13 L 13 8 L 11 8 z "
+ transform="translate(0,1036.3622)"
+ id="rect4140" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_box_shape.svg b/tools/editor/icons/source/icon_box_shape.svg
new file mode 100644
index 0000000000..04aaf16ebc
--- /dev/null
+++ b/tools/editor/icons/source/icon_box_shape.svg
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="icon_box_shape.svg"
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_box_shape.png"
+ inkscape:version="0.91 r13725"
+ version="1.1"
+ id="svg2"
+ viewBox="0 0 16 16"
+ height="16"
+ width="16">
+ <sodipodi:namedview
+ inkscape:snap-smooth-nodes="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-paths="false"
+ inkscape:window-maximized="1"
+ inkscape:window-y="27"
+ inkscape:window-x="0"
+ inkscape:window-height="1016"
+ inkscape:window-width="1920"
+ inkscape:snap-center="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:bbox-nodes="true"
+ inkscape:bbox-paths="true"
+ inkscape:snap-bbox="true"
+ units="px"
+ showgrid="true"
+ inkscape:current-layer="layer1"
+ inkscape:document-units="px"
+ inkscape:cy="8.1852896"
+ inkscape:cx="7.1222113"
+ inkscape:zoom="45.254832"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base">
+ <inkscape:grid
+ id="grid3336"
+ type="xygrid"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <defs
+ id="defs4" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(0,-1036.3622)"
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <path
+ style="fill:#2998ff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 8 1 L 1 4 L 1 12 L 8 15 L 15 12 L 15 4 L 8 1 z "
+ transform="translate(0,1036.3622)"
+ id="path4151" />
+ <path
+ style="fill:#68b6ff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 8,1051.3622 -7,-3 0,-8 7,3 z"
+ id="path4143"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4145"
+ d="m 8,1051.3622 7,-3 0,-8 -7,3 z"
+ style="fill:#2998ff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#a2d2ff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 1,1040.3622 7,3 7,-3 -7,-3 z"
+ id="path4149"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_button.svg b/tools/editor/icons/source/icon_button.svg
new file mode 100644
index 0000000000..54644ecb9b
--- /dev/null
+++ b/tools/editor/icons/source/icon_button.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_button.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_button.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="6.249456"
+ inkscape:cy="9.3054468"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 1 3 L 1 11 L 15 11 L 15 3 L 1 3 z M 4 5 L 7 5 L 7 9 L 4 9 L 4 5 z M 9 5 L 10 5 L 10 6 L 11 6 L 11 5 L 12 5 L 12 6 L 11 6 L 11 7 L 12 7 L 12 9 L 11 9 L 11 7 L 10 7 L 10 9 L 9 9 L 9 5 z M 5 6 L 5 8 L 6 8 L 6 6 L 5 6 z "
+ transform="translate(0,1036.3622)"
+ id="rect4139" />
+ <rect
+ transform="scale(1,-1)"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4160"
+ width="14"
+ height="2.0000522"
+ x="1"
+ y="-1049.3622" />
+ <rect
+ y="-1049.3622"
+ x="1"
+ height="2.0000522"
+ width="14"
+ id="rect4142"
+ style="opacity:1;fill:#000000;fill-opacity:0.07843138;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="scale(1,-1)" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_button_group.svg b/tools/editor/icons/source/icon_button_group.svg
new file mode 100644
index 0000000000..9d5df99deb
--- /dev/null
+++ b/tools/editor/icons/source/icon_button_group.svg
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_button_group.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_button_group.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="3.5392558"
+ inkscape:cy="8.9453899"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4172"
+ width="1"
+ height="10"
+ x="0"
+ y="1039.3622" />
+ <rect
+ y="1039.3622"
+ x="15"
+ height="10"
+ width="1"
+ id="rect4174"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4176"
+ sodipodi:type="arc"
+ sodipodi:cx="1"
+ sodipodi:cy="1049.3622"
+ sodipodi:rx="1"
+ sodipodi:ry="1"
+ sodipodi:start="0"
+ sodipodi:end="4.712389"
+ d="m 2,1049.3622 a 1,1 0 0 1 -0.6173166,0.9239 1,1 0 0 1 -1.08979019,-0.2168 1,1 0 0 1 -0.21677274,-1.0898 A 1,1 0 0 1 1,1048.3622 l 0,1 z" />
+ <rect
+ y="-15"
+ x="1049.3622"
+ height="14"
+ width="1"
+ id="rect4178"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0,1,-1,0,0,0)" />
+ <path
+ d="m -14,1049.3622 a 1,1 0 0 1 -0.617317,0.9239 1,1 0 0 1 -1.08979,-0.2168 1,1 0 0 1 -0.216773,-1.0898 1,1 0 0 1 0.92388,-0.6173 l 0,1 z"
+ sodipodi:end="4.712389"
+ sodipodi:start="0"
+ sodipodi:ry="1"
+ sodipodi:rx="1"
+ sodipodi:cy="1049.3622"
+ sodipodi:cx="-15"
+ sodipodi:type="arc"
+ id="path4180"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="scale(-1,1)" />
+ <path
+ d="m 2,-1039.3622 a 1,1 0 0 1 -0.6173166,0.9239 1,1 0 0 1 -1.08979019,-0.2168 1,1 0 0 1 -0.21677274,-1.0898 A 1,1 0 0 1 1,-1040.3622 l 0,1 z"
+ sodipodi:end="4.712389"
+ sodipodi:start="0"
+ sodipodi:ry="1"
+ sodipodi:rx="1"
+ sodipodi:cy="-1039.3622"
+ sodipodi:cx="1"
+ sodipodi:type="arc"
+ id="path4182"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="scale(1,-1)" />
+ <path
+ transform="scale(-1,-1)"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4184"
+ sodipodi:type="arc"
+ sodipodi:cx="-15"
+ sodipodi:cy="-1039.3622"
+ sodipodi:rx="1"
+ sodipodi:ry="1"
+ sodipodi:start="0"
+ sodipodi:end="4.712389"
+ d="m -14,-1039.3622 a 1,1 0 0 1 -0.617317,0.9239 1,1 0 0 1 -1.08979,-0.2168 1,1 0 0 1 -0.216773,-1.0898 1,1 0 0 1 0.92388,-0.6173 l 0,1 z" />
+ <rect
+ transform="matrix(0,1,-1,0,0,0)"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4186"
+ width="1"
+ height="14"
+ x="1038.3622"
+ y="-15" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4188"
+ width="4"
+ height="6.0000172"
+ x="3"
+ y="1041.3622" />
+ <rect
+ y="1041.3622"
+ x="9"
+ height="6.0000172"
+ width="4"
+ id="rect4190"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="1045.3622"
+ x="3"
+ height="1.9999998"
+ width="4"
+ id="rect4192"
+ style="opacity:1;fill:#98dc9f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#98dc9f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4194"
+ width="4"
+ height="1.9999998"
+ x="9"
+ y="1045.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_camera.svg b/tools/editor/icons/source/icon_camera.svg
new file mode 100644
index 0000000000..55d4aa698d
--- /dev/null
+++ b/tools/editor/icons/source/icon_camera.svg
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_camera.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_camera.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254832"
+ inkscape:cx="9.4597381"
+ inkscape:cy="7.3949222"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#fc9c9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4144"
+ width="10"
+ height="5.0000172"
+ x="1"
+ y="1042.3622" />
+ <rect
+ y="1040.3622"
+ x="3"
+ height="9.0000172"
+ width="6"
+ id="rect4146"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <circle
+ style="opacity:1;fill:#fc9c9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4148"
+ cx="3"
+ cy="1042.3622"
+ r="2" />
+ <circle
+ r="2"
+ cy="1047.3622"
+ cx="3"
+ id="circle4150"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <circle
+ style="opacity:1;fill:#fc9c9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4152"
+ cx="9"
+ cy="1042.3622"
+ r="2" />
+ <circle
+ r="2"
+ cy="1047.3622"
+ cx="9"
+ id="circle4154"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 12,7 0,3 3,1 0,-5 z"
+ transform="translate(0,1036.3622)"
+ id="rect4156"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_camera_2d.svg b/tools/editor/icons/source/icon_camera_2d.svg
new file mode 100644
index 0000000000..1be8c0f984
--- /dev/null
+++ b/tools/editor/icons/source/icon_camera_2d.svg
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_camera.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_camera_2d.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254832"
+ inkscape:cx="5.924204"
+ inkscape:cy="7.4391164"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#a5b7f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4144"
+ width="10"
+ height="5.0000172"
+ x="1"
+ y="1042.3622" />
+ <rect
+ y="1040.3622"
+ x="3"
+ height="9.0000172"
+ width="6"
+ id="rect4146"
+ style="opacity:1;fill:#a5b7f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <circle
+ style="opacity:1;fill:#a5b7f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4148"
+ cx="3"
+ cy="1042.3622"
+ r="2" />
+ <circle
+ r="2"
+ cy="1047.3622"
+ cx="3"
+ id="circle4150"
+ style="opacity:1;fill:#a5b7f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <circle
+ style="opacity:1;fill:#a5b7f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4152"
+ cx="9"
+ cy="1042.3622"
+ r="2" />
+ <circle
+ r="2"
+ cy="1047.3622"
+ cx="9"
+ id="circle4154"
+ style="opacity:1;fill:#a5b7f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="opacity:1;fill:#a5b7f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 12,7 0,3 3,1 0,-5 z"
+ transform="translate(0,1036.3622)"
+ id="rect4156"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_canvas_item.svg b/tools/editor/icons/source/icon_canvas_item.svg
new file mode 100644
index 0000000000..d15a9a71b7
--- /dev/null
+++ b/tools/editor/icons/source/icon_canvas_item.svg
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_canvas_item.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_canvas_item.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16"
+ inkscape:cx="-0.0099577907"
+ inkscape:cy="13.312585"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-midpoints="true"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-paths="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ sodipodi:nodetypes="cscsccccsssc"
+ inkscape:connector-curvature="0"
+ id="path4146"
+ d="m 2.920797,1046.3957 c -0.2637264,0.3 -0.4203983,0.7296 -0.4203983,1.2383 0,1.6277 -3.13814186,-0.1781 -0.337569,2.6703 0.8838207,0.899 2.6543881,0.6701 3.538224,-0.2288 0.8838352,-0.899 0.8838163,-2.3565 0,-3.2554 -1.1002211,-1.1191 -2.200058,-1.0845 -2.7802567,-0.4244 z m 2.3801743,-1.6103 2.4004918,2.4416 6.8013899,-6.9177 c 0.662863,-0.6742 0.662863,-1.7673 0,-2.4415 -0.662877,-0.6741 -1.737613,-0.6741 -2.400491,0 z"
+ style="fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_canvas_item_material.svg b/tools/editor/icons/source/icon_canvas_item_material.svg
new file mode 100644
index 0000000000..ce8fd4b7de
--- /dev/null
+++ b/tools/editor/icons/source/icon_canvas_item_material.svg
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_canvas_item_material.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_canvas_item_material.svg">
+ <defs
+ id="defs4">
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4253">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ id="path4255"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4168">
+ <ellipse
+ style="opacity:1;fill:#ffffff;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4170"
+ cx="16.5"
+ cy="1036.3622"
+ rx="11.8125"
+ ry="10.499999" />
+ </clipPath>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999999"
+ inkscape:cx="5.4471982"
+ inkscape:cy="10.694354"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <g
+ id="g4181"
+ mask="none"
+ clip-path="url(#clipPath4168)"
+ transform="matrix(0.59259259,0,0,0.66666674,-1.7777777,353.454)">
+ <rect
+ y="1025.8622"
+ x="3"
+ height="3.0000043"
+ width="27"
+ id="rect4159"
+ style="fill:#ff7070;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#ffeb70;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4161"
+ width="27"
+ height="3.0000041"
+ x="3"
+ y="1028.8622" />
+ <rect
+ style="fill:#9dff70;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4163"
+ width="27"
+ height="2.9999995"
+ x="3"
+ y="1031.8622" />
+ <rect
+ y="1034.8622"
+ x="3"
+ height="3.0000031"
+ width="27"
+ id="rect4165"
+ style="fill:#70ffb9;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ y="1037.8622"
+ x="3"
+ height="3.0000029"
+ width="27"
+ id="rect4167"
+ style="fill:#70deff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#ff70ac;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4169"
+ width="27"
+ height="2.9999976"
+ x="3"
+ y="1043.8622" />
+ <rect
+ style="fill:#9f70ff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4146"
+ width="27"
+ height="3.0000029"
+ x="3"
+ y="1040.8622" />
+ </g>
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_canvas_item_shader.svg b/tools/editor/icons/source/icon_canvas_item_shader.svg
new file mode 100644
index 0000000000..6d1d7e6bb1
--- /dev/null
+++ b/tools/editor/icons/source/icon_canvas_item_shader.svg
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_canvas_item_shader.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_canvas_item_shader.svg">
+ <defs
+ id="defs4">
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4148">
+ <path
+ sodipodi:nodetypes="cscsccccsssc"
+ inkscape:connector-curvature="0"
+ id="path4150"
+ d="m 7.9288448,1039.4124 c -0.4450383,0.45 -0.7094221,1.0944 -0.7094221,1.8575 0,2.4415 -5.2956144,-0.2672 -0.5696477,4.0054 1.4914475,1.3485 4.47928,1.0052 5.970753,-0.3432 1.491472,-1.3485 1.49144,-3.5347 0,-4.8831 -1.856623,-1.6786 -3.7125978,-1.6267 -4.6916832,-0.6366 z m 4.0165442,-2.4154 4.05083,3.6624 11.477345,-10.3766 c 1.118582,-1.0113 1.118582,-2.6509 0,-3.6622 -1.118605,-1.0112 -2.932222,-1.0112 -4.050828,0 z"
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </clipPath>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="1.2934357"
+ inkscape:cy="8.7995586"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-midpoints="true"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-paths="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <g
+ id="g4181"
+ mask="none"
+ clip-path="url(#clipPath4148)"
+ transform="matrix(0.59259259,0,0,0.66666674,-1.7777777,353.454)">
+ <rect
+ y="1025.8622"
+ x="3"
+ height="3.0000043"
+ width="27"
+ id="rect4159"
+ style="fill:#ff7070;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#ffeb70;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4161"
+ width="27"
+ height="3.0000041"
+ x="3"
+ y="1028.8622" />
+ <rect
+ style="fill:#9dff70;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4163"
+ width="27"
+ height="2.9999995"
+ x="3"
+ y="1031.8622" />
+ <rect
+ y="1034.8622"
+ x="3"
+ height="3.0000031"
+ width="27"
+ id="rect4165"
+ style="fill:#70ffb9;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ y="1037.8622"
+ x="3"
+ height="3.0000029"
+ width="27"
+ id="rect4167"
+ style="fill:#70deff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#ff70ac;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4169"
+ width="27"
+ height="2.9999976"
+ x="3"
+ y="1043.8622" />
+ <rect
+ style="fill:#9f70ff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4146"
+ width="27"
+ height="3.0000029"
+ x="3"
+ y="1040.8622" />
+ </g>
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_canvas_item_shader_graph.svg b/tools/editor/icons/source/icon_canvas_item_shader_graph.svg
new file mode 100644
index 0000000000..84575ad388
--- /dev/null
+++ b/tools/editor/icons/source/icon_canvas_item_shader_graph.svg
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_canvas_item_shader_graph.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_canvas_item_shader_graph.svg">
+ <defs
+ id="defs4">
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4196">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z"
+ id="path4198"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.313708"
+ inkscape:cx="-2.8222537"
+ inkscape:cy="15.541098"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <g
+ id="g4181"
+ mask="none"
+ clip-path="url(#clipPath4196)"
+ transform="matrix(0.59259259,0,0,0.66666674,-1.7777777,353.454)">
+ <rect
+ y="1025.8622"
+ x="3"
+ height="3.0000043"
+ width="27"
+ id="rect4159"
+ style="fill:#ff7070;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#ffeb70;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4161"
+ width="27"
+ height="3.0000041"
+ x="3"
+ y="1028.8622" />
+ <rect
+ style="fill:#9dff70;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4163"
+ width="27"
+ height="2.9999995"
+ x="3"
+ y="1031.8622" />
+ <rect
+ y="1034.8622"
+ x="3"
+ height="3.0000031"
+ width="27"
+ id="rect4165"
+ style="fill:#70ffb9;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ y="1037.8622"
+ x="3"
+ height="3.0000029"
+ width="27"
+ id="rect4167"
+ style="fill:#70deff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#ff70ac;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4169"
+ width="27"
+ height="2.9999976"
+ x="3"
+ y="1043.8622" />
+ <rect
+ style="fill:#9f70ff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4146"
+ width="27"
+ height="3.0000029"
+ x="3"
+ y="1040.8622" />
+ </g>
+ <ellipse
+ r="2"
+ style="opacity:1;fill:#6e6e6e;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="ellipse4152"
+ cx="3"
+ cy="1039.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_canvas_layer.svg b/tools/editor/icons/source/icon_canvas_layer.svg
new file mode 100644
index 0000000000..a26edd7d6d
--- /dev/null
+++ b/tools/editor/icons/source/icon_canvas_layer.svg
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_canvas_item.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_canvas_layer.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="-3.1074492"
+ inkscape:cy="10.973033"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-midpoints="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-paths="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ sodipodi:nodetypes="cscsccccsssc"
+ inkscape:connector-curvature="0"
+ id="path4146"
+ d="m 2.920797,1046.3957 c -0.2637264,0.3 -0.4203983,0.7296 -0.4203983,1.2383 0,1.6277 -3.13814186,-0.1781 -0.337569,2.6703 0.8838207,0.899 2.6543881,0.6701 3.538224,-0.2288 0.8838352,-0.899 0.8838163,-2.3565 0,-3.2554 -1.1002211,-1.1191 -2.200058,-1.0845 -2.7802567,-0.4244 z m 2.3801743,-1.6103 2.4004918,2.4416 6.8013899,-6.9177 c 0.662863,-0.6742 0.662863,-1.7673 0,-2.4415 -0.662877,-0.6741 -1.737613,-0.6741 -2.400491,0 z"
+ style="fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3 1 A 2 2 0 0 0 1 3 L 2 3 A 1.0000174 1.0000174 0 0 1 3 2 L 3 1 z "
+ transform="translate(0,1036.3622)"
+ id="path4160" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4164"
+ width="6"
+ height="1"
+ x="3"
+ y="1037.3622" />
+ <rect
+ y="-2"
+ x="1039.3622"
+ height="1"
+ width="6"
+ id="rect4166"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0,1,-1,0,0,0)" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 13,1051.3622 a 2,2 0 0 0 2,-2 l 0,-6 -1,0 0,6 a 1.0000174,1.0000174 0 0 1 -1,1 l -6,0 0,1 6,0 z"
+ id="path4169"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_canvas_modulate.svg b/tools/editor/icons/source/icon_canvas_modulate.svg
new file mode 100644
index 0000000000..450823e005
--- /dev/null
+++ b/tools/editor/icons/source/icon_canvas_modulate.svg
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_canvas_modulate.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_canvas_modulate.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16"
+ inkscape:cx="7.3785882"
+ inkscape:cy="11.139886"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4159"
+ width="10"
+ height="10.000017"
+ x="3"
+ y="1039.3622" />
+ <path
+ style="fill:#a5b7f1;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 1,1037.3622 0,2 0,12 2,0 12,0 0,-2 0,-12 -2,0 -10,0 z m 2,2 10,0 0,10 -10,0 z"
+ id="rect4280"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccccccc" />
+ <ellipse
+ style="fill:#ff0000;fill-opacity:0.78431373;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path4153"
+ cx="6.5"
+ cy="1045.8622"
+ rx="2.5"
+ ry="2.4999871" />
+ <ellipse
+ style="fill:#0000ff;fill-opacity:0.78431373;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="ellipse4157"
+ cx="8"
+ cy="1042.8622"
+ rx="2.5"
+ ry="2.4999938" />
+ <ellipse
+ ry="2.4999936"
+ rx="2.5"
+ cy="1045.8622"
+ cx="9.5"
+ id="ellipse4155"
+ style="fill:#00ff00;fill-opacity:0.78431373;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_capsule_shape.svg b/tools/editor/icons/source/icon_capsule_shape.svg
new file mode 100644
index 0000000000..dcc6e8c00f
--- /dev/null
+++ b/tools/editor/icons/source/icon_capsule_shape.svg
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="icon_capsule_shape.svg"
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_capsule_shape.png"
+ inkscape:version="0.91 r13725"
+ version="1.1"
+ id="svg2"
+ viewBox="0 0 16 16"
+ height="16"
+ width="16">
+ <sodipodi:namedview
+ inkscape:snap-smooth-nodes="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-paths="false"
+ inkscape:window-maximized="1"
+ inkscape:window-y="27"
+ inkscape:window-x="0"
+ inkscape:window-height="1016"
+ inkscape:window-width="1920"
+ inkscape:snap-center="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:bbox-nodes="true"
+ inkscape:bbox-paths="true"
+ inkscape:snap-bbox="true"
+ units="px"
+ showgrid="true"
+ inkscape:current-layer="layer1"
+ inkscape:document-units="px"
+ inkscape:cy="11.868879"
+ inkscape:cx="-0.54664689"
+ inkscape:zoom="11.313708"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base">
+ <inkscape:grid
+ id="grid3336"
+ type="xygrid" />
+ </sodipodi:namedview>
+ <defs
+ id="defs4" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(0,-1036.3622)"
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <rect
+ style="opacity:1;fill:#68b6ff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4140"
+ width="6"
+ height="8.0000172"
+ x="5"
+ y="1040.3622" />
+ <circle
+ r="3"
+ cy="1040.3622"
+ cx="8"
+ id="circle4142"
+ style="fill:#68b6ff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <circle
+ style="fill:#68b6ff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="circle4144"
+ cx="8"
+ cy="1048.3622"
+ r="3" />
+ <circle
+ r="1.0000174"
+ cy="1039.3622"
+ cx="7"
+ id="circle4146"
+ style="fill:#a2d2ff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_center_container.svg b/tools/editor/icons/source/icon_center_container.svg
new file mode 100644
index 0000000000..31262f8494
--- /dev/null
+++ b/tools/editor/icons/source/icon_center_container.svg
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_center_container.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16"
+ inkscape:cx="-1.8665209"
+ inkscape:cy="9.391154"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3,1 C 1.8954305,1 1,1.8954305 1,3 l 0,10 c 0,1.104569 0.8954305,2 2,2 l 10,0 c 1.104569,0 2,-0.895431 2,-2 L 15,3 C 15,1.8954305 14.104569,1 13,1 Z m 0,2 10,0 0,10 -10,0 z"
+ transform="translate(0,1036.3622)"
+ id="rect4140"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sssssssssccccc" />
+ <path
+ sodipodi:nodetypes="cccccccccccccccc"
+ inkscape:connector-curvature="0"
+ id="path4161"
+ d="m 6,1040.3622 2,2 2,-2 z m -2,2 0,4 2,-2 z m 8,0 -2,2 2,2 z m -4,4 -2,2 4,0 z"
+ style="fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_check_box.svg b/tools/editor/icons/source/icon_check_box.svg
new file mode 100644
index 0000000000..1068b424bd
--- /dev/null
+++ b/tools/editor/icons/source/icon_check_box.svg
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_check_box.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_check_box.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="3.8008276"
+ inkscape:cy="9.8639842"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3 2 C 1.8954305 2 1 2.8954305 1 4 L 1 13 C 1 14.104569 1.8954305 15 3 15 L 12 15 C 13.104569 15 14 14.104569 14 13 L 14 8.0722656 L 12 10.072266 L 12 13 L 3 13 L 3 4 L 9.5859375 4 L 11.585938 2 L 3 2 z "
+ transform="translate(0,1036.3622)"
+ id="rect4143" />
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 4.5857864,1045.3622 6,1046.7764 l 1.4142136,1.4142 1.4142135,-1.4142 4.9497479,-4.9497 -1.414214,-1.4142 -4.9497474,4.9497 L 6,1043.948 l -1.4142136,1.4142 z"
+ id="rect4163"
+ inkscape:connector-curvature="0"
+ inkscape:transform-center-x="-3.1819807"
+ inkscape:transform-center-y="-1.06065" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_check_button.svg b/tools/editor/icons/source/icon_check_button.svg
new file mode 100644
index 0000000000..1dddc7bf43
--- /dev/null
+++ b/tools/editor/icons/source/icon_check_button.svg
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_check_button.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_check_button.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="5.7571127"
+ inkscape:cy="12.193142"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 5 4 A 4 4 0 0 0 1 8 A 4 4 0 0 0 5 12 L 11 12 L 11 10 L 5 10 A 2 2 0 0 1 3 8 A 2 2 0 0 1 5 6 L 11 6 L 11 4 L 5 4 z "
+ transform="translate(0,1036.3622)"
+ id="rect4143" />
+ <circle
+ r="4"
+ cy="1044.3622"
+ cx="11"
+ id="circle4147"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_class_list.svg b/tools/editor/icons/source/icon_class_list.svg
new file mode 100644
index 0000000000..326174e566
--- /dev/null
+++ b/tools/editor/icons/source/icon_class_list.svg
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_class_list.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_class_list.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999998"
+ inkscape:cx="7.4511363"
+ inkscape:cy="9.3546504"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4148"
+ width="5"
+ height="0.9999826"
+ x="1"
+ y="1038.3622" />
+ <rect
+ y="1037.3622"
+ x="6"
+ height="3.0000174"
+ width="6"
+ id="rect4150"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="1038.3622"
+ x="3"
+ height="11.000017"
+ width="1"
+ id="rect4152"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4154"
+ width="5"
+ height="0.99999976"
+ x="4"
+ y="1043.3622" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4156"
+ width="6"
+ height="3.0000174"
+ x="9"
+ y="1042.3622" />
+ <rect
+ y="1048.3622"
+ x="4"
+ height="0.99999976"
+ width="5"
+ id="rect4158"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="1047.3622"
+ x="9"
+ height="3.0000174"
+ width="6"
+ id="rect4160"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_close.svg b/tools/editor/icons/source/icon_close.svg
new file mode 100644
index 0000000000..65b71ae860
--- /dev/null
+++ b/tools/editor/icons/source/icon_close.svg
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_close.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627418"
+ inkscape:cx="3.3969834"
+ inkscape:cy="11.678255"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <g
+ id="layer1-4"
+ inkscape:label="Layer 1"
+ transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,-736.13242,311.54347)">
+ <rect
+ y="1043.3622"
+ x="1"
+ height="1.9999478"
+ width="14"
+ id="rect4137"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ transform="matrix(0,1,-1,0,0,0)"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4158"
+ width="13.999966"
+ height="2.0000017"
+ x="1037.3622"
+ y="-9" />
+ </g>
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_collapse.svg b/tools/editor/icons/source/icon_collapse.svg
new file mode 100644
index 0000000000..a1c55e92de
--- /dev/null
+++ b/tools/editor/icons/source/icon_collapse.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collapse.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_collapse.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627418"
+ inkscape:cx="7.0030445"
+ inkscape:cy="11.276359"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:6;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2,1040.3622 0,3.9375 6,5.0625 6,-5.0625 0,-3.9375 -12,0 z"
+ id="rect4174"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_collision_2d.svg b/tools/editor/icons/source/icon_collision_2d.svg
new file mode 100644
index 0000000000..29905795bd
--- /dev/null
+++ b/tools/editor/icons/source/icon_collision_2d.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_collision_2d.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999999"
+ inkscape:cx="8.9698127"
+ inkscape:cy="10.623768"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#a5b7f2;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.98823529"
+ d="m 14,1050.3622 -12,0 0,-12 12,0 -6,6 z"
+ id="path4144"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_collision_polygon.svg b/tools/editor/icons/source/icon_collision_polygon.svg
new file mode 100644
index 0000000000..41f20abb5f
--- /dev/null
+++ b/tools/editor/icons/source/icon_collision_polygon.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_collision_polygon.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999999"
+ inkscape:cx="3.5635625"
+ inkscape:cy="10.561268"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#fc9c9c;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
+ d="m 14,1050.3622 -12,0 0,-12 12,0 -6,6 z"
+ id="path4144"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_collision_shape.svg b/tools/editor/icons/source/icon_collision_shape.svg
new file mode 100644
index 0000000000..066e3bc0fd
--- /dev/null
+++ b/tools/editor/icons/source/icon_collision_shape.svg
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_collision_shape.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="3.1912719"
+ inkscape:cy="5.0517827"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:snap-midpoints="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <g
+ id="layer1-7"
+ inkscape:label="Layer 1"
+ transform="translate(0,1.1802001e-5)"
+ style="stroke:#fc9c9c;stroke-opacity:0.99607843">
+ <path
+ sodipodi:nodetypes="ccccccc"
+ inkscape:connector-curvature="0"
+ id="path4139"
+ d="m 8,1050.3622 -6,-3 0,-6 6,-3 6,3 0,6 z"
+ style="fill:none;fill-rule:evenodd;stroke:#fc9c9c;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843" />
+ </g>
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_collision_shape_2d.svg b/tools/editor/icons/source/icon_collision_shape_2d.svg
new file mode 100644
index 0000000000..e0a750c946
--- /dev/null
+++ b/tools/editor/icons/source/icon_collision_shape_2d.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_collision_shape_2d.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="6.937726"
+ inkscape:cy="8.4489005"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#a5b7f3;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:0.98823529;stroke-miterlimit:4;stroke-dasharray:none"
+ d="m 14,1050.3622 -12,0 0,-12 12,0 z"
+ id="path4139"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_color.svg b/tools/editor/icons/source/icon_color.svg
new file mode 100644
index 0000000000..c46f64b8ed
--- /dev/null
+++ b/tools/editor/icons/source/icon_color.svg
@@ -0,0 +1,268 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_color.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_color.svg">
+ <defs
+ id="defs4">
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4253">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ id="path4255"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4218">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="m 8,1037.3622 a 7.0000172,7.0000172 0 0 0 -7,7 7.0000172,7.0000172 0 0 0 7,7 7.0000172,7.0000172 0 0 0 7,-7 7.0000172,7.0000172 0 0 0 -7,-7 z m 0,3 a 4,4 0 0 1 4,4 4,4 0 0 1 -4,4 4,4 0 0 1 -4,-4 4,4 0 0 1 4,-4 z"
+ id="path4221"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999998"
+ inkscape:cx="4.4710872"
+ inkscape:cy="8.9389443"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <circle
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4151"
+ cx="8"
+ cy="1044.3622"
+ r="8" />
+ <g
+ id="g4204"
+ clip-path="url(#clipPath4218)">
+ <path
+ inkscape:transform-center-y="-3.5000174"
+ d="m 6.1882667,1037.6007 a 7,7 0 0 1 3.6234668,0 L 8,1044.3622 Z"
+ sodipodi:end="4.9741884"
+ sodipodi:start="4.4505896"
+ sodipodi:ry="7"
+ sodipodi:rx="7"
+ sodipodi:cy="1044.3622"
+ sodipodi:cx="8"
+ sodipodi:type="arc"
+ id="path4153"
+ style="opacity:1;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <path
+ inkscape:transform-center-x="-2.4749025"
+ transform="matrix(0.8660254,0.5,-0.5,0.8660254,0,0)"
+ style="opacity:1;fill:#ff4d00;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="path4157"
+ sodipodi:type="arc"
+ sodipodi:cx="529.10931"
+ sodipodi:cy="900.44415"
+ sodipodi:rx="7"
+ sodipodi:ry="7"
+ sodipodi:start="4.4505896"
+ sodipodi:end="4.9741884"
+ d="m 527.29758,893.68267 a 7,7 0 0 1 3.62347,0 l -1.81174,6.76148 z"
+ inkscape:transform-center-y="-3.3807758" />
+ <path
+ inkscape:transform-center-y="-2.4748757"
+ d="m 906.63248,508.49139 a 7,7 0 0 1 3.62347,0 l -1.81174,6.76148 z"
+ sodipodi:end="4.9741884"
+ sodipodi:start="4.4505896"
+ sodipodi:ry="7"
+ sodipodi:rx="7"
+ sodipodi:cy="515.25287"
+ sodipodi:cx="908.44421"
+ sodipodi:type="arc"
+ id="path4159"
+ style="opacity:1;fill:#ff9900;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ transform="matrix(0.5,0.8660254,-0.8660254,0.5,0,0)"
+ inkscape:transform-center-x="-3.3807755" />
+ <path
+ inkscape:transform-center-x="-3.500017"
+ transform="matrix(0,1,-1,0,0,0)"
+ style="opacity:1;fill:#ffca00;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="path4161"
+ sodipodi:type="arc"
+ sodipodi:cx="1044.3622"
+ sodipodi:cy="-8.0000172"
+ sodipodi:rx="7"
+ sodipodi:ry="7"
+ sodipodi:start="4.4505896"
+ sodipodi:end="4.9741884"
+ d="m 1042.5504,-14.761498 a 7,7 0 0 1 3.6235,0 l -1.8117,6.7614808 z"
+ inkscape:transform-center-y="-1.7222787e-05" />
+ <path
+ inkscape:transform-center-y="2.4749218"
+ d="m 898.63248,-535.87086 a 7,7 0 0 1 3.62347,0 l -1.81174,6.76149 z"
+ sodipodi:end="4.9741884"
+ sodipodi:start="4.4505896"
+ sodipodi:ry="7"
+ sodipodi:rx="7"
+ sodipodi:cy="-529.10938"
+ sodipodi:cx="900.44421"
+ sodipodi:type="arc"
+ id="path4163"
+ style="opacity:1;fill:#ffff00;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ transform="matrix(-0.5,0.8660254,-0.8660254,-0.5,0,0)"
+ inkscape:transform-center-x="-3.3807914" />
+ <path
+ inkscape:transform-center-x="-2.4748559"
+ transform="matrix(-0.8660254,0.5,-0.5,-0.8660254,0,0)"
+ style="opacity:1;fill:#9fff00;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="path4165"
+ sodipodi:type="arc"
+ sodipodi:cx="515.25293"
+ sodipodi:cy="-908.44421"
+ sodipodi:rx="7"
+ sodipodi:ry="7"
+ sodipodi:start="4.4505896"
+ sodipodi:end="4.9741884"
+ d="m 513.4412,-915.20569 a 7,7 0 0 1 3.62346,0 l -1.81173,6.76148 z"
+ inkscape:transform-center-y="3.3807689" />
+ <path
+ inkscape:transform-center-y="3.4999826"
+ d="m -9.8117504,-1051.1237 a 7,7 0 0 1 3.6234668,0 l -1.8117336,6.7615 z"
+ sodipodi:end="4.9741884"
+ sodipodi:start="4.4505896"
+ sodipodi:ry="7"
+ sodipodi:rx="7"
+ sodipodi:cy="-1044.3622"
+ sodipodi:cx="-8.0000172"
+ sodipodi:type="arc"
+ id="path4167"
+ style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ transform="scale(-1,-1)"
+ inkscape:transform-center-x="-1.6750127e-05" />
+ <path
+ inkscape:transform-center-x="2.4749062"
+ transform="matrix(-0.8660254,-0.5,0.5,-0.8660254,0,0)"
+ style="opacity:1;fill:#00ffaa;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="path4169"
+ sodipodi:type="arc"
+ sodipodi:cx="-529.10931"
+ sodipodi:cy="-900.44427"
+ sodipodi:rx="7"
+ sodipodi:ry="7"
+ sodipodi:start="4.4505896"
+ sodipodi:end="4.9741884"
+ d="m -530.92105,-907.20576 a 7,7 0 0 1 3.62347,0 l -1.81173,6.76149 z"
+ inkscape:transform-center-y="3.3808107" />
+ <path
+ inkscape:transform-center-y="2.4748493"
+ d="m -910.25589,-522.01441 a 7,7 0 0 1 3.62347,0 l -1.81173,6.76148 z"
+ sodipodi:end="4.9741884"
+ sodipodi:start="4.4505896"
+ sodipodi:ry="7"
+ sodipodi:rx="7"
+ sodipodi:cy="-515.25293"
+ sodipodi:cx="-908.44415"
+ sodipodi:type="arc"
+ id="path4171"
+ style="opacity:1;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ transform="matrix(-0.5,-0.8660254,0.8660254,-0.5,0,0)"
+ inkscape:transform-center-x="3.3807887" />
+ <path
+ inkscape:transform-center-x="3.4999821"
+ transform="matrix(0,-1,1,0,0,0)"
+ style="opacity:1;fill:#9000ff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="path4173"
+ sodipodi:type="arc"
+ sodipodi:cx="-1044.3622"
+ sodipodi:cy="8.0000181"
+ sodipodi:rx="7"
+ sodipodi:ry="7"
+ sodipodi:start="4.4505896"
+ sodipodi:end="4.9741884"
+ d="m -1046.1739,1.2385373 a 7,7 0 0 1 3.6235,1e-7 l -1.8118,6.7614807 z"
+ inkscape:transform-center-y="-1.7714781e-05" />
+ <path
+ inkscape:transform-center-y="-2.474887"
+ d="m -902.25595,522.34777 a 7,7 0 0 1 3.62347,0 l -1.81173,6.76148 z"
+ sodipodi:end="4.9741884"
+ sodipodi:start="4.4505896"
+ sodipodi:ry="7"
+ sodipodi:rx="7"
+ sodipodi:cy="529.10925"
+ sodipodi:cx="-900.44421"
+ sodipodi:type="arc"
+ id="path4175"
+ style="opacity:1;fill:#ff00ee;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ transform="matrix(0.5,-0.8660254,0.8660254,0.5,0,0)"
+ inkscape:transform-center-x="3.3807952" />
+ <path
+ inkscape:transform-center-x="2.4748691"
+ transform="matrix(0.8660254,-0.5,0.5,0.8660254,0,0)"
+ style="opacity:1;fill:#ff009a;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="path4177"
+ sodipodi:type="arc"
+ sodipodi:cx="-515.25287"
+ sodipodi:cy="908.44415"
+ sodipodi:rx="7"
+ sodipodi:ry="7"
+ sodipodi:start="4.4505896"
+ sodipodi:end="4.9741884"
+ d="m -517.0646,901.68267 a 7,7 0 0 1 3.62346,0 l -1.81173,6.76148 z"
+ inkscape:transform-center-y="-3.3807953" />
+ </g>
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_color_pick.svg b/tools/editor/icons/source/icon_color_pick.svg
new file mode 100644
index 0000000000..bbb05fc6b6
--- /dev/null
+++ b/tools/editor/icons/source/icon_color_pick.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_color_pick.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_color_pick.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="4.443644"
+ inkscape:cy="9.1543192"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 13.050781 0.97851562 A 2 2 0 0 0 11.607422 1.5644531 L 10.193359 2.9785156 L 8.7773438 1.5644531 L 7.3632812 2.9785156 L 8.7773438 4.3925781 L 1.7070312 11.464844 L 1.3535156 13.232422 L 1 15 L 2.7675781 14.646484 L 4.5351562 14.292969 L 11.607422 7.2226562 L 13.021484 8.6367188 L 14.435547 7.2226562 L 13.021484 5.8066406 L 14.435547 4.3925781 A 2 2 0 0 0 14.435547 1.5644531 A 2 2 0 0 0 13.050781 0.97851562 z M 9.484375 5.0996094 L 10.900391 6.515625 L 3.828125 13.585938 L 3.1210938 12.878906 L 2.4140625 12.171875 L 9.484375 5.0996094 z "
+ transform="translate(0,1036.3622)"
+ id="rect4139" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_color_picker.svg b/tools/editor/icons/source/icon_color_picker.svg
new file mode 100644
index 0000000000..0efd276c50
--- /dev/null
+++ b/tools/editor/icons/source/icon_color_picker.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_color_picker.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_color_picker.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="4.7530032"
+ inkscape:cy="8.2262415"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 13.050781 0.97851562 A 2 2 0 0 0 11.607422 1.5644531 L 10.193359 2.9785156 L 8.7773438 1.5644531 L 7.3632812 2.9785156 L 8.7773438 4.3925781 L 1.7070312 11.464844 L 1.3535156 13.232422 L 1 15 L 2.7675781 14.646484 L 4.5351562 14.292969 L 11.607422 7.2226562 L 13.021484 8.6367188 L 14.435547 7.2226562 L 13.021484 5.8066406 L 14.435547 4.3925781 A 2 2 0 0 0 14.435547 1.5644531 A 2 2 0 0 0 13.050781 0.97851562 z M 9.484375 5.0996094 L 10.900391 6.515625 L 3.828125 13.585938 L 3.1210938 12.878906 L 2.4140625 12.171875 L 9.484375 5.0996094 z "
+ transform="translate(0,1036.3622)"
+ id="rect4139" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_color_picker_button.svg b/tools/editor/icons/source/icon_color_picker_button.svg
new file mode 100644
index 0000000000..4e4fb8cc1b
--- /dev/null
+++ b/tools/editor/icons/source/icon_color_picker_button.svg
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_color_picker_button.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_color_picker_button.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="5.1313634"
+ inkscape:cy="7.6484362"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <g
+ id="layer1-4"
+ inkscape:label="Layer 1">
+ <path
+ id="rect4139"
+ transform="translate(0,1036.3622)"
+ d="M 13.050781,0.97851562 A 2,2 0 0 0 11.607422,1.5644531 L 10.193359,2.9785156 8.7773438,1.5644531 7.3632812,2.9785156 8.7773438,4.3925781 1.7070312,11.464844 1.3535156,13.232422 1,15 2.7675781,14.646484 4.5351562,14.292969 11.607422,7.2226562 13.021484,8.6367188 14.435547,7.2226562 13.021484,5.8066406 14.435547,4.3925781 a 2,2 0 0 0 0,-2.828125 2,2 0 0 0 -1.384766,-0.58593748 z M 9.484375,5.0996094 10.900391,6.515625 3.828125,13.585938 3.1210938,12.878906 2.4140625,12.171875 9.484375,5.0996094 Z"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 1 3 L 1 9.34375 L 5.9492188 4.3925781 L 4.5566406 3 L 1 3 z M 15 9.4863281 L 13.486328 11 L 12.556641 11 L 11.607422 10.050781 L 8.6582031 13 L 15 13 L 15 9.4863281 z "
+ transform="translate(0,1036.3622)"
+ id="rect4139-4" />
+ <path
+ style="opacity:1;fill:#000000;fill-opacity:0.07843137;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 10.658203 11 L 8.6582031 13 L 15 13 L 15 11 L 13.486328 11 L 12.556641 11 L 10.658203 11 z "
+ transform="translate(0,1036.3622)"
+ id="rect4142" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_color_ramp.svg b/tools/editor/icons/source/icon_color_ramp.svg
new file mode 100644
index 0000000000..ff23cdba8d
--- /dev/null
+++ b/tools/editor/icons/source/icon_color_ramp.svg
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_color_ramp.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_color_ramp.svg">
+ <defs
+ id="defs4">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4139">
+ <stop
+ style="stop-color:#afff68;stop-opacity:1"
+ offset="0"
+ id="stop4141" />
+ <stop
+ style="stop-color:#ff6b6b;stop-opacity:1"
+ offset="1"
+ id="stop4143" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4139"
+ id="linearGradient4145"
+ x1="4"
+ y1="14"
+ x2="30"
+ y2="14"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.51851852,0,0,0.7,-0.55555555,1034.5622)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="5.5771263"
+ inkscape:cy="10.144749"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:url(#linearGradient4145);fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 1,1051.3622 14,0 0,-14 z"
+ id="rect4141"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_concave_polygon_shape.svg b/tools/editor/icons/source/icon_concave_polygon_shape.svg
new file mode 100644
index 0000000000..b0e0fe63ce
--- /dev/null
+++ b/tools/editor/icons/source/icon_concave_polygon_shape.svg
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="icon_concave_polygon_shape.svg"
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_concave_polygon_shape.png"
+ inkscape:version="0.91 r13725"
+ version="1.1"
+ id="svg2"
+ viewBox="0 0 16 16"
+ height="16"
+ width="16">
+ <sodipodi:namedview
+ inkscape:snap-smooth-nodes="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-paths="false"
+ inkscape:window-maximized="1"
+ inkscape:window-y="27"
+ inkscape:window-x="0"
+ inkscape:window-height="1016"
+ inkscape:window-width="1920"
+ inkscape:snap-center="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:bbox-nodes="true"
+ inkscape:bbox-paths="true"
+ inkscape:snap-bbox="true"
+ units="px"
+ showgrid="true"
+ inkscape:current-layer="layer1"
+ inkscape:document-units="px"
+ inkscape:cy="9.2011727"
+ inkscape:cx="7.5362507"
+ inkscape:zoom="22.627417"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base">
+ <inkscape:grid
+ id="grid3336"
+ type="xygrid" />
+ </sodipodi:namedview>
+ <defs
+ id="defs4" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(0,-1036.3622)"
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <path
+ style="fill:#2998ff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 8 1 L 1 4 L 1 12 L 8 15 L 15 12 L 15 4 L 8 1 z "
+ transform="translate(0,1036.3622)"
+ id="path4194" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:#2998ff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 8,1037.3622 -7,3 0,8 7,3 7,-3 0,-8 -7,-3 z"
+ id="path4151" />
+ <path
+ style="fill:#2998ff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
+ d="m 3,1041.3622 0,6 5,2 5,-2 0,-6 -5,-2 z"
+ id="path4160"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#a2d2ff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
+ d="m 8,1049.3622 5,-2 -5,-2 -5,2 z"
+ id="path4164"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#68b6ff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
+ d="m 8,1045.3622 5,2 0,-6 -5,-2 z"
+ id="path4166"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#a2d2ff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 8,1 1,4 3,5 8,3 13,5 15,4 Z"
+ transform="translate(0,1036.3622)"
+ id="path4149"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#68b6ff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 1,4 1,12 8,15 8,13 3,11 3,5 Z"
+ transform="translate(0,1036.3622)"
+ id="path4143"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#2998ff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 15,4 -2,1 0,6 -5,2 0,2 7,-3 z"
+ transform="translate(0,1036.3622)"
+ id="path4145"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_confirmation_dialog.svg b/tools/editor/icons/source/icon_confirmation_dialog.svg
new file mode 100644
index 0000000000..49dbc21e92
--- /dev/null
+++ b/tools/editor/icons/source/icon_confirmation_dialog.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_confirmation_dialog.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_confirmation_dialog.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16"
+ inkscape:cx="7.6980886"
+ inkscape:cy="13.203824"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3 1 C 1.89543 1 1 1.8954 1 3 L 1 4 L 15 4 L 15 3 C 15 1.8954 14.104569 1 13 1 L 3 1 z M 12 2 L 13 2 L 13 3 L 12 3 L 12 2 z M 1 5 L 1 13 C 1 14.1046 1.89543 15 3 15 L 13 15 C 14.104569 15 15 14.1046 15 13 L 15 5 L 1 5 z M 2.5859375 8.8789062 L 4 10.292969 L 5.4140625 8.8789062 L 6.1210938 9.5859375 L 4.7070312 11 L 6.1210938 12.414062 L 5.4140625 13.121094 L 4 11.707031 L 2.5859375 13.121094 L 1.8789062 12.414062 L 3.2929688 11 L 1.8789062 9.5859375 L 2.5859375 8.8789062 z M 12.949219 8.8789062 L 13.65625 9.5859375 L 10.828125 12.414062 L 10.121094 13.121094 L 9.4140625 12.414062 L 8 11 L 8.7070312 10.292969 L 10.121094 11.707031 L 12.949219 8.8789062 z "
+ transform="translate(0,1036.3622)"
+ id="rect4140" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_connect.svg b/tools/editor/icons/source/icon_connect.svg
new file mode 100644
index 0000000000..2261765bdf
--- /dev/null
+++ b/tools/editor/icons/source/icon_connect.svg
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_connect.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627418"
+ inkscape:cx="9.0509434"
+ inkscape:cy="11.261328"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ y="1043.3622"
+ x="1"
+ height="1.9999478"
+ width="5"
+ id="rect4155"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4157"
+ width="4"
+ height="12"
+ x="7"
+ y="1038.3622" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4159"
+ width="3"
+ height="2"
+ x="11"
+ y="1040.3622" />
+ <rect
+ y="1046.3622"
+ x="11"
+ height="2"
+ width="3"
+ id="rect4161"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <circle
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4163"
+ cx="7"
+ cy="1040.3622"
+ r="2" />
+ <rect
+ y="1040.3622"
+ x="5"
+ height="8.0000172"
+ width="4"
+ id="rect4165"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <circle
+ r="2"
+ cy="1048.3622"
+ cx="7"
+ id="circle4167"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_connection_and_groups.svg b/tools/editor/icons/source/icon_connection_and_groups.svg
new file mode 100644
index 0000000000..97f615d9bc
--- /dev/null
+++ b/tools/editor/icons/source/icon_connection_and_groups.svg
@@ -0,0 +1,164 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_connection_and_groups.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627418"
+ inkscape:cx="4.8878469"
+ inkscape:cy="12.667351"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ y="1048.3622"
+ x="2"
+ height="0.99993038"
+ width="6"
+ id="rect4155"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4157"
+ width="2"
+ height="6.9999485"
+ x="10"
+ y="1045.3622" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4159"
+ width="2"
+ height="0.9999826"
+ x="12"
+ y="1046.3622" />
+ <rect
+ y="1050.3622"
+ x="12"
+ height="0.9999826"
+ width="2"
+ id="rect4161"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <ellipse
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4163"
+ cx="10"
+ cy="1047.3622"
+ rx="2"
+ ry="1.9999913" />
+ <circle
+ r="2"
+ cy="1050.3622"
+ cx="10"
+ id="circle4167"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="1047.3623"
+ x="8"
+ height="2.9998953"
+ width="2"
+ id="rect4201"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4203"
+ width="12"
+ height="1"
+ x="2"
+ y="1036.3622" />
+ <rect
+ y="1042.3622"
+ x="2"
+ height="1"
+ width="12"
+ id="rect4205"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="-3"
+ x="1036.3622"
+ height="1"
+ width="6.0000348"
+ id="rect4207"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0,1,-1,0,0,0)" />
+ <rect
+ transform="matrix(0,1,-1,0,0,0)"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4209"
+ width="6.0000348"
+ height="1"
+ x="1036.3622"
+ y="-14" />
+ <ellipse
+ ry="1.5000032"
+ rx="1.5"
+ cy="1039.8622"
+ cx="5.5"
+ id="ellipse4214"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <ellipse
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="ellipse4216"
+ cx="10.5"
+ cy="1039.8622"
+ rx="1.5"
+ ry="1.5000032" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_container.svg b/tools/editor/icons/source/icon_container.svg
new file mode 100644
index 0000000000..2d39efafee
--- /dev/null
+++ b/tools/editor/icons/source/icon_container.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_container.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="5.4993419"
+ inkscape:cy="7.9173851"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3 1 C 1.8954305 1 1 1.8954305 1 3 L 3 3 L 3 1 z M 5 1 L 5 3 L 7 3 L 7 1 L 5 1 z M 9 1 L 9 3 L 11 3 L 11 1 L 9 1 z M 13 1 L 13 3 L 15 3 C 15 1.8954305 14.104569 1 13 1 z M 1 5 L 1 7 L 3 7 L 3 5 L 1 5 z M 13 5 L 13 7 L 15 7 L 15 5 L 13 5 z M 1 9 L 1 11 L 3 11 L 3 9 L 1 9 z M 13 9 L 13 11 L 15 11 L 15 9 L 13 9 z M 1 13 C 1 14.104569 1.8954305 15 3 15 L 3 13 L 1 13 z M 5 13 L 5 15 L 7 15 L 7 13 L 5 13 z M 9 13 L 9 15 L 11 15 L 11 13 L 9 13 z M 13 13 L 13 15 C 14.104569 15 15 14.104569 15 13 L 13 13 z "
+ transform="translate(0,1036.3622)"
+ id="rect4140" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_control.svg b/tools/editor/icons/source/icon_control.svg
new file mode 100644
index 0000000000..675a9f5c43
--- /dev/null
+++ b/tools/editor/icons/source/icon_control.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_control.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_control.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="4.1094292"
+ inkscape:cy="4.5020156"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 2 A 6 6 0 0 0 2 8 A 6 6 0 0 0 8 14 A 6 6 0 0 0 14 8 A 6 6 0 0 0 8 2 z M 8 4 A 4 4 0 0 1 12 8 A 4 4 0 0 1 8 12 A 4 4 0 0 1 4 8 A 4 4 0 0 1 8 4 z "
+ transform="translate(0,1036.3622)"
+ id="path4154" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_control_align_bottom_center.svg b/tools/editor/icons/source/icon_control_align_bottom_center.svg
new file mode 100644
index 0000000000..d6c660bb2d
--- /dev/null
+++ b/tools/editor/icons/source/icon_control_align_bottom_center.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_control_align_bottom_center.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="3.6179596"
+ inkscape:cy="10.824674"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#919191;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4167"
+ width="16"
+ height="16"
+ x="0"
+ y="1036.3622" />
+ <rect
+ y="1038.3622"
+ x="1.9999826"
+ height="12.000034"
+ width="12.000034"
+ id="rect4169"
+ style="opacity:1;fill:#474747;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#d6d6d6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4171"
+ width="4"
+ height="4.0000172"
+ x="6"
+ y="1046.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_control_align_bottom_left.svg b/tools/editor/icons/source/icon_control_align_bottom_left.svg
new file mode 100644
index 0000000000..e718208f37
--- /dev/null
+++ b/tools/editor/icons/source/icon_control_align_bottom_left.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_control_align_bottom_left.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="3.6179596"
+ inkscape:cy="10.824674"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#919191;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4167"
+ width="16"
+ height="16"
+ x="0"
+ y="1036.3622" />
+ <rect
+ y="1038.3622"
+ x="1.9999826"
+ height="12.000034"
+ width="12.000034"
+ id="rect4169"
+ style="opacity:1;fill:#474747;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#d6d6d6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4171"
+ width="4"
+ height="4.0000172"
+ x="2"
+ y="1046.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_control_align_bottom_right.svg b/tools/editor/icons/source/icon_control_align_bottom_right.svg
new file mode 100644
index 0000000000..e4c5d884eb
--- /dev/null
+++ b/tools/editor/icons/source/icon_control_align_bottom_right.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_control_align_bottom_right.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="3.6179596"
+ inkscape:cy="10.824674"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#919191;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4167"
+ width="16"
+ height="16"
+ x="0"
+ y="1036.3622" />
+ <rect
+ y="1038.3622"
+ x="1.9999826"
+ height="12.000034"
+ width="12.000034"
+ id="rect4169"
+ style="opacity:1;fill:#474747;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#d6d6d6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4171"
+ width="4"
+ height="4.0000172"
+ x="10"
+ y="1046.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_control_align_bottom_wide.svg b/tools/editor/icons/source/icon_control_align_bottom_wide.svg
new file mode 100644
index 0000000000..93352dd3f5
--- /dev/null
+++ b/tools/editor/icons/source/icon_control_align_bottom_wide.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_control_align_bottom_wide.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="11.086775"
+ inkscape:cy="10.073373"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#919191;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4167"
+ width="16"
+ height="16"
+ x="0"
+ y="1036.3622" />
+ <rect
+ y="1038.3622"
+ x="1.9999826"
+ height="12.000034"
+ width="12.000034"
+ id="rect4169"
+ style="opacity:1;fill:#474747;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#d6d6d6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4171"
+ width="12.000001"
+ height="4.0000172"
+ x="1.9999995"
+ y="1046.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_control_align_center.svg b/tools/editor/icons/source/icon_control_align_center.svg
new file mode 100644
index 0000000000..0c34d13def
--- /dev/null
+++ b/tools/editor/icons/source/icon_control_align_center.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_control_align_center.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="3.6179596"
+ inkscape:cy="10.824674"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#919191;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4167"
+ width="16"
+ height="16"
+ x="0"
+ y="1036.3622" />
+ <rect
+ y="1038.3622"
+ x="1.9999826"
+ height="12.000034"
+ width="12.000034"
+ id="rect4169"
+ style="opacity:1;fill:#474747;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#d6d6d6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4171"
+ width="4"
+ height="4.0000172"
+ x="6"
+ y="1042.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_control_align_center_left.svg b/tools/editor/icons/source/icon_control_align_center_left.svg
new file mode 100644
index 0000000000..ea62c9457d
--- /dev/null
+++ b/tools/editor/icons/source/icon_control_align_center_left.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_control_align_center_left.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="12.103241"
+ inkscape:cy="11.222422"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#d6d6d6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4171"
+ width="6"
+ height="4.0000172"
+ x="2"
+ y="1042.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_control_align_center_right.svg b/tools/editor/icons/source/icon_control_align_center_right.svg
new file mode 100644
index 0000000000..3212ce8538
--- /dev/null
+++ b/tools/editor/icons/source/icon_control_align_center_right.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_control_align_center_right.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="12.103241"
+ inkscape:cy="11.222422"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#d6d6d6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4171"
+ width="6"
+ height="4.0000172"
+ x="8"
+ y="1042.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_control_align_left_center.svg b/tools/editor/icons/source/icon_control_align_left_center.svg
new file mode 100644
index 0000000000..716b6a2fd0
--- /dev/null
+++ b/tools/editor/icons/source/icon_control_align_left_center.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_control_left_center.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="3.6179596"
+ inkscape:cy="10.824674"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#919191;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4167"
+ width="16"
+ height="16"
+ x="0"
+ y="1036.3622" />
+ <rect
+ y="1038.3622"
+ x="1.9999826"
+ height="12.000034"
+ width="12.000034"
+ id="rect4169"
+ style="opacity:1;fill:#474747;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#d6d6d6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4171"
+ width="4"
+ height="4.0000172"
+ x="2"
+ y="1042.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_control_align_left_wide.svg b/tools/editor/icons/source/icon_control_align_left_wide.svg
new file mode 100644
index 0000000000..7092c78508
--- /dev/null
+++ b/tools/editor/icons/source/icon_control_align_left_wide.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_control_left_wide.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="3.6179596"
+ inkscape:cy="10.824674"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#919191;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4167"
+ width="16"
+ height="16"
+ x="0"
+ y="1036.3622" />
+ <rect
+ y="1038.3622"
+ x="1.9999826"
+ height="12.000034"
+ width="12.000034"
+ id="rect4169"
+ style="opacity:1;fill:#474747;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#d6d6d6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4171"
+ width="4"
+ height="12.000017"
+ x="2"
+ y="1038.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_control_align_right_center.svg b/tools/editor/icons/source/icon_control_align_right_center.svg
new file mode 100644
index 0000000000..7e7e4f2b23
--- /dev/null
+++ b/tools/editor/icons/source/icon_control_align_right_center.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_control_align_right_center.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="12.103241"
+ inkscape:cy="11.222422"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#919191;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4167"
+ width="16"
+ height="16"
+ x="0"
+ y="1036.3622" />
+ <rect
+ y="1038.3622"
+ x="1.9999826"
+ height="12.000034"
+ width="12.000034"
+ id="rect4169"
+ style="opacity:1;fill:#474747;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#d6d6d6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4171"
+ width="4"
+ height="4.0000172"
+ x="10"
+ y="1042.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_control_align_right_wide.svg b/tools/editor/icons/source/icon_control_align_right_wide.svg
new file mode 100644
index 0000000000..ef2d105bd8
--- /dev/null
+++ b/tools/editor/icons/source/icon_control_align_right_wide.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_control_right_wide.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="3.6179596"
+ inkscape:cy="10.824674"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#919191;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4167"
+ width="16"
+ height="16"
+ x="0"
+ y="1036.3622" />
+ <rect
+ y="1038.3622"
+ x="1.9999826"
+ height="12.000034"
+ width="12.000034"
+ id="rect4169"
+ style="opacity:1;fill:#474747;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#d6d6d6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4171"
+ width="4"
+ height="11.999983"
+ x="10"
+ y="1038.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_control_align_top_center.svg b/tools/editor/icons/source/icon_control_align_top_center.svg
new file mode 100644
index 0000000000..a5b60846f4
--- /dev/null
+++ b/tools/editor/icons/source/icon_control_align_top_center.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_control_top_center.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="3.6179596"
+ inkscape:cy="10.824674"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#919191;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4167"
+ width="16"
+ height="16"
+ x="0"
+ y="1036.3622" />
+ <rect
+ y="1038.3622"
+ x="1.9999826"
+ height="12.000034"
+ width="12.000034"
+ id="rect4169"
+ style="opacity:1;fill:#474747;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#d6d6d6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4171"
+ width="4"
+ height="3.999948"
+ x="6"
+ y="1038.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_control_align_top_left.svg b/tools/editor/icons/source/icon_control_align_top_left.svg
new file mode 100644
index 0000000000..9f4631cf31
--- /dev/null
+++ b/tools/editor/icons/source/icon_control_align_top_left.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_control_top_left.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="3.6179596"
+ inkscape:cy="10.824674"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#919191;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4167"
+ width="16"
+ height="16"
+ x="0"
+ y="1036.3622" />
+ <rect
+ y="1038.3622"
+ x="1.9999826"
+ height="12.000034"
+ width="12.000034"
+ id="rect4169"
+ style="opacity:1;fill:#474747;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#d6d6d6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4171"
+ width="4"
+ height="3.999948"
+ x="2"
+ y="1038.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_control_align_top_right.svg b/tools/editor/icons/source/icon_control_align_top_right.svg
new file mode 100644
index 0000000000..d968ba3d09
--- /dev/null
+++ b/tools/editor/icons/source/icon_control_align_top_right.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_control_top_right.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="3.6179596"
+ inkscape:cy="10.824674"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#919191;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4167"
+ width="16"
+ height="16"
+ x="0"
+ y="1036.3622" />
+ <rect
+ y="1038.3622"
+ x="1.9999826"
+ height="12.000034"
+ width="12.000034"
+ id="rect4169"
+ style="opacity:1;fill:#474747;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#d6d6d6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4171"
+ width="4"
+ height="3.999948"
+ x="10"
+ y="1038.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_control_align_top_wide.svg b/tools/editor/icons/source/icon_control_align_top_wide.svg
new file mode 100644
index 0000000000..886ef60fe0
--- /dev/null
+++ b/tools/editor/icons/source/icon_control_align_top_wide.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_control_top_wide.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="3.6179596"
+ inkscape:cy="10.824674"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#919191;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4167"
+ width="16"
+ height="16"
+ x="0"
+ y="1036.3622" />
+ <rect
+ y="1038.3622"
+ x="1.9999826"
+ height="12.000034"
+ width="12.000034"
+ id="rect4169"
+ style="opacity:1;fill:#474747;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#d6d6d6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4171"
+ width="12"
+ height="3.999948"
+ x="2"
+ y="1038.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_control_align_wide.svg b/tools/editor/icons/source/icon_control_align_wide.svg
new file mode 100644
index 0000000000..3f58ed93b6
--- /dev/null
+++ b/tools/editor/icons/source/icon_control_align_wide.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_control_align_wide.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="3.6179596"
+ inkscape:cy="10.824674"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#919191;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4167"
+ width="16"
+ height="16"
+ x="0"
+ y="1036.3622" />
+ <rect
+ y="1038.3622"
+ x="1.9999826"
+ height="12.000034"
+ width="12.000034"
+ id="rect4169"
+ style="opacity:1;fill:#474747;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#d6d6d6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4171"
+ width="12"
+ height="12.000017"
+ x="2"
+ y="1038.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_control_hcenter_wide.svg b/tools/editor/icons/source/icon_control_hcenter_wide.svg
new file mode 100644
index 0000000000..3aafa0340e
--- /dev/null
+++ b/tools/editor/icons/source/icon_control_hcenter_wide.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_control_hcenter_wide.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="6.4389915"
+ inkscape:cy="4.9357422"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#919191;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4167"
+ width="16"
+ height="16"
+ x="0"
+ y="1036.3622" />
+ <rect
+ y="1038.3622"
+ x="1.9999826"
+ height="12.000034"
+ width="12.000034"
+ id="rect4169"
+ style="opacity:1;fill:#474747;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#d6d6d6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4171"
+ width="12"
+ height="3.9999824"
+ x="2"
+ y="1042.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_control_vcenter_wide.svg b/tools/editor/icons/source/icon_control_vcenter_wide.svg
new file mode 100644
index 0000000000..96fd44f3c8
--- /dev/null
+++ b/tools/editor/icons/source/icon_control_vcenter_wide.svg
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_control_vcenter_wide.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="6.4389915"
+ inkscape:cy="4.9357422"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#919191;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4167"
+ width="16"
+ height="16"
+ x="0"
+ y="1036.3622" />
+ <rect
+ y="1038.3622"
+ x="1.9999826"
+ height="12.000034"
+ width="12.000034"
+ id="rect4169"
+ style="opacity:1;fill:#474747;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#d6d6d6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4171"
+ width="12"
+ height="3.9999824"
+ x="1038.3622"
+ y="-9.9999914"
+ transform="matrix(0,1,-1,0,0,0)" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_convex_polygon_shape.svg b/tools/editor/icons/source/icon_convex_polygon_shape.svg
new file mode 100644
index 0000000000..b867a58f6f
--- /dev/null
+++ b/tools/editor/icons/source/icon_convex_polygon_shape.svg
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="icon_convex_polygon_shape.svg"
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_convex_polygon_shape.png"
+ inkscape:version="0.91 r13725"
+ version="1.1"
+ id="svg2"
+ viewBox="0 0 16 16"
+ height="16"
+ width="16">
+ <sodipodi:namedview
+ inkscape:snap-smooth-nodes="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-paths="false"
+ inkscape:window-maximized="1"
+ inkscape:window-y="27"
+ inkscape:window-x="0"
+ inkscape:window-height="1016"
+ inkscape:window-width="1920"
+ inkscape:snap-center="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:bbox-nodes="true"
+ inkscape:bbox-paths="true"
+ inkscape:snap-bbox="true"
+ units="px"
+ showgrid="true"
+ inkscape:current-layer="layer1-6"
+ inkscape:document-units="px"
+ inkscape:cy="10.815092"
+ inkscape:cx="5.572433"
+ inkscape:zoom="22.627416"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base">
+ <inkscape:grid
+ id="grid3336"
+ type="xygrid" />
+ </sodipodi:namedview>
+ <defs
+ id="defs4" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(0,-1036.3622)"
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <g
+ inkscape:label="Layer 1"
+ id="layer1-6">
+ <path
+ style="fill:#2998ff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 8 1 L 1 4 L 1 12 L 8 15 L 15 12 L 8 1 z "
+ transform="translate(0,1036.3622)"
+ id="path4159" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path4143"
+ d="m 8,1051.3622 -7,-3 0,-8 7,3 z"
+ style="fill:#68b6ff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:#2998ff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 8,1 1,4 8,15 15,12 Z"
+ transform="translate(0,1036.3622)"
+ id="path4145"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_create_new_scene_from.svg b/tools/editor/icons/source/icon_create_new_scene_from.svg
new file mode 100644
index 0000000000..f5a456773c
--- /dev/null
+++ b/tools/editor/icons/source/icon_create_new_scene_from.svg
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_create_new_scene_from.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_create_new_scene_from.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="4.1061535"
+ inkscape:cy="9.360052"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 1 7 L 1 13 A 2 2 0 0 0 3 15 L 15 15 L 15 7 L 1 7 z M 4 9 L 5 9 L 5 11 L 7 11 L 7 12 L 5 12 L 5 14 L 4 14 L 4 12 L 2 12 L 2 11 L 4 11 L 4 9 z "
+ transform="translate(0,1036.3622)"
+ id="rect4136" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 0.7112932,1040.3831 1,1042.3622 l 2.2438279,-0.3273 -0.8182578,-1.9018 -1.7142769,0.25 z m 3.6933293,-0.5387 0.8182578,1.9018 1.9790524,-0.2887 -0.8182579,-1.9018 -1.9790523,0.2887 z m 3.9581047,-0.5775 0.8182579,1.9018 1.9790519,-0.2887 -0.818257,-1.9018 -1.9790528,0.2887 z m 3.9581048,-0.5774 0.818258,1.9018 1.714277,-0.25 -0.288707,-1.9791 -2.243828,0.3273 z"
+ id="rect4138"
+ inkscape:connector-curvature="0"
+ inkscape:transform-center-x="-6.7823301"
+ inkscape:transform-center-y="-2" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_curve_close.svg b/tools/editor/icons/source/icon_curve_close.svg
new file mode 100644
index 0000000000..15909df7c8
--- /dev/null
+++ b/tools/editor/icons/source/icon_curve_close.svg
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_curve_close.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_curve_close.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="6.6078006"
+ inkscape:cy="10.161674"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:snap-midpoints="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 5,1049.3622 c -2,-9 -1,-10 8,-8"
+ id="path4147"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <circle
+ style="opacity:1;fill:#f5f5f5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4149"
+ cx="5"
+ cy="1041.3622"
+ r="2" />
+ <rect
+ y="1044.3622"
+ x="7.9999828"
+ height="2.0000348"
+ width="2.0000348"
+ id="rect4159"
+ style="opacity:1;fill:#84c2ff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <circle
+ style="opacity:1;fill:#f5f5f5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4143"
+ cx="5"
+ cy="1049.3622"
+ r="2" />
+ <circle
+ r="2"
+ cy="1041.3622"
+ cx="13"
+ id="circle4145"
+ style="opacity:1;fill:#f5f5f5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#84c2ff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4155"
+ width="2.0000348"
+ height="2.0000348"
+ x="5.9999828"
+ y="1046.3622" />
+ <rect
+ y="1042.3622"
+ x="10"
+ height="2"
+ width="2"
+ id="rect4157"
+ style="opacity:1;fill:#84c2ff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_curve_constant.svg b/tools/editor/icons/source/icon_curve_constant.svg
new file mode 100644
index 0000000000..6d9a7dc959
--- /dev/null
+++ b/tools/editor/icons/source/icon_curve_constant.svg
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="12"
+ height="12"
+ viewBox="0 0 12 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_curve_constant.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="3.5203812"
+ inkscape:cy="8.9341513"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2,1046.3622 8,0"
+ id="path4156"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_curve_create.svg b/tools/editor/icons/source/icon_curve_create.svg
new file mode 100644
index 0000000000..8ab578e9a0
--- /dev/null
+++ b/tools/editor/icons/source/icon_curve_create.svg
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_curve_create.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_curve_create.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="5.3157064"
+ inkscape:cy="11.760735"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:snap-midpoints="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 5,1049.3622 c -2,-9 -1,-10 8,-8"
+ id="path4147"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <circle
+ style="opacity:1;fill:#84ffb1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4149"
+ cx="5"
+ cy="1041.3622"
+ r="2" />
+ <circle
+ style="opacity:1;fill:#f5f5f5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4143"
+ cx="5"
+ cy="1049.3622"
+ r="2" />
+ <circle
+ r="2"
+ cy="1041.3622"
+ cx="13"
+ id="circle4145"
+ style="opacity:1;fill:#f5f5f5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#84ffb1;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4139"
+ width="8"
+ height="2"
+ x="8"
+ y="1047.3622" />
+ <rect
+ y="-13"
+ x="1044.3622"
+ height="2"
+ width="8.0000172"
+ id="rect4141"
+ style="opacity:1;fill:#84ffb1;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0,1,-1,0,0,0)" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_curve_curve.svg b/tools/editor/icons/source/icon_curve_curve.svg
new file mode 100644
index 0000000000..e3b6b64a4c
--- /dev/null
+++ b/tools/editor/icons/source/icon_curve_curve.svg
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_curve_curve.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_curve_curve.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="8.0020857"
+ inkscape:cy="8.8914924"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:snap-midpoints="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 5,1049.3622 c -2,-9 -1,-10 8,-8"
+ id="path4147"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <circle
+ style="opacity:1;fill:#84c2ff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4149"
+ cx="5"
+ cy="1041.3622"
+ r="2" />
+ <circle
+ style="opacity:1;fill:#f5f5f5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4143"
+ cx="5"
+ cy="1049.3622"
+ r="2" />
+ <circle
+ r="2"
+ cy="1041.3622"
+ cx="13"
+ id="circle4145"
+ style="opacity:1;fill:#f5f5f5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="fill:#84c2ff;fill-rule:evenodd;stroke:#84c2ff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
+ d="m 1,1045.3622 8,-8"
+ id="path4263"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_curve_delete.svg b/tools/editor/icons/source/icon_curve_delete.svg
new file mode 100644
index 0000000000..f40dd1eeb1
--- /dev/null
+++ b/tools/editor/icons/source/icon_curve_delete.svg
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_curve_delete.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_curve_delete.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="6.6676795"
+ inkscape:cy="7.1456593"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:snap-midpoints="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 5,1049.3622 c -2,-9 -1,-10 8,-8"
+ id="path4147"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <circle
+ style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4149"
+ cx="5"
+ cy="1041.3622"
+ r="2" />
+ <circle
+ style="opacity:1;fill:#f5f5f5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4143"
+ cx="5"
+ cy="1049.3622"
+ r="2" />
+ <circle
+ r="2"
+ cy="1041.3622"
+ cx="13"
+ id="circle4145"
+ style="opacity:1;fill:#f5f5f5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8.4644661,1046.2409 2.1213199,2.1213 -2.1213199,2.1213 1.4142136,1.4142 L 12,1049.7764 l 2.12132,2.1213 1.414214,-1.4142 -2.12132,-2.1213 2.12132,-2.1213 -1.414214,-1.4142 -2.12132,2.1213 -2.1213203,-2.1213 -1.4142136,1.4142 z"
+ id="rect4139"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_curve_edit.svg b/tools/editor/icons/source/icon_curve_edit.svg
new file mode 100644
index 0000000000..f695e96b8c
--- /dev/null
+++ b/tools/editor/icons/source/icon_curve_edit.svg
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_curve_edit.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_curve_edit.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="3.062239"
+ inkscape:cy="6.4210339"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:snap-midpoints="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 5,1049.3622 c -2,-9 -1,-10 8,-8"
+ id="path4147"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <circle
+ style="opacity:1;fill:#84c2ff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4149"
+ cx="5"
+ cy="1041.3622"
+ r="2" />
+ <circle
+ style="opacity:1;fill:#f5f5f5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4143"
+ cx="5"
+ cy="1049.3622"
+ r="2" />
+ <circle
+ r="2"
+ cy="1041.3622"
+ cx="13"
+ id="circle4145"
+ style="opacity:1;fill:#f5f5f5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="opacity:1;fill:#84c2ff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 16,1047.6532 -8,-3.291 3.290998,8 0.947104,-2.8201 1.8836,1.8835 0.941801,-0.9418 -1.8836,-1.8835 z"
+ id="rect4163"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_curve_in.svg b/tools/editor/icons/source/icon_curve_in.svg
new file mode 100644
index 0000000000..9dc033aa95
--- /dev/null
+++ b/tools/editor/icons/source/icon_curve_in.svg
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="12"
+ height="12"
+ viewBox="0 0 12 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_curve_in.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="8.1532813"
+ inkscape:cy="10.367959"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ d="m 2,1050.3622 c 5,0 8,-3 8,-8"
+ id="path4156"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_curve_in_out.svg b/tools/editor/icons/source/icon_curve_in_out.svg
new file mode 100644
index 0000000000..c68f906423
--- /dev/null
+++ b/tools/editor/icons/source/icon_curve_in_out.svg
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="12"
+ height="12"
+ viewBox="0 0 12 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_curve_in_out.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="7.5203812"
+ inkscape:cy="8.2466513"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2,1050.3622 c 5,0 3,-8 8,-8"
+ id="path4156"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_curve_linear.svg b/tools/editor/icons/source/icon_curve_linear.svg
new file mode 100644
index 0000000000..ae7a889a71
--- /dev/null
+++ b/tools/editor/icons/source/icon_curve_linear.svg
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="12"
+ height="12"
+ viewBox="0 0 12 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_curve_linear.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="2.1141312"
+ inkscape:cy="8.1841513"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2,1050.3622 8,-8"
+ id="path4156"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_curve_out.svg b/tools/editor/icons/source/icon_curve_out.svg
new file mode 100644
index 0000000000..080aa755dc
--- /dev/null
+++ b/tools/editor/icons/source/icon_curve_out.svg
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="12"
+ height="12"
+ viewBox="0 0 12 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_curve_out.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="7.5203812"
+ inkscape:cy="8.2466513"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2,1050.3622 c 0,-5 3,-8 8,-8"
+ id="path4156"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_curve_out_in.svg b/tools/editor/icons/source/icon_curve_out_in.svg
new file mode 100644
index 0000000000..d2b4d06e5f
--- /dev/null
+++ b/tools/editor/icons/source/icon_curve_out_in.svg
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="12"
+ height="12"
+ viewBox="0 0 12 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_curve_out_in.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="2.1141312"
+ inkscape:cy="8.1841513"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2,1050.3622 c 0,-5 8,-3 8,-8"
+ id="path4156"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_damped_spring_joint_2d.svg b/tools/editor/icons/source/icon_damped_spring_joint_2d.svg
new file mode 100644
index 0000000000..bf12810a6c
--- /dev/null
+++ b/tools/editor/icons/source/icon_damped_spring_joint_2d.svg
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_damped_spring_joint_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_damped_spring_joint_2d.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999998"
+ inkscape:cx="8.6860688"
+ inkscape:cy="11.920466"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ sodipodi:nodetypes="cccccccccc"
+ inkscape:connector-curvature="0"
+ id="path4165"
+ transform="translate(0,1036.3622)"
+ d="m 4,3 0,2 8,3 0,-2 z m 0,5 0,2 8,3 0,-2 z"
+ style="opacity:1;fill:#708cea;fill-opacity:0.98823529;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="opacity:1;fill:#a5b7f2;fill-opacity:0.98823529;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 4,3 0,2 8,-2 0,-2 z m 0,5 0,2 8,-2 0,-2 z m 0,5 0,2 8,-2 0,-2 z"
+ transform="translate(0,1036.3622)"
+ id="rect4144"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_debug_continue.svg b/tools/editor/icons/source/icon_debug_continue.svg
new file mode 100644
index 0000000000..5d9ccd5a7e
--- /dev/null
+++ b/tools/editor/icons/source/icon_debug_continue.svg
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_arrow_left.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_debug_continue.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="12.141752"
+ inkscape:cy="5.0854399"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4352"
+ width="6"
+ height="2.0000174"
+ x="5"
+ y="1043.3622" />
+ <g
+ id="layer1-2"
+ inkscape:label="Layer 1"
+ transform="matrix(-0.71428934,0,0,0.88888708,2.4999495,121.81991)"
+ style="fill:#ff8484;fill-opacity:1">
+ <path
+ inkscape:transform-center-x="1.1667546"
+ sodipodi:type="star"
+ style="fill:#ff8484;fill-opacity:1;stroke:none;stroke-linecap:round;stroke-opacity:1"
+ id="path4435"
+ sodipodi:sides="3"
+ sodipodi:cx="5"
+ sodipodi:cy="-1038.3622"
+ sodipodi:r1="3.6055512"
+ sodipodi:r2="1.8027756"
+ sodipodi:arg1="0.52359878"
+ sodipodi:arg2="1.5707963"
+ inkscape:flatsided="false"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 8.122499,-1036.5594 -3.122499,0 -3.122499,0 1.5612495,-2.7042 L 5,-1041.9677 l 1.5612495,2.7041 z"
+ inkscape:transform-center-y="-9.6789057e-05"
+ transform="matrix(0,1.4411577,1.2942939,0,1331.1125,1030.6564)" />
+ </g>
+ <circle
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4137"
+ cx="4"
+ cy="1044.3622"
+ r="3" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_debug_next.svg b/tools/editor/icons/source/icon_debug_next.svg
new file mode 100644
index 0000000000..4dd9bb8c4b
--- /dev/null
+++ b/tools/editor/icons/source/icon_debug_next.svg
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_arrow_left.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_debug_next.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="6.9909322"
+ inkscape:cy="6.93198"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4352"
+ width="9.9999828"
+ height="2.0000174"
+ x="1037.3622"
+ y="-5.0000086"
+ transform="matrix(0,1,-1,0,0,0)" />
+ <g
+ id="layer1-2"
+ inkscape:label="Layer 1"
+ transform="matrix(0,-0.57143854,-0.66666446,0,695.90584,1041.362)"
+ style="fill:#ff8484;fill-opacity:1">
+ <path
+ inkscape:transform-center-x="1.1667546"
+ sodipodi:type="star"
+ style="fill:#ff8484;fill-opacity:1;stroke:none;stroke-linecap:round;stroke-opacity:1"
+ id="path4435"
+ sodipodi:sides="3"
+ sodipodi:cx="5"
+ sodipodi:cy="-1038.3622"
+ sodipodi:r1="3.6055512"
+ sodipodi:r2="1.8027756"
+ sodipodi:arg1="0.52359878"
+ sodipodi:arg2="1.5707963"
+ inkscape:flatsided="false"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 8.122499,-1036.5594 -3.122499,0 -3.122499,0 1.5612495,-2.7042 L 5,-1041.9677 l 1.5612495,2.7041 z"
+ inkscape:transform-center-y="-9.6789057e-05"
+ transform="matrix(0,1.4411577,1.2942939,0,1331.1125,1030.6564)" />
+ </g>
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4321"
+ width="8"
+ height="2"
+ x="7"
+ y="1037.3622" />
+ <rect
+ y="1041.3622"
+ x="9"
+ height="2"
+ width="6"
+ id="rect4323"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4325"
+ width="6"
+ height="2"
+ x="9"
+ y="1045.3622" />
+ <rect
+ y="1049.3622"
+ x="7"
+ height="2"
+ width="8"
+ id="rect4327"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_debug_step.svg b/tools/editor/icons/source/icon_debug_step.svg
new file mode 100644
index 0000000000..20d11f8710
--- /dev/null
+++ b/tools/editor/icons/source/icon_debug_step.svg
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_arrow_left.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_debug_step.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="2.5279345"
+ inkscape:cy="7.1918803"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4352"
+ width="9.9999828"
+ height="2.0000174"
+ x="1037.3622"
+ y="-3.0000174"
+ transform="matrix(0,1,-1,0,0,0)" />
+ <g
+ id="layer1-2"
+ inkscape:label="Layer 1"
+ transform="matrix(-0.57143854,0,0,0.66666446,-2.0001146,354.45636)"
+ style="fill:#ff8484;fill-opacity:1">
+ <path
+ inkscape:transform-center-x="1.1667546"
+ sodipodi:type="star"
+ style="fill:#ff8484;fill-opacity:1;stroke:none;stroke-linecap:round;stroke-opacity:1"
+ id="path4435"
+ sodipodi:sides="3"
+ sodipodi:cx="5"
+ sodipodi:cy="-1038.3622"
+ sodipodi:r1="3.6055512"
+ sodipodi:r2="1.8027756"
+ sodipodi:arg1="0.52359878"
+ sodipodi:arg2="1.5707963"
+ inkscape:flatsided="false"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 8.122499,-1036.5594 -3.122499,0 -3.122499,0 1.5612495,-2.7042 L 5,-1041.9677 l 1.5612495,2.7041 z"
+ inkscape:transform-center-y="-9.6789057e-05"
+ transform="matrix(0,1.4411577,1.2942939,0,1331.1125,1030.6564)" />
+ </g>
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4321"
+ width="8"
+ height="2"
+ x="7"
+ y="1037.3622" />
+ <rect
+ y="1041.3622"
+ x="9"
+ height="2"
+ width="6"
+ id="rect4323"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4325"
+ width="6"
+ height="2"
+ x="9"
+ y="1045.3622" />
+ <rect
+ y="1049.3622"
+ x="7"
+ height="2"
+ width="8"
+ id="rect4327"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ transform="matrix(0,1,-1,0,0,0)"
+ y="-4"
+ x="1045.3622"
+ height="3"
+ width="1.9999654"
+ id="rect4348"
+ style="fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_dependency_changed.svg b/tools/editor/icons/source/icon_dependency_changed.svg
new file mode 100644
index 0000000000..bbcd3f0c0a
--- /dev/null
+++ b/tools/editor/icons/source/icon_dependency_changed.svg
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_dependency_changed_hl.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_dependency_changed.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="30.700696"
+ inkscape:cx="6.9126947"
+ inkscape:cy="8.6287187"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 1 A 7 7 0 0 0 1 8 A 7 7 0 0 0 8 15 A 7 7 0 0 0 15 8 A 7 7 0 0 0 8 1 z M 7 3 L 9 3 L 9 10 L 7 10 L 7 3 z M 7 11 L 9 11 L 9 13 L 7 13 L 7 11 z "
+ transform="translate(0,1036.3622)"
+ id="path4137" />
+ <path
+ id="path4158"
+ transform="translate(0,1036.3622)"
+ d="M 8 1 A 7 7 0 0 0 1 8 A 7 7 0 0 0 8 15 A 7 7 0 0 0 15 8 A 7 7 0 0 0 8 1 z M 7 3 L 9 3 L 9 10 L 7 10 L 7 3 z M 7 11 L 9 11 L 9 13 L 7 13 L 7 11 z "
+ style="opacity:1;fill:#000000;fill-opacity:0.23529412;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_dependency_changed_hl.svg b/tools/editor/icons/source/icon_dependency_changed_hl.svg
new file mode 100644
index 0000000000..54a37695ef
--- /dev/null
+++ b/tools/editor/icons/source/icon_dependency_changed_hl.svg
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_dependency_changed_hl.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_dependency_changed_hl.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="30.700696"
+ inkscape:cx="7.2709928"
+ inkscape:cy="8.1075579"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <circle
+ style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4137"
+ cx="8"
+ cy="1044.3622"
+ r="7" />
+ <rect
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4156"
+ width="2"
+ height="2"
+ x="7"
+ y="1047.3622" />
+ <rect
+ y="1039.3622"
+ x="7"
+ height="6.9999828"
+ width="2"
+ id="rect4158"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_dependency_local_changed.svg b/tools/editor/icons/source/icon_dependency_local_changed.svg
new file mode 100644
index 0000000000..799d69c4e0
--- /dev/null
+++ b/tools/editor/icons/source/icon_dependency_local_changed.svg
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_dependency_changed_hl.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_dependency_local_changed.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="43.417341"
+ inkscape:cx="3.4517439"
+ inkscape:cy="8.2965936"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#ffd684;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 1 A 7 7 0 0 0 1 8 A 7 7 0 0 0 8 15 A 7 7 0 0 0 15 8 A 7 7 0 0 0 8 1 z M 8 3 A 4 4 0 0 1 12 7 A 4 4 0 0 1 9 10.867188 L 9 11 L 7 11 L 7 9 L 8 9 A 2 2 0 0 0 10 7 A 2 2 0 0 0 8 5 A 2 2 0 0 0 6 7 L 4 7 A 4 4 0 0 1 8 3 z M 7 12 L 9 12 L 9 14 L 7 14 L 7 12 z "
+ transform="translate(0,1036.3622)"
+ id="path4137" />
+ <path
+ id="path4156"
+ transform="translate(0,1036.3622)"
+ d="M 8 1 A 7 7 0 0 0 1 8 A 7 7 0 0 0 8 15 A 7 7 0 0 0 15 8 A 7 7 0 0 0 8 1 z M 8 3 A 4 4 0 0 1 12 7 A 4 4 0 0 1 9 10.867188 L 9 11 L 7 11 L 7 9 L 8 9 A 2 2 0 0 0 10 7 A 2 2 0 0 0 8 5 A 2 2 0 0 0 6 7 L 4 7 A 4 4 0 0 1 8 3 z M 7 12 L 9 12 L 9 14 L 7 14 L 7 12 z "
+ style="opacity:1;fill:#000000;fill-opacity:0.23529412;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_dependency_local_changed_hl.svg b/tools/editor/icons/source/icon_dependency_local_changed_hl.svg
new file mode 100644
index 0000000000..67c04c312a
--- /dev/null
+++ b/tools/editor/icons/source/icon_dependency_local_changed_hl.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_dependency_changed_hl.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_dependency_local_changed_hl.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="43.417341"
+ inkscape:cx="3.4517439"
+ inkscape:cy="8.2965936"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#ffd684;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 1 A 7 7 0 0 0 1 8 A 7 7 0 0 0 8 15 A 7 7 0 0 0 15 8 A 7 7 0 0 0 8 1 z M 8 3 A 4 4 0 0 1 12 7 A 4 4 0 0 1 9 10.867188 L 9 11 L 7 11 L 7 9 L 8 9 A 2 2 0 0 0 10 7 A 2 2 0 0 0 8 5 A 2 2 0 0 0 6 7 L 4 7 A 4 4 0 0 1 8 3 z M 7 12 L 9 12 L 9 14 L 7 14 L 7 12 z "
+ transform="translate(0,1036.3622)"
+ id="path4137" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_dependency_ok.svg b/tools/editor/icons/source/icon_dependency_ok.svg
new file mode 100644
index 0000000000..76d7f54065
--- /dev/null
+++ b/tools/editor/icons/source/icon_dependency_ok.svg
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_dependency_changed_hl.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_dependency_ok.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="30.700696"
+ inkscape:cx="7.9274941"
+ inkscape:cy="10.170392"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#84ffb1;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 1 A 7 7 0 0 0 1 8 A 7 7 0 0 0 8 15 A 7 7 0 0 0 15 8 A 7 7 0 0 0 8 1 z M 11.181641 4.9296875 L 12.595703 6.34375 L 8.3535156 10.585938 L 7.6464844 11.292969 L 6.9394531 12 L 3.4042969 8.4648438 L 4.8183594 7.0507812 L 6.9394531 9.171875 L 11.181641 4.9296875 z "
+ transform="translate(0,1036.3622)"
+ id="path4137" />
+ <path
+ id="path4156"
+ transform="translate(0,1036.3622)"
+ d="M 8 1 A 7 7 0 0 0 1 8 A 7 7 0 0 0 8 15 A 7 7 0 0 0 15 8 A 7 7 0 0 0 8 1 z M 11.181641 4.9296875 L 12.595703 6.34375 L 8.3535156 10.585938 L 7.6464844 11.292969 L 6.9394531 12 L 3.4042969 8.4648438 L 4.8183594 7.0507812 L 6.9394531 9.171875 L 11.181641 4.9296875 z "
+ style="opacity:1;fill:#000000;fill-opacity:0.23529412;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_dependency_ok_hl.svg b/tools/editor/icons/source/icon_dependency_ok_hl.svg
new file mode 100644
index 0000000000..190458c532
--- /dev/null
+++ b/tools/editor/icons/source/icon_dependency_ok_hl.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_dependency_changed_hl.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_dependency_ok_hl.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="30.700696"
+ inkscape:cx="3.5953448"
+ inkscape:cy="9.4537959"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#84ffb1;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 1 A 7 7 0 0 0 1 8 A 7 7 0 0 0 8 15 A 7 7 0 0 0 15 8 A 7 7 0 0 0 8 1 z M 11.181641 4.9296875 L 12.595703 6.34375 L 8.3535156 10.585938 L 7.6464844 11.292969 L 6.9394531 12 L 3.4042969 8.4648438 L 4.8183594 7.0507812 L 6.9394531 9.171875 L 11.181641 4.9296875 z "
+ transform="translate(0,1036.3622)"
+ id="path4137" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_directional_light.svg b/tools/editor/icons/source/icon_directional_light.svg
new file mode 100644
index 0000000000..dbec755039
--- /dev/null
+++ b/tools/editor/icons/source/icon_directional_light.svg
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_directional_light.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999999"
+ inkscape:cx="9.4601953"
+ inkscape:cy="9.2165454"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8,1040.3622 c -2.209139,0 -4,1.7909 -4,4 0,2.2091 1.790861,4 4,4 2.209139,0 4,-1.7909 4,-4 0,-2.2091 -1.790861,-4 -4,-4 z m 0,6.6667 c -3.5555555,1.7777 -1.7777778,0.8889 0,0 z"
+ id="path4154"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ssssscc" />
+ <rect
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4192"
+ width="2"
+ height="2"
+ x="7"
+ y="1037.3622"
+ inkscape:transform-center-y="-6.0000174" />
+ <rect
+ inkscape:transform-center-y="-1.74e-05"
+ y="-15.000017"
+ x="1043.3622"
+ height="2"
+ width="2"
+ id="rect4194"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0,1,-1,0,0,0)"
+ inkscape:transform-center-x="-6.0000172" />
+ <rect
+ inkscape:transform-center-x="-1.72e-05"
+ transform="scale(-1,-1)"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4196"
+ width="2"
+ height="2"
+ x="-9.0000172"
+ y="-1051.3622"
+ inkscape:transform-center-y="5.9999826" />
+ <rect
+ inkscape:transform-center-y="-1.74e-05"
+ y="1.0000174"
+ x="-1045.3622"
+ height="2"
+ width="2"
+ id="rect4198"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0,-1,1,0,0,0)"
+ inkscape:transform-center-x="5.9999826" />
+ <rect
+ inkscape:transform-center-y="-4.2426533"
+ y="737.13245"
+ x="-733.81873"
+ height="2"
+ width="2"
+ id="rect4200"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,0,0)"
+ inkscape:transform-center-x="4.2426321" />
+ <rect
+ inkscape:transform-center-x="-4.2426493"
+ transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4202"
+ width="2"
+ height="2"
+ x="743.13245"
+ y="725.81873"
+ inkscape:transform-center-y="-4.2426534" />
+ <rect
+ inkscape:transform-center-y="4.242628"
+ y="-751.13245"
+ x="731.81873"
+ height="2"
+ width="2"
+ id="rect4204"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(-0.70710678,0.70710678,-0.70710678,-0.70710678,0,0)"
+ inkscape:transform-center-x="-4.2426493" />
+ <rect
+ inkscape:transform-center-x="4.2426321"
+ transform="matrix(-0.70710678,-0.70710678,0.70710678,-0.70710678,0,0)"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4206"
+ width="2"
+ height="2"
+ x="-745.13245"
+ y="-739.81873"
+ inkscape:transform-center-y="4.242628" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_duplicate.svg b/tools/editor/icons/source/icon_duplicate.svg
new file mode 100644
index 0000000000..bb88f577e9
--- /dev/null
+++ b/tools/editor/icons/source/icon_duplicate.svg
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_duplicate.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_duplicate.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16"
+ inkscape:cx="9.1887289"
+ inkscape:cy="11.094045"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4137"
+ width="1"
+ height="10.000034"
+ x="3"
+ y="1041.3622" />
+ <rect
+ y="1050.3622"
+ x="3"
+ height="1.0000174"
+ width="8"
+ id="rect4139"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 5,1038.3622 0,11 8,0 0,-7 -4,0 0,-4 z m 5,0 0,3 3,0 z"
+ id="rect4158"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_dynamic_font.svg b/tools/editor/icons/source/icon_dynamic_font.svg
new file mode 100644
index 0000000000..a40c0e3408
--- /dev/null
+++ b/tools/editor/icons/source/icon_dynamic_font.svg
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_duplicate.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_dynamic_font.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="6.411248"
+ inkscape:cy="8.6761759"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ id="path4246"
+ d="m 1,1037.3622 0,2 0,1 1,0 a 1,1 0 0 1 1,-1 l 2,0 0,6 a 1,1 0 0 1 -1,1 l 0,1 1,0 2,0 1,0 0,-1 a 1,1 0 0 1 -1,-1 l 0,-6 2,0 a 1,1 0 0 1 1,1 l 1,0 0,-1 0,-2 -4,0 -2,0 -4,0 z"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:1;fill:#84c2ff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 4 5 L 4 7 L 4 8 L 5 8 A 1 1 0 0 1 6 7 L 8 7 L 8 13 A 1 1 0 0 1 7 14 L 7 15 L 8 15 L 10 15 L 11 15 L 11 14 A 1 1 0 0 1 10 13 L 10 7 L 12 7 A 1 1 0 0 1 13 8 L 14 8 L 14 7 L 14 5 L 10 5 L 8 5 L 4 5 z "
+ id="rect4177"
+ transform="translate(0,1036.3622)" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_dynamic_font_data.svg b/tools/editor/icons/source/icon_dynamic_font_data.svg
new file mode 100644
index 0000000000..468b472d7e
--- /dev/null
+++ b/tools/editor/icons/source/icon_dynamic_font_data.svg
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_duplicate.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_dynamic_font_data.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="1.442498"
+ inkscape:cy="7.5824259"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ id="path4246"
+ d="m 1,1037.3622 0,2 0,1 1,0 a 1,1 0 0 1 1,-1 l 2,0 0,6 a 1,1 0 0 1 -1,1 l 0,1 1,0 2,0 1,0 0,-1 a 1,1 0 0 1 -1,-1 l 0,-6 2,0 a 1,1 0 0 1 1,1 l 1,0 0,-1 0,-2 -4,0 -2,0 -4,0 z"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 4 5 L 4 7 L 4 8 L 5 8 A 1 1 0 0 1 6 7 L 8 7 L 8 13 A 1 1 0 0 1 7 14 L 7 15 L 8 15 L 10 15 L 11 15 L 11 14 A 1 1 0 0 1 10 13 L 10 7 L 12 7 A 1 1 0 0 1 13 8 L 14 8 L 14 7 L 14 5 L 10 5 L 8 5 L 4 5 z "
+ id="rect4177"
+ transform="translate(0,1036.3622)" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_edit.svg b/tools/editor/icons/source/icon_edit.svg
new file mode 100644
index 0000000000..6da05a6603
--- /dev/null
+++ b/tools/editor/icons/source/icon_edit.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_edit.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_edit.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000002"
+ inkscape:cx="10.361255"
+ inkscape:cy="7.0279565"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 1.7071068,1047.8266 1,1051.3622 l 3.5355339,-0.7071 7.7781741,-7.7782 -2.828427,-2.8284 z m 9.1923882,-9.1924 2.828427,2.8285 1.414214,-1.4142 -2.828428,-2.8285 z"
+ id="rect4135"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_edit_key.svg b/tools/editor/icons/source/icon_edit_key.svg
new file mode 100644
index 0000000000..46795bef35
--- /dev/null
+++ b/tools/editor/icons/source/icon_edit_key.svg
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_edit_key.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_edit_key.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000002"
+ inkscape:cx="7.2649878"
+ inkscape:cy="7.6615896"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 1.7071068,1047.8266 1,1051.3622 l 3.5355339,-0.7071 7.7781741,-7.7782 -2.828427,-2.8284 z m 9.1923882,-9.1924 2.828427,2.8285 1.414214,-1.4142 -2.828428,-2.8285 z"
+ id="rect4135"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccc" />
+ <ellipse
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4135"
+ cx="3.5"
+ cy="1039.8622"
+ rx="2.5"
+ ry="2.5000086" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_edit_pivot.svg b/tools/editor/icons/source/icon_edit_pivot.svg
new file mode 100644
index 0000000000..8ae55ad8b7
--- /dev/null
+++ b/tools/editor/icons/source/icon_edit_pivot.svg
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_edit_pivot.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_edit_pivot.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="13.221947"
+ inkscape:cy="4.9248867"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:snap-midpoints="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 16,1047.6532 -8,-3.291 3.290998,8 0.947104,-2.8201 1.8836,1.8835 0.941801,-0.9418 -1.8836,-1.8835 z"
+ id="rect4163"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccc" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 7 1 L 7 5 L 9 5 L 9 1 L 7 1 z M 1 7 L 1 9 L 5 9 L 5 7 L 1 7 z M 11 7 L 11 7.6132812 L 14.371094 9 L 15 9 L 15 7 L 11 7 z M 7 11 L 7 15 L 9 15 L 9 14.375 L 7.6113281 11 L 7 11 z "
+ transform="translate(0,1036.3622)"
+ id="rect4158" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_edit_resource.svg b/tools/editor/icons/source/icon_edit_resource.svg
new file mode 100644
index 0000000000..1950988ca2
--- /dev/null
+++ b/tools/editor/icons/source/icon_edit_resource.svg
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="8"
+ height="8"
+ viewBox="0 0 8 8"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_edit_resource.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="63.999997"
+ inkscape:cx="1.8775976"
+ inkscape:cy="5.2018914"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1044.3622)">
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#e0e0e0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 1.9472656,1044.3555 a 1.0001,1.0001 0 0 0 -0.546875,1.8066 l 2.9335938,2.2012 -2.9335938,2.1992 a 1.0001,1.0001 0 1 0 1.1992188,1.5996 l 4,-3 a 1.0001,1.0001 0 0 0 0,-1.5996 l -4,-3 a 1.0001,1.0001 0 0 0 -0.6523438,-0.207 z"
+ id="path4137"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_editor_3d_handle.svg b/tools/editor/icons/source/icon_editor_3d_handle.svg
new file mode 100644
index 0000000000..255d1801a9
--- /dev/null
+++ b/tools/editor/icons/source/icon_editor_3d_handle.svg
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_dependency_changed_hl.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_editor_3d_handle.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="30.700696"
+ inkscape:cx="-3.99911"
+ inkscape:cy="7.9772677"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <circle
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4137"
+ cx="8"
+ cy="1044.3622"
+ r="7" />
+ <circle
+ r="5.0000172"
+ cy="1044.3622"
+ cx="8"
+ id="circle4156"
+ style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_editor_handle.svg b/tools/editor/icons/source/icon_editor_handle.svg
new file mode 100644
index 0000000000..17ed2a61e7
--- /dev/null
+++ b/tools/editor/icons/source/icon_editor_handle.svg
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="8"
+ height="8"
+ viewBox="0 0 8 8"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_dependency_changed_hl.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_editor_handle.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="43.417341"
+ inkscape:cx="2.7092551"
+ inkscape:cy="4.8390476"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1044.3622)">
+ <ellipse
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4137"
+ cx="4"
+ cy="1048.3622"
+ rx="4"
+ ry="3.9999914" />
+ <ellipse
+ cy="1048.3622"
+ cx="4"
+ id="circle4156"
+ style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ rx="2.8571527"
+ ry="2.8571465" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_editor_pivot.svg b/tools/editor/icons/source/icon_editor_pivot.svg
new file mode 100644
index 0000000000..8ce7d48970
--- /dev/null
+++ b/tools/editor/icons/source/icon_editor_pivot.svg
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_editor_pivot.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254835"
+ inkscape:cx="6.673653"
+ inkscape:cy="8.3546727"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:#ffffff;fill-opacity:0.70588237;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 6 0 L 6 6 L 0 6 L 0 10 L 6 10 L 6 16 L 10 16 L 10 10 L 16 10 L 16 6 L 10 6 L 10 0 L 6 0 z M 7 7 L 9 7 L 9 9 L 7 9 L 7 7 z "
+ transform="translate(0,1036.3622)"
+ id="rect4170" />
+ <path
+ style="fill:#ff8484;fill-opacity:0.58823532;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 7 1 L 7 6 L 9 6 L 9 1 L 7 1 z M 1 7 L 1 9 L 6 9 L 6 7 L 1 7 z M 10 7 L 10 9 L 15 9 L 15 7 L 10 7 z M 7 10 L 7 15 L 9 15 L 9 10 L 7 10 z "
+ transform="translate(0,1036.3622)"
+ id="rect4137" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_editor_plugin.svg b/tools/editor/icons/source/icon_editor_plugin.svg
new file mode 100644
index 0000000000..b9460de683
--- /dev/null
+++ b/tools/editor/icons/source/icon_editor_plugin.svg
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_canvas_item.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_editor_plugin.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="-2.7705057"
+ inkscape:cy="8.7644499"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-midpoints="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-paths="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:#e0e0e0;fill-opacity:0.99607843;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
+ d="m 2,1038.3622 0,8 8,0 0,-8 z"
+ id="path4195"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <circle
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="path4197"
+ cx="13"
+ cy="1042.3622"
+ r="2" />
+ <circle
+ r="2"
+ cy="1049.3622"
+ cx="6"
+ id="circle4199"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4201"
+ width="2"
+ height="2"
+ x="5"
+ y="1046.3622" />
+ <rect
+ y="1041.3622"
+ x="10"
+ height="2"
+ width="2"
+ id="rect4203"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_error.svg b/tools/editor/icons/source/icon_error.svg
new file mode 100644
index 0000000000..831bac859a
--- /dev/null
+++ b/tools/editor/icons/source/icon_error.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="8"
+ height="8"
+ viewBox="0 0 8 8"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_error.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="-12.047246"
+ inkscape:cy="6.3485985"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1044.3622)">
+ <rect
+ style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4154"
+ width="8"
+ height="8"
+ x="2.220446e-16"
+ y="1044.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_error_sign.svg b/tools/editor/icons/source/icon_error_sign.svg
new file mode 100644
index 0000000000..01c1dbb4d5
--- /dev/null
+++ b/tools/editor/icons/source/icon_error_sign.svg
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32"
+ height="32"
+ viewBox="0 0 32 32"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_dependency_changed_hl.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_error_sign.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="10.854335"
+ inkscape:cx="-0.43086145"
+ inkscape:cy="15.165332"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1020.3622)">
+ <path
+ style="fill:#ff8484;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
+ d="m 10,1048.3622 12,0 6,-6 0,-12 -6,-6 -12,0 -6,6 0,12 z"
+ id="path4156"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4160"
+ width="4"
+ height="9.0000172"
+ x="14"
+ y="1028.3622" />
+ <rect
+ y="1040.3622"
+ x="14"
+ height="4.0000172"
+ width="4"
+ id="rect4162"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_event_player.svg b/tools/editor/icons/source/icon_event_player.svg
new file mode 100644
index 0000000000..3f5f7da693
--- /dev/null
+++ b/tools/editor/icons/source/icon_event_player.svg
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_rename.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_event_player.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="6.654979"
+ inkscape:cy="8.3200241"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 1 1 L 1 15 L 15 15 L 15 1 L 1 1 z M 3 3 L 13 3 L 13 13 L 3 13 L 3 3 z "
+ transform="translate(0,1036.3622)"
+ id="rect4154" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 5 3 L 5 9 L 7 9 L 7 3 L 5 3 z M 9 3 L 9 9 L 11 9 L 11 3 L 9 3 z "
+ transform="translate(0,1036.3622)"
+ id="rect4158" />
+ <rect
+ y="1039.3622"
+ x="5"
+ height="10.000017"
+ width="1"
+ id="rect4166"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4168"
+ width="1"
+ height="10.000017"
+ x="9"
+ y="1039.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_favorites.svg b/tools/editor/icons/source/icon_favorites.svg
new file mode 100644
index 0000000000..12d4b56897
--- /dev/null
+++ b/tools/editor/icons/source/icon_favorites.svg
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_favorites.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_favorites.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16"
+ inkscape:cx="3.3144029"
+ inkscape:cy="13.991937"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8.0000004,1038.0862 5.62591,1042.1835 1,1043.2813 l 3.2360991,3.4074 -0.3586608,4.6735 4.1388649,-1.9766 4.1572048,1.9421 -0.395342,-4.6532 3.221834,-3.3932 -4.625909,-1.0978 -2.3740906,-4.0973 z"
+ id="path4254"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_file_big.svg b/tools/editor/icons/source/icon_file_big.svg
new file mode 100644
index 0000000000..38ad9b707a
--- /dev/null
+++ b/tools/editor/icons/source/icon_file_big.svg
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="64"
+ height="64"
+ viewBox="0 0 64 64"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_new.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_file_big.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.313708"
+ inkscape:cx="32.899003"
+ inkscape:cy="32.88081"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1-8"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-nodes="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-988.3622)">
+ <g
+ id="layer1-8"
+ inkscape:label="Layer 1"
+ transform="translate(0,-1.6949463e-5)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 10,5 0,54 44,0 0,-36 -18,0 0,-18 z m 31,0 0,13 13,0 z"
+ transform="translate(0,988.36222)"
+ id="rect4158"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccc" />
+ </g>
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_file_dialog.svg b/tools/editor/icons/source/icon_file_dialog.svg
new file mode 100644
index 0000000000..9dee04c220
--- /dev/null
+++ b/tools/editor/icons/source/icon_file_dialog.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_confirmation_dialog.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_file_dialog.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16"
+ inkscape:cx="2.7469423"
+ inkscape:cy="8.766806"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3 1 C 1.89543 1 1 1.8954 1 3 L 1 4 L 15 4 L 15 3 C 15 1.8954 14.104569 1 13 1 L 3 1 z M 12 2 L 13 2 L 13 3 L 12 3 L 12 2 z M 1 5 L 1 13 C 1 14.1046 1.89543 15 3 15 L 13 15 C 14.104569 15 15 14.1046 15 13 L 15 5 L 1 5 z M 5 7 L 8 7 L 8 8 L 11 8 L 11 13 L 5 13 L 5 7 z "
+ transform="translate(0,1036.3622)"
+ id="rect4140" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_file_list.svg b/tools/editor/icons/source/icon_file_list.svg
new file mode 100644
index 0000000000..82dad29aac
--- /dev/null
+++ b/tools/editor/icons/source/icon_file_list.svg
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_file_list.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_file_list.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="15.999999"
+ inkscape:cx="9.0213026"
+ inkscape:cy="13.513819"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4135"
+ width="2"
+ height="2.0000174"
+ x="2"
+ y="1038.3622" />
+ <rect
+ y="1038.3622"
+ x="6"
+ height="2.0000174"
+ width="8"
+ id="rect4159"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ y="1043.3622"
+ x="2"
+ height="2.0000174"
+ width="2"
+ id="rect4169"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4171"
+ width="8"
+ height="2.0000174"
+ x="6"
+ y="1043.3622" />
+ <rect
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4173"
+ width="2"
+ height="2.0000174"
+ x="2"
+ y="1048.3622" />
+ <rect
+ y="1048.3622"
+ x="6"
+ height="2.0000174"
+ width="8"
+ id="rect4175"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_file_server.svg b/tools/editor/icons/source/icon_file_server.svg
new file mode 100644
index 0000000000..1e1f9b6e42
--- /dev/null
+++ b/tools/editor/icons/source/icon_file_server.svg
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_folder.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_file_server.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16"
+ inkscape:cx="9.1396438"
+ inkscape:cy="11.33674"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#c5c5c5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 1 8 L 1 11 L 15 11 L 15 8 L 1 8 z M 2 9 L 3 9 L 3 10 L 2 10 L 2 9 z M 4 9 L 5 9 L 5 10 L 4 10 L 4 9 z M 1 12 L 1 15 L 15 15 L 15 12 L 1 12 z M 2 13 L 3 13 L 3 14 L 2 14 L 2 13 z M 4 13 L 5 13 L 5 14 L 4 14 L 4 13 z "
+ transform="translate(0,1036.3622)"
+ id="rect4160" />
+ <rect
+ style="opacity:1;fill:#c5c5c5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4173"
+ width="6"
+ height="4"
+ x="5"
+ y="1038.3622" />
+ <rect
+ style="opacity:1;fill:#c5c5c5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4175"
+ width="3"
+ height="1"
+ x="5"
+ y="1037.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_file_server_active.svg b/tools/editor/icons/source/icon_file_server_active.svg
new file mode 100644
index 0000000000..f01ba578da
--- /dev/null
+++ b/tools/editor/icons/source/icon_file_server_active.svg
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_folder.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_file_server_active.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16"
+ inkscape:cx="11.80766"
+ inkscape:cy="9.9439864"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#84ffb1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 1 8 L 1 11 L 15 11 L 15 8 L 1 8 z M 2 9 L 3 9 L 3 10 L 2 10 L 2 9 z M 4 9 L 5 9 L 5 10 L 4 10 L 4 9 z M 1 12 L 1 15 L 15 15 L 15 12 L 1 12 z M 2 13 L 3 13 L 3 14 L 2 14 L 2 13 z M 4 13 L 5 13 L 5 14 L 4 14 L 4 13 z "
+ transform="translate(0,1036.3622)"
+ id="rect4160" />
+ <rect
+ style="opacity:1;fill:#84ffb1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4173"
+ width="6"
+ height="4"
+ x="5"
+ y="1038.3622" />
+ <rect
+ style="opacity:1;fill:#84ffb1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4175"
+ width="3"
+ height="1"
+ x="5"
+ y="1037.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_file_thumbnail.svg b/tools/editor/icons/source/icon_file_thumbnail.svg
new file mode 100644
index 0000000000..48d90dd3c6
--- /dev/null
+++ b/tools/editor/icons/source/icon_file_thumbnail.svg
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_folder.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_file_thumbnail.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="13.370672"
+ inkscape:cy="8.243673"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4160"
+ width="5"
+ height="5.0000172"
+ x="2"
+ y="1045.3622" />
+ <rect
+ y="1038.3622"
+ x="2"
+ height="5"
+ width="5"
+ id="rect4162"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="1045.3622"
+ x="9"
+ height="5.0000172"
+ width="5"
+ id="rect4164"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4166"
+ width="5"
+ height="5"
+ x="9"
+ y="1038.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_fixed_material.svg b/tools/editor/icons/source/icon_fixed_material.svg
new file mode 100644
index 0000000000..5be74f490d
--- /dev/null
+++ b/tools/editor/icons/source/icon_fixed_material.svg
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_canvas_item_material.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_fixed_material.svg">
+ <defs
+ id="defs4">
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4253">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ id="path4255"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="6.3347915"
+ inkscape:cy="8.4073248"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4202"
+ d="m 8,1037.3622 a 7,7.0000001 0 0 0 -7,7 7,7.0000001 0 0 0 7,7 7,7.0000001 0 0 0 7,-7 7,7.0000001 0 0 0 -7,-7 z m -2,2 a 2,2 0 0 1 2,2 2,2 0 0 1 -2,2 2,2 0 0 1 -2,-2 2,2 0 0 1 2,-2 z"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_folder.svg b/tools/editor/icons/source/icon_folder.svg
new file mode 100644
index 0000000000..ca16a5737f
--- /dev/null
+++ b/tools/editor/icons/source/icon_folder.svg
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_folder.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_folder.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999999"
+ inkscape:cx="8.0935814"
+ inkscape:cy="8.7176878"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 2,2 0,1 -1,0 0,2 0,6 0,2 1,0 0,1 12,0 0,-1 1,0 L 15,6 14,6 14,5 9,5 9,3 8,3 8,2 Z"
+ transform="translate(0,1036.3622)"
+ id="rect4136"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccccccccccc" />
+ <circle
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4143"
+ cx="2"
+ cy="1039.3622"
+ r="1" />
+ <circle
+ r="1"
+ cy="1049.3622"
+ cx="2"
+ id="circle4150"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <circle
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4154"
+ cx="14"
+ cy="1049.3622"
+ r="1" />
+ <circle
+ r="1"
+ cy="1042.3622"
+ cx="14"
+ id="circle4158"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <circle
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4162"
+ cx="8"
+ cy="1039.3622"
+ r="1" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 9,1040.3622 0,1 1,0 a 1,1 0 0 1 -1,-1 z"
+ id="rect4166"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_folder_big.svg b/tools/editor/icons/source/icon_folder_big.svg
new file mode 100644
index 0000000000..818eaa2ba3
--- /dev/null
+++ b/tools/editor/icons/source/icon_folder_big.svg
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="64"
+ height="64"
+ viewBox="0 0 64 64"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_folder_big.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_folder_big.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="8"
+ inkscape:cx="27.662311"
+ inkscape:cy="41.159533"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-988.3622)">
+ <circle
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4135"
+ cx="13"
+ cy="1039.3583"
+ r="5.0039101" />
+ <circle
+ r="5.0039101"
+ cy="1039.3583"
+ cx="50.99609"
+ id="circle4137"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <circle
+ r="5.0039101"
+ cy="1005.3622"
+ cx="13"
+ id="circle4139"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <circle
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4141"
+ cx="51"
+ cy="1013.3661"
+ r="5.0039101" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4143"
+ width="48"
+ height="26.000017"
+ x="8"
+ y="1013.3622" />
+ <rect
+ y="1008.3622"
+ x="13"
+ height="36"
+ width="38"
+ id="rect4145"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4147"
+ width="8"
+ height="8"
+ x="8"
+ y="1008.3622" />
+ <rect
+ y="1005.3622"
+ x="8"
+ height="2.9999311"
+ width="28"
+ id="rect4149"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <circle
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4151"
+ cx="31"
+ cy="1005.3622"
+ r="5.0039101" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4153"
+ width="18"
+ height="6.9999485"
+ x="13"
+ y="1000.3622" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 36,1004.3622 0,0.5 a 3.4999914,3.4999914 0 0 1 0.04102,-0.5 l -0.04102,0 z m 0,0.5 0,3.5 3.5,0 a 3.4999914,3.4999914 0 0 1 -3.5,-3.5 z m 3.5,3.5 0.5,0 0,-0.039 a 3.4999914,3.4999914 0 0 1 -0.5,0.039 z"
+ id="rect4155"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_font.svg b/tools/editor/icons/source/icon_font.svg
new file mode 100644
index 0000000000..36567fe10c
--- /dev/null
+++ b/tools/editor/icons/source/icon_font.svg
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_font.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="11.223545"
+ inkscape:cy="5.7245794"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4212"
+ width="14"
+ height="2"
+ x="1"
+ y="1037.3622" />
+ <rect
+ y="1037.3622"
+ x="7"
+ height="14.000017"
+ width="2"
+ id="rect4214"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4216"
+ width="6"
+ height="0.99999976"
+ x="5"
+ y="1050.3622" />
+ <rect
+ y="-1.9999998"
+ x="1037.3622"
+ height="0.99999976"
+ width="4"
+ id="rect4218"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ transform="matrix(0,1,-1,0,0,0)" />
+ <rect
+ transform="matrix(0,1,-1,0,0,0)"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4220"
+ width="4"
+ height="0.99999976"
+ x="1037.3622"
+ y="-15" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 2 3 L 2 5 A 2 2 0 0 1 4 3 L 2 3 z "
+ transform="translate(0,1036.3622)"
+ id="rect4224" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 12 3 A 2 2 0 0 1 14 5 L 14 3 L 12 3 z "
+ transform="translate(0,1036.3622)"
+ id="rect4226" />
+ <path
+ id="path4232"
+ d="m 5,1050.3622 a 2,2 0 0 0 2,-2 l 0,2 -2,0 z"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="m 11,1050.3622 a 2,2 0 0 1 -2,-2 l 0,2 2,0 z"
+ id="path4234" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_forward.svg b/tools/editor/icons/source/icon_forward.svg
new file mode 100644
index 0000000000..f6cb351cc1
--- /dev/null
+++ b/tools/editor/icons/source/icon_forward.svg
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="8"
+ height="16"
+ viewBox="0 0 8 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_forward.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="4.4850647"
+ inkscape:cy="8.9717887"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#e0e0e0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 2.0293363,1037.3633 c 0.3235485,0.01 0.622658,0.1743 0.8027343,0.4433 l 4,6 c 0.2239059,0.3359 0.2239059,0.7735 0,1.1094 l -4,6 c -0.5489722,0.8228 -1.8316762,0.4344 -1.8320312,-0.5547 l 0,-12 c 9.424e-4,-0.5631 0.4664154,-1.0144 1.0292969,-0.998 z"
+ id="path4159"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_g_d_script.svg b/tools/editor/icons/source/icon_g_d_script.svg
new file mode 100644
index 0000000000..f2b8cd9343
--- /dev/null
+++ b/tools/editor/icons/source/icon_g_d_script.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_g_d_script.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_g_d_script.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="6.7306265"
+ inkscape:cy="9.0071681"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 7 1 L 6.4355469 3.2578125 A 5.0000172 5.0000172 0 0 0 5.7460938 3.5371094 L 3.7578125 2.34375 L 2.34375 3.7578125 L 3.5390625 5.7519531 A 5.0000172 5.0000172 0 0 0 3.2539062 6.4375 L 1 7 L 1 9 L 3.2578125 9.5644531 A 5.0000172 5.0000172 0 0 0 3.5371094 10.251953 L 2.34375 12.242188 L 3.7578125 13.65625 L 5.7519531 12.460938 A 5.0000172 5.0000172 0 0 0 6.4375 12.746094 L 7 15 L 9 15 L 9.5644531 12.742188 A 5.0000172 5.0000172 0 0 0 10.251953 12.462891 L 12.242188 13.65625 L 13.65625 12.242188 L 12.460938 10.248047 A 5.0000172 5.0000172 0 0 0 12.746094 9.5625 L 15 9 L 15 7 L 12.742188 6.4355469 A 5.0000172 5.0000172 0 0 0 12.462891 5.7480469 L 13.65625 3.7578125 L 12.242188 2.34375 L 10.248047 3.5390625 A 5.0000172 5.0000172 0 0 0 9.5625 3.2539062 L 9 1 L 7 1 z M 8 6 A 2.0000174 2.0000174 0 0 1 10 8 A 2.0000174 2.0000174 0 0 1 8 10 A 2.0000174 2.0000174 0 0 1 6 8 A 2.0000174 2.0000174 0 0 1 8 6 z "
+ transform="translate(0,1036.3622)"
+ id="path4176" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_gizmo_directional_light.svg b/tools/editor/icons/source/icon_gizmo_directional_light.svg
new file mode 100644
index 0000000000..0682c270ac
--- /dev/null
+++ b/tools/editor/icons/source/icon_gizmo_directional_light.svg
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32"
+ height="32"
+ viewBox="0 0 32 32"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_dependency_changed_hl.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_gizmo_directional_light.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.313708"
+ inkscape:cx="13.90442"
+ inkscape:cy="22.349302"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1020.3622)">
+ <circle
+ style="opacity:1;fill:#f7f5cf;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4156"
+ cx="16"
+ cy="1036.3622"
+ r="7.0000172" />
+ <rect
+ style="opacity:1;fill:#f7f5cf;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4169"
+ width="4"
+ height="5.0000172"
+ x="14"
+ y="1021.3622"
+ rx="0"
+ ry="0"
+ inkscape:transform-center-y="-12.500009" />
+ <rect
+ inkscape:transform-center-y="-8.8388501"
+ ry="0"
+ rx="0"
+ y="706.505"
+ x="742.13245"
+ height="5.0000172"
+ width="4"
+ id="rect4171"
+ style="opacity:1;fill:#f7f5cf;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)"
+ inkscape:transform-center-x="-8.8388459" />
+ <rect
+ inkscape:transform-center-x="-12.500018"
+ transform="matrix(0,1,-1,0,0,0)"
+ style="opacity:1;fill:#f7f5cf;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4173"
+ width="4"
+ height="5.0000172"
+ x="1034.3622"
+ y="-31.000027"
+ rx="0"
+ ry="0"
+ inkscape:transform-center-y="-1.754751e-05" />
+ <rect
+ inkscape:transform-center-y="8.8388073"
+ ry="0"
+ rx="0"
+ y="-759.13245"
+ x="719.505"
+ height="5.0000172"
+ width="4"
+ id="rect4175"
+ style="opacity:1;fill:#f7f5cf;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(-0.70710678,0.70710678,-0.70710678,-0.70710678,0,0)"
+ inkscape:transform-center-x="-8.8388458" />
+ <rect
+ inkscape:transform-center-x="-2.6589615e-05"
+ transform="scale(-1,-1)"
+ style="opacity:1;fill:#f7f5cf;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4177"
+ width="4"
+ height="5.0000172"
+ x="-18.000027"
+ y="-1051.3622"
+ rx="0"
+ ry="0"
+ inkscape:transform-center-y="12.499974" />
+ <rect
+ inkscape:transform-center-y="8.8388074"
+ ry="0"
+ rx="0"
+ y="-736.505"
+ x="-746.13245"
+ height="5.0000172"
+ width="4"
+ id="rect4179"
+ style="opacity:1;fill:#f7f5cf;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(-0.70710678,-0.70710678,0.70710678,-0.70710678,0,0)"
+ inkscape:transform-center-x="8.8388116" />
+ <rect
+ inkscape:transform-center-x="12.499964"
+ transform="matrix(0,-1,1,0,0,0)"
+ style="opacity:1;fill:#f7f5cf;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4181"
+ width="4"
+ height="5.0000172"
+ x="-1038.3622"
+ y="1.0000273"
+ rx="0"
+ ry="0"
+ inkscape:transform-center-y="-1.7409218e-05" />
+ <rect
+ inkscape:transform-center-y="-8.83885"
+ ry="0"
+ rx="0"
+ y="729.13245"
+ x="-723.505"
+ height="5.0000172"
+ width="4"
+ id="rect4183"
+ style="opacity:1;fill:#f7f5cf;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,0,0)"
+ inkscape:transform-center-x="8.8388113" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_gizmo_light.svg b/tools/editor/icons/source/icon_gizmo_light.svg
new file mode 100644
index 0000000000..c9ce60273a
--- /dev/null
+++ b/tools/editor/icons/source/icon_gizmo_light.svg
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32"
+ height="32"
+ viewBox="0 0 32 32"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_gizmo_light.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_gizmo_light.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="15.999999"
+ inkscape:cx="18.311796"
+ inkscape:cy="18.635805"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1020.3622)">
+ <path
+ style="opacity:1;fill:#f7f5cf;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 16 1 A 10.000017 10.000017 0 0 0 6 11 A 10.000017 10.000017 0 0 0 16 21 A 10.000017 10.000017 0 0 0 26 11 A 10.000017 10.000017 0 0 0 16 1 z M 16 4 A 7 7 0 0 1 23 11 A 7 7 0 0 1 16 18 A 7 7 0 0 1 9 11 A 7 7 0 0 1 16 4 z "
+ transform="translate(0,1020.3622)"
+ id="path4162" />
+ <path
+ style="opacity:1;fill:#f7f5cf;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 12 19 L 12 24 A 2 2 0 0 0 14 26 L 18 26 A 2 2 0 0 0 20 24 L 20 19 L 12 19 z "
+ transform="translate(0,1020.3622)"
+ id="rect4164" />
+ <rect
+ style="opacity:1;fill:#f7f5cf;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4168"
+ width="4"
+ height="2.0000174"
+ x="14"
+ y="1048.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_gizmo_spatial_sample_player.svg b/tools/editor/icons/source/icon_gizmo_spatial_sample_player.svg
new file mode 100644
index 0000000000..68375f9487
--- /dev/null
+++ b/tools/editor/icons/source/icon_gizmo_spatial_sample_player.svg
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32"
+ height="32"
+ viewBox="0 0 32 32"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_dependency_changed_hl.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_gizmo_spatial_sample_player.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="15.999999"
+ inkscape:cx="18.414591"
+ inkscape:cy="16.81826"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1020.3622)">
+ <path
+ style="fill:#f7f5cf;fill-opacity:1;fill-rule:evenodd;stroke:#f7f5cf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16,1024.3622 0,24 -8,-8 -4,0 0,-8 4,0 z"
+ id="path4143"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <rect
+ style="opacity:1;fill:#f7f5cf;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4145"
+ width="3"
+ height="8.0000172"
+ x="20"
+ y="1032.3622" />
+ <rect
+ y="1026.3622"
+ x="26"
+ height="19.999949"
+ width="3"
+ id="rect4147"
+ style="opacity:1;fill:#f7f5cf;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_gizmo_spatial_stream_player.svg b/tools/editor/icons/source/icon_gizmo_spatial_stream_player.svg
new file mode 100644
index 0000000000..5acff1ec76
--- /dev/null
+++ b/tools/editor/icons/source/icon_gizmo_spatial_stream_player.svg
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32"
+ height="32"
+ viewBox="0 0 32 32"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_dependency_changed_hl.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_gizmo_spatial_stream_player.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="15.999999"
+ inkscape:cx="18.768034"
+ inkscape:cy="16.106066"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1020.3622)">
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#f7f5cf;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="M 23.941406 2.0019531 A 2.0002 2.0002 0 0 0 23.451172 2.0761719 L 9.4511719 6.0761719 A 2.0002 2.0002 0 0 0 8 8 L 8 20.029297 A 4.5000086 4.5000086 0 0 0 7.5 20 A 4.5000086 4.5000086 0 0 0 3 24.5 A 4.5000086 4.5000086 0 0 0 7.5 29 A 4.5000086 4.5000086 0 0 0 11.96875 25 L 12 25 L 12 24.5 L 12 9.5097656 L 22 6.6523438 L 22 16.03125 A 4.5 4.5 0 0 0 21.5 16 A 4.5 4.5 0 0 0 17 20.5 A 4.5 4.5 0 0 0 21.5 25 A 4.5 4.5 0 0 0 25.96875 21 L 26 21 L 26 20.5 L 26 4 A 2.0002 2.0002 0 0 0 23.941406 2.0019531 z "
+ transform="translate(0,1020.3622)"
+ id="path4187" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_godot.svg b/tools/editor/icons/source/icon_godot.svg
new file mode 100644
index 0000000000..927c3ee053
--- /dev/null
+++ b/tools/editor/icons/source/icon_godot.svg
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_godot.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="4.9021021"
+ inkscape:cy="11.249083"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <g
+ transform="matrix(0.01724138,0,0,0.01724138,-0.82758647,1035.0456)"
+ id="layer1-5"
+ inkscape:label="Layer 1">
+ <g
+ transform="matrix(1.0688992,0,0,1.1334985,-45.061194,-81.689066)"
+ id="g4149">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none"
+ d="m 116.99388,715.36604 43.13957,-74.51381 75.99672,-171.42666 271.088,-13.63746 282.06373,14.1696 138.45065,255.56931 -25.0756,66.96734 -376.12685,53.39482 -367.70391,-40.32222 z"
+ id="path3239"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccc" />
+ <g
+ id="g3412"
+ transform="matrix(12.995388,0,0,-12.995388,898.37246,704.73082)">
+ <path
+ inkscape:connector-curvature="0"
+ d="m 0,0 0,-3.942 c 0,-0.39 -0.25,-0.734 -0.621,-0.852 L -6.835,-6.8 c -0.273,-0.091 -0.57,-0.042 -0.8,0.128 -0.232,0.168 -0.37,0.437 -0.37,0.721 l 0,4.305 -5.818,-1.108 0,-4.381 c 0,-0.447 -0.332,-0.824 -0.775,-0.885 l -8.41,-1.152 c -0.039,-0.003 -0.081,-0.008 -0.121,-0.008 -0.214,0 -0.424,0.078 -0.588,0.22 -0.195,0.172 -0.306,0.416 -0.306,0.676 l 0,4.638 -4.341,-0.018 0,-10e-4 -0.318,10e-4 -0.319,-10e-4 0,10e-4 -4.34,0.018 0,-4.638 c 0,-0.26 -0.112,-0.504 -0.307,-0.676 -0.164,-0.142 -0.374,-0.22 -0.587,-0.22 -0.041,0 -0.082,0.005 -0.123,0.008 l -8.41,1.152 c -0.442,0.061 -0.774,0.438 -0.774,0.885 l 0,4.381 -5.819,1.108 0,-4.305 c 0,-0.284 -0.137,-0.553 -0.368,-0.721 -0.232,-0.17 -0.529,-0.219 -0.802,-0.128 l -6.215,2.006 c -0.369,0.118 -0.619,0.462 -0.619,0.852 l 0,3.942 -3.837,1.29 c -0.19,-0.811 -0.295,-1.642 -0.295,-2.481 0,-10.301 14.512,-18.252 32.448,-18.309 l 0.022,0 0.023,0 c 17.936,0.057 32.448,8.008 32.448,18.309 0,0.766 -0.088,1.521 -0.247,2.266 L 0,0 Z"
+ style="fill:#478cbf;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path3414" />
+ </g>
+ <g
+ id="g3416"
+ transform="matrix(12.995388,0,0,-12.995388,140.10982,467.34929)">
+ <path
+ inkscape:connector-curvature="0"
+ d="m 0,0 0,-16.047 2.163,-0.729 c 0.364,-0.122 0.61,-0.462 0.61,-0.847 l 0,-3.936 4.426,-1.428 0,4.154 c 0,0.27 0.118,0.52 0.323,0.689 0.206,0.172 0.474,0.241 0.739,0.192 l 7.608,-1.452 c 0.422,-0.079 0.728,-0.448 0.728,-0.877 l 0,-4.338 6.62,-0.904 0,4.509 c 0,0.241 0.096,0.467 0.264,0.635 0.167,0.166 0.394,0.259 0.633,0.259 l 0.002,0 5.551,-0.022 5.549,0.022 c 0.245,-10e-4 0.468,-0.093 0.635,-0.259 0.169,-0.168 0.264,-0.394 0.264,-0.635 l 0,-4.509 6.621,0.904 0,4.338 c 0,0.429 0.304,0.798 0.726,0.877 l 7.609,1.452 c 0.262,0.049 0.533,-0.02 0.738,-0.192 0.205,-0.169 0.325,-0.419 0.325,-0.689 l 0,-4.154 4.425,1.428 0,3.936 c 0,0.385 0.245,0.725 0.609,0.847 l 1.475,0.497 0,16.279 0.04,0 c 1.437,1.834 2.767,3.767 4.042,5.828 -1.694,2.883 -3.768,5.459 -5.986,7.846 -2.057,-1.035 -4.055,-2.208 -5.942,-3.456 -0.944,0.938 -2.008,1.706 -3.052,2.509 -1.027,0.824 -2.183,1.428 -3.281,2.132 0.327,2.433 0.489,4.828 0.554,7.327 -2.831,1.424 -5.85,2.369 -8.903,3.047 -1.219,-2.048 -2.334,-4.267 -3.304,-6.436 -1.152,0.192 -2.309,0.264 -3.467,0.277 l 0,0.002 c -0.008,0 -0.015,-0.002 -0.022,-0.002 -0.008,0 -0.015,0.002 -0.022,0.002 l 0,-0.002 c -1.16,-0.013 -2.316,-0.085 -3.468,-0.277 -0.97,2.169 -2.084,4.388 -3.305,6.436 C 19.475,24.555 16.456,23.61 13.626,22.186 13.69,19.687 13.852,17.292 14.18,14.859 13.081,14.155 11.925,13.551 10.898,12.727 9.855,11.924 8.79,11.156 7.846,10.218 5.958,11.466 3.961,12.639 1.904,13.674 -0.314,11.287 -2.388,8.711 -4.082,5.828 -2.807,3.767 -1.477,1.834 -0.04,0 L 0,0 Z"
+ style="fill:#478cbf;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path3418" />
+ </g>
+ <g
+ id="g3420"
+ transform="matrix(12.995388,0,0,-12.995388,411.4457,567.42812)">
+ <path
+ inkscape:connector-curvature="0"
+ d="m 0,0 c 0,-3.611 -2.926,-6.537 -6.537,-6.537 -3.608,0 -6.535,2.926 -6.535,6.537 0,3.609 2.927,6.533 6.535,6.533 C -2.926,6.533 0,3.609 0,0"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path3422" />
+ </g>
+ <g
+ id="g3424"
+ transform="matrix(12.995388,0,0,-12.995388,391.00655,572.46636)">
+ <path
+ inkscape:connector-curvature="0"
+ d="m 0,0 c 0,-2.396 -1.941,-4.337 -4.339,-4.337 -2.396,0 -4.339,1.941 -4.339,4.337 0,2.396 1.943,4.339 4.339,4.339 C -1.941,4.339 0,2.396 0,0"
+ style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path3426" />
+ </g>
+ <g
+ id="g3428"
+ transform="matrix(12.995388,0,0,-12.995388,526.30933,660.10985)">
+ <path
+ inkscape:connector-curvature="0"
+ d="m 0,0 c -1.162,0 -2.104,0.856 -2.104,1.912 l 0,6.018 c 0,1.054 0.942,1.912 2.104,1.912 1.162,0 2.106,-0.858 2.106,-1.912 l 0,-6.018 C 2.106,0.856 1.162,0 0,0"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path3430" />
+ </g>
+ <g
+ id="g3432"
+ transform="matrix(12.995388,0,0,-12.995388,641.18731,567.42812)">
+ <path
+ inkscape:connector-curvature="0"
+ d="m 0,0 c 0,-3.611 2.926,-6.537 6.537,-6.537 3.609,0 6.535,2.926 6.535,6.537 0,3.609 -2.926,6.533 -6.535,6.533 C 2.926,6.533 0,3.609 0,0"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path3434" />
+ </g>
+ <g
+ id="g3436"
+ transform="matrix(12.995388,0,0,-12.995388,661.63165,572.46636)">
+ <path
+ inkscape:connector-curvature="0"
+ d="m 0,0 c 0,-2.396 1.941,-4.337 4.336,-4.337 2.398,0 4.339,1.941 4.339,4.337 0,2.396 -1.941,4.339 -4.339,4.339 C 1.941,4.339 0,2.396 0,0"
+ style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path3438" />
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_comment.svg b/tools/editor/icons/source/icon_graph_comment.svg
new file mode 100644
index 0000000000..5ad8fc8253
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_comment.svg
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_comment.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="2.9377959"
+ inkscape:cy="8.9727512"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4161"
+ width="2"
+ height="11.999983"
+ x="3"
+ y="1039.3622" />
+ <rect
+ y="1047.3622"
+ x="1"
+ height="1.999948"
+ width="12"
+ id="rect4172"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="1039.3622"
+ x="9"
+ height="11.999983"
+ width="2"
+ id="rect4174"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4176"
+ width="12"
+ height="1.999948"
+ x="1"
+ y="1041.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_cube_uniform.svg b/tools/editor/icons/source/icon_graph_cube_uniform.svg
new file mode 100644
index 0000000000..63774a7431
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_cube_uniform.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_cube_uniform.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="2.6772247"
+ inkscape:cy="6.7867928"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <path
+ style="opacity:1;fill:#eac968;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 2 0 C 0.8954305 0 0 0.8954 0 2 L 0 12 C 0 13.1046 0.8954305 14 2 14 L 12 14 C 13.104569 14 14 13.1046 14 12 L 14 2 C 14 0.8954 13.104569 0 12 0 L 2 0 z M 6.9726562 2 A 0.71438238 0.71438238 0 0 1 7.3203125 2.0742188 L 11.605469 4.2167969 A 0.71438238 0.71438238 0 0 1 12 4.8574219 L 12 9.1425781 A 0.71438238 0.71438238 0 0 1 11.605469 9.78125 L 7.3203125 11.923828 A 0.71438238 0.71438238 0 0 1 6.6796875 11.923828 L 2.3945312 9.78125 A 0.71438238 0.71438238 0 0 1 2 9.1425781 L 2 4.8574219 A 0.71438238 0.71438238 0 0 1 2.3945312 4.2167969 L 6.6796875 2.0742188 A 0.71438238 0.71438238 0 0 1 6.9726562 2 z M 7 3.5136719 L 4.3105469 4.8574219 L 7 6.2011719 L 9.6894531 4.8574219 L 7 3.5136719 z M 3.4277344 6.0117188 L 3.4277344 8.7011719 L 6.2851562 10.128906 L 6.2851562 7.4414062 L 3.4277344 6.0117188 z M 10.572266 6.0117188 L 7.7148438 7.4414062 L 7.7148438 10.128906 L 10.572266 8.7011719 L 10.572266 6.0117188 z "
+ transform="translate(0,1038.3622)"
+ id="rect4147" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_curve_map.svg b/tools/editor/icons/source/icon_graph_curve_map.svg
new file mode 100644
index 0000000000..6c3594cb1b
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_curve_map.svg
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_curve_map.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="1.7717442"
+ inkscape:cy="7.4133706"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <path
+ style="fill:none;fill-opacity:0;fill-rule:evenodd;stroke:#f6f6f6;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2,1049.3622 c 8,0 9,0 9,-9"
+ id="path4157"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="opacity:1;fill:#68d0ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 11 4 A 2 2 0 0 0 9 6 A 2 2 0 0 0 11 8 A 2 2 0 0 0 13 6 A 2 2 0 0 0 11 4 z M 6 9 A 2 2 0 0 0 4 11 A 2 2 0 0 0 6 13 A 2 2 0 0 0 8 11 A 2 2 0 0 0 6 9 z "
+ transform="translate(0,1038.3622)"
+ id="circle4176" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_default_texture.svg b/tools/editor/icons/source/icon_graph_default_texture.svg
new file mode 100644
index 0000000000..8d1c78ddd7
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_default_texture.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_default_texture.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="0.057070465"
+ inkscape:cy="7.746251"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-intersection-paths="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <path
+ style="opacity:1;fill:#eae068;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 2 2 L 2 12 L 12 12 L 12 2 L 2 2 z M 11 4 L 11 9 L 3 9 L 5 6 L 7 8 L 11 4 z "
+ transform="translate(0,1038.3622)"
+ id="rect4220" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_edit.svg b/tools/editor/icons/source/icon_graph_edit.svg
new file mode 100644
index 0000000000..1bfba0fe30
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_edit.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_canvas_item_shader_graph.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_edit.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254832"
+ inkscape:cx="6.9848175"
+ inkscape:cy="5.5849072"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3 1 A 2 2 0 0 0 1 3 A 2 2 0 0 0 2 4.7304688 L 2 11.271484 A 2 2 0 0 0 1 13 A 2 2 0 0 0 3 15 A 2 2 0 0 0 5 13 A 2 2 0 0 0 4 11.269531 L 4 5.4140625 L 8.7929688 10.207031 L 10.207031 8.7929688 L 5.4140625 4 L 11.271484 4 A 2 2 0 0 0 13 5 A 2 2 0 0 0 15 3 A 2 2 0 0 0 13 1 A 2 2 0 0 0 11.269531 2 L 4.7285156 2 A 2 2 0 0 0 3 1 z "
+ transform="translate(0,1036.3622)"
+ id="path4198" />
+ <ellipse
+ r="2"
+ style="opacity:1;fill:#6e6e6e;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="ellipse4152"
+ cx="3"
+ cy="1039.3622" />
+ <g
+ id="layer1-0"
+ inkscape:label="Layer 1"
+ transform="matrix(0.50000003,0,0,0.50000003,7.5,525.68107)">
+ <path
+ sodipodi:nodetypes="ccccccccccc"
+ inkscape:connector-curvature="0"
+ id="rect4135"
+ d="M 1.7071068,1047.8266 1,1051.3622 l 3.5355339,-0.7071 7.7781741,-7.7782 -2.828427,-2.8284 z m 9.1923882,-9.1924 2.828427,2.8285 1.414214,-1.4142 -2.828428,-2.8285 z"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_input.svg b/tools/editor/icons/source/icon_graph_input.svg
new file mode 100644
index 0000000000..265fb7279e
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_input.svg
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_input.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="3.3654942"
+ inkscape:cy="6.8821206"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-intersection-paths="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <circle
+ style="opacity:1;fill:#f6f6f6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4155"
+ cx="7"
+ cy="1045.3622"
+ r="6" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_node.svg b/tools/editor/icons/source/icon_graph_node.svg
new file mode 100644
index 0000000000..1916e9287b
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_node.svg
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_canvas_item_shader_graph.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_node.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254832"
+ inkscape:cx="9.5712298"
+ inkscape:cy="6.1223869"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3 1 A 2 2 0 0 0 1 3 A 2 2 0 0 0 2 4.7304688 L 2 11.271484 A 2 2 0 0 0 1 13 A 2 2 0 0 0 3 15 A 2 2 0 0 0 5 13 A 2 2 0 0 0 4 11.269531 L 4 5.4140625 L 8.7929688 10.207031 L 10.207031 8.7929688 L 5.4140625 4 L 11.271484 4 A 2 2 0 0 0 13 5 A 2 2 0 0 0 15 3 A 2 2 0 0 0 13 1 A 2 2 0 0 0 11.269531 2 L 4.7285156 2 A 2 2 0 0 0 3 1 z "
+ transform="translate(0,1036.3622)"
+ id="path4198" />
+ <ellipse
+ r="2"
+ style="opacity:1;fill:#6e6e6e;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="ellipse4152"
+ cx="3"
+ cy="1039.3622" />
+ <circle
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="path4205"
+ cx="13"
+ cy="1049.3622"
+ r="2" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_rgb.svg b/tools/editor/icons/source/icon_graph_rgb.svg
new file mode 100644
index 0000000000..a00e97a104
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_rgb.svg
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_rgb.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="1.5006521"
+ inkscape:cy="11.075034"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:0.39215686;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 7,1039.3622 a 4.0000172,4.0000172 0 0 0 -4,4 4.0000172,4.0000172 0 0 0 0.03906,0.5195 4.0000172,4.0000172 0 0 0 -2.039062,3.4805 4.0000172,4.0000172 0 0 0 4,4 4.0000172,4.0000172 0 0 0 1.998047,-0.541 4.0000172,4.0000172 0 0 0 2.001953,0.541 4.0000172,4.0000172 0 0 0 4,-4 4.0000172,4.0000172 0 0 0 -2.037109,-3.4824 4.0000172,4.0000172 0 0 0 0.03711,-0.5176 4.0000172,4.0000172 0 0 0 -4,-4 z"
+ id="circle4161"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:0.39215686;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 7,1040.3622 a 3,3 0 0 0 -3,3 3,3 0 0 0 0.210937,1.1055 A 3,3 0 0 0 2,1047.3622 a 3,3 0 0 0 3,3 3,3 0 0 0 2,-0.7676 3,3 0 0 0 2,0.7676 3,3 0 0 0 3,-3 3,3 0 0 0 -2.2148438,-2.8906 A 3,3 0 0 0 10,1043.3622 a 3,3 0 0 0 -3,-3 z"
+ id="circle4268"
+ inkscape:connector-curvature="0" />
+ <circle
+ style="opacity:1;fill:#ff0000;fill-opacity:0.39215686;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4262"
+ cx="7"
+ cy="1043.3622"
+ r="3" />
+ <circle
+ r="3"
+ cy="1047.3622"
+ cx="5"
+ id="circle4264"
+ style="opacity:1;fill:#0000ff;fill-opacity:0.39215686;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <circle
+ style="opacity:1;fill:#00ff00;fill-opacity:0.39215686;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4266"
+ cx="9"
+ cy="1047.3622"
+ r="3" />
+ <circle
+ r="3"
+ cy="1043.3622"
+ cx="7"
+ id="circle4281"
+ style="opacity:1;fill:#ff0000;fill-opacity:0.39215686;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <circle
+ style="opacity:1;fill:#0000ff;fill-opacity:0.39215686;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4283"
+ cx="5"
+ cy="1047.3622"
+ r="3" />
+ <circle
+ r="3"
+ cy="1047.3622"
+ cx="9"
+ id="circle4285"
+ style="opacity:1;fill:#00ff00;fill-opacity:0.39215686;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_rgb_op.svg b/tools/editor/icons/source/icon_graph_rgb_op.svg
new file mode 100644
index 0000000000..fdd3d3a9f4
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_rgb_op.svg
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_rgb_op.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="0.48418609"
+ inkscape:cy="11.870529"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <path
+ style="fill:#ffffff;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;fill-opacity:1"
+ d="m 4,1050.3622 6,0 0,-10 -6,0 z"
+ id="path4144"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4157"
+ width="2"
+ height="2"
+ x="1"
+ y="1041.3622" />
+ <rect
+ y="1047.3622"
+ x="1"
+ height="2"
+ width="2"
+ id="rect4159"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4161"
+ width="2"
+ height="2"
+ x="11"
+ y="1044.3622" />
+ <rect
+ style="opacity:1;fill:#ff4646;fill-opacity:0.8627451;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4163"
+ width="4"
+ height="2"
+ x="5"
+ y="1041.3622" />
+ <rect
+ y="1044.3622"
+ x="5"
+ height="2"
+ width="4"
+ id="rect4165"
+ style="opacity:1;fill:#46ff46;fill-opacity:0.8627451;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#4646ff;fill-opacity:0.8627451;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4167"
+ width="4"
+ height="2"
+ x="5"
+ y="1047.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_rgb_uniform.svg b/tools/editor/icons/source/icon_graph_rgb_uniform.svg
new file mode 100644
index 0000000000..359c86d61a
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_rgb_uniform.svg
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_rgb_uniform.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="3.0781037"
+ inkscape:cy="7.3277795"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 2,1038.3622 c -1.10457,0 -2,0.8954 -2,2 l 0,10 c 0,1.1046 0.89543,2 2,2 l 10,0 c 1.104569,0 2,-0.8954 2,-2 l 0,-10 c 0,-1.1046 -0.895431,-2 -2,-2 z"
+ id="rect4147"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sssssssss" />
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:0.39215687;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 7 2 A 3 3 0 0 0 4 5 A 3 3 0 0 0 4.2109375 6.1054688 A 3 3 0 0 0 2 9 A 3 3 0 0 0 5 12 A 3 3 0 0 0 7 11.232422 A 3 3 0 0 0 9 12 A 3 3 0 0 0 12 9 A 3 3 0 0 0 9.7851562 6.109375 A 3 3 0 0 0 10 5 A 3 3 0 0 0 7 2 z "
+ transform="translate(0,1038.3622)"
+ id="circle4268" />
+ <circle
+ style="opacity:1;fill:#ff0000;fill-opacity:0.39215687;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4262"
+ cx="7"
+ cy="1043.3622"
+ r="3" />
+ <circle
+ r="3"
+ cy="1047.3622"
+ cx="5"
+ id="circle4264"
+ style="opacity:1;fill:#0000ff;fill-opacity:0.39215687;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <circle
+ style="opacity:1;fill:#00ff00;fill-opacity:0.39215687;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4266"
+ cx="9"
+ cy="1047.3622"
+ r="3" />
+ <circle
+ r="3"
+ cy="1043.3622"
+ cx="7"
+ id="circle4281"
+ style="opacity:1;fill:#ff0000;fill-opacity:0.39215687;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <circle
+ style="opacity:1;fill:#0000ff;fill-opacity:0.39215687;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4283"
+ cx="5"
+ cy="1047.3622"
+ r="3" />
+ <circle
+ r="3"
+ cy="1047.3622"
+ cx="9"
+ id="circle4285"
+ style="opacity:1;fill:#00ff00;fill-opacity:0.39215687;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_scalar.svg b/tools/editor/icons/source/icon_graph_scalar.svg
new file mode 100644
index 0000000000..7a75ddba78
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_scalar.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot-design/assets/icons/svg/icon_graph_scalar_uniform.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_scalar.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="4.1198735"
+ inkscape:cy="6.5048182"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <path
+ style="opacity:1;fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 6 2 C 4.3431458 2 3 3.3431 3 5 C 3 6.6569 4.3431458 8 6 8 L 8 8 A 1.0000174 1.0000174 0 0 1 9 9 A 1.0000174 1.0000174 0 0 1 8 10 L 3 10 L 3 12 L 8 12 C 9.6568542 12 11 10.6569 11 9 C 11 7.3431 9.6568542 6 8 6 L 6 6 A 1.0000174 1.0000174 0 0 1 5 5 A 1.0000174 1.0000174 0 0 1 6 4 L 11 4 L 11 2 L 6 2 z "
+ transform="translate(0,1038.3622)"
+ id="rect4348" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_scalar_interp.svg b/tools/editor/icons/source/icon_graph_scalar_interp.svg
new file mode 100644
index 0000000000..47b619d608
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_scalar_interp.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot-design/assets/icons/svg/icon_graph_scalar_uniform.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_scalar_interp.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="2.5036881"
+ inkscape:cy="7.3934142"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#cf68ea;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ d="m 2,1050.3622 10,-10"
+ id="path4154"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_scalar_op.svg b/tools/editor/icons/source/icon_graph_scalar_op.svg
new file mode 100644
index 0000000000..fcb54f9aa0
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_scalar_op.svg
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_scalar_op.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="7.1972896"
+ inkscape:cy="8.4316461"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cf68ea;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="M 4,1 C 3.4477381,1.0001 3.0000552,1.4477 3,2 l 0,10 c 5.52e-5,0.5523 0.4477381,0.9999 1,1 l 6,0 c 0.552262,-10e-5 0.999945,-0.4477 1,-1 L 11,2 C 10.999945,1.4477 10.552262,1.0001 10,1 Z m 1,3 4,3 -4,3 z"
+ transform="translate(0,1038.3622)"
+ id="path4144"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccccc" />
+ <rect
+ style="opacity:1;fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4157"
+ width="2"
+ height="2"
+ x="1"
+ y="1041.3622" />
+ <rect
+ y="1047.3622"
+ x="1"
+ height="2"
+ width="2"
+ id="rect4159"
+ style="opacity:1;fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4161"
+ width="2"
+ height="2"
+ x="11"
+ y="1044.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_scalar_uniform.svg b/tools/editor/icons/source/icon_graph_scalar_uniform.svg
new file mode 100644
index 0000000000..e5e5edea9c
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_scalar_uniform.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_scalar_uniform.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="5.0555126"
+ inkscape:cy="8.8981623"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <path
+ style="opacity:1;fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 2 0 A 2 2 0 0 0 0 2 L 0 12 A 2 2 0 0 0 2 14 L 12 14 A 2 2 0 0 0 14 12 L 14 2 A 2 2 0 0 0 12 0 L 2 0 z M 6 2 L 11 2 L 11 4 L 6 4 A 1.0000174 1.0000174 0 0 0 5 5 A 1.0000174 1.0000174 0 0 0 6 6 L 8 6 C 9.6568542 6 11 7.3431 11 9 C 11 10.6569 9.6568542 12 8 12 L 3 12 L 3 10 L 8 10 A 1.0000174 1.0000174 0 0 0 9 9 A 1.0000174 1.0000174 0 0 0 8 8 L 6 8 C 4.3431458 8 3 6.6569 3 5 C 3 3.3431 4.3431458 2 6 2 z "
+ transform="translate(0,1038.3622)"
+ id="rect4147" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_scalars_to_vec.svg b/tools/editor/icons/source/icon_graph_scalars_to_vec.svg
new file mode 100644
index 0000000000..0f2994a606
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_scalars_to_vec.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot-design/assets/icons/svg/icon_graph_scalar_uniform.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_scalars_to_vec.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="4.4222736"
+ inkscape:cy="8.4198974"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#b8ea68;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 7,1045.3622 5,0"
+ id="path4154"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#cf68ea;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2,1040.3622 5,0 0,10 -5,0"
+ id="path4155"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#cf68ea;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 7,1045.3622 -5,0"
+ id="path4157"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_texscreen.svg b/tools/editor/icons/source/icon_graph_texscreen.svg
new file mode 100644
index 0000000000..89d000d7cb
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_texscreen.svg
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_texscreen.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="3.5348921"
+ inkscape:cy="8.3718235"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <path
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#f6f6f6;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 2,1041.3622 10,0 0,8 -10,0 z"
+ id="rect4154" />
+ <rect
+ style="opacity:1;fill:#f6f6f6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4157"
+ width="8"
+ height="1.0000174"
+ x="3"
+ y="1042.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_texture_uniform.svg b/tools/editor/icons/source/icon_graph_texture_uniform.svg
new file mode 100644
index 0000000000..440f83642c
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_texture_uniform.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_texture_uniform.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="10.372248"
+ inkscape:cy="6.4853857"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-intersection-paths="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <path
+ style="opacity:1;fill:#eae068;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 2 0 C 0.8954305 0 0 0.8954 0 2 L 0 12 C 0 13.1046 0.8954305 14 2 14 L 12 14 C 13.104569 14 14 13.1046 14 12 L 14 2 C 14 0.8954 13.104569 0 12 0 L 2 0 z M 2 2 L 12 2 L 12 12 L 2 12 L 2 2 z M 11 4 L 7 8 L 5 6 L 3 9 L 11 9 L 11 4 z "
+ transform="translate(0,1038.3622)"
+ id="rect4147" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_time.svg b/tools/editor/icons/source/icon_graph_time.svg
new file mode 100644
index 0000000000..77b80e920b
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_time.svg
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_time.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="2.306914"
+ inkscape:cy="7.4704168"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-intersection-paths="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <rect
+ style="opacity:1;fill:#f6f6f6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4157"
+ width="2"
+ height="3.9999652"
+ x="6"
+ y="1042.3622" />
+ <rect
+ y="1044.3622"
+ x="6"
+ height="1.9999652"
+ width="4"
+ id="rect4159"
+ style="opacity:1;fill:#f6f6f6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ inkscape:transform-center-x="-0.66666667"
+ inkscape:transform-center-y="-3.4787369e-05" />
+ <path
+ style="opacity:1;fill:#f6f6f6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 7 0 A 7 7 0 0 0 0 7 A 7 7 0 0 0 7 14 A 7 7 0 0 0 14 7 A 7 7 0 0 0 7 0 z M 7 2 A 5.0000172 5.0000172 0 0 1 12 7 A 5.0000172 5.0000172 0 0 1 7 12 A 5.0000172 5.0000172 0 0 1 2 7 A 5.0000172 5.0000172 0 0 1 7 2 z "
+ transform="translate(0,1038.3622)"
+ id="path4166" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_vec_dp.svg b/tools/editor/icons/source/icon_graph_vec_dp.svg
new file mode 100644
index 0000000000..8994d8ce59
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_vec_dp.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_vec_dp.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="64"
+ inkscape:cx="4.9677869"
+ inkscape:cy="7.0295494"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#b8ea68;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 1,1042.3622 2,6 2,-6"
+ id="path4154"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <circle
+ style="opacity:1;fill:#b8ea68;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4160"
+ cx="7"
+ cy="1046.3622"
+ r="1" />
+ <path
+ sodipodi:nodetypes="ccc"
+ inkscape:connector-curvature="0"
+ id="path4171"
+ d="m 9,1042.3622 2,6 2,-6"
+ style="fill:none;fill-rule:evenodd;stroke:#b8ea68;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_vec_interp.svg b/tools/editor/icons/source/icon_graph_vec_interp.svg
new file mode 100644
index 0000000000..885b342a54
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_vec_interp.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot-design/assets/icons/svg/icon_graph_scalar_uniform.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_vec_interp.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="2.5478823"
+ inkscape:cy="7.6364821"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#b8ea68;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ d="m 2,1050.3622 10,-10"
+ id="path4154"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_vec_length.svg b/tools/editor/icons/source/icon_graph_vec_length.svg
new file mode 100644
index 0000000000..aa01e3ef2a
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_vec_length.svg
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_vec_length.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="5.8031361"
+ inkscape:cy="7.1300276"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <rect
+ style="opacity:1;fill:#b8ea68;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4154"
+ width="2"
+ height="12.000017"
+ x="0"
+ y="1039.3622" />
+ <rect
+ y="1039.3622"
+ x="12"
+ height="12.000017"
+ width="2"
+ id="rect4156"
+ style="opacity:1;fill:#b8ea68;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#b8ea68;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 5,1043.3622 2,5 2,-5"
+ id="path4158"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_vec_op.svg b/tools/editor/icons/source/icon_graph_vec_op.svg
new file mode 100644
index 0000000000..da7540ce86
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_vec_op.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_vec_op.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="6.0410396"
+ inkscape:cy="8.8691461"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b8ea68;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="M 4 1 C 3.4477381 1.0001 3.0000552 1.4477 3 2 L 3 3 L 1 3 L 1 5 L 3 5 L 3 9 L 1 9 L 1 11 L 3 11 L 3 12 C 3.0000552 12.5523 3.4477381 12.9999 4 13 L 10 13 C 10.552262 12.9999 10.999945 12.5523 11 12 L 11 8 L 13 8 L 13 6 L 11 6 L 11 2 C 10.999945 1.4477 10.552262 1.0001 10 1 L 4 1 z M 5 4 L 9 7 L 5 10 L 5 4 z "
+ transform="translate(0,1038.3622)"
+ id="path4144" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_vec_scalar_op.svg b/tools/editor/icons/source/icon_graph_vec_scalar_op.svg
new file mode 100644
index 0000000000..aeb2626120
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_vec_scalar_op.svg
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_vec_scalar_op.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="4.8222896"
+ inkscape:cy="9.2753961"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cf68ea;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="M 3 7 L 3 9 L 1 9 L 1 11 L 3 11 L 3 12 C 3.0000552 12.5523 3.4477381 12.9999 4 13 L 10 13 C 10.552262 12.9999 10.999945 12.5523 11 12 L 11 8 L 13 8 L 13 7 L 9 7 L 5 10 L 5 7 L 3 7 z "
+ transform="translate(0,1038.3622)"
+ id="path4233" />
+ <path
+ id="path4236"
+ d="m 3,1045.3622 0,-2 -2,0 0,-2 2,0 0,-1 c 5.52e-5,-0.5523 0.4477381,-0.9999 1,-1 l 6,0 c 0.552262,10e-5 0.999945,0.4477 1,1 l 0,4 2,0 0,1 -4,0 -4,-3 0,3 -2,0 z"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b8ea68;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_vec_to_scalars.svg b/tools/editor/icons/source/icon_graph_vec_to_scalars.svg
new file mode 100644
index 0000000000..fb58db9d78
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_vec_to_scalars.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot-design/assets/icons/svg/icon_graph_scalar_uniform.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_vec_to_scalars.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="4.4222736"
+ inkscape:cy="8.4198974"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#b8ea68;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 7,1045.3622 -5,0"
+ id="path4154"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#cf68ea;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 12,1040.3622 -5,0 0,10 5,0"
+ id="path4155"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#cf68ea;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 7,1045.3622 5,0"
+ id="path4157"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_vecs_to_xform.svg b/tools/editor/icons/source/icon_graph_vecs_to_xform.svg
new file mode 100644
index 0000000000..f8ba3eb4b8
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_vecs_to_xform.svg
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot-design/assets/icons/svg/icon_graph_scalar_uniform.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_vecs_to_xform.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="2.8910236"
+ inkscape:cy="10.294897"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ea686c;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 7,1044.3613 a 1.0001,1.0001 0 1 0 0,2 l 5,0 a 1.0001,1.0001 0 1 0 0,-2 l -5,0 z"
+ id="path4154"
+ inkscape:connector-curvature="0" />
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b8ea68;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="M 2 1 A 1.0001 1.0001 0 1 0 2 3 L 6 3 L 6 6 L 2 6 A 1.0001 1.0001 0 1 0 2 8 L 6 8 L 6 11 L 2 11 A 1.0001 1.0001 0 1 0 2 13 L 7 13 A 1.0001 1.0001 0 0 0 8 12 L 8 7.1679688 A 1.0001 1.0001 0 0 0 8 6.8398438 L 8 2 A 1.0001 1.0001 0 0 0 7 1 L 2 1 z "
+ transform="translate(0,1038.3622)"
+ id="path4155" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_vector.svg b/tools/editor/icons/source/icon_graph_vector.svg
new file mode 100644
index 0000000000..e7f6bd927f
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_vector.svg
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_vector.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="6.8941631"
+ inkscape:cy="7.6796075"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-intersection-paths="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b8ea68;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 8,1038.3614 0,2 -5,0 0,2 5,0 0,2 3,-3 z m -3.65625,5.6289 -1.714844,1.0293 0.513672,0.8574 3,5 c 0.388501,0.647 1.326343,0.647 1.714844,0 l 3,-5 0.513672,-0.8574 -1.714844,-1.0293 -0.513672,0.8574 L 7,1048.418 4.857422,1044.8477 Z"
+ id="path4209"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccccccccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_vector_uniform.svg b/tools/editor/icons/source/icon_graph_vector_uniform.svg
new file mode 100644
index 0000000000..2310938af5
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_vector_uniform.svg
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_vector_uniform.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="6.2039653"
+ inkscape:cy="7.5980148"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <path
+ style="opacity:1;fill:#b8ea68;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 2,0 C 0.8954305,0 0,0.8954305 0,2 l 0,10 c 0,1.104569 0.8954305,2 2,2 l 10,0 c 1.104569,0 2,-0.895431 2,-2 L 14,2 C 14,0.8954305 13.104569,0 12,0 Z M 8,0 11,3 8,6 8,4 3,4 3,2 8,2 Z M 4.34375,5.6289062 4.8574219,6.4863281 7,10.056641 9.1425781,6.4863281 9.65625,5.6289062 l 1.714844,1.0292969 -0.513672,0.8574219 -3.0000001,5 c -0.3885014,0.647055 -1.3263424,0.647055 -1.7148438,0 l -3,-5 -0.5136719,-0.8574219 z"
+ transform="translate(0,1038.3622)"
+ id="rect4147"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ssssssssscccccccccccccccccccc" />
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 23,0 0,2 -5,0 0,2 5,0 0,2 3,-3 z m -3.65625,5.6289062 -1.714844,1.0292969 0.513672,0.8574219 3,5 c 0.388501,0.647056 1.326343,0.647056 1.714844,0 l 3,-5 L 26.371094,6.6582031 24.65625,5.6289062 24.142578,6.4863281 22,10.056641 19.857422,6.4863281 Z"
+ transform="translate(0,1038.3622)"
+ id="path4209"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccccccccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_xform.svg b/tools/editor/icons/source/icon_graph_xform.svg
new file mode 100644
index 0000000000..c9b027ee2d
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_xform.svg
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_xform.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="1.4813283"
+ inkscape:cy="7.7204422"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <rect
+ style="opacity:1;fill:#ea686c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4154"
+ width="1"
+ height="12"
+ x="1"
+ y="1039.3622" />
+ <rect
+ y="1039.3622"
+ x="1"
+ height="1.0000174"
+ width="3"
+ id="rect4156"
+ style="opacity:1;fill:#ea686c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#ea686c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4158"
+ width="3"
+ height="1"
+ x="1"
+ y="1050.3622" />
+ <rect
+ y="1050.3622"
+ x="10"
+ height="1"
+ width="3"
+ id="rect4160"
+ style="opacity:1;fill:#ea686c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#ea686c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4162"
+ width="3"
+ height="1.0000174"
+ x="10"
+ y="1039.3622" />
+ <rect
+ y="1039.3622"
+ x="12"
+ height="12"
+ width="1"
+ id="rect4164"
+ style="opacity:1;fill:#ea686c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#ea686c;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 4,1049.3622 0,-7 3,3 3,-3 0,7"
+ id="path4166"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_xform_mult.svg b/tools/editor/icons/source/icon_graph_xform_mult.svg
new file mode 100644
index 0000000000..71fca83f3d
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_xform_mult.svg
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_xform_mult.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="64"
+ inkscape:cx="6.8982224"
+ inkscape:cy="7.1692759"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#ea686c;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 1,1049.3622 0,-7 2,3 2,-3 0,7"
+ id="path4166"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path4160"
+ d="m 9,1049.3622 0,-7 2,3 2,-3 0,7"
+ style="fill:none;fill-rule:evenodd;stroke:#ea686c;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <circle
+ style="opacity:1;fill:#ea686c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4162"
+ cx="7"
+ cy="1045.3622"
+ r="1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_xform_scalar_func.svg b/tools/editor/icons/source/icon_graph_xform_scalar_func.svg
new file mode 100644
index 0000000000..45fd97a671
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_xform_scalar_func.svg
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot-design/assets/icons/svg/icon_graph_scalar_uniform.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_xform_scalar_func.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="5.3566697"
+ inkscape:cy="9.063202"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <rect
+ style="opacity:1;fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4160"
+ width="2"
+ height="4.9999824"
+ x="6"
+ y="1042.3622" />
+ <path
+ style="opacity:1;fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 9.0703125 1 A 3 3 0 0 0 7.5 1.4023438 A 3 3 0 0 0 6 4 L 8 4 A 1 1 0 0 1 9 3 A 1 1 0 0 1 10 4 L 12 4 A 3 3 0 0 0 10.5 1.4023438 A 3 3 0 0 0 9.0703125 1 z "
+ transform="translate(0,1038.3622)"
+ id="path4164" />
+ <rect
+ y="1042.3622"
+ x="10"
+ height="1.0000174"
+ width="2"
+ id="rect4166"
+ style="opacity:1;fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="opacity:1;fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 2 10 A 3 3 0 0 0 3.5 12.597656 A 3 3 0 0 0 6.5 12.597656 A 3 3 0 0 0 8 10 L 6 10 A 1 1 0 0 1 5 11 A 1 1 0 0 1 4 10 L 2 10 z "
+ transform="translate(0,1038.3622)"
+ id="path4170" />
+ <rect
+ style="opacity:1;fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4172"
+ width="2"
+ height="1.0000174"
+ x="6"
+ y="-1048.3622"
+ transform="scale(1,-1)" />
+ <rect
+ style="opacity:1;fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4176"
+ width="6"
+ height="2"
+ x="4"
+ y="1044.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_xform_to_vecs.svg b/tools/editor/icons/source/icon_graph_xform_to_vecs.svg
new file mode 100644
index 0000000000..cc113e72fd
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_xform_to_vecs.svg
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot-design/assets/icons/svg/icon_graph_scalar_uniform.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_xform_to_vecs.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="-2.5152264"
+ inkscape:cy="10.232397"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ea686c;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 7,1044.3613 a 1.0001,1.0001 0 1 1 0,2 l -5,0 a 1.0001,1.0001 0 1 1 0,-2 l 5,0 z"
+ id="path4154"
+ inkscape:connector-curvature="0" />
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#b8ea68;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 12,1039.3622 a 1.0001,1.0001 0 1 1 0,2 l -4,0 0,3 4,0 a 1.0001,1.0001 0 1 1 0,2 l -4,0 0,3 4,0 a 1.0001,1.0001 0 1 1 0,2 l -5,0 a 1.0001,1.0001 0 0 1 -1,-1 l 0,-4.832 a 1.0001,1.0001 0 0 1 0,-0.3282 l 0,-4.8398 a 1.0001,1.0001 0 0 1 1,-1 l 5,0 z"
+ id="path4155"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_xform_uniform.svg b/tools/editor/icons/source/icon_graph_xform_uniform.svg
new file mode 100644
index 0000000000..f1cdcd408c
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_xform_uniform.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_xform_uniform.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="6.0470074"
+ inkscape:cy="8.0773899"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <path
+ style="opacity:1;fill:#ea686c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 2 0 C 0.8954305 0 0 0.8954 0 2 L 0 12 C 0 13.1046 0.8954305 14 2 14 L 12 14 C 13.104569 14 14 13.1046 14 12 L 14 2 C 14 0.8954 13.104569 0 12 0 L 2 0 z M 1 1 L 2 1 L 4 1 L 4 2 L 2 2 L 2 12 L 4 12 L 4 13 L 2 13 L 1 13 L 1 12 L 1 2 L 1 1 z M 10 1 L 13 1 L 13 12 L 13 13 L 10 13 L 10 12 L 12 12 L 12 2 L 10 2 L 10 1 z M 9.9707031 3 A 1.0001 1.0001 0 0 1 11 4 L 11 11 L 9 11 L 9 6.4140625 L 7.7070312 7.7070312 A 1.0001 1.0001 0 0 1 6.2929688 7.7070312 L 5 6.4140625 L 5 11 L 3 11 L 3 4 A 1.0001 1.0001 0 0 1 3.984375 3.0019531 A 1.0001 1.0001 0 0 1 4.7070312 3.2929688 L 7 5.5859375 L 9.2929688 3.2929688 A 1.0001 1.0001 0 0 1 9.9707031 3 z "
+ transform="translate(0,1038.3622)"
+ id="rect4147" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_xform_vec_func.svg b/tools/editor/icons/source/icon_graph_xform_vec_func.svg
new file mode 100644
index 0000000000..0d141bc646
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_xform_vec_func.svg
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot-design/assets/icons/svg/icon_graph_scalar_uniform.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_xform_vec_func.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="2.8879197"
+ inkscape:cy="10.406952"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <rect
+ style="opacity:1;fill:#b8ea68;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4160"
+ width="2"
+ height="4.9999824"
+ x="6"
+ y="1042.3622" />
+ <path
+ style="opacity:1;fill:#b8ea68;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 9.0703125 1 A 3 3 0 0 0 7.5 1.4023438 A 3 3 0 0 0 6 4 L 8 4 A 1 1 0 0 1 9 3 A 1 1 0 0 1 10 4 L 12 4 A 3 3 0 0 0 10.5 1.4023438 A 3 3 0 0 0 9.0703125 1 z "
+ transform="translate(0,1038.3622)"
+ id="path4164" />
+ <rect
+ y="1042.3622"
+ x="10"
+ height="1.0000174"
+ width="2"
+ id="rect4166"
+ style="opacity:1;fill:#b8ea68;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="opacity:1;fill:#b8ea68;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 2 10 A 3 3 0 0 0 3.5 12.597656 A 3 3 0 0 0 6.5 12.597656 A 3 3 0 0 0 8 10 L 6 10 A 1 1 0 0 1 5 11 A 1 1 0 0 1 4 10 L 2 10 z "
+ transform="translate(0,1038.3622)"
+ id="path4170" />
+ <rect
+ style="opacity:1;fill:#b8ea68;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4172"
+ width="2"
+ height="1.0000174"
+ x="6"
+ y="-1048.3622"
+ transform="scale(1,-1)" />
+ <rect
+ style="opacity:1;fill:#b8ea68;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4176"
+ width="6"
+ height="2"
+ x="4"
+ y="1044.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_xform_vec_imult.svg b/tools/editor/icons/source/icon_graph_xform_vec_imult.svg
new file mode 100644
index 0000000000..74dc1ba7e3
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_xform_vec_imult.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_xform_vec_imult.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="3.9196664"
+ inkscape:cy="7.2417215"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#b8ea68;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 1,1042.3622 2,6 2,-6"
+ id="path4154"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <circle
+ style="opacity:1;fill:#b8ea68;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4160"
+ cx="7"
+ cy="1046.3622"
+ r="1" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path4160-1"
+ d="m 9,1049.3622 0,-7 2,3 2,-3 0,7"
+ style="fill:none;fill-rule:evenodd;stroke:#ea686c;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_graph_xform_vec_mult.svg b/tools/editor/icons/source/icon_graph_xform_vec_mult.svg
new file mode 100644
index 0000000000..c3e59abd46
--- /dev/null
+++ b/tools/editor/icons/source/icon_graph_xform_vec_mult.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_graph_xform_vec_mult.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="3.0118539"
+ inkscape:cy="7.2425107"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#b8ea68;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 9,1042.3622 2,6 2,-6"
+ id="path4154"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <circle
+ style="opacity:1;fill:#b8ea68;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4160"
+ cx="7"
+ cy="1046.3622"
+ r="1" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path4160-1"
+ d="m 1,1049.3621 0,-7 2,3 2,-3 0,7"
+ style="fill:none;fill-rule:evenodd;stroke:#ea686c;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_grid.svg b/tools/editor/icons/source/icon_grid.svg
new file mode 100644
index 0000000000..2d9288de14
--- /dev/null
+++ b/tools/editor/icons/source/icon_grid.svg
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_grid.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="6.9555256"
+ inkscape:cy="11.525163"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#a5b7f4;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4154"
+ width="2"
+ height="10"
+ x="5"
+ y="1039.3622" />
+ <rect
+ y="1039.3622"
+ x="9"
+ height="10"
+ width="2"
+ id="rect4156"
+ style="opacity:1;fill:#a5b7f4;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#a5b7f4;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4158"
+ width="2"
+ height="10"
+ x="1041.3622"
+ y="-13"
+ transform="matrix(0,1,-1,0,0,0)" />
+ <rect
+ transform="matrix(0,1,-1,0,0,0)"
+ y="-13"
+ x="1045.3622"
+ height="10"
+ width="2"
+ id="rect4160"
+ style="opacity:1;fill:#a5b7f4;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ transform="matrix(0,1,-1,0,0,0)"
+ y="-15"
+ x="1037.3622"
+ height="14"
+ width="2"
+ id="rect4162"
+ style="opacity:1;fill:#a5b7f4;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#a5b7f4;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4164"
+ width="2"
+ height="14"
+ x="1049.3622"
+ y="-15"
+ transform="matrix(0,1,-1,0,0,0)" />
+ <rect
+ transform="scale(-1,-1)"
+ y="-1051.3622"
+ x="-15"
+ height="14"
+ width="2"
+ id="rect4166"
+ style="opacity:1;fill:#a5b7f4;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#a5b7f4;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4168"
+ width="2"
+ height="14"
+ x="-3"
+ y="-1051.3622"
+ transform="scale(-1,-1)" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_grid_container.svg b/tools/editor/icons/source/icon_grid_container.svg
new file mode 100644
index 0000000000..a27578f196
--- /dev/null
+++ b/tools/editor/icons/source/icon_grid_container.svg
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_grid_container.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="5.3680561"
+ inkscape:cy="9.3590913"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3,1 C 1.8954305,1 1,1.8954305 1,3 l 0,10 c 0,1.104569 0.8954305,2 2,2 l 10,0 c 1.104569,0 2,-0.895431 2,-2 L 15,3 C 15,1.8954305 14.104569,1 13,1 Z m 0,2 10,0 0,10 -10,0 z"
+ transform="translate(0,1036.3622)"
+ id="rect4140"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sssssssssccccc" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4155"
+ width="2"
+ height="10"
+ x="5"
+ y="1039.3622" />
+ <rect
+ y="1039.3622"
+ x="9"
+ height="10"
+ width="2"
+ id="rect4157"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="1041.3622"
+ x="3"
+ height="1.9999826"
+ width="10"
+ id="rect4159"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4161"
+ width="10"
+ height="1.9999826"
+ x="3"
+ y="1045.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_grid_map.svg b/tools/editor/icons/source/icon_grid_map.svg
new file mode 100644
index 0000000000..5bbea0ff2c
--- /dev/null
+++ b/tools/editor/icons/source/icon_grid_map.svg
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_grid_map.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="9.49128"
+ inkscape:cy="9.6074202"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4170"
+ width="4"
+ height="4.0000172"
+ x="1"
+ y="1037.3622" />
+ <rect
+ y="1037.3622"
+ x="11"
+ height="4.0000172"
+ width="4"
+ id="rect4172"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4174"
+ width="4"
+ height="4.0000172"
+ x="6"
+ y="1037.3622" />
+ <rect
+ y="1042.3622"
+ x="1"
+ height="4.0000172"
+ width="4"
+ id="rect4176"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4178"
+ width="4"
+ height="4.0000172"
+ x="11"
+ y="1042.3622" />
+ <rect
+ y="1042.3622"
+ x="6"
+ height="4.0000172"
+ width="4"
+ id="rect4180"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4182"
+ width="4"
+ height="4.0000172"
+ x="1"
+ y="1047.3622" />
+ <rect
+ y="1047.3622"
+ x="11"
+ height="4.0000172"
+ width="4"
+ id="rect4184"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4186"
+ width="4"
+ height="4.0000172"
+ x="6"
+ y="1047.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_groove_joint_2d.svg b/tools/editor/icons/source/icon_groove_joint_2d.svg
new file mode 100644
index 0000000000..d05bebef48
--- /dev/null
+++ b/tools/editor/icons/source/icon_groove_joint_2d.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_groove_joint_2d.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="11.478928"
+ inkscape:cy="8.9552021"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5b7f5;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 15,1037.3622 -5,0 0,6 -5,0 0,2 5,0 0,6 5,0 0,-14 z m -7,0 -5,0 -2,0 0,4 0,10 2,0 5,0 0,-4 -5,0 0,-6 5,0 0,-4 z"
+ id="rect4161"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_group.svg b/tools/editor/icons/source/icon_group.svg
new file mode 100644
index 0000000000..bccb23ade3
--- /dev/null
+++ b/tools/editor/icons/source/icon_group.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_group.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999999"
+ inkscape:cx="6.3400278"
+ inkscape:cy="8.8086774"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 1 C 4.1340068 1 1 4.134 1 8 C 1 11.866 4.1340068 15 8 15 C 11.865993 15 15 11.866 15 8 C 15 4.134 11.865993 1 8 1 z M 8 3 A 2 2 0 0 1 10 5 A 2 2 0 0 1 8 7 A 2 2 0 0 1 6 5 A 2 2 0 0 1 8 3 z M 5 8 A 2 2 0 0 1 7 10 A 2 2 0 0 1 5 12 A 2 2 0 0 1 3 10 A 2 2 0 0 1 5 8 z M 11 8 A 2 2 0 0 1 13 10 A 2 2 0 0 1 11 12 A 2 2 0 0 1 9 10 A 2 2 0 0 1 11 8 z "
+ transform="translate(0,1036.3622)"
+ id="path4154" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_groups.svg b/tools/editor/icons/source/icon_groups.svg
new file mode 100644
index 0000000000..00249597a4
--- /dev/null
+++ b/tools/editor/icons/source/icon_groups.svg
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_edit.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_groups.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="4.2323806"
+ inkscape:cy="8.9952486"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#e0e0e0;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4242"
+ width="14"
+ height="8.0000172"
+ x="1"
+ y="1040.3622" />
+ <ellipse
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4246"
+ cx="5"
+ cy="1044.3622"
+ rx="2"
+ ry="2.0000043" />
+ <ellipse
+ ry="2.0000043"
+ rx="2"
+ cy="1044.3622"
+ cx="11"
+ id="ellipse4248"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_h_box_container.svg b/tools/editor/icons/source/icon_h_box_container.svg
new file mode 100644
index 0000000000..f180dde93a
--- /dev/null
+++ b/tools/editor/icons/source/icon_h_box_container.svg
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_h_box_container.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="8.0508349"
+ inkscape:cy="9.1486534"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3,1 C 1.8954305,1 1,1.8954305 1,3 l 0,10 c 0,1.104569 0.8954305,2 2,2 l 10,0 c 1.104569,0 2,-0.895431 2,-2 L 15,3 C 15,1.8954305 14.104569,1 13,1 Z m 0,2 10,0 0,10 -10,0 z"
+ transform="translate(0,1036.3622)"
+ id="rect4140"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sssssssssccccc" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4155"
+ width="2"
+ height="10"
+ x="5"
+ y="1039.3622" />
+ <rect
+ y="1039.3622"
+ x="9"
+ height="10"
+ width="2"
+ id="rect4157"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_h_button_array.svg b/tools/editor/icons/source/icon_h_button_array.svg
new file mode 100644
index 0000000000..9470aeb370
--- /dev/null
+++ b/tools/editor/icons/source/icon_h_button_array.svg
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_button.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_h_button_array.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="12.020131"
+ inkscape:cy="9.3264403"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4156"
+ width="6"
+ height="5.9999828"
+ x="2"
+ y="1041.3622" />
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 10,1041.3622 0,6 4,0 -1,-2 1,-2 -1,-2 -3,0 z"
+ id="rect4158"
+ inkscape:connector-curvature="0" />
+ <rect
+ y="1046.3622"
+ x="2"
+ height="0.99996543"
+ width="6"
+ id="rect4161"
+ style="opacity:1;fill:#98dc9f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="opacity:1;fill:#98dc9f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 10,1046.3622 0,1 4,0 -0.5,-1 -3.5,0 z"
+ id="rect4163"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_h_scroll_bar.svg b/tools/editor/icons/source/icon_h_scroll_bar.svg
new file mode 100644
index 0000000000..2f007c7c94
--- /dev/null
+++ b/tools/editor/icons/source/icon_h_scroll_bar.svg
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_h_scroll_bar.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="9.1371771"
+ inkscape:cy="7.8450604"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-paths="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3,3 C 1.8954305,3 1,3.8954305 1,5 l 0,6 c 0,1.104569 0.8954305,2 2,2 l 10,0 c 1.104569,0 2,-0.895431 2,-2 L 15,5 C 15,3.8954305 14.104569,3 13,3 Z m 0,2 10,0 0,6 -10,0 z"
+ transform="translate(0,1036.3622)"
+ id="rect4140"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sssssssssccccc" />
+ <rect
+ style="opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4181"
+ width="4"
+ height="4"
+ x="4"
+ y="1042.3622" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4187"
+ width="4"
+ height="4"
+ x="4"
+ y="1042.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_h_separator.svg b/tools/editor/icons/source/icon_h_separator.svg
new file mode 100644
index 0000000000..461299731d
--- /dev/null
+++ b/tools/editor/icons/source/icon_h_separator.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_h_separator.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="9.302565"
+ inkscape:cy="8.0967779"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4156"
+ width="6"
+ height="3.0000174"
+ x="5"
+ y="1038.3622" />
+ <rect
+ y="-15"
+ x="-1045.3622"
+ height="14"
+ width="2"
+ id="rect4158"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0,-1,-1,0,0,0)" />
+ <rect
+ y="1047.3622"
+ x="5"
+ height="3.0000174"
+ width="6"
+ id="rect4160"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_h_slider.svg b/tools/editor/icons/source/icon_h_slider.svg
new file mode 100644
index 0000000000..beee5f8b6a
--- /dev/null
+++ b/tools/editor/icons/source/icon_h_slider.svg
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_h_slider.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="9.3533577"
+ inkscape:cy="8.3875011"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 2 7 L 2 9 L 5.1738281 9 A 3 3 0 0 1 5 8 A 3 3 0 0 1 5.1757812 7 L 2 7 z M 10.826172 7 A 3 3 0 0 1 11 8 A 3 3 0 0 1 10.824219 9 L 14 9 L 14 7 L 10.826172 7 z "
+ transform="translate(0,1036.3622)"
+ id="rect4157" />
+ <circle
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="path4159"
+ cx="2"
+ cy="1044.3622"
+ r="1" />
+ <circle
+ r="1"
+ cy="1044.3622"
+ cx="14"
+ id="circle4161"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <circle
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="path4167"
+ cx="8"
+ cy="1044.3622"
+ r="2" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_h_split_container.svg b/tools/editor/icons/source/icon_h_split_container.svg
new file mode 100644
index 0000000000..9ca2df0ff1
--- /dev/null
+++ b/tools/editor/icons/source/icon_h_split_container.svg
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_h_split_container.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="8.521964"
+ inkscape:cy="9.8091523"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3,1 C 1.8954305,1 1,1.8954305 1,3 l 0,10 c 0,1.104569 0.8954305,2 2,2 l 10,0 c 1.104569,0 2,-0.895431 2,-2 L 15,3 C 15,1.8954305 14.104569,1 13,1 Z m 0,2 10,0 0,10 -10,0 z"
+ transform="translate(0,1036.3622)"
+ id="rect4140"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sssssssssccccc" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4155"
+ width="2"
+ height="10"
+ x="7"
+ y="1039.3622" />
+ <path
+ style="fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 9,1042.3622 0,4 2,-2 z"
+ id="path4173"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 7,1042.3622 -2,2 2,2 z"
+ id="path4171"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_h_t_t_p_request.svg b/tools/editor/icons/source/icon_h_t_t_p_request.svg
new file mode 100644
index 0000000000..2aee12b2af
--- /dev/null
+++ b/tools/editor/icons/source/icon_h_t_t_p_request.svg
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_key.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_h_t_t_p_request.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254836"
+ inkscape:cx="10.430372"
+ inkscape:cy="8.7048298"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4200"
+ width="1"
+ height="5"
+ x="0"
+ y="1042.3622" />
+ <rect
+ y="1044.3622"
+ x="0"
+ height="0.9999826"
+ width="2"
+ id="rect4202"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ y="1042.3622"
+ x="2"
+ height="5"
+ width="1"
+ id="rect4204"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4206"
+ width="1"
+ height="5"
+ x="5"
+ y="1042.3622" />
+ <rect
+ y="1042.3622"
+ x="4"
+ height="1.0000174"
+ width="3"
+ id="rect4208"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ y="1042.3622"
+ x="9"
+ height="5"
+ width="1"
+ id="rect4210"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4212"
+ width="3"
+ height="1.0000174"
+ x="8"
+ y="1042.3622" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4214"
+ width="1"
+ height="5"
+ x="12"
+ y="1042.3622" />
+ <rect
+ y="1042.3622"
+ x="12"
+ height="1.0000174"
+ width="3"
+ id="rect4216"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4218"
+ width="1"
+ height="3.0000174"
+ x="14"
+ y="1042.3622" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4220"
+ width="3"
+ height="1.0000174"
+ x="12"
+ y="1044.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_help.svg b/tools/editor/icons/source/icon_help.svg
new file mode 100644
index 0000000000..01e85e0f55
--- /dev/null
+++ b/tools/editor/icons/source/icon_help.svg
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_help.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_help.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999999"
+ inkscape:cx="5.4018713"
+ inkscape:cy="8.2308388"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#f1f1f1;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 1 A 7 7 0 0 0 1 8 A 7 7 0 0 0 8 15 A 7 7 0 0 0 15 8 A 7 7 0 0 0 8 1 z M 8 4 A 4.0000172 4.0000172 0 0 1 12 8 A 4.0000172 4.0000172 0 0 1 8 12 A 4.0000172 4.0000172 0 0 1 4 8 A 4.0000172 4.0000172 0 0 1 8 4 z "
+ transform="translate(0,1036.3622)"
+ id="circle4160" />
+ <path
+ style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8,1 0,3 c 1.1045715,-4.8e-6 2.104267,0.4480167 2.828125,1.171875 L 12.949219,3.0507812 C 11.68247,1.7840321 9.9329986,1.0000047 8,1 Z"
+ transform="translate(0,1036.3622)"
+ id="circle4154"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc"
+ inkscape:transform-center-x="-2.4746095"
+ inkscape:transform-center-y="-4.9140625" />
+ <path
+ inkscape:transform-center-y="2.4746"
+ inkscape:transform-center-x="-4.9140625"
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path4163"
+ d="m 15,1044.3622 -3,0 c 5e-6,1.1046 -0.448017,2.1043 -1.171875,2.8281 l 2.121094,2.1211 c 1.266749,-1.2667 2.050776,-3.0162 2.050781,-4.9492 z"
+ style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8,1051.3622 0,-3 c -1.1046,0 -2.1043,-0.448 -2.8281,-1.1719 l -2.1211,2.1211 c 1.2667,1.2668 3.0162,2.0508 4.9492,2.0508 z"
+ id="path4165"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc"
+ inkscape:transform-center-x="2.4746"
+ inkscape:transform-center-y="4.91405" />
+ <path
+ inkscape:transform-center-y="-2.4746"
+ inkscape:transform-center-x="4.91405"
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path4167"
+ d="m 1,1044.3622 3,0 c 0,-1.1046 0.448,-2.1043 1.1719,-2.8281 L 3.0508,1039.413 C 1.784,1040.6797 1,1042.4292 1,1044.3622 Z"
+ style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_hidden.svg b/tools/editor/icons/source/icon_hidden.svg
new file mode 100644
index 0000000000..1d504f02fb
--- /dev/null
+++ b/tools/editor/icons/source/icon_hidden.svg
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_history.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_hidden.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="8.8497078"
+ inkscape:cy="4.519077"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
+ d="m 14,1044.3622 c -1,3.5 -4,5 -6,5 -2,0 -5,-1.5 -6,-5"
+ id="path4165"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="csc" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4136"
+ width="2"
+ height="2"
+ x="7"
+ y="1049.3622" />
+ <rect
+ y="749.42535"
+ x="-733.11163"
+ height="2"
+ width="2"
+ id="rect4138"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ inkscape:transform-center-y="4.9497553"
+ transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,0,0)"
+ inkscape:transform-center-x="-4.9497561" />
+ <rect
+ inkscape:transform-center-x="4.9497388"
+ transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)"
+ inkscape:transform-center-y="4.9497553"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4140"
+ width="2"
+ height="2"
+ x="742.42535"
+ y="738.11163" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_history.svg b/tools/editor/icons/source/icon_history.svg
new file mode 100644
index 0000000000..f81390f0f5
--- /dev/null
+++ b/tools/editor/icons/source/icon_history.svg
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_history.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_history.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16"
+ inkscape:cx="0.066428122"
+ inkscape:cy="12.678568"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 9 2 A 6.0000172 6.0000172 0 0 0 3 8 L 5 8 A 4 4 0 0 1 9 4 A 4 4 0 0 1 13 8 A 4 4 0 0 1 9 12 L 9 14 A 6.0000172 6.0000172 0 0 0 15 8 A 6.0000172 6.0000172 0 0 0 9 2 z "
+ transform="translate(0,1036.3622)"
+ id="path4138" />
+ <path
+ sodipodi:type="star"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4142"
+ sodipodi:sides="3"
+ sodipodi:cx="3"
+ sodipodi:cy="1046.3622"
+ sodipodi:r1="2.236068"
+ sodipodi:r2="1.118034"
+ sodipodi:arg1="1.0471976"
+ sodipodi:arg2="2.0943951"
+ inkscape:flatsided="false"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 4.1180339,1048.2987 -1.6770509,-0.9683 -1.67705101,-0.9682 1.67705101,-0.9683 1.6770511,-0.9682 -1e-7,1.9365 z"
+ inkscape:transform-center-x="0.00013164169"
+ transform="matrix(0,-1.1925797,1.5491989,0,-1617.0232,1049.2732)"
+ inkscape:transform-center-y="0.66664316" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4144"
+ width="2"
+ height="4"
+ x="7.9999828"
+ y="1041.3622" />
+ <rect
+ y="1043.3622"
+ x="7.9999828"
+ height="1.9999826"
+ width="4"
+ id="rect4146"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_hsize.svg b/tools/editor/icons/source/icon_hsize.svg
new file mode 100644
index 0000000000..f24a630770
--- /dev/null
+++ b/tools/editor/icons/source/icon_hsize.svg
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_tool_move.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_h_size.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="7.1680801"
+ inkscape:cy="7.9718121"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 4,7 0,-2 -3,3 3,3 0,-2 8,0 0,2 3,-3 -3,-3 0,2 z"
+ transform="translate(0,1036.3622)"
+ id="rect4140"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_image.svg b/tools/editor/icons/source/icon_image.svg
new file mode 100644
index 0000000000..bb15e96251
--- /dev/null
+++ b/tools/editor/icons/source/icon_image.svg
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_key.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_image.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000001"
+ inkscape:cx="12.684811"
+ inkscape:cy="8.4223992"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 2 1 A 1 1 0 0 0 1 2 L 1 14 A 1 1 0 0 0 2 15 L 14 15 A 1 1 0 0 0 15 14 L 15 2 A 1 1 0 0 0 14 1 L 2 1 z M 3 3 L 13 3 L 13 11 L 3 11 L 3 3 z "
+ transform="translate(0,1036.3622)"
+ id="rect4156" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 9 5 L 7.5 7.5 L 6.7988281 8.6679688 L 6.6992188 8.5 L 5.8007812 7 L 4.9003906 8.5 L 4 10 L 5.8007812 10 L 6 10 L 7.5996094 10 L 9 10 L 12 10 L 10.5 7.5 L 9 5 z "
+ transform="translate(0,1036.3622)"
+ id="path4172" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_image_texture.svg b/tools/editor/icons/source/icon_image_texture.svg
new file mode 100644
index 0000000000..39e88e592b
--- /dev/null
+++ b/tools/editor/icons/source/icon_image_texture.svg
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_key.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_image_texture.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="9.9365814"
+ inkscape:cy="6.4466253"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 2 1 A 1 1 0 0 0 1 2 L 1 14 A 1 1 0 0 0 2 15 L 14 15 A 1 1 0 0 0 15 14 L 15 2 A 1 1 0 0 0 14 1 L 2 1 z M 3 3 L 13 3 L 13 11 L 3 11 L 3 3 z "
+ transform="translate(0,1036.3622)"
+ id="rect4156" />
+ <rect
+ y="1043.3622"
+ x="6"
+ height="1"
+ width="2"
+ id="rect4197"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4199"
+ width="2"
+ height="2.0000174"
+ x="6"
+ y="1044.3622" />
+ <rect
+ y="1045.3622"
+ x="4"
+ height="1"
+ width="2"
+ id="rect4201"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4203"
+ width="2"
+ height="2.0000174"
+ x="8"
+ y="1044.3622" />
+ <rect
+ y="1044.3622"
+ x="10"
+ height="2.0000174"
+ width="2"
+ id="rect4205"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4207"
+ width="3"
+ height="2.0000174"
+ x="8"
+ y="1042.3622" />
+ <rect
+ y="1041.3622"
+ x="9"
+ height="1"
+ width="1"
+ id="rect4217"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4219"
+ width="1"
+ height="1"
+ x="5"
+ y="1044.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_immediate_geometry.svg b/tools/editor/icons/source/icon_immediate_geometry.svg
new file mode 100644
index 0000000000..54bc4766d9
--- /dev/null
+++ b/tools/editor/icons/source/icon_immediate_geometry.svg
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_canvas_item.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_immediate_geometry.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16"
+ inkscape:cx="18.615042"
+ inkscape:cy="6.562585"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-midpoints="true"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-paths="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ sodipodi:nodetypes="cscsccccsssc"
+ inkscape:connector-curvature="0"
+ id="path4146"
+ d="m 2.920797,1046.3957 c -0.2637264,0.3 -0.4203983,0.7296 -0.4203983,1.2383 0,1.6277 -3.13814186,-0.1781 -0.337569,2.6703 0.8838207,0.899 2.6543881,0.6701 3.538224,-0.2288 0.8838352,-0.899 0.8838163,-2.3565 0,-3.2554 -1.1002211,-1.1191 -2.200058,-1.0845 -2.7802567,-0.4244 z m 2.3801743,-1.6103 2.4004918,2.4416 6.8013899,-6.9177 c 0.662863,-0.6742 0.662863,-1.7673 0,-2.4415 -0.662877,-0.6741 -1.737613,-0.6741 -2.400491,0 z"
+ style="fill:#fc9c9c;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_import_check.svg b/tools/editor/icons/source/icon_import_check.svg
new file mode 100644
index 0000000000..606236d82e
--- /dev/null
+++ b/tools/editor/icons/source/icon_import_check.svg
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_folder.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_import_check.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="4.5874555"
+ inkscape:cy="7.2488455"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#84ffb1;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
+ d="m 2,1044.3622 4,4 8,-8"
+ id="path4138"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_import_fail.svg b/tools/editor/icons/source/icon_import_fail.svg
new file mode 100644
index 0000000000..b5d142f968
--- /dev/null
+++ b/tools/editor/icons/source/icon_import_fail.svg
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_folder.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_import_fail.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="10.435875"
+ inkscape:cy="8.0921459"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ff8484;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="M 2.9902344 1.9902344 A 1.0001 1.0001 0 0 0 2.2929688 3.7070312 L 6.5859375 8 L 2.2929688 12.292969 A 1.0001 1.0001 0 1 0 3.7070312 13.707031 L 8 9.4140625 L 12.292969 13.707031 A 1.0001 1.0001 0 1 0 13.707031 12.292969 L 9.4140625 8 L 13.707031 3.7070312 A 1.0001 1.0001 0 0 0 12.980469 1.9921875 A 1.0001 1.0001 0 0 0 12.292969 2.2929688 L 8 6.5859375 L 3.7070312 2.2929688 A 1.0001 1.0001 0 0 0 2.9902344 1.9902344 z "
+ id="path4139"
+ transform="translate(0,1036.3622)" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_instance.svg b/tools/editor/icons/source/icon_instance.svg
new file mode 100644
index 0000000000..f12e067e7a
--- /dev/null
+++ b/tools/editor/icons/source/icon_instance.svg
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_instance.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_instance_2.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16"
+ inkscape:cx="0.98066219"
+ inkscape:cy="8.8420536"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:object-nodes="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ d="m 5,1047.3622 6,-6"
+ id="path4156"
+ inkscape:connector-curvature="0" />
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#e0e0e0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="M 11 1 C 8.8027056 1 7 2.8027 7 5 C 7 5.3547724 7.0623287 5.6932122 7.1503906 6.0214844 L 9.5449219 3.6269531 C 9.9079388 3.2418883 10.420555 3 11 3 C 12.116414 3 13 3.8836 13 5 C 13 5.5738779 12.763331 6.0828638 12.384766 6.4453125 L 9.9804688 8.8496094 C 10.308197 8.9373587 10.64588 9 11 9 C 13.197294 9 15 7.1973 15 5 C 15 2.8027 13.197294 1 11 1 z M 5 7 C 2.8027056 7 1 8.8027 1 11 C 1 13.1973 2.8027056 15 5 15 C 7.1972944 15 9 13.1973 9 11 C 9 10.645879 8.9373589 10.308197 8.8496094 9.9804688 L 6.4453125 12.384766 C 6.0828657 12.763333 5.5738851 13 5 13 C 3.8835859 13 3 12.1164 3 11 C 3 10.420562 3.24189 9.9079407 3.6269531 9.5449219 L 6.0214844 7.1503906 C 5.6932126 7.0623289 5.3547715 7 5 7 z "
+ transform="translate(0,1036.3622)"
+ id="path4137" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_instance_options.svg b/tools/editor/icons/source/icon_instance_options.svg
new file mode 100644
index 0000000000..a8c00bc43f
--- /dev/null
+++ b/tools/editor/icons/source/icon_instance_options.svg
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_packed_scene.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_instance_options.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="6.1966464"
+ inkscape:cy="5.5949101"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 1 7 L 1 13 C 1 14.104569 1.8954305 15 3 15 L 15 15 L 15 7 L 1 7 z M 5 9 L 11 9 L 8 13 L 5 9 z "
+ transform="translate(0,1036.3622)"
+ id="rect4136" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 0.7112932,1040.3831 1,1042.3622 l 2.2438279,-0.3273 -0.8182578,-1.9018 -1.7142769,0.25 z m 3.6933293,-0.5387 0.8182578,1.9018 1.9790524,-0.2887 -0.8182579,-1.9018 -1.9790523,0.2887 z m 3.9581047,-0.5775 0.8182579,1.9018 1.9790519,-0.2887 -0.818257,-1.9018 -1.9790528,0.2887 z m 3.9581048,-0.5774 0.818258,1.9018 1.714277,-0.25 -0.288707,-1.9791 -2.243828,0.3273 z"
+ id="rect4138"
+ inkscape:connector-curvature="0"
+ inkscape:transform-center-x="-6.7823301"
+ inkscape:transform-center-y="-2" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_integer.svg b/tools/editor/icons/source/icon_integer.svg
new file mode 100644
index 0000000000..d4e7a9860a
--- /dev/null
+++ b/tools/editor/icons/source/icon_integer.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot-design/assets/icons/svg/icon_graph_scalar_uniform.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_integer.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="0.4948735"
+ inkscape:cy="6.9110682"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <rect
+ style="opacity:1;fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4154"
+ width="2"
+ height="10"
+ x="6"
+ y="1040.3622" />
+ <rect
+ y="1039.3622"
+ x="4"
+ height="2.0000174"
+ width="6"
+ id="rect4156"
+ style="opacity:1;fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4158"
+ width="6"
+ height="2.0000174"
+ x="4"
+ y="1049.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_interp_cubic.svg b/tools/editor/icons/source/icon_interp_cubic.svg
new file mode 100644
index 0000000000..7d8d5ef70d
--- /dev/null
+++ b/tools/editor/icons/source/icon_interp_cubic.svg
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="8"
+ viewBox="0 0 16 8"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_interp_cubic.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="7.5633871"
+ inkscape:cy="5.0840195"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1044.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2,1050.3622 c 3,0 3,-4 6,-4 3,0 3,4 6,4"
+ id="path4156"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="csc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_interp_linear.svg b/tools/editor/icons/source/icon_interp_linear.svg
new file mode 100644
index 0000000000..7b1e4f2dd1
--- /dev/null
+++ b/tools/editor/icons/source/icon_interp_linear.svg
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="8"
+ viewBox="0 0 16 8"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_interp_linear.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="64"
+ inkscape:cx="7.2389107"
+ inkscape:cy="6.3582428"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1044.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2,1050.3622 6,-4 6,4"
+ id="path4156"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_interp_raw.svg b/tools/editor/icons/source/icon_interp_raw.svg
new file mode 100644
index 0000000000..e2e2070449
--- /dev/null
+++ b/tools/editor/icons/source/icon_interp_raw.svg
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="8"
+ viewBox="0 0 16 8"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_interp_raw.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="7.8686169"
+ inkscape:cy="5.8136992"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1044.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2,1050.3622 3,0 0,-4 6,0 0,4 3,0"
+ id="path4156"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_invalid_key.svg b/tools/editor/icons/source/icon_invalid_key.svg
new file mode 100644
index 0000000000..cbccff571a
--- /dev/null
+++ b/tools/editor/icons/source/icon_invalid_key.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="8"
+ height="8"
+ viewBox="0 0 8 8"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_invalid_key.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000001"
+ inkscape:cx="6.3598525"
+ inkscape:cy="6.0587147"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1044.3622)">
+ <path
+ style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 0.46446609,1046.2409 2.12132031,2.1213 -2.12132031,2.1213 1.41421361,1.4142 L 4,1049.7764 l 2.1213203,2.1213 1.4142136,-1.4142 -2.1213203,-2.1213 2.1213203,-2.1213 -1.4142136,-1.4142 L 4,1046.948 l -2.1213203,-2.1213 -1.41421361,1.4142 z"
+ id="rect4156"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_inverse_kinematics.svg b/tools/editor/icons/source/icon_inverse_kinematics.svg
new file mode 100644
index 0000000000..227d22f911
--- /dev/null
+++ b/tools/editor/icons/source/icon_inverse_kinematics.svg
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_camera.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_inverse_kinematics.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999999"
+ inkscape:cx="2.6199443"
+ inkscape:cy="8.0718327"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#fc9c9c;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 3,1039.3622 0,12"
+ id="path4149"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <circle
+ style="opacity:1;fill:#fc9c9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4151"
+ cx="3"
+ cy="1039.3622"
+ r="2" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path4153"
+ d="m 10,1039.3622 -7,0"
+ style="fill:#fc9c9c;fill-rule:evenodd;stroke:#fc9c9c;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1" />
+ <circle
+ r="2"
+ cy="1039.3622"
+ cx="11"
+ id="circle4155"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#fc9c9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4161"
+ width="6"
+ height="2"
+ x="8"
+ y="1044.3622" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#fc9c9c;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 11,1039.3622 0,6"
+ id="path4163"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:#fc9c9c;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
+ d="m 10,1046.3622 0,4 -3,-2 1,-2 z"
+ id="path4165"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4167"
+ d="m 12,1046.3622 0,4 3,-2 -1,-2 z"
+ style="fill:#fc9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_item_list.svg b/tools/editor/icons/source/icon_item_list.svg
new file mode 100644
index 0000000000..943f6fe435
--- /dev/null
+++ b/tools/editor/icons/source/icon_item_list.svg
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_item_list.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="8.1722679"
+ inkscape:cy="6.5280035"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3,1 C 1.8954305,1 1,1.8954305 1,3 l 0,10 c 0,1.104569 0.8954305,2 2,2 l 10,0 c 1.104569,0 2,-0.895431 2,-2 L 15,3 C 15,1.8954305 14.104569,1 13,1 Z m 0,2 10,0 0,10 -10,0 z"
+ transform="translate(0,1036.3622)"
+ id="rect4140"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sssssssssccccc" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4155"
+ width="2"
+ height="2.0000174"
+ x="4"
+ y="1040.3622" />
+ <rect
+ y="1040.3622"
+ x="7"
+ height="2.0000174"
+ width="2"
+ id="rect4157"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4159"
+ width="2"
+ height="2.0000174"
+ x="10"
+ y="1040.3622" />
+ <rect
+ y="1043.3622"
+ x="4"
+ height="2.0000174"
+ width="2"
+ id="rect4161"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4163"
+ width="2"
+ height="2.0000174"
+ x="7"
+ y="1043.3622" />
+ <rect
+ y="1043.3622"
+ x="10"
+ height="2.0000174"
+ width="2"
+ id="rect4165"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4167"
+ width="2"
+ height="2.0000174"
+ x="4"
+ y="1046.3622" />
+ <rect
+ y="1046.3622"
+ x="7"
+ height="2.0000174"
+ width="2"
+ id="rect4169"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4171"
+ width="2"
+ height="2.0000174"
+ x="10"
+ y="1046.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_joy_axis.svg b/tools/editor/icons/source/icon_joy_axis.svg
new file mode 100644
index 0000000000..9313342a53
--- /dev/null
+++ b/tools/editor/icons/source/icon_joy_axis.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_key.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_joy_axis.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627418"
+ inkscape:cx="11.922691"
+ inkscape:cy="9.5384233"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#ffffff;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4194"
+ width="7"
+ height="14"
+ x="27"
+ y="1038.3622" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3 1 A 2 2 0 0 0 1 3 L 1 13 A 2 2 0 0 0 3 15 L 15 15 L 15 1 L 3 1 z M 7 3 L 9 3 A 1 1 0 0 1 10 4 L 10 6 L 12 6 A 1 1 0 0 1 13 7 L 13 9 A 1 1 0 0 1 12 10 L 10 10 L 10 12 A 1 1 0 0 1 9 13 L 7 13 A 1 1 0 0 1 6 12 L 6 10 L 4 10 A 1 1 0 0 1 3 9 L 3 7 A 1 1 0 0 1 4 6 L 6 6 L 6 4 A 1 1 0 0 1 7 3 z "
+ transform="translate(0,1036.3622)"
+ id="rect4196" />
+ <circle
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4251"
+ cx="8"
+ cy="1044.3622"
+ r="1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_joy_button.svg b/tools/editor/icons/source/icon_joy_button.svg
new file mode 100644
index 0000000000..f6d4344807
--- /dev/null
+++ b/tools/editor/icons/source/icon_joy_button.svg
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_key.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_joy_button.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000001"
+ inkscape:cx="4.6871235"
+ inkscape:cy="9.8655688"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#ffffff;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4194"
+ width="7"
+ height="14"
+ x="27"
+ y="1038.3622" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 1 1 L 1 15 L 13 15 C 14.104569 15 15 14.1046 15 13 L 15 3 C 15 1.8954 14.104569 1 13 1 L 1 1 z M 8 2 A 2 2 0 0 1 10 4 A 2 2 0 0 1 8 6 A 2 2 0 0 1 6 4 A 2 2 0 0 1 8 2 z M 4 6 A 2 2 0 0 1 6 8 A 2 2 0 0 1 4 10 A 2 2 0 0 1 2 8 A 2 2 0 0 1 4 6 z M 12 6 A 2 2 0 0 1 14 8 A 2 2 0 0 1 12 10 A 2 2 0 0 1 10 8 A 2 2 0 0 1 12 6 z M 8 10 A 2 2 0 0 1 10 12 A 2 2 0 0 1 8 14 A 2 2 0 0 1 6 12 A 2 2 0 0 1 8 10 z "
+ transform="translate(0,1036.3622)"
+ id="rect4196" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_joystick.svg b/tools/editor/icons/source/icon_joystick.svg
new file mode 100644
index 0000000000..5395060175
--- /dev/null
+++ b/tools/editor/icons/source/icon_joystick.svg
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_key.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_joystick.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254835"
+ inkscape:cx="5.8962884"
+ inkscape:cy="8.9449522"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="M 1 3 C 0.4477381 3.0000552 5.52e-05 3.4477381 0 4 L 0 12 C 5.52e-05 12.552262 0.4477381 12.999945 1 13 L 15 13 C 15.552262 12.999945 15.999945 12.552262 16 12 L 16 4 C 15.999945 3.4477381 15.552262 3.0000552 15 3 L 1 3 z M 3 5 L 5 5 L 5 7 L 7 7 L 7 9 L 5 9 L 5 11 L 3 11 L 3 9 L 1 9 L 1 7 L 3 7 L 3 5 z M 13.5 5 A 1.5 1.5 0 0 1 15 6.5 A 1.5 1.5 0 0 1 13.5 8 A 1.5 1.5 0 0 1 12 6.5 A 1.5 1.5 0 0 1 13.5 5 z M 10.5 8 A 1.4999913 1.4999913 0 0 1 12 9.5 A 1.4999913 1.4999913 0 0 1 10.5 11 A 1.4999913 1.4999913 0 0 1 9 9.5 A 1.4999913 1.4999913 0 0 1 10.5 8 z "
+ transform="translate(0,1036.3622)"
+ id="path4155" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_key.svg b/tools/editor/icons/source/icon_key.svg
new file mode 100644
index 0000000000..f5d7b85381
--- /dev/null
+++ b/tools/editor/icons/source/icon_key.svg
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_key.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_key.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254836"
+ inkscape:cx="8.7548948"
+ inkscape:cy="9.2532814"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 11 4 A 4 4.0000024 0 0 0 7 8 A 4 4.0000024 0 0 0 11 12 A 4 4.0000024 0 0 0 15 8 A 4 4.0000024 0 0 0 11 4 z M 11 6 A 2.0000174 2.0000174 0 0 1 13 8 A 2.0000174 2.0000174 0 0 1 11 10 A 2.0000174 2.0000174 0 0 1 9 8 A 2.0000174 2.0000174 0 0 1 11 6 z "
+ transform="translate(0,1036.3622)"
+ id="path4137" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4141"
+ width="8"
+ height="2"
+ x="1"
+ y="1043.3622" />
+ <rect
+ y="1045.3622"
+ x="2"
+ height="2"
+ width="3"
+ id="rect4144"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_key_hover.svg b/tools/editor/icons/source/icon_key_hover.svg
new file mode 100644
index 0000000000..c3f34a781b
--- /dev/null
+++ b/tools/editor/icons/source/icon_key_hover.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="8"
+ height="8"
+ viewBox="0 0 8 8"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_dependency_changed_hl.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_key_hover.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="43.417341"
+ inkscape:cx="0.40602789"
+ inkscape:cy="4.9542089"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1044.3622)">
+ <path
+ style="opacity:1;fill:#8fdeef;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 4 0 A 4 3.9999914 0 0 0 0 4 A 4 3.9999914 0 0 0 4 8 A 4 3.9999914 0 0 0 8 4 A 4 3.9999914 0 0 0 4 0 z "
+ transform="translate(0,1044.3622)"
+ id="path4137" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_key_invalid.svg b/tools/editor/icons/source/icon_key_invalid.svg
new file mode 100644
index 0000000000..b6407dc178
--- /dev/null
+++ b/tools/editor/icons/source/icon_key_invalid.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="8"
+ height="8"
+ viewBox="0 0 8 8"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_key_invalid.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_key_invalid.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000001"
+ inkscape:cx="0.95360267"
+ inkscape:cy="5.9962147"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1044.3622)">
+ <path
+ style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 0.46446609,1046.2409 2.12132031,2.1213 -2.12132031,2.1213 1.41421361,1.4142 L 4,1049.7764 l 2.1213203,2.1213 1.4142136,-1.4142 -2.1213203,-2.1213 2.1213203,-2.1213 -1.4142136,-1.4142 L 4,1046.948 l -2.1213203,-2.1213 -1.41421361,1.4142 z"
+ id="rect4156"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_key_next.svg b/tools/editor/icons/source/icon_key_next.svg
new file mode 100644
index 0000000000..4155255434
--- /dev/null
+++ b/tools/editor/icons/source/icon_key_next.svg
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_key.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_key_next.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="3.6318496"
+ inkscape:cy="7.8283625"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 11 1 A 4 4.0000024 0 0 0 7.1308594 4 L 1 4 L 1 6 L 2 6 L 2 8 L 5 8 L 5 6 L 7.1328125 6 A 4 4.0000024 0 0 0 9 8.4589844 L 9 7 L 11 7 A 2.0000174 2.0000174 0 0 1 9 5 A 2.0000174 2.0000174 0 0 1 11 3 A 2.0000174 2.0000174 0 0 1 13 5 A 2.0000174 2.0000174 0 0 1 11 7 L 14.458984 7 A 4 4.0000024 0 0 0 15 5 A 4 4.0000024 0 0 0 11 1 z "
+ transform="translate(0,1036.3622)"
+ id="path4137" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4156"
+ width="2"
+ height="5.9999828"
+ x="11"
+ y="1045.3622" />
+ <rect
+ y="1047.3622"
+ x="9"
+ height="2.0000174"
+ width="6"
+ id="rect4158"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_key_selected.svg b/tools/editor/icons/source/icon_key_selected.svg
new file mode 100644
index 0000000000..c3f01dbec8
--- /dev/null
+++ b/tools/editor/icons/source/icon_key_selected.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="8"
+ height="8"
+ viewBox="0 0 8 8"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_dependency_changed_hl.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_key_selected.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="43.417341"
+ inkscape:cx="3.4232555"
+ inkscape:cy="4.5626603"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1044.3622)">
+ <path
+ style="opacity:1;fill:#e7e7e7;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 4 0 A 4 3.9999914 0 0 0 0 4 A 4 3.9999914 0 0 0 4 8 A 4 3.9999914 0 0 0 8 4 A 4 3.9999914 0 0 0 4 0 z "
+ transform="translate(0,1044.3622)"
+ id="path4137" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_key_value.svg b/tools/editor/icons/source/icon_key_value.svg
new file mode 100644
index 0000000000..5e6333e54b
--- /dev/null
+++ b/tools/editor/icons/source/icon_key_value.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="8"
+ height="8"
+ viewBox="0 0 8 8"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_dependency_changed_hl.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_key_value.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="43.417341"
+ inkscape:cx="3.2850619"
+ inkscape:cy="5.046338"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1044.3622)">
+ <path
+ style="opacity:1;fill:#3da9bf;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 4 0 A 4 3.9999914 0 0 0 0 4 A 4 3.9999914 0 0 0 4 8 A 4 3.9999914 0 0 0 8 4 A 4 3.9999914 0 0 0 4 0 z "
+ transform="translate(0,1044.3622)"
+ id="path4137" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_key_xform.svg b/tools/editor/icons/source/icon_key_xform.svg
new file mode 100644
index 0000000000..06a282f705
--- /dev/null
+++ b/tools/editor/icons/source/icon_key_xform.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="8"
+ height="8"
+ viewBox="0 0 8 8"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_dependency_changed_hl.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_key_xform.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="43.417341"
+ inkscape:cx="3.2850619"
+ inkscape:cy="5.046338"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1044.3622)">
+ <path
+ style="opacity:1;fill:#bf523c;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 4 0 A 4 3.9999914 0 0 0 0 4 A 4 3.9999914 0 0 0 4 8 A 4 3.9999914 0 0 0 8 4 A 4 3.9999914 0 0 0 4 0 z "
+ transform="translate(0,1044.3622)"
+ id="path4137" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_keyboard.svg b/tools/editor/icons/source/icon_keyboard.svg
new file mode 100644
index 0000000000..a03798e4a4
--- /dev/null
+++ b/tools/editor/icons/source/icon_keyboard.svg
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_key.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_keyboard.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254835"
+ inkscape:cx="8.7357101"
+ inkscape:cy="7.1330996"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 1 4 L 1 13 A 2 2 0 0 0 3 15 L 13 15 A 2 2 0 0 0 15 13 L 15 4 L 14 4 L 14 13 A 0.9999826 0.9999826 0 0 1 13 14 L 3 14 A 1 1 0 0 1 2 13 L 2 4 L 1 4 z "
+ transform="translate(0,1036.3622)"
+ id="rect4155" />
+ <rect
+ style="opacity:1;fill:#ffffff;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4194"
+ width="7"
+ height="14"
+ x="27"
+ y="1038.3622" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 4 2 A 1 1 0 0 0 3 3 L 3 12.083984 A 1 0.91666667 0 0 0 4 13 L 12 13 A 1 0.91666667 0 0 0 13 12.083984 L 13 3 A 1 1 0 0 0 12 2 L 4 2 z M 5 4 L 7 4 L 7 7 L 9 4 L 11 4 L 9 7 L 11 11 L 9 11 L 7 7 L 7 11 L 5 11 L 5 4 z "
+ transform="translate(0,1036.3622)"
+ id="rect4163" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_kinematic_body.svg b/tools/editor/icons/source/icon_kinematic_body.svg
new file mode 100644
index 0000000000..6a4c8965ab
--- /dev/null
+++ b/tools/editor/icons/source/icon_kinematic_body.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_sprite_3d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_kinematic_body.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="8.6970468"
+ inkscape:cy="8.9585231"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 4 4 L 4 5 L 5 5 L 5 4 L 4 4 z M 5 5 L 5 6 L 4 6 L 4 7 L 3 7 L 3 8 L 2 8 L 2 9 L 2 11 L 3 11 L 3 9 L 4 9 L 4 10 L 4 11 L 5 11 L 5 10 L 10 10 L 10 11 L 11 11 L 11 9 L 12 9 L 12 11 L 13 11 L 13 9 L 13 8 L 12 8 L 12 7 L 11 7 L 11 6 L 10 6 L 10 5 L 9 5 L 9 6 L 6 6 L 6 5 L 5 5 z M 10 5 L 11 5 L 11 4 L 10 4 L 10 5 z M 10 11 L 8 11 L 8 12 L 10 12 L 10 11 z M 5 11 L 5 12 L 7 12 L 7 11 L 5 11 z M 5 7 L 6 7 L 6 8 L 5 8 L 5 7 z M 9 7 L 10 7 L 10 8 L 9 8 L 9 7 z "
+ transform="translate(0,1036.3622)"
+ id="rect4154" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_kinematic_body_2d.svg b/tools/editor/icons/source/icon_kinematic_body_2d.svg
new file mode 100644
index 0000000000..04f140b930
--- /dev/null
+++ b/tools/editor/icons/source/icon_kinematic_body_2d.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_sprite_3d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_kinematic_body_2d.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="8.6970468"
+ inkscape:cy="8.9585231"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5b7f5;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 4 4 L 4 5 L 5 5 L 5 4 L 4 4 z M 5 5 L 5 6 L 4 6 L 4 7 L 3 7 L 3 8 L 2 8 L 2 9 L 2 11 L 3 11 L 3 9 L 4 9 L 4 10 L 4 11 L 5 11 L 5 10 L 10 10 L 10 11 L 11 11 L 11 9 L 12 9 L 12 11 L 13 11 L 13 9 L 13 8 L 12 8 L 12 7 L 11 7 L 11 6 L 10 6 L 10 5 L 9 5 L 9 6 L 6 6 L 6 5 L 5 5 z M 10 5 L 11 5 L 11 4 L 10 4 L 10 5 z M 10 11 L 8 11 L 8 12 L 10 12 L 10 11 z M 5 11 L 5 12 L 7 12 L 7 11 L 5 11 z M 5 7 L 6 7 L 6 8 L 5 8 L 5 7 z M 9 7 L 10 7 L 10 8 L 9 8 L 9 7 z "
+ transform="translate(0,1036.3622)"
+ id="rect4154" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_label.svg b/tools/editor/icons/source/icon_label.svg
new file mode 100644
index 0000000000..ac9b52be6f
--- /dev/null
+++ b/tools/editor/icons/source/icon_label.svg
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_label.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="5.6511357"
+ inkscape:cy="8.5870222"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#a5efac;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="M 6 3 A 1.0001 1.0001 0 0 0 5.2929688 3.2929688 L 1.2929688 7.2929688 A 1.0001 1.0001 0 0 0 1.2929688 8.7070312 L 5.2929688 12.707031 A 1.0001 1.0001 0 0 0 6 13 L 14 13 A 1.0001 1.0001 0 0 0 15 12 L 15 4 A 1.0001 1.0001 0 0 0 14 3 L 6 3 z M 5 7 A 1 1 0 0 1 6 8 A 1 1 0 0 1 5 9 A 1 1 0 0 1 4 8 A 1 1 0 0 1 5 7 z "
+ transform="translate(0,1036.3622)"
+ id="path4164" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_light_2d.svg b/tools/editor/icons/source/icon_light_2d.svg
new file mode 100644
index 0000000000..27e07a649a
--- /dev/null
+++ b/tools/editor/icons/source/icon_light_2d.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_light_2d.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="9.9569833"
+ inkscape:cy="9.5332545"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5b7f5;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 1 A 5 5 0 0 0 3 6 A 5 5 0 0 0 6 10.576172 L 6 13 L 10 13 L 10 10.580078 A 5 5 0 0 0 13 6 A 5 5 0 0 0 8 1 z M 8 3 A 3 3 0 0 1 11 6 A 3 3 0 0 1 8 9 A 3 3 0 0 1 5 6 A 3 3 0 0 1 8 3 z M 7 14 L 7 15 L 9 15 L 9 14 L 7 14 z "
+ transform="translate(0,1036.3622)"
+ id="path4155" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_light_occluder_2d.svg b/tools/editor/icons/source/icon_light_occluder_2d.svg
new file mode 100644
index 0000000000..3558f3f2da
--- /dev/null
+++ b/tools/editor/icons/source/icon_light_occluder_2d.svg
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_light_occluder_2d.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999999"
+ inkscape:cx="6.2930917"
+ inkscape:cy="8.3953902"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#a5b7f6;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4187"
+ width="14"
+ height="2"
+ x="1"
+ y="1039.3622" />
+ <rect
+ y="1042.3622"
+ x="1"
+ height="2"
+ width="14"
+ id="rect4189"
+ style="opacity:1;fill:#a5b7f6;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#a5b7f6;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4191"
+ width="14"
+ height="2"
+ x="1"
+ y="1045.3622" />
+ <rect
+ y="1048.3622"
+ x="1"
+ height="2"
+ width="14"
+ id="rect4193"
+ style="opacity:1;fill:#a5b7f6;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#a5b7f6;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4195"
+ width="1"
+ height="14"
+ x="2"
+ y="1037.3622" />
+ <rect
+ y="1037.3622"
+ x="13"
+ height="14"
+ width="1"
+ id="rect4197"
+ style="opacity:1;fill:#a5b7f6;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="1037.3622"
+ x="1"
+ height="0.9999826"
+ width="14"
+ id="rect4199"
+ style="opacity:1;fill:#a5b7f6;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_line_edit.svg b/tools/editor/icons/source/icon_line_edit.svg
new file mode 100644
index 0000000000..61ba1ebe7e
--- /dev/null
+++ b/tools/editor/icons/source/icon_line_edit.svg
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_line_edit.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="4.4635244"
+ inkscape:cy="8.6660933"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3,3 C 1.8954305,3 1,3.8954305 1,5 l 0,6 c 0,1.104569 0.8954305,2 2,2 l 10,0 c 1.104569,0 2,-0.895431 2,-2 L 15,5 C 15,3.8954305 14.104569,3 13,3 Z m 0,2 10,0 0,6 -10,0 z"
+ transform="translate(0,1036.3622)"
+ id="rect4140"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sssssssssccccc" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4167"
+ width="1"
+ height="4.0000172"
+ x="4"
+ y="1042.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_link_button.svg b/tools/editor/icons/source/icon_link_button.svg
new file mode 100644
index 0000000000..3872e43b29
--- /dev/null
+++ b/tools/editor/icons/source/icon_link_button.svg
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_link_button.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16"
+ inkscape:cx="5.7987745"
+ inkscape:cy="9.6365238"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 6 7 A 0.9999826 0.9999826 0 0 0 5 8 A 0.9999826 0.9999826 0 0 0 6 9 L 10 9 A 0.9999826 0.9999826 0 0 0 11 8 A 0.9999826 0.9999826 0 0 0 10 7 L 6 7 z "
+ transform="translate(0,1036.3622)"
+ id="rect4244" />
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 6 3 A 5 5 0 0 0 1.6699219 5.5 A 5 5 0 0 0 1.6699219 10.5 A 5 5 0 0 0 6 13 L 7 13 L 7 11 L 6 11 A 3 3 0 0 1 3 8 A 3 3 0 0 1 6 5 L 7 5 L 7 3 L 6 3 z M 9 3 L 9 5 L 10 5 A 3 3 0 0 1 13 8 A 3 3 0 0 1 10 11 L 9 11 L 9 13 L 10 13 A 5 5 0 0 0 14.330078 10.5 A 5 5 0 0 0 14.330078 5.5 A 5 5 0 0 0 10 3 L 9 3 z "
+ transform="translate(0,1036.3622)"
+ id="path4225" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_list_select.svg b/tools/editor/icons/source/icon_list_select.svg
new file mode 100644
index 0000000000..569a0c6fea
--- /dev/null
+++ b/tools/editor/icons/source/icon_list_select.svg
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_list_select.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_list_select.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="27.124914"
+ inkscape:cx="6.2157972"
+ inkscape:cy="6.8765984"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <g
+ transform="matrix(0.63636994,0,0,0.63636994,11.81847,382.85245)"
+ inkscape:label="Layer 1"
+ id="g4515"
+ style="stroke:#ffffff;stroke-width:6.28565216;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 1 1 L 1 15 L 9.2578125 15 L 8.4355469 13 L 3 13 L 3 11 L 7.6113281 11 L 6.7890625 9 L 3 9 L 3 7 L 6.8867188 7 A 1.50015 1.50015 0 0 1 7.984375 6.5019531 L 7.984375 6.5 A 1.50015 1.50015 0 0 1 8.5703125 6.6113281 L 9.515625 7 L 10 7 L 10 7.1992188 L 12 8.0214844 L 12 1 L 1 1 z M 3 3 L 10 3 L 10 5 L 3 5 L 3 3 z M 10.755859 10.755859 L 11.279297 12.029297 A 1.50015 1.50015 0 0 1 11.759766 11.759766 A 1.50015 1.50015 0 0 1 12 11.320312 L 12 11.269531 L 10.755859 10.755859 z "
+ transform="translate(0,1036.3622)"
+ id="rect4138" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 16,1047.6532 -8,-3.291 3.290998,8 0.947104,-2.8201 1.8836,1.8835 0.941801,-0.9418 -1.8836,-1.8835 z"
+ id="rect4163"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_lock.svg b/tools/editor/icons/source/icon_lock.svg
new file mode 100644
index 0000000000..140b073e83
--- /dev/null
+++ b/tools/editor/icons/source/icon_lock.svg
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_lock.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_lock.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="7.4297739"
+ inkscape:cy="8.7439404"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="false"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-others="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <g
+ transform="matrix(0.63636994,0,0,0.63636994,11.81847,382.85245)"
+ inkscape:label="Layer 1"
+ id="g4515"
+ style="stroke:#ffffff;stroke-width:6.28565216;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 2 8 L 2 15 L 14 15 L 14 8 L 2 8 z M 7 10 L 9 10 L 9 13 L 7 13 L 7 10 z "
+ transform="translate(0,1036.3622)"
+ id="rect4139" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 1 A 5 5 0 0 0 3 6 L 5 6 A 3 3 0 0 1 8 3 A 3 3 0 0 1 11 6 L 13 6 A 5 5 0 0 0 8 1 z "
+ transform="translate(0,1036.3622)"
+ id="path4141" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4145"
+ width="2"
+ height="2"
+ x="3"
+ y="1042.3622" />
+ <rect
+ y="1042.3622"
+ x="11"
+ height="2"
+ width="2"
+ id="rect4147"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_loop.svg b/tools/editor/icons/source/icon_loop.svg
new file mode 100644
index 0000000000..fe7f648648
--- /dev/null
+++ b/tools/editor/icons/source/icon_loop.svg
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_loop.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_loop.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="4.2604173"
+ inkscape:cy="8.1780194"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <g
+ id="layer1-8"
+ inkscape:label="Layer 1"
+ transform="matrix(0,-1,1,0,-1021.3622,1033.3622)" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 1 L 8 3 L 6 3 A 5 5 0 0 0 1 8 A 5 5 0 0 0 2.0039062 10.996094 L 3.4394531 9.5605469 A 3.0000174 3.0000174 0 0 1 3 8 A 3.0000174 3.0000174 0 0 1 6 5 L 8 5 L 8 7 L 10 5.5 L 12 4 L 10 2.5 L 8 1 z M 13.996094 5.0039062 L 12.560547 6.4394531 A 3.0000174 3.0000174 0 0 1 13 8 A 3.0000174 3.0000174 0 0 1 10 11 L 8 11 L 8 9 L 6 10.5 L 4 12 L 6 13.5 L 8 15 L 8 13 L 10 13 A 5 5 0 0 0 15 8 A 5 5 0 0 0 13.996094 5.0039062 z "
+ transform="translate(0,1036.3622)"
+ id="path4137" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_main_play.svg b/tools/editor/icons/source/icon_main_play.svg
new file mode 100644
index 0000000000..0fb48bb155
--- /dev/null
+++ b/tools/editor/icons/source/icon_main_play.svg
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_packed_scene.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_main_play.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="15.834447"
+ inkscape:cy="8.0362747"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:#f0f0f0;fill-rule:evenodd;stroke:#f0f0f0;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;fill-opacity:1"
+ d="m 4,1048.3622 0,-8 7,4 z"
+ id="path4155"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_main_stop.svg b/tools/editor/icons/source/icon_main_stop.svg
new file mode 100644
index 0000000000..9d01bd5cf5
--- /dev/null
+++ b/tools/editor/icons/source/icon_main_stop.svg
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_packed_scene.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_main_stop.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="8.8738646"
+ inkscape:cy="9.1632261"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:#f0f0f0;fill-opacity:1;fill-rule:evenodd;stroke:#f0f0f0;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 4,1048.3622 0,-8 8,0 0,8 z"
+ id="path4155"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_margin_container.svg b/tools/editor/icons/source/icon_margin_container.svg
new file mode 100644
index 0000000000..68a6971bd7
--- /dev/null
+++ b/tools/editor/icons/source/icon_margin_container.svg
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_margin_container.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="6.7167766"
+ inkscape:cy="8.4381827"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3,1 C 1.8954305,1 1,1.8954305 1,3 l 0,10 c 0,1.104569 0.8954305,2 2,2 l 10,0 c 1.104569,0 2,-0.895431 2,-2 L 15,3 C 15,1.8954305 14.104569,1 13,1 Z m 0,2 10,0 0,10 -10,0 z"
+ transform="translate(0,1036.3622)"
+ id="rect4140"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sssssssssccccc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path4161"
+ d="m 4,1042.3622 0,4 2,-2 z"
+ style="fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_material_preview_cube.svg b/tools/editor/icons/source/icon_material_preview_cube.svg
new file mode 100644
index 0000000000..2e8e5a6457
--- /dev/null
+++ b/tools/editor/icons/source/icon_material_preview_cube.svg
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="icon_preview_cube.svg"
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_box_shape.png"
+ inkscape:version="0.91 r13725"
+ version="1.1"
+ id="svg2"
+ viewBox="0 0 16 16"
+ height="16"
+ width="16">
+ <sodipodi:namedview
+ inkscape:snap-smooth-nodes="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-paths="false"
+ inkscape:window-maximized="1"
+ inkscape:window-y="27"
+ inkscape:window-x="0"
+ inkscape:window-height="1016"
+ inkscape:window-width="1920"
+ inkscape:snap-center="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:bbox-nodes="true"
+ inkscape:bbox-paths="true"
+ inkscape:snap-bbox="true"
+ units="px"
+ showgrid="true"
+ inkscape:current-layer="layer1"
+ inkscape:document-units="px"
+ inkscape:cy="10.554008"
+ inkscape:cx="9.2398162"
+ inkscape:zoom="31.999999"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base">
+ <inkscape:grid
+ id="grid3336"
+ type="xygrid"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <defs
+ id="defs4" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(0,-1036.3622)"
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <path
+ style="fill:#d5d5d5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 8 1 L 1 4 L 1 12 L 8 15 L 15 12 L 15 4 L 8 1 z "
+ transform="translate(0,1036.3622)"
+ id="path4151" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 1,1040.3622 7,3 7,-3 -7,-3 z"
+ id="path4149"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#f0f0f0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 8,1051.3622 -7,-3 0,-8 7,3 z"
+ id="path4143"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4145"
+ d="m 8,1051.3622 7,-3 0,-8 -7,3 z"
+ style="fill:#d5d5d5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_material_preview_cube_off.svg b/tools/editor/icons/source/icon_material_preview_cube_off.svg
new file mode 100644
index 0000000000..e03905ed05
--- /dev/null
+++ b/tools/editor/icons/source/icon_material_preview_cube_off.svg
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="icon_preview_cube_off.svg"
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_box_shape.png"
+ inkscape:version="0.91 r13725"
+ version="1.1"
+ id="svg2"
+ viewBox="0 0 16 16"
+ height="16"
+ width="16">
+ <sodipodi:namedview
+ inkscape:snap-smooth-nodes="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-paths="false"
+ inkscape:window-maximized="1"
+ inkscape:window-y="27"
+ inkscape:window-x="0"
+ inkscape:window-height="1016"
+ inkscape:window-width="1920"
+ inkscape:snap-center="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:bbox-nodes="true"
+ inkscape:bbox-paths="true"
+ inkscape:snap-bbox="true"
+ units="px"
+ showgrid="true"
+ inkscape:current-layer="layer1"
+ inkscape:document-units="px"
+ inkscape:cy="9.0822476"
+ inkscape:cx="11.618357"
+ inkscape:zoom="31.999999"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base">
+ <inkscape:grid
+ id="grid3336"
+ type="xygrid"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <defs
+ id="defs4" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(0,-1036.3622)"
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <path
+ style="fill:#d5d5d5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 8 1 L 1 4 L 1 12 L 8 15 L 15 12 L 15 4 L 8 1 z "
+ transform="translate(0,1036.3622)"
+ id="path4151" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 1,1040.3622 7,3 7,-3 -7,-3 z"
+ id="path4149"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#f0f0f0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 8,1051.3622 -7,-3 0,-8 7,3 z"
+ id="path4143"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4145"
+ d="m 8,1051.3622 7,-3 0,-8 -7,3 z"
+ style="fill:#d5d5d5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ id="path4191"
+ d="m 8,1037.3622 -7,3 0,8 7,3 7,-3 0,-8 -7,-3 z"
+ style="fill:#000000;fill-opacity:0.23529412;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_material_preview_light_1.svg b/tools/editor/icons/source/icon_material_preview_light_1.svg
new file mode 100644
index 0000000000..d8335641f6
--- /dev/null
+++ b/tools/editor/icons/source/icon_material_preview_light_1.svg
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="icon_material_preview_light_1.svg"
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_box_shape.png"
+ inkscape:version="0.91 r13725"
+ version="1.1"
+ id="svg2"
+ viewBox="0 0 16 16"
+ height="16"
+ width="16">
+ <sodipodi:namedview
+ inkscape:snap-smooth-nodes="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-paths="false"
+ inkscape:window-maximized="1"
+ inkscape:window-y="27"
+ inkscape:window-x="0"
+ inkscape:window-height="1016"
+ inkscape:window-width="1920"
+ inkscape:snap-center="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:bbox-nodes="true"
+ inkscape:bbox-paths="true"
+ inkscape:snap-bbox="true"
+ units="px"
+ showgrid="true"
+ inkscape:current-layer="layer1"
+ inkscape:document-units="px"
+ inkscape:cy="7.8395758"
+ inkscape:cx="9.8577371"
+ inkscape:zoom="22.627416"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base">
+ <inkscape:grid
+ id="grid3336"
+ type="xygrid"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <defs
+ id="defs4" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(0,-1036.3622)"
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <path
+ style="opacity:1;fill:#f0f0f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 7 1 L 7 3 L 9 3 L 9 1 L 7 1 z M 3.7578125 2.34375 L 2.34375 3.7578125 L 3.7578125 5.171875 L 5.171875 3.7578125 L 3.7578125 2.34375 z M 12.242188 2.34375 L 10.828125 3.7578125 L 12.242188 5.171875 L 13.65625 3.7578125 L 12.242188 2.34375 z M 8 4 A 4 4 0 0 0 4 8 A 4 4 0 0 0 8 12 A 4 4 0 0 0 12 8 A 4 4 0 0 0 8 4 z M 7 5 L 9 5 L 9 6 L 9 11 L 8 11 L 8 6 L 7 6 L 7 5 z M 1 7 L 1 9 L 3 9 L 3 7 L 1 7 z M 13 7 L 13 9 L 15 9 L 15 7 L 13 7 z M 3.7578125 10.828125 L 2.34375 12.242188 L 3.7578125 13.65625 L 5.171875 12.242188 L 3.7578125 10.828125 z M 12.242188 10.828125 L 10.828125 12.242188 L 12.242188 13.65625 L 13.65625 12.242188 L 12.242188 10.828125 z M 7 13 L 7 15 L 9 15 L 9 13 L 7 13 z "
+ transform="translate(0,1036.3622)"
+ id="path4157" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_material_preview_light_1_off.svg b/tools/editor/icons/source/icon_material_preview_light_1_off.svg
new file mode 100644
index 0000000000..c387b1845b
--- /dev/null
+++ b/tools/editor/icons/source/icon_material_preview_light_1_off.svg
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="icon_material_preview_light_1_off.svg"
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_box_shape.png"
+ inkscape:version="0.91 r13725"
+ version="1.1"
+ id="svg2"
+ viewBox="0 0 16 16"
+ height="16"
+ width="16">
+ <sodipodi:namedview
+ inkscape:snap-smooth-nodes="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-paths="false"
+ inkscape:window-maximized="1"
+ inkscape:window-y="27"
+ inkscape:window-x="0"
+ inkscape:window-height="1016"
+ inkscape:window-width="1920"
+ inkscape:snap-center="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:bbox-nodes="true"
+ inkscape:bbox-paths="true"
+ inkscape:snap-bbox="true"
+ units="px"
+ showgrid="true"
+ inkscape:current-layer="layer1"
+ inkscape:document-units="px"
+ inkscape:cy="7.8395758"
+ inkscape:cx="9.8577371"
+ inkscape:zoom="22.627416"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base">
+ <inkscape:grid
+ id="grid3336"
+ type="xygrid"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <defs
+ id="defs4" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(0,-1036.3622)"
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <path
+ style="opacity:1;fill:#000000;fill-opacity:0.23529412;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 7 1 L 7 3 L 9 3 L 9 1 L 7 1 z M 3.7578125 2.34375 L 2.34375 3.7578125 L 3.7578125 5.171875 L 5.171875 3.7578125 L 3.7578125 2.34375 z M 12.242188 2.34375 L 10.828125 3.7578125 L 12.242188 5.171875 L 13.65625 3.7578125 L 12.242188 2.34375 z M 8 4 A 4 4 0 0 0 4 8 A 4 4 0 0 0 8 12 A 4 4 0 0 0 12 8 A 4 4 0 0 0 8 4 z M 7 5 L 9 5 L 9 6 L 9 11 L 8 11 L 8 6 L 7 6 L 7 5 z M 1 7 L 1 9 L 3 9 L 3 7 L 1 7 z M 13 7 L 13 9 L 15 9 L 15 7 L 13 7 z M 3.7578125 10.828125 L 2.34375 12.242188 L 3.7578125 13.65625 L 5.171875 12.242188 L 3.7578125 10.828125 z M 12.242188 10.828125 L 10.828125 12.242188 L 12.242188 13.65625 L 13.65625 12.242188 L 12.242188 10.828125 z M 7 13 L 7 15 L 9 15 L 9 13 L 7 13 z "
+ transform="translate(0,1036.3622)"
+ id="path4157" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_material_preview_light_2.svg b/tools/editor/icons/source/icon_material_preview_light_2.svg
new file mode 100644
index 0000000000..f192c19959
--- /dev/null
+++ b/tools/editor/icons/source/icon_material_preview_light_2.svg
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="icon_material_preview_light_2.svg"
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_box_shape.png"
+ inkscape:version="0.91 r13725"
+ version="1.1"
+ id="svg2"
+ viewBox="0 0 16 16"
+ height="16"
+ width="16">
+ <sodipodi:namedview
+ inkscape:snap-smooth-nodes="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-paths="false"
+ inkscape:window-maximized="1"
+ inkscape:window-y="27"
+ inkscape:window-x="0"
+ inkscape:window-height="1016"
+ inkscape:window-width="1920"
+ inkscape:snap-center="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:bbox-nodes="true"
+ inkscape:bbox-paths="true"
+ inkscape:snap-bbox="true"
+ units="px"
+ showgrid="true"
+ inkscape:current-layer="layer1"
+ inkscape:document-units="px"
+ inkscape:cy="7.4131842"
+ inkscape:cx="7.6431783"
+ inkscape:zoom="45.254832"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base">
+ <inkscape:grid
+ id="grid3336"
+ type="xygrid"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <defs
+ id="defs4" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(0,-1036.3622)"
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <path
+ style="opacity:1;fill:#f0f0f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 7 1 L 7 3 L 9 3 L 9 1 L 7 1 z M 3.7578125 2.34375 L 2.34375 3.7578125 L 3.7578125 5.171875 L 5.171875 3.7578125 L 3.7578125 2.34375 z M 12.242188 2.34375 L 10.828125 3.7578125 L 12.242188 5.171875 L 13.65625 3.7578125 L 12.242188 2.34375 z M 8 4 A 4 4 0 0 0 4 8 A 4 4 0 0 0 8 12 A 4 4 0 0 0 12 8 A 4 4 0 0 0 8 4 z M 7 5 L 9 5 L 9 7 L 9 8 L 7 8 L 7 9 L 9 9 L 9 10 L 7 10 L 6 10 L 6 8 L 6 7 L 8 7 L 8 6 L 7 6 L 7 5 z M 1 7 L 1 9 L 3 9 L 3 7 L 1 7 z M 13 7 L 13 9 L 15 9 L 15 7 L 13 7 z M 3.7578125 10.828125 L 2.34375 12.242188 L 3.7578125 13.65625 L 5.171875 12.242188 L 3.7578125 10.828125 z M 12.242188 10.828125 L 10.828125 12.242188 L 12.242188 13.65625 L 13.65625 12.242188 L 12.242188 10.828125 z M 7 13 L 7 15 L 9 15 L 9 13 L 7 13 z "
+ transform="translate(0,1036.3622)"
+ id="path4157" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_material_preview_light_2_off.svg b/tools/editor/icons/source/icon_material_preview_light_2_off.svg
new file mode 100644
index 0000000000..9d71248cba
--- /dev/null
+++ b/tools/editor/icons/source/icon_material_preview_light_2_off.svg
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="icon_material_preview_light_2_off.svg"
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_box_shape.png"
+ inkscape:version="0.91 r13725"
+ version="1.1"
+ id="svg2"
+ viewBox="0 0 16 16"
+ height="16"
+ width="16">
+ <sodipodi:namedview
+ inkscape:snap-smooth-nodes="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-paths="false"
+ inkscape:window-maximized="1"
+ inkscape:window-y="27"
+ inkscape:window-x="0"
+ inkscape:window-height="1016"
+ inkscape:window-width="1920"
+ inkscape:snap-center="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:bbox-nodes="true"
+ inkscape:bbox-paths="true"
+ inkscape:snap-bbox="true"
+ units="px"
+ showgrid="true"
+ inkscape:current-layer="layer1"
+ inkscape:document-units="px"
+ inkscape:cy="7.4131842"
+ inkscape:cx="7.6431783"
+ inkscape:zoom="45.254832"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base">
+ <inkscape:grid
+ id="grid3336"
+ type="xygrid"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <defs
+ id="defs4" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(0,-1036.3622)"
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <path
+ style="opacity:1;fill:#f0f0f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 7 1 L 7 3 L 9 3 L 9 1 L 7 1 z M 3.7578125 2.34375 L 2.34375 3.7578125 L 3.7578125 5.171875 L 5.171875 3.7578125 L 3.7578125 2.34375 z M 12.242188 2.34375 L 10.828125 3.7578125 L 12.242188 5.171875 L 13.65625 3.7578125 L 12.242188 2.34375 z M 8 4 A 4 4 0 0 0 4 8 A 4 4 0 0 0 8 12 A 4 4 0 0 0 12 8 A 4 4 0 0 0 8 4 z M 7 5 L 9 5 L 9 7 L 9 8 L 7 8 L 7 9 L 9 9 L 9 10 L 7 10 L 6 10 L 6 8 L 6 7 L 8 7 L 8 6 L 7 6 L 7 5 z M 1 7 L 1 9 L 3 9 L 3 7 L 1 7 z M 13 7 L 13 9 L 15 9 L 15 7 L 13 7 z M 3.7578125 10.828125 L 2.34375 12.242188 L 3.7578125 13.65625 L 5.171875 12.242188 L 3.7578125 10.828125 z M 12.242188 10.828125 L 10.828125 12.242188 L 12.242188 13.65625 L 13.65625 12.242188 L 12.242188 10.828125 z M 7 13 L 7 15 L 9 15 L 9 13 L 7 13 z "
+ transform="translate(0,1036.3622)"
+ id="path4157" />
+ <path
+ id="path4176"
+ transform="translate(0,1036.3622)"
+ d="M 7 1 L 7 3 L 9 3 L 9 1 L 7 1 z M 3.7578125 2.34375 L 2.34375 3.7578125 L 3.7578125 5.171875 L 5.171875 3.7578125 L 3.7578125 2.34375 z M 12.242188 2.34375 L 10.828125 3.7578125 L 12.242188 5.171875 L 13.65625 3.7578125 L 12.242188 2.34375 z M 8 4 A 4 4 0 0 0 4 8 A 4 4 0 0 0 8 12 A 4 4 0 0 0 12 8 A 4 4 0 0 0 8 4 z M 7 5 L 9 5 L 9 7 L 9 8 L 7 8 L 7 9 L 9 9 L 9 10 L 7 10 L 6 10 L 6 8 L 6 7 L 8 7 L 8 6 L 7 6 L 7 5 z M 1 7 L 1 9 L 3 9 L 3 7 L 1 7 z M 13 7 L 13 9 L 15 9 L 15 7 L 13 7 z M 3.7578125 10.828125 L 2.34375 12.242188 L 3.7578125 13.65625 L 5.171875 12.242188 L 3.7578125 10.828125 z M 12.242188 10.828125 L 10.828125 12.242188 L 12.242188 13.65625 L 13.65625 12.242188 L 12.242188 10.828125 z M 7 13 L 7 15 L 9 15 L 9 13 L 7 13 z "
+ style="opacity:1;fill:#000000;fill-opacity:0.23529412;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_material_preview_sphere.svg b/tools/editor/icons/source/icon_material_preview_sphere.svg
new file mode 100644
index 0000000000..76a6ec97bd
--- /dev/null
+++ b/tools/editor/icons/source/icon_material_preview_sphere.svg
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="icon_material_preview_sphere.svg"
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_box_shape.png"
+ inkscape:version="0.91 r13725"
+ version="1.1"
+ id="svg2"
+ viewBox="0 0 16 16"
+ height="16"
+ width="16">
+ <sodipodi:namedview
+ inkscape:snap-smooth-nodes="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-paths="false"
+ inkscape:window-maximized="1"
+ inkscape:window-y="27"
+ inkscape:window-x="0"
+ inkscape:window-height="1016"
+ inkscape:window-width="1920"
+ inkscape:snap-center="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:bbox-nodes="true"
+ inkscape:bbox-paths="true"
+ inkscape:snap-bbox="true"
+ units="px"
+ showgrid="true"
+ inkscape:current-layer="layer1"
+ inkscape:document-units="px"
+ inkscape:cy="7.280687"
+ inkscape:cx="4.325506"
+ inkscape:zoom="31.999999"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base">
+ <inkscape:grid
+ id="grid3336"
+ type="xygrid"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <defs
+ id="defs4" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(0,-1036.3622)"
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <path
+ style="opacity:1;fill:#f0f0f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 1 A 7 7 0 0 0 1 8 A 7 7 0 0 0 8 15 A 7 7 0 0 0 15 8 A 7 7 0 0 0 8 1 z M 6 3 A 2 2 0 0 1 8 5 A 2 2 0 0 1 6 7 A 2 2 0 0 1 4 5 A 2 2 0 0 1 6 3 z "
+ transform="translate(0,1036.3622)"
+ id="path4154" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_material_preview_sphere_off.svg b/tools/editor/icons/source/icon_material_preview_sphere_off.svg
new file mode 100644
index 0000000000..f9c8cadb34
--- /dev/null
+++ b/tools/editor/icons/source/icon_material_preview_sphere_off.svg
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="icon_material_preview_sphere_off.svg"
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_box_shape.png"
+ inkscape:version="0.91 r13725"
+ version="1.1"
+ id="svg2"
+ viewBox="0 0 16 16"
+ height="16"
+ width="16">
+ <sodipodi:namedview
+ inkscape:snap-smooth-nodes="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-paths="false"
+ inkscape:window-maximized="1"
+ inkscape:window-y="27"
+ inkscape:window-x="0"
+ inkscape:window-height="1016"
+ inkscape:window-width="1920"
+ inkscape:snap-center="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:bbox-nodes="true"
+ inkscape:bbox-paths="true"
+ inkscape:snap-bbox="true"
+ units="px"
+ showgrid="true"
+ inkscape:current-layer="layer1"
+ inkscape:document-units="px"
+ inkscape:cy="7.561937"
+ inkscape:cx="7.8880061"
+ inkscape:zoom="31.999999"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base">
+ <inkscape:grid
+ id="grid3336"
+ type="xygrid"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <defs
+ id="defs4" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(0,-1036.3622)"
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <path
+ style="opacity:1;fill:#000000;fill-opacity:0.23529412;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 1 A 7 7 0 0 0 1 8 A 7 7 0 0 0 8 15 A 7 7 0 0 0 15 8 A 7 7 0 0 0 8 1 z M 6 3 A 2 2 0 0 1 8 5 A 2 2 0 0 1 6 7 A 2 2 0 0 1 4 5 A 2 2 0 0 1 6 3 z "
+ transform="translate(0,1036.3622)"
+ id="path4154" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_matrix.svg b/tools/editor/icons/source/icon_matrix.svg
new file mode 100644
index 0000000000..eacf2cdc9d
--- /dev/null
+++ b/tools/editor/icons/source/icon_matrix.svg
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_matrix.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="6.6294931"
+ inkscape:cy="6.9144846"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <rect
+ style="opacity:1;fill:#ea686c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4154"
+ width="1"
+ height="12"
+ x="1"
+ y="1039.3622" />
+ <rect
+ y="1039.3622"
+ x="1"
+ height="1.0000174"
+ width="3"
+ id="rect4156"
+ style="opacity:1;fill:#ea686c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#ea686c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4158"
+ width="3"
+ height="1"
+ x="1"
+ y="1050.3622" />
+ <rect
+ y="1050.3622"
+ x="10"
+ height="1"
+ width="3"
+ id="rect4160"
+ style="opacity:1;fill:#ea686c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#ea686c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4162"
+ width="3"
+ height="1.0000174"
+ x="10"
+ y="1039.3622" />
+ <rect
+ y="1039.3622"
+ x="12"
+ height="12"
+ width="1"
+ id="rect4164"
+ style="opacity:1;fill:#ea686c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#ea686c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4161"
+ width="2"
+ height="2"
+ x="3"
+ y="1041.3622" />
+ <rect
+ y="1041.3622"
+ x="6"
+ height="2"
+ width="2"
+ id="rect4163"
+ style="opacity:1;fill:#ea686c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#ea686c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4165"
+ width="2"
+ height="2"
+ x="9"
+ y="1041.3622" />
+ <rect
+ y="1044.3622"
+ x="3"
+ height="2"
+ width="2"
+ id="rect4167"
+ style="opacity:1;fill:#ea686c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#ea686c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4169"
+ width="2"
+ height="2"
+ x="6"
+ y="1044.3622" />
+ <rect
+ y="1044.3622"
+ x="9"
+ height="2"
+ width="2"
+ id="rect4171"
+ style="opacity:1;fill:#ea686c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#ea686c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4173"
+ width="2"
+ height="2"
+ x="3"
+ y="1047.3622" />
+ <rect
+ y="1047.3622"
+ x="6"
+ height="2"
+ width="2"
+ id="rect4175"
+ style="opacity:1;fill:#ea686c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#ea686c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4177"
+ width="2"
+ height="2"
+ x="9"
+ y="1047.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_menu_button.svg b/tools/editor/icons/source/icon_menu_button.svg
new file mode 100644
index 0000000000..9cfbf2d502
--- /dev/null
+++ b/tools/editor/icons/source/icon_menu_button.svg
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_button.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_menu_button.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="7.4706473"
+ inkscape:cy="10.780886"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 1 1 L 1 5 L 15 5 L 15 1 L 1 1 z M 6 2 L 10 2 L 8 4 L 6 2 z "
+ transform="translate(0,1036.3622)"
+ id="rect4156" />
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 2 6 A 1 1 0 0 0 1 7 L 1 14 A 1 1 0 0 0 2 15 L 14 15 A 1 1 0 0 0 15 14 L 15 7 A 1 1 0 0 0 14 6 L 2 6 z M 3 8 L 13 8 L 13 10 L 3 10 L 3 8 z M 3 11 L 13 11 L 13 13 L 3 13 L 3 11 z "
+ transform="translate(0,1036.3622)"
+ id="rect4161" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mesh.svg b/tools/editor/icons/source/icon_mesh.svg
new file mode 100644
index 0000000000..f3c33a37b1
--- /dev/null
+++ b/tools/editor/icons/source/icon_mesh.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_mesh.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="5.2137269"
+ inkscape:cy="10.663006"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#ffd684;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3 1 A 2 2 0 0 0 1 3 A 2 2 0 0 0 2 4.7304688 L 2 11.271484 A 2 2 0 0 0 1 13 A 2 2 0 0 0 3 15 A 2 2 0 0 0 4.7304688 14 L 11.271484 14 A 2 2 0 0 0 13 15 A 2 2 0 0 0 15 13 A 2 2 0 0 0 13.96875 11.25 L 14 11.25 L 14 4.7285156 A 2 2 0 0 0 15 3 A 2 2 0 0 0 13 1 A 2 2 0 0 0 11.269531 2 L 4.7285156 2 A 2 2 0 0 0 3 1 z M 5.4140625 4 L 11.271484 4 A 2 2 0 0 0 12 4.7304688 L 12 10.585938 L 5.4140625 4 z M 4 5.4140625 L 10.585938 12 L 4.7285156 12 A 2 2 0 0 0 4 11.269531 L 4 5.4140625 z "
+ transform="translate(0,1036.3622)"
+ id="path4162" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mesh_instance.svg b/tools/editor/icons/source/icon_mesh_instance.svg
new file mode 100644
index 0000000000..51e6447eb2
--- /dev/null
+++ b/tools/editor/icons/source/icon_mesh_instance.svg
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_mesh_instance.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="8.6608726"
+ inkscape:cy="8.8510443"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <circle
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4162"
+ cx="3"
+ cy="1049.3622"
+ r="2" />
+ <rect
+ y="1039.3622"
+ x="2"
+ height="8.4999828"
+ width="2"
+ id="rect4164"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <circle
+ r="2"
+ cy="1039.3622"
+ cx="3"
+ id="circle4166"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4168"
+ width="2"
+ height="8.4999828"
+ x="1038.3622"
+ y="-11.499983"
+ transform="matrix(0,1,-1,0,0,0)" />
+ <circle
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4170"
+ cx="13"
+ cy="1039.3622"
+ r="2" />
+ <rect
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4172"
+ width="2"
+ height="8.4999828"
+ x="12"
+ y="1039.1122" />
+ <circle
+ r="2"
+ cy="1049.3622"
+ cx="13"
+ id="circle4174"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ transform="matrix(0,1,-1,0,0,0)"
+ y="-12.249991"
+ x="1048.3622"
+ height="8.4999828"
+ width="2"
+ id="rect4176"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#fc9c9c;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.99607843;stroke-miterlimit:4;stroke-dasharray:none"
+ d="m 3,1039.3622 10,10"
+ id="path4178"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mirror_x.svg b/tools/editor/icons/source/icon_mirror_x.svg
new file mode 100644
index 0000000000..f24a630770
--- /dev/null
+++ b/tools/editor/icons/source/icon_mirror_x.svg
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_tool_move.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_h_size.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="7.1680801"
+ inkscape:cy="7.9718121"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 4,7 0,-2 -3,3 3,3 0,-2 8,0 0,2 3,-3 -3,-3 0,2 z"
+ transform="translate(0,1036.3622)"
+ id="rect4140"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mirror_y.svg b/tools/editor/icons/source/icon_mirror_y.svg
new file mode 100644
index 0000000000..bb913b84af
--- /dev/null
+++ b/tools/editor/icons/source/icon_mirror_y.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_tool_move.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_mirror_y.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="1.7618301"
+ inkscape:cy="7.9093121"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 7,1048.3622 -2,0 3,3 3,-3 -2,0 0,-8 2,0 -3,-3 -3,3 2,0 z"
+ id="rect4140"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mouse.svg b/tools/editor/icons/source/icon_mouse.svg
new file mode 100644
index 0000000000..731ceeefd8
--- /dev/null
+++ b/tools/editor/icons/source/icon_mouse.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_tool_rotate.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_mouse.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="8.1067779"
+ inkscape:cy="6.9900832"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 7 1.1015625 A 5 5 0 0 0 3 6 L 7 6 L 7 1.1015625 z M 9 1.1054688 L 9 6 L 13 6 A 5 5 0 0 0 9 1.1054688 z M 3 8 L 3 10 A 5 5 0 0 0 8 15 A 5 5 0 0 0 13 10 L 13 8 L 3 8 z "
+ transform="translate(0,1036.3622)"
+ id="path4155" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_move_down.svg b/tools/editor/icons/source/icon_move_down.svg
new file mode 100644
index 0000000000..e83a69ad50
--- /dev/null
+++ b/tools/editor/icons/source/icon_move_down.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_arrow_left.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_move_down.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="4.2997855"
+ inkscape:cy="8.3620593"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:#e0e0e0;fill-opacity:0.99607843;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
+ d="m 8,1051.3622 -6,-7 4,0 0,-7 4,0 0,7 4,0 -6,7 z"
+ id="path4135"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_move_point.svg b/tools/editor/icons/source/icon_move_point.svg
new file mode 100644
index 0000000000..c951d6b90a
--- /dev/null
+++ b/tools/editor/icons/source/icon_move_point.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_edit_pivot.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_move_point.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="25.84375"
+ inkscape:cx="8.9607405"
+ inkscape:cy="10.687849"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:snap-midpoints="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 1 A 7 7 0 0 0 1 8 A 7 7 0 0 0 8 15 A 7 7 0 0 0 9.2128906 14.892578 L 6.6132812 8.5722656 A 1.50015 1.50015 0 0 1 7.984375 6.5019531 L 7.984375 6.5 A 1.50015 1.50015 0 0 1 8.5703125 6.6113281 L 14.888672 9.2109375 A 7 7 0 0 0 15 8 A 7 7 0 0 0 8 1 z M 10.755859 10.755859 L 11.279297 12.029297 A 1.50015 1.50015 0 0 1 11.759766 11.759766 A 1.50015 1.50015 0 0 1 12.029297 11.28125 L 10.755859 10.755859 z "
+ transform="translate(0,1036.3622)"
+ id="path4137" />
+ <path
+ style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 3 A 5.0000172 5.0000172 0 0 0 3 8 A 5.0000172 5.0000172 0 0 0 8 13 A 5.0000172 5.0000172 0 0 0 8.4257812 12.978516 L 6.6132812 8.5722656 A 1.50015 1.50015 0 0 1 7.984375 6.5019531 L 7.984375 6.5 A 1.50015 1.50015 0 0 1 8.5703125 6.6113281 L 12.978516 8.4238281 A 5.0000172 5.0000172 0 0 0 13 8 A 5.0000172 5.0000172 0 0 0 8 3 z M 10.755859 10.755859 L 11.199219 11.835938 A 5.0000172 5.0000172 0 0 0 11.837891 11.203125 L 10.755859 10.755859 z "
+ transform="translate(0,1036.3622)"
+ id="circle4156" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 16,1047.6532 -8,-3.291 3.290998,8 0.947104,-2.8201 1.8836,1.8835 0.941801,-0.9418 -1.8836,-1.8835 z"
+ id="rect4163"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_move_up.svg b/tools/editor/icons/source/icon_move_up.svg
new file mode 100644
index 0000000000..8f671a0d72
--- /dev/null
+++ b/tools/editor/icons/source/icon_move_up.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_arrow_left.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_move_up.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="4.2997855"
+ inkscape:cy="8.3620593"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:#e0e0e0;fill-opacity:0.99607843;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
+ d="M 8 1 L 2 8 L 6 8 L 6 15 L 10 15 L 10 8 L 14 8 L 8 1 z "
+ transform="translate(0,1036.3622)"
+ id="path4135" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_multi_edit.svg b/tools/editor/icons/source/icon_multi_edit.svg
new file mode 100644
index 0000000000..ef63861e97
--- /dev/null
+++ b/tools/editor/icons/source/icon_multi_edit.svg
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_edit.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_multi_edit.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000002"
+ inkscape:cx="5.8408976"
+ inkscape:cy="8.1515472"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 1.7071068,1047.8266 1,1051.3622 l 3.5355339,-0.7071 7.7781741,-7.7782 -2.828427,-2.8284 z m 9.1923882,-9.1924 2.828427,2.8285 1.414214,-1.4142 -2.828428,-2.8285 z"
+ id="rect4135"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccc" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4154"
+ width="2"
+ height="2"
+ x="1"
+ y="1037.3622" />
+ <rect
+ y="1041.3622"
+ x="1"
+ height="2"
+ width="2"
+ id="rect4156"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4158"
+ width="2"
+ height="2"
+ x="5"
+ y="1037.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_multi_line.svg b/tools/editor/icons/source/icon_multi_line.svg
new file mode 100644
index 0000000000..542e311286
--- /dev/null
+++ b/tools/editor/icons/source/icon_multi_line.svg
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_multi_line.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000001"
+ inkscape:cx="8.0670393"
+ inkscape:cy="9.3567993"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4137"
+ width="5"
+ height="1.9999478"
+ x="10"
+ y="1037.3622" />
+ <rect
+ y="-8"
+ x="1037.3622"
+ height="7.000001"
+ width="2.0000174"
+ id="rect4158"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="matrix(0,1,-1,0,0,0)" />
+ <rect
+ y="1041.3622"
+ x="1"
+ height="1.9999478"
+ width="11"
+ id="rect4155"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4157"
+ width="4"
+ height="1.9999478"
+ x="1"
+ y="1045.3622" />
+ <rect
+ y="1045.3622"
+ x="7"
+ height="1.9999478"
+ width="8"
+ id="rect4159"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4161"
+ width="13"
+ height="1.9999478"
+ x="1"
+ y="1049.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_multi_mesh.svg b/tools/editor/icons/source/icon_multi_mesh.svg
new file mode 100644
index 0000000000..22f843a686
--- /dev/null
+++ b/tools/editor/icons/source/icon_multi_mesh.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_multi_mesh.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="19.153224"
+ inkscape:cy="8.0775961"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#ffd684;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3 1 A 2 2 0 0 0 1 3 A 2 2 0 0 0 2 4.7304688 L 2 11.271484 A 2 2 0 0 0 1 13 A 2 2 0 0 0 3 15 A 2 2 0 0 0 4.7304688 14 L 6 14 L 6 13 L 6 12 L 4.7285156 12 A 2 2 0 0 0 4 11.269531 L 4 5.4140625 L 7.5859375 9 L 9 9 L 9 8 L 9 7.5859375 L 5.4140625 4 L 11.271484 4 A 2 2 0 0 0 12 4.7265625 L 12 6 L 14 6 L 14 4.7304688 A 2 2 0 0 0 15 3 A 2 2 0 0 0 13 1 A 2 2 0 0 0 11.269531 2 L 4.7285156 2 A 2 2 0 0 0 3 1 z M 11 8 L 11 9.5859375 L 11 11 L 9.5859375 11 L 8 11 L 8 12 L 8 13 L 11 13 L 11 14 L 11 16 L 13 16 L 13 15 L 13 13 L 15 13 L 16 13 L 16 11 L 14 11 L 13 11 L 13 8 L 12 8 L 11 8 z "
+ transform="translate(0,1036.3622)"
+ id="path4162" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_multi_mesh_instance.svg b/tools/editor/icons/source/icon_multi_mesh_instance.svg
new file mode 100644
index 0000000000..deceae5a03
--- /dev/null
+++ b/tools/editor/icons/source/icon_multi_mesh_instance.svg
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_multi_mesh_instance.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254832"
+ inkscape:cx="7.9179235"
+ inkscape:cy="7.0878016"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3 1 A 2 2 0 0 0 1 3 A 2 2 0 0 0 2 4.7304688 L 2 11.271484 A 2 2 0 0 0 1 13 A 2 2 0 0 0 3 15 A 2 2 0 0 0 4.7304688 14 L 6 14 L 6 13 L 6 12 L 4.7285156 12 A 2 2 0 0 0 4 11.269531 L 4 5.4140625 L 7.5859375 9 L 9 9 L 9 8 L 9 7.5859375 L 5.4140625 4 L 11.271484 4 A 2 2 0 0 0 12 4.7265625 L 12 6 L 14 6 L 14 4.7304688 A 2 2 0 0 0 15 3 A 2 2 0 0 0 13 1 A 2 2 0 0 0 11.269531 2 L 4.7285156 2 A 2 2 0 0 0 3 1 z M 12 8 L 12 10.585938 L 11 9.5859375 L 11 11 L 9.5859375 11 L 10.585938 12 L 8 12 L 8 13 L 9 13 L 11 13 L 11 14 L 11.271484 14 A 2 2 0 0 0 13 15 L 13 13 L 15 13 A 2 2 0 0 0 13.96875 11.25 L 14 11.25 L 14 11 L 13 11 L 13 8 L 12 8 z "
+ transform="translate(0,1036.3622)"
+ id="path4162" />
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="m 11,1044.3622 0,3 -3,0 0,2 3,0 0,3 2,0 0,-3 3,0 0,-2 -3,0 0,-3 -2,0 z"
+ id="rect4199"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_navigation.svg b/tools/editor/icons/source/icon_navigation.svg
new file mode 100644
index 0000000000..42e8f59165
--- /dev/null
+++ b/tools/editor/icons/source/icon_navigation.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_navigation.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999999"
+ inkscape:cx="4.4490623"
+ inkscape:cy="7.6851407"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:#fc9c9c;fill-opacity:0.99607843;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 3,1050.3622 5,-2 5,2 -5,-12 -5,12 z"
+ id="path4155"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_navigation_2d.svg b/tools/editor/icons/source/icon_navigation_2d.svg
new file mode 100644
index 0000000000..5252541e70
--- /dev/null
+++ b/tools/editor/icons/source/icon_navigation_2d.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_navigation_2d.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999999"
+ inkscape:cx="4.4490623"
+ inkscape:cy="7.6851407"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:#a5b7f5;fill-opacity:0.98823529;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 3,1050.3622 5,-2 5,2 -5,-12 -5,12 z"
+ id="path4155"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_navigation_mesh_instance.svg b/tools/editor/icons/source/icon_navigation_mesh_instance.svg
new file mode 100644
index 0000000000..5c4e0f1579
--- /dev/null
+++ b/tools/editor/icons/source/icon_navigation_mesh_instance.svg
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_navigation_mesh_instance.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999999"
+ inkscape:cx="9.8145891"
+ inkscape:cy="8.1609197"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3 1 A 2 2 0 0 0 1 3 A 2 2 0 0 0 2 4.7304688 L 2 11.271484 A 2 2 0 0 0 1 13 A 2 2 0 0 0 3 15 A 2 2 0 0 0 4.7304688 14 L 7.2382812 14 L 7.9882812 12 L 4.7285156 12 A 2 2 0 0 0 4 11.269531 L 4 5.4140625 L 8.6972656 10.111328 L 9.46875 8.0546875 L 5.4140625 4 L 11.271484 4 A 2 2 0 0 0 12 4.7304688 L 12 5.0019531 A 2.0002 2.0002 0 0 1 12.023438 5.0019531 A 2.0002 2.0002 0 0 1 13.873047 6.2988281 L 14 6.6367188 L 14 4.7285156 A 2 2 0 0 0 15 3 A 2 2 0 0 0 13 1 A 2 2 0 0 0 11.269531 2 L 4.7285156 2 A 2 2 0 0 0 3 1 z "
+ transform="translate(0,1036.3622)"
+ id="path4162" />
+ <path
+ style="fill:#fc9c9c;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:0.99607843"
+ d="m 15,1051.3622 -3,-8 -3,8 3,-2 z"
+ id="path4156"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4177"
+ width="2"
+ height="1"
+ x="12"
+ y="1040.3622" />
+ <rect
+ y="1040.3622"
+ x="12"
+ height="1"
+ width="2"
+ id="rect4179"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_navigation_polygon_instance.svg b/tools/editor/icons/source/icon_navigation_polygon_instance.svg
new file mode 100644
index 0000000000..5153227b15
--- /dev/null
+++ b/tools/editor/icons/source/icon_navigation_polygon_instance.svg
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_navigation_polygon_instance.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="7.2564029"
+ inkscape:cy="7.9852618"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#a5b7f2;fill-opacity:0.98823529;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="M 2 1 A 1.0001 1.0001 0 0 0 1 2 L 1 14 A 1.0001 1.0001 0 0 0 2 15 L 6.9023438 15 A 2.1002099 2.1002099 0 0 1 7.0332031 14.263672 L 7.5078125 13 L 3 13 L 3 3 L 11.585938 3 L 7.2929688 7.2929688 A 1.0001 1.0001 0 0 0 7.2929688 8.7070312 L 8.6191406 10.033203 L 10.033203 6.2636719 A 2.1002099 2.1002099 0 0 1 12.025391 4.9023438 A 2.1002099 2.1002099 0 0 1 12.460938 4.953125 L 14.707031 2.7070312 A 1.0001 1.0001 0 0 0 14 1 L 2 1 z "
+ transform="translate(0,1036.3622)"
+ id="path4144" />
+ <path
+ style="fill:#a5b7f6;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:0.98823529"
+ d="m 15,1051.3622 -3,-8 -3,8 3,-2 z"
+ id="path4163"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_new.svg b/tools/editor/icons/source/icon_new.svg
new file mode 100644
index 0000000000..a37ba1be3f
--- /dev/null
+++ b/tools/editor/icons/source/icon_new.svg
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_new.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_new.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16"
+ inkscape:cx="0.22745062"
+ inkscape:cy="11.330333"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1-8"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <g
+ id="layer1-8"
+ inkscape:label="Layer 1"
+ transform="translate(0,-1.6949463e-5)">
+ <path
+ sodipodi:nodetypes="ccccccccccc"
+ inkscape:connector-curvature="0"
+ id="rect4158"
+ d="m 2,1037.3622 0,14 12,0 0,-9 -5,0 0,-5 z m 8,0 0,4 4,0 z"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_node.svg b/tools/editor/icons/source/icon_node.svg
new file mode 100644
index 0000000000..02e2774669
--- /dev/null
+++ b/tools/editor/icons/source/icon_node.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_node.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="4.1094292"
+ inkscape:cy="4.5020156"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 2 A 6 6 0 0 0 2 8 A 6 6 0 0 0 8 14 A 6 6 0 0 0 14 8 A 6 6 0 0 0 8 2 z M 8 4 A 4 4 0 0 1 12 8 A 4 4 0 0 1 8 12 A 4 4 0 0 1 4 8 A 4 4 0 0 1 8 4 z "
+ transform="translate(0,1036.3622)"
+ id="path4154" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_node_2d.svg b/tools/editor/icons/source/icon_node_2d.svg
new file mode 100644
index 0000000000..e546f68539
--- /dev/null
+++ b/tools/editor/icons/source/icon_node_2d.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_node_2d.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="4.2420117"
+ inkscape:cy="6.0488117"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5b7f3;fill-opacity:0.98823529;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 2 A 6 6 0 0 0 2 8 A 6 6 0 0 0 8 14 A 6 6 0 0 0 14 8 A 6 6 0 0 0 8 2 z M 8 4 A 4 4 0 0 1 12 8 A 4 4 0 0 1 8 12 A 4 4 0 0 1 4 8 A 4 4 0 0 1 8 4 z "
+ transform="translate(0,1036.3622)"
+ id="path4154" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_node_warning.svg b/tools/editor/icons/source/icon_node_warning.svg
new file mode 100644
index 0000000000..89d3663fb0
--- /dev/null
+++ b/tools/editor/icons/source/icon_node_warning.svg
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_new.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_node_warning.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254832"
+ inkscape:cx="6.468104"
+ inkscape:cy="5.5071727"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1-8"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <g
+ id="layer1-8"
+ inkscape:label="Layer 1"
+ transform="translate(0,-1.6949463e-5)">
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffd684;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="M 8.0292969 2.0019531 A 1.0001 1.0001 0 0 0 7.1425781 2.4863281 L 1.1425781 12.486328 A 1.0001 1.0001 0 0 0 2 14 L 14 14 A 1.0001 1.0001 0 0 0 14.857422 12.486328 L 8.8574219 2.4863281 A 1.0001 1.0001 0 0 0 8.0292969 2.0019531 z M 7 5 L 9 5 L 9 10 L 7 10 L 7 5 z M 7 11 L 9 11 L 9 13 L 7 13 L 7 11 z "
+ id="path4155"
+ transform="translate(0,1036.3622)" />
+ </g>
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_non_favorite.svg b/tools/editor/icons/source/icon_non_favorite.svg
new file mode 100644
index 0000000000..54fcb8577e
--- /dev/null
+++ b/tools/editor/icons/source/icon_non_favorite.svg
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_favorites.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_non_favorite.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="8.1165833"
+ inkscape:cy="7.8879933"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 1.7246094 L 5.625 5.8222656 L 1 6.9199219 L 4.2363281 10.326172 L 3.8769531 15 L 8.015625 13.023438 L 12.173828 14.964844 L 11.777344 10.3125 L 15 6.9199219 L 10.375 5.8222656 L 8 1.7246094 z M 8 4 L 9.6582031 6.7773438 L 12.890625 7.5214844 L 10.640625 9.8222656 L 10.916016 12.976562 L 8.0117188 11.660156 L 5.1191406 13 L 5.3710938 9.8320312 L 3.109375 7.5214844 L 6.3417969 6.7773438 L 8 4 z "
+ transform="translate(0,1036.3622)"
+ id="path4254" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_object.svg b/tools/editor/icons/source/icon_object.svg
new file mode 100644
index 0000000000..6236f75c4d
--- /dev/null
+++ b/tools/editor/icons/source/icon_object.svg
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_object.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="7.2827981"
+ inkscape:cy="6.8612677"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:snap-midpoints="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:#cacad7;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
+ d="m 8,1044.3622 6,-3 -6,-3 -6,3 z"
+ id="path4180"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#cacad7;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
+ d="m 2,1047.3622 6,3 0,-6 -6,-3 z"
+ id="path4176"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path4178"
+ d="m 14,1047.3622 -6,3 0,-6 6,-3 z"
+ style="fill:#cacad7;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#3b3a4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="M 7.9628906 1.0019531 A 1.0001 1.0001 0 0 0 7.5527344 1.1054688 L 1.5527344 4.1054688 A 1.0001 1.0001 0 0 0 1 5 L 1 11 A 1.0001 1.0001 0 0 0 1.5527344 11.894531 L 7.5527344 14.894531 A 1.0001 1.0001 0 0 0 8.4472656 14.894531 L 14.447266 11.894531 A 1.0001 1.0001 0 0 0 15 11 L 15 5 A 1.0001 1.0001 0 0 0 14.447266 4.1054688 L 8.4472656 1.1054688 A 1.0001 1.0001 0 0 0 7.9628906 1.0019531 z M 8 3.1191406 L 11.763672 5 L 8 6.8828125 L 4.2363281 5 L 8 3.1191406 z M 3 6.6171875 L 7 8.6171875 L 7 12.382812 L 3 10.382812 L 3 6.6171875 z M 13 6.6171875 L 13 10.382812 L 9 12.382812 L 9 8.6171875 L 13 6.6171875 z "
+ transform="translate(0,1036.3622)"
+ id="path4139" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_occluder_polygon_2d.svg b/tools/editor/icons/source/icon_occluder_polygon_2d.svg
new file mode 100644
index 0000000000..8ae6dc176d
--- /dev/null
+++ b/tools/editor/icons/source/icon_occluder_polygon_2d.svg
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_occluder_polygon_2d.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="15.209065"
+ inkscape:cy="9.8176368"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:#3552b1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 1,1045.3622 6,6 8,0 0,-8 -6,-6 -8,0 z"
+ id="path4156"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#a5b7f3;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:0.98823529"
+ d="m 1,1037.3622 8,0 -3,4 3,4 -8,0 z"
+ id="path4154"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_omni_light.svg b/tools/editor/icons/source/icon_omni_light.svg
new file mode 100644
index 0000000000..e1049d0039
--- /dev/null
+++ b/tools/editor/icons/source/icon_omni_light.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_omni_light.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="2.3113909"
+ inkscape:cy="9.4448661"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 1 A 5 5 0 0 0 3 6 A 5 5 0 0 0 6 10.576172 L 6 13 L 10 13 L 10 10.580078 A 5 5 0 0 0 13 6 A 5 5 0 0 0 8 1 z M 8 3 A 3 3 0 0 1 11 6 A 3 3 0 0 1 8 9 A 3 3 0 0 1 5 6 A 3 3 0 0 1 8 3 z M 7 14 L 7 15 L 9 15 L 9 14 L 7 14 z "
+ transform="translate(0,1036.3622)"
+ id="path4155" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_option_button.svg b/tools/editor/icons/source/icon_option_button.svg
new file mode 100644
index 0000000000..4537b14616
--- /dev/null
+++ b/tools/editor/icons/source/icon_option_button.svg
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_option_button.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="3.751238"
+ inkscape:cy="7.999659"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-paths="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3,3 C 1.8954305,3 1,3.8954305 1,5 l 0,6 c 0,1.104569 0.8954305,2 2,2 L 9,13 9,3 Z m 7,0 0,10 3,0 c 1.104569,0 2,-0.895431 2,-2 L 15,5 C 15,3.8954305 14.104569,3 13,3 Z m 1,4 3,0 -1.5,2 z"
+ id="rect4140"
+ transform="translate(0,1036.3622)"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ssssccsccssssccccc" />
+ <rect
+ style="opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4181"
+ width="4"
+ height="4"
+ x="4"
+ y="1042.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_packed_scene.svg b/tools/editor/icons/source/icon_packed_scene.svg
new file mode 100644
index 0000000000..910a274841
--- /dev/null
+++ b/tools/editor/icons/source/icon_packed_scene.svg
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_packed_scene.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_packed_scene.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="6.5714695"
+ inkscape:cy="9.9612352"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 1 7 L 1 13 L 3 13 L 3 15 L 15 15 L 15 7 L 1 7 z "
+ transform="translate(0,1036.3622)"
+ id="rect4136" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 0.7112932,1040.3831 1,1042.3622 l 2.2438279,-0.3273 -0.8182578,-1.9018 -1.7142769,0.25 z m 3.6933293,-0.5387 0.8182578,1.9018 1.9790524,-0.2887 -0.8182579,-1.9018 -1.9790523,0.2887 z m 3.9581047,-0.5775 0.8182579,1.9018 1.9790519,-0.2887 -0.818257,-1.9018 -1.9790528,0.2887 z m 3.9581048,-0.5774 0.818258,1.9018 1.714277,-0.25 -0.288707,-1.9791 -2.243828,0.3273 z"
+ id="rect4138"
+ inkscape:connector-curvature="0"
+ inkscape:transform-center-x="-6.7823301"
+ inkscape:transform-center-y="-2" />
+ <circle
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4150"
+ cx="3"
+ cy="1049.3622"
+ r="2" />
+ <circle
+ r="2"
+ cy="1049.3622"
+ cx="13"
+ id="circle4152"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_panel.svg b/tools/editor/icons/source/icon_panel.svg
new file mode 100644
index 0000000000..28921c4031
--- /dev/null
+++ b/tools/editor/icons/source/icon_panel.svg
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_panel.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="6.4355266"
+ inkscape:cy="6.9694327"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3,1 C 1.8954305,1 1,1.8954305 1,3 l 0,10 c 0,1.104569 0.8954305,2 2,2 l 10,0 c 1.104569,0 2,-0.895431 2,-2 L 15,3 C 15,1.8954305 14.104569,1 13,1 Z"
+ transform="translate(0,1036.3622)"
+ id="rect4140"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sssssssss" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_panel_container.svg b/tools/editor/icons/source/icon_panel_container.svg
new file mode 100644
index 0000000000..decf220705
--- /dev/null
+++ b/tools/editor/icons/source/icon_panel_container.svg
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_panel_container.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="1.3105266"
+ inkscape:cy="8.3756827"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3,1 C 1.8954305,1 1,1.8954305 1,3 l 0,10 c 0,1.104569 0.8954305,2 2,2 l 10,0 c 1.104569,0 2,-0.895431 2,-2 L 15,3 C 15,1.8954305 14.104569,1 13,1 Z m 0,2 10,0 0,10 -10,0 z"
+ transform="translate(0,1036.3622)"
+ id="rect4140"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sssssssssccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_panels_1.svg b/tools/editor/icons/source/icon_panels_1.svg
new file mode 100644
index 0000000000..fa8bbe9fad
--- /dev/null
+++ b/tools/editor/icons/source/icon_panels_1.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_panels_1.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="12.854542"
+ inkscape:cy="9.2778779"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4167"
+ width="16"
+ height="16"
+ x="0"
+ y="1036.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_panels_2.svg b/tools/editor/icons/source/icon_panels_2.svg
new file mode 100644
index 0000000000..f00cc4b339
--- /dev/null
+++ b/tools/editor/icons/source/icon_panels_2.svg
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_panels_2.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="12.854542"
+ inkscape:cy="9.2778779"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4167"
+ width="16"
+ height="7.0000172"
+ x="0"
+ y="1036.3622" />
+ <rect
+ y="1045.3622"
+ x="0"
+ height="7.0000172"
+ width="16"
+ id="rect4195"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_panels_2_alt.svg b/tools/editor/icons/source/icon_panels_2_alt.svg
new file mode 100644
index 0000000000..cc3a634a3e
--- /dev/null
+++ b/tools/editor/icons/source/icon_panels_2_alt.svg
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_panels_2_alt.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="12.854542"
+ inkscape:cy="9.2778779"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ y="1036.3622"
+ x="9"
+ height="16"
+ width="7"
+ id="rect4195"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4216"
+ width="7"
+ height="16"
+ x="0"
+ y="1036.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_panels_3.svg b/tools/editor/icons/source/icon_panels_3.svg
new file mode 100644
index 0000000000..04517c5a66
--- /dev/null
+++ b/tools/editor/icons/source/icon_panels_3.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_panels_3.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="12.854542"
+ inkscape:cy="9.2778779"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4167"
+ width="16"
+ height="7.0000172"
+ x="0"
+ y="1036.3622" />
+ <rect
+ y="1045.3622"
+ x="9"
+ height="7.0000172"
+ width="7"
+ id="rect4195"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4216"
+ width="7"
+ height="7.0000172"
+ x="0"
+ y="1045.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_panels_3_alt.svg b/tools/editor/icons/source/icon_panels_3_alt.svg
new file mode 100644
index 0000000000..e5a9493287
--- /dev/null
+++ b/tools/editor/icons/source/icon_panels_3_alt.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_panels_3_alt.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="12.854542"
+ inkscape:cy="9.2778779"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4216"
+ width="7"
+ height="7.0000172"
+ x="0"
+ y="1045.3622" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4237"
+ width="7"
+ height="16.000017"
+ x="9"
+ y="1036.3622" />
+ <rect
+ y="1036.3622"
+ x="0"
+ height="7.0000172"
+ width="7"
+ id="rect4239"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_panels_4.svg b/tools/editor/icons/source/icon_panels_4.svg
new file mode 100644
index 0000000000..6d07a0b6d5
--- /dev/null
+++ b/tools/editor/icons/source/icon_panels_4.svg
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_panels_4.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="12.854542"
+ inkscape:cy="9.2778779"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ y="1045.3622"
+ x="9"
+ height="7.0000172"
+ width="7"
+ id="rect4195"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4216"
+ width="7"
+ height="7.0000172"
+ x="0"
+ y="1045.3622" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4237"
+ width="7"
+ height="7.0000172"
+ x="9"
+ y="1036.3622" />
+ <rect
+ y="1036.3622"
+ x="0"
+ height="7.0000172"
+ width="7"
+ id="rect4239"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_parallax_background.svg b/tools/editor/icons/source/icon_parallax_background.svg
new file mode 100644
index 0000000000..e1b6a4fb2f
--- /dev/null
+++ b/tools/editor/icons/source/icon_parallax_background.svg
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_canvas_item_shader_graph.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_parallax_background.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999999"
+ inkscape:cx="5.3916748"
+ inkscape:cy="8.33855"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <ellipse
+ r="2"
+ style="opacity:1;fill:#6e6e6e;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="ellipse4152"
+ cx="3"
+ cy="1039.3622" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="path4232"
+ sodipodi:type="arc"
+ sodipodi:cx="2"
+ sodipodi:cy="1039.3622"
+ sodipodi:rx="1"
+ sodipodi:ry="1"
+ sodipodi:start="3.1415927"
+ sodipodi:end="4.712389"
+ d="m 1,1039.3622 a 1,1 0 0 1 1,-1 l 0,1 z" />
+ <path
+ d="m -15,1039.3622 a 1,1 0 0 1 1,-1 l 0,1 z"
+ sodipodi:end="4.712389"
+ sodipodi:start="3.1415927"
+ sodipodi:ry="1"
+ sodipodi:rx="1"
+ sodipodi:cy="1039.3622"
+ sodipodi:cx="-14"
+ sodipodi:type="arc"
+ id="path4234"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ transform="scale(-1,1)" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4236"
+ width="12"
+ height="1"
+ x="2"
+ y="1038.3622" />
+ <rect
+ y="1049.3622"
+ x="2"
+ height="1"
+ width="12"
+ id="rect4238"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <path
+ d="m 1,-1049.3622 a 1,1 0 0 1 1,-1 l 0,1 z"
+ sodipodi:end="4.712389"
+ sodipodi:start="3.1415927"
+ sodipodi:ry="1"
+ sodipodi:rx="1"
+ sodipodi:cy="-1049.3622"
+ sodipodi:cx="2"
+ sodipodi:type="arc"
+ id="path4242"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ transform="scale(1,-1)" />
+ <path
+ transform="scale(-1,-1)"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="path4244"
+ sodipodi:type="arc"
+ sodipodi:cx="-14"
+ sodipodi:cy="-1049.3622"
+ sodipodi:rx="1"
+ sodipodi:ry="1"
+ sodipodi:start="3.1415927"
+ sodipodi:end="4.712389"
+ d="m -15,-1049.3622 a 1,1 0 0 1 1,-1 l 0,1 z" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4246"
+ width="1"
+ height="10.000017"
+ x="1"
+ y="1039.3622" />
+ <rect
+ y="1039.3622"
+ x="14"
+ height="10"
+ width="1"
+ id="rect4248"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <path
+ style="fill:#e0e0e0;fill-opacity:0.99607843;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 7,1041.3622 -3,3 3,3 z"
+ id="path4250"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path4252"
+ d="m 9,1041.3622 3,3 -3,3 z"
+ style="fill:#e0e0e0;fill-opacity:0.99607843;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_parallax_layer.svg b/tools/editor/icons/source/icon_parallax_layer.svg
new file mode 100644
index 0000000000..022fdd5339
--- /dev/null
+++ b/tools/editor/icons/source/icon_parallax_layer.svg
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_canvas_item_shader_graph.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_parallax_layer.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999999"
+ inkscape:cx="10.053658"
+ inkscape:cy="6.9687954"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <ellipse
+ r="2"
+ style="opacity:1;fill:#6e6e6e;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="ellipse4152"
+ cx="3"
+ cy="1039.3622" />
+ <path
+ style="fill:#a5b7f8;fill-opacity:0.98823529;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 7,1041.3622 -3,3 3,3 z"
+ id="path4250"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path4252"
+ d="m 9,1041.3622 3,3 -3,3 z"
+ style="fill:#a5b7f8;fill-opacity:0.98823529;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="opacity:1;fill:#a5b7f8;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3,1 C 1.8954305,1 1,1.8954305 1,3 l 0,10 c 0,1.104569 0.8954305,2 2,2 l 10,0 c 1.104569,0 2,-0.895431 2,-2 L 15,3 C 15,1.8954305 14.104569,1 13,1 Z m 0,1 10,0 c 0.552281,9.6e-6 0.99999,0.4477192 1,1 l 0,10 c -10e-6,0.552281 -0.447719,0.99999 -1,1 L 3,14 C 2.4477192,13.99999 2.0000096,13.552281 2,13 L 2,3 c 9.6e-6,-0.5522808 0.4477192,-0.9999904 1,-1 z"
+ transform="translate(0,1036.3622)"
+ id="path4160"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccccccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_particle_attractor_2d.svg b/tools/editor/icons/source/icon_particle_attractor_2d.svg
new file mode 100644
index 0000000000..f755d7fc37
--- /dev/null
+++ b/tools/editor/icons/source/icon_particle_attractor_2d.svg
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_particle_attractor_2d.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999999"
+ inkscape:cx="8.9614257"
+ inkscape:cy="5.6970686"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5b7f5;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 8 1 A 3 7 0 0 0 5 8 A 3 7 0 0 0 8 15 A 3 7 0 0 0 11 8 A 3 7 0 0 0 8 1 z M 8 2 A 2 5.9999828 0 0 1 10 8 A 2 5.9999828 0 0 1 8 14 A 2 5.9999828 0 0 1 6 8 A 2 5.9999828 0 0 1 8 2 z "
+ transform="translate(0,1036.3622)"
+ id="path4143" />
+ <path
+ id="path4148"
+ d="m 1,1044.3622 a 7,3 0 0 0 7,3 7,3 0 0 0 7,-3 7,3 0 0 0 -7,-3 7,3 0 0 0 -7,3 z m 1,0 a 5.9999828,2 0 0 1 6,-2 5.9999828,2 0 0 1 6,2 5.9999828,2 0 0 1 -6,2 5.9999828,2 0 0 1 -6,-2 z"
+ style="opacity:1;fill:#a5b7f5;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ style="opacity:1;fill:#a5b7f5;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="m 3.0502525,1049.3119 a 3,7 45 0 0 7.0710675,-2.8284 3,7 45 0 0 2.828427,-7.071 3,7 45 0 0 -7.0710673,2.8284 3,7 45 0 0 -2.8284272,7.071 z m 0.7071068,-0.7071 a 2,5.9999828 45 0 1 2.8284271,-5.6568 2,5.9999828 45 0 1 5.6568546,-2.8284 2,5.9999828 45 0 1 -2.8284274,5.6568 2,5.9999828 45 0 1 -5.6568543,2.8284 z"
+ id="path4150" />
+ <path
+ id="path4152"
+ d="m 12.9497,1049.3119 a 7,3 45 0 0 -2.8284,-7.071 7,3 45 0 0 -7.0710003,-2.8284 7,3 45 0 0 2.8284,7.071 7,3 45 0 0 7.0710003,2.8284 z m -0.7071,-0.7071 a 5.9999828,2 45 0 1 -5.6568003,-2.8284 5.9999828,2 45 0 1 -2.8284,-5.6568 5.9999828,2 45 0 1 5.6568,2.8284 5.9999828,2 45 0 1 2.8284003,5.6568 z"
+ style="opacity:1;fill:#a5b7f5;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ inkscape:connector-curvature="0" />
+ <circle
+ style="opacity:1;fill:#a5b7f5;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="path4154"
+ cx="8"
+ cy="1044.3622"
+ r="1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_particles.svg b/tools/editor/icons/source/icon_particles.svg
new file mode 100644
index 0000000000..f48929a7ef
--- /dev/null
+++ b/tools/editor/icons/source/icon_particles.svg
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_particles.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999998"
+ inkscape:cx="5.0589841"
+ inkscape:cy="5.0441142"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <circle
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="path4138"
+ cx="4"
+ cy="1044.3622"
+ r="3" />
+ <ellipse
+ cy="1042.3622"
+ cx="8"
+ id="circle4140"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ rx="4.4999948"
+ ry="4.9999847" />
+ <path
+ style="fill:#fc9c9c;fill-opacity:0.99607843;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 4,1047.3622 8,0 0,-4 -8,0 z"
+ id="path4142"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <circle
+ r="3"
+ cy="1044.3622"
+ cx="12"
+ id="circle4146"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <circle
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="path4148"
+ cx="4"
+ cy="1049.3622"
+ r="1" />
+ <circle
+ r="1"
+ cy="1049.3622"
+ cx="12"
+ id="circle4150"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <circle
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="circle4152"
+ cx="8"
+ cy="1050.3622"
+ r="1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_particles_2d.svg b/tools/editor/icons/source/icon_particles_2d.svg
new file mode 100644
index 0000000000..1ad1d511f8
--- /dev/null
+++ b/tools/editor/icons/source/icon_particles_2d.svg
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_particles_2d.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="15.999999"
+ inkscape:cx="10.042274"
+ inkscape:cy="6.8827763"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <circle
+ style="opacity:1;fill:#a5b7f5;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="path4138"
+ cx="4"
+ cy="1044.3622"
+ r="3" />
+ <ellipse
+ cy="1042.3622"
+ cx="8"
+ id="circle4140"
+ style="opacity:1;fill:#a5b7f5;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ rx="4.4999948"
+ ry="4.9999847" />
+ <path
+ style="fill:#a5b7f5;fill-opacity:0.98823529;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 4,1047.3622 8,0 0,-4 -8,0 z"
+ id="path4142"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <circle
+ r="3"
+ cy="1044.3622"
+ cx="12"
+ id="circle4146"
+ style="opacity:1;fill:#a5b7f5;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <circle
+ style="opacity:1;fill:#a5b7f5;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="path4148"
+ cx="4"
+ cy="1049.3622"
+ r="1" />
+ <circle
+ r="1"
+ cy="1049.3622"
+ cx="12"
+ id="circle4150"
+ style="opacity:1;fill:#a5b7f5;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <circle
+ style="opacity:1;fill:#a5b7f5;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="circle4152"
+ cx="8"
+ cy="1050.3622"
+ r="1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_patch_9_frame.svg b/tools/editor/icons/source/icon_patch_9_frame.svg
new file mode 100644
index 0000000000..f12789c19e
--- /dev/null
+++ b/tools/editor/icons/source/icon_patch_9_frame.svg
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_patch_9_frame.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="10.35114"
+ inkscape:cy="9.1140348"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4154"
+ width="1"
+ height="14"
+ x="1"
+ y="1037.3622" />
+ <rect
+ y="1050.3622"
+ x="1"
+ height="0.9999826"
+ width="14"
+ id="rect4156"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4158"
+ width="14"
+ height="0.9999826"
+ x="1"
+ y="1037.3622" />
+ <rect
+ y="1037.3622"
+ x="14"
+ height="14"
+ width="1"
+ id="rect4160"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="1040.3622"
+ x="1"
+ height="0.9999826"
+ width="14"
+ id="rect4162"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4164"
+ width="14"
+ height="0.9999826"
+ x="1"
+ y="1047.3622" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4166"
+ width="14"
+ height="0.9999826"
+ x="1037.3622"
+ y="-5"
+ transform="matrix(0,1,-1,0,0,0)" />
+ <rect
+ transform="matrix(0,1,-1,0,0,0)"
+ y="-12"
+ x="1037.3622"
+ height="0.9999826"
+ width="14"
+ id="rect4168"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_path.svg b/tools/editor/icons/source/icon_path.svg
new file mode 100644
index 0000000000..39c63eac8a
--- /dev/null
+++ b/tools/editor/icons/source/icon_path.svg
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_path.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="5.2482063"
+ inkscape:cy="13.715698"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <circle
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4154"
+ cx="3"
+ cy="1049.3622"
+ r="2" />
+ <circle
+ r="2"
+ cy="1039.3622"
+ cx="13"
+ id="circle4165"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#fc9c9c;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
+ d="m 3,1049.3622 c 0,-9 10,-1 10,-10"
+ id="path4167"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_path_2d.svg b/tools/editor/icons/source/icon_path_2d.svg
new file mode 100644
index 0000000000..6887834048
--- /dev/null
+++ b/tools/editor/icons/source/icon_path_2d.svg
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_path_2d.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="6.9717791"
+ inkscape:cy="15.350883"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <circle
+ style="opacity:1;fill:#a5b7f8;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4154"
+ cx="3"
+ cy="1049.3622"
+ r="2" />
+ <circle
+ r="2"
+ cy="1039.3622"
+ cx="13"
+ id="circle4165"
+ style="opacity:1;fill:#a5b7f8;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#a5b7f8;fill-opacity:0.98823529;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 12,1039.3613 c 0,2.0648 -0.492456,2.8244 -1.136719,3.2754 -0.644262,0.451 -1.7128904,0.6055 -2.9628904,0.7305 -1.25,0.125 -2.681372,0.2205 -3.9121094,1.082 C 2.7575439,1045.3107 2,1046.9261 2,1049.3613 l 2,0 c 0,-2.0648 0.4924561,-2.8224 1.1367188,-3.2734 0.6442626,-0.451 1.7128906,-0.6055 2.9628906,-0.7305 1.25,-0.125 2.6813716,-0.2205 3.9121096,-1.082 C 13.242456,1043.4139 14,1041.7965 14,1039.3613 l -2,0 z"
+ id="path4167"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_path_follow.svg b/tools/editor/icons/source/icon_path_follow.svg
new file mode 100644
index 0000000000..6999df33de
--- /dev/null
+++ b/tools/editor/icons/source/icon_path_follow.svg
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_path_follow.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999999"
+ inkscape:cx="16.455225"
+ inkscape:cy="0.74140894"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <circle
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4154"
+ cx="3"
+ cy="1049.3622"
+ r="2" />
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 12,1039.3613 c 0,2.0648 -0.492456,2.8244 -1.136719,3.2754 -0.644262,0.451 -1.7128904,0.6055 -2.9628904,0.7305 -1.25,0.125 -2.681372,0.2205 -3.9121094,1.082 C 2.7575439,1045.3107 2,1046.9261 2,1049.3613 l 2,0 c 0,-2.0648 0.4924561,-2.8224 1.1367188,-3.2734 0.6442626,-0.451 1.7128906,-0.6055 2.9628906,-0.7305 1.25,-0.125 2.6813716,-0.2205 3.9121096,-1.082 C 13.242456,1043.4139 14,1041.7965 14,1039.3613 l -2,0 z"
+ id="path4167"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#fc9c9c;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:0.99607843"
+ d="m 10,1040.3622 6,0 -3,-4 z"
+ id="path4238"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_path_follow_2d.svg b/tools/editor/icons/source/icon_path_follow_2d.svg
new file mode 100644
index 0000000000..020a094c0a
--- /dev/null
+++ b/tools/editor/icons/source/icon_path_follow_2d.svg
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_path_follow_2d.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="9.0298197"
+ inkscape:cy="11.306698"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <circle
+ style="opacity:1;fill:#a5b7f8;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4154"
+ cx="3"
+ cy="1049.3622"
+ r="2" />
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#a5b7f8;fill-opacity:0.98823529;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 12,1039.3613 c 0,2.0648 -0.492456,2.8244 -1.136719,3.2754 -0.644262,0.451 -1.7128904,0.6055 -2.9628904,0.7305 -1.25,0.125 -2.681372,0.2205 -3.9121094,1.082 C 2.7575439,1045.3107 2,1046.9261 2,1049.3613 l 2,0 c 0,-2.0648 0.4924561,-2.8224 1.1367188,-3.2734 0.6442626,-0.451 1.7128906,-0.6055 2.9628906,-0.7305 1.25,-0.125 2.6813716,-0.2205 3.9121096,-1.082 C 13.242456,1043.4139 14,1041.7965 14,1039.3613 l -2,0 z"
+ id="path4167"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#a5b7f9;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:0.98823529"
+ d="m 10,1040.3622 6,0 -3,-4 z"
+ id="path4238"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_pause.svg b/tools/editor/icons/source/icon_pause.svg
new file mode 100644
index 0000000000..411f1b22da
--- /dev/null
+++ b/tools/editor/icons/source/icon_pause.svg
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_packed_scene.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_pause.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="11.023552"
+ inkscape:cy="7.2928145"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#f0f0f0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="M 4 3 A 1.0001 1.0001 0 0 0 3 4 L 3 12 A 1.0001 1.0001 0 0 0 4 13 L 6 13 L 6 12 L 7 12 L 7 4 L 6 4 L 6 3 L 4 3 z M 10 3 L 10 4 L 9 4 L 9 12 L 10 12 L 10 13 L 12 13 A 1.0001 1.0001 0 0 0 13 12 L 13 4 A 1.0001 1.0001 0 0 0 12 3 L 10 3 z "
+ transform="translate(0,1036.3622)"
+ id="path4155" />
+ <circle
+ style="opacity:1;fill:#f0f0f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="path4169"
+ cx="6"
+ cy="1040.3622"
+ r="1" />
+ <circle
+ r="1"
+ cy="1040.3622"
+ cx="10"
+ id="circle4181"
+ style="opacity:1;fill:#f0f0f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <circle
+ style="opacity:1;fill:#f0f0f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="circle4183"
+ cx="10"
+ cy="1048.3622"
+ r="1" />
+ <circle
+ r="1"
+ cy="1048.3622"
+ cx="6"
+ id="circle4185"
+ style="opacity:1;fill:#f0f0f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_pin.svg b/tools/editor/icons/source/icon_pin.svg
new file mode 100644
index 0000000000..8281b6438b
--- /dev/null
+++ b/tools/editor/icons/source/icon_pin.svg
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_pin.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="2.044657"
+ inkscape:cy="7.8674742"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:#e0e0e0;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
+ d="m 3,1046.3622 10,0 -2,-3 -6,0 z"
+ id="path4160"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#e0e0e0;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
+ d="M 4 1 L 4 2 L 5 3 L 5 6 L 11 6 L 11 3 L 12 2 L 12 1 L 4 1 z "
+ transform="translate(0,1036.3622)"
+ id="path4162" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4173"
+ width="2"
+ height="2.0000174"
+ x="7"
+ y="1047.3622" />
+ <path
+ style="fill:#e0e0e0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 7,1049.3622 1,2 1,-2 -2,0 z"
+ id="path4175"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_pin_joint.svg b/tools/editor/icons/source/icon_pin_joint.svg
new file mode 100644
index 0000000000..47dbe6be60
--- /dev/null
+++ b/tools/editor/icons/source/icon_pin_joint.svg
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_pin_joint.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999998"
+ inkscape:cx="5.6333089"
+ inkscape:cy="6.8938532"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:#fc9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 1.9289328,1043.2912 9,1050.3622 l 0.7071066,-3.5355 -4.2426399,-4.2426 z"
+ id="path4160"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#fc9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 9,1037.6343 -0.7071061,0.7071 0,1.4142 -2.1213204,2.1214 4.2426405,4.2426 2.12132,-2.1213 1.414214,0 0.707107,-0.7071 L 9,1037.6343 Z"
+ id="path4162"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="opacity:1;fill:#fc9c9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4173"
+ width="2"
+ height="2.0000174"
+ x="743.08221"
+ y="737.35425"
+ transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)" />
+ <path
+ style="fill:#fc9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 2.6360396,1048.2409 -0.7071068,2.1213 2.1213204,-0.7071 -1.4142136,-1.4142 z"
+ id="path4175"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_pin_joint_2d.svg b/tools/editor/icons/source/icon_pin_joint_2d.svg
new file mode 100644
index 0000000000..90e1579903
--- /dev/null
+++ b/tools/editor/icons/source/icon_pin_joint_2d.svg
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_pin_joint_2d.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999998"
+ inkscape:cx="5.6333089"
+ inkscape:cy="6.8938532"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:#a5b7f6;fill-opacity:0.98823529;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 1.9289328,1043.2912 9,1050.3622 l 0.7071066,-3.5355 -4.2426399,-4.2426 z"
+ id="path4160"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#a5b7f6;fill-opacity:0.98823529;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 9,1037.6343 -0.7071061,0.7071 0,1.4142 -2.1213204,2.1214 4.2426405,4.2426 2.12132,-2.1213 1.414214,0 0.707107,-0.7071 L 9,1037.6343 Z"
+ id="path4162"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="opacity:1;fill:#a5b7f6;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4173"
+ width="2"
+ height="2.0000174"
+ x="743.08221"
+ y="737.35425"
+ transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)" />
+ <path
+ style="fill:#a5b7f6;fill-opacity:0.98823529;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 2.6360396,1048.2409 -0.7071068,2.1213 2.1213204,-0.7071 -1.4142136,-1.4142 z"
+ id="path4175"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_pin_pressed.svg b/tools/editor/icons/source/icon_pin_pressed.svg
new file mode 100644
index 0000000000..8281b6438b
--- /dev/null
+++ b/tools/editor/icons/source/icon_pin_pressed.svg
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_pin.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="2.044657"
+ inkscape:cy="7.8674742"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:#e0e0e0;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
+ d="m 3,1046.3622 10,0 -2,-3 -6,0 z"
+ id="path4160"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#e0e0e0;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
+ d="M 4 1 L 4 2 L 5 3 L 5 6 L 11 6 L 11 3 L 12 2 L 12 1 L 4 1 z "
+ transform="translate(0,1036.3622)"
+ id="path4162" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4173"
+ width="2"
+ height="2.0000174"
+ x="7"
+ y="1047.3622" />
+ <path
+ style="fill:#e0e0e0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 7,1049.3622 1,2 1,-2 -2,0 z"
+ id="path4175"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_plane.svg b/tools/editor/icons/source/icon_plane.svg
new file mode 100644
index 0000000000..de5b5efc82
--- /dev/null
+++ b/tools/editor/icons/source/icon_plane.svg
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="icon_plane.svg"
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_box_shape.png"
+ inkscape:version="0.91 r13725"
+ version="1.1"
+ id="svg2"
+ viewBox="0 0 16 16"
+ height="16"
+ width="16">
+ <sodipodi:namedview
+ inkscape:snap-smooth-nodes="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-paths="false"
+ inkscape:window-maximized="1"
+ inkscape:window-y="27"
+ inkscape:window-x="0"
+ inkscape:window-height="1016"
+ inkscape:window-width="1920"
+ inkscape:snap-center="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:bbox-nodes="true"
+ inkscape:bbox-paths="true"
+ inkscape:snap-bbox="true"
+ units="px"
+ showgrid="true"
+ inkscape:current-layer="layer1"
+ inkscape:document-units="px"
+ inkscape:cy="8.9877784"
+ inkscape:cx="6.5696062"
+ inkscape:zoom="31.999999"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base">
+ <inkscape:grid
+ id="grid3336"
+ type="xygrid"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <defs
+ id="defs4" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(0,-1036.3622)"
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <path
+ style="fill:#e0e0e0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 1,1044.3622 7,3 7,-3 -7,-3 z"
+ id="path4149"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_plane_shape.svg b/tools/editor/icons/source/icon_plane_shape.svg
new file mode 100644
index 0000000000..b2d5e18b8f
--- /dev/null
+++ b/tools/editor/icons/source/icon_plane_shape.svg
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="icon_plane_shape.svg"
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_box_shape.png"
+ inkscape:version="0.91 r13725"
+ version="1.1"
+ id="svg2"
+ viewBox="0 0 16 16"
+ height="16"
+ width="16">
+ <sodipodi:namedview
+ inkscape:snap-smooth-nodes="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-paths="false"
+ inkscape:window-maximized="1"
+ inkscape:window-y="27"
+ inkscape:window-x="0"
+ inkscape:window-height="1016"
+ inkscape:window-width="1920"
+ inkscape:snap-center="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:bbox-nodes="true"
+ inkscape:bbox-paths="true"
+ inkscape:snap-bbox="true"
+ units="px"
+ showgrid="true"
+ inkscape:current-layer="layer1"
+ inkscape:document-units="px"
+ inkscape:cy="6.0267957"
+ inkscape:cx="3.664842"
+ inkscape:zoom="31.999999"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base">
+ <inkscape:grid
+ id="grid3336"
+ type="xygrid"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <defs
+ id="defs4" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(0,-1036.3622)"
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <path
+ style="fill:#a2d2ff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 1,1044.3622 7,3 7,-3 -7,-3 z"
+ id="path4149"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_play.svg b/tools/editor/icons/source/icon_play.svg
new file mode 100644
index 0000000000..9d3beab97d
--- /dev/null
+++ b/tools/editor/icons/source/icon_play.svg
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_packed_scene.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_play.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="10.275"
+ inkscape:cy="7.6146693"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:#e0e0e0;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;fill-opacity:1"
+ d="m 4,1048.3622 0,-8 7,4 z"
+ id="path4155"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_play_backwards.svg b/tools/editor/icons/source/icon_play_backwards.svg
new file mode 100644
index 0000000000..d93d529dd8
--- /dev/null
+++ b/tools/editor/icons/source/icon_play_backwards.svg
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_packed_scene.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_play_backwards.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="5.9052441"
+ inkscape:cy="8.136551"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:#e0e0e0;fill-opacity:1;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 12,1048.3622 0,-8 -6.9999995,4 z"
+ id="path4155"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_play_custom.svg b/tools/editor/icons/source/icon_play_custom.svg
new file mode 100644
index 0000000000..62ff7fe710
--- /dev/null
+++ b/tools/editor/icons/source/icon_play_custom.svg
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_packed_scene.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_play_custom_scene.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="8.359274"
+ inkscape:cy="4.5476192"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#f0f0f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 1 7 L 1 13 A 2 2 0 0 0 3 15 L 15 15 L 15 7 L 1 7 z M 4 8 L 8 8 L 8 9 L 12 9 L 12 14 L 8 14 L 4 14 L 4 9 L 4 8 z "
+ transform="translate(0,1036.3622)"
+ id="rect4136" />
+ <path
+ style="opacity:1;fill:#f0f0f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 0.7112932,1040.3831 1,1042.3622 l 2.2438279,-0.3273 -0.8182578,-1.9018 -1.7142769,0.25 z m 3.6933293,-0.5387 0.8182578,1.9018 1.9790524,-0.2887 -0.8182579,-1.9018 -1.9790523,0.2887 z m 3.9581047,-0.5775 0.8182579,1.9018 1.9790519,-0.2887 -0.818257,-1.9018 -1.9790528,0.2887 z m 3.9581048,-0.5774 0.818258,1.9018 1.714277,-0.25 -0.288707,-1.9791 -2.243828,0.3273 z"
+ id="rect4138"
+ inkscape:connector-curvature="0"
+ inkscape:transform-center-x="-6.7823301"
+ inkscape:transform-center-y="-2" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_play_scene.svg b/tools/editor/icons/source/icon_play_scene.svg
new file mode 100644
index 0000000000..599cd14981
--- /dev/null
+++ b/tools/editor/icons/source/icon_play_scene.svg
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_packed_scene.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_play_scene.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="-0.47309035"
+ inkscape:cy="3.0665228"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#f0f0f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 1 7 L 1 13 L 3 13 L 3 15 L 15 15 L 15 7 L 1 7 z M 6 8 L 11 11 L 6 14 L 6 8 z "
+ transform="translate(0,1036.3622)"
+ id="rect4136" />
+ <path
+ style="opacity:1;fill:#f0f0f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 0.7112932,1040.3831 1,1042.3622 l 2.2438279,-0.3273 -0.8182578,-1.9018 -1.7142769,0.25 z m 3.6933293,-0.5387 0.8182578,1.9018 1.9790524,-0.2887 -0.8182579,-1.9018 -1.9790523,0.2887 z m 3.9581047,-0.5775 0.8182579,1.9018 1.9790519,-0.2887 -0.818257,-1.9018 -1.9790528,0.2887 z m 3.9581048,-0.5774 0.818258,1.9018 1.714277,-0.25 -0.288707,-1.9791 -2.243828,0.3273 z"
+ id="rect4138"
+ inkscape:connector-curvature="0"
+ inkscape:transform-center-x="-6.7823301"
+ inkscape:transform-center-y="-2" />
+ <circle
+ style="opacity:1;fill:#f0f0f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4150"
+ cx="3"
+ cy="1049.3622"
+ r="2" />
+ <circle
+ r="2"
+ cy="1049.3622"
+ cx="13"
+ id="circle4152"
+ style="opacity:1;fill:#f0f0f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_play_start.svg b/tools/editor/icons/source/icon_play_start.svg
new file mode 100644
index 0000000000..7157f59f35
--- /dev/null
+++ b/tools/editor/icons/source/icon_play_start.svg
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_packed_scene.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_play_start.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="2.4322492"
+ inkscape:cy="9.0261053"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:#e0e0e0;fill-opacity:1;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 7.000102,1048.3622 0,-8 7,4 z"
+ id="path4155"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <path
+ inkscape:connector-curvature="0"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#e0e0e0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 3,1039.3622 c 0.552262,10e-5 0.999945,0.4477 1,1 l 0,8 c -5.5e-5,0.5523 -0.447738,0.9999 -1,1 l -1,0 0,-1 -1,0 0,-8 1,0 0,-1 z"
+ id="path4155-8"
+ sodipodi:nodetypes="ccccccccccc" />
+ <circle
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="path4169"
+ cx="-2"
+ cy="1040.3622"
+ r="1"
+ transform="scale(-1,1)" />
+ <circle
+ r="1"
+ cy="1048.3622"
+ cx="-2"
+ id="circle4185"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ transform="scale(-1,1)" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_play_start_backwards.svg b/tools/editor/icons/source/icon_play_start_backwards.svg
new file mode 100644
index 0000000000..06998f1043
--- /dev/null
+++ b/tools/editor/icons/source/icon_play_start_backwards.svg
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_packed_scene.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_play_start_backwards.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="6.9936216"
+ inkscape:cy="6.940039"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:#e0e0e0;fill-opacity:1;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 8.999898,1048.3622 0,-8 -6.9999995,4 z"
+ id="path4155"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <path
+ inkscape:connector-curvature="0"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#e0e0e0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 13,1039.3622 c -0.552262,10e-5 -0.999945,0.4477 -1,1 l 0,8 c 5.5e-5,0.5523 0.447738,0.9999 1,1 l 1,0 0,-1 1,0 0,-8 -1,0 0,-1 z"
+ id="path4155-8"
+ sodipodi:nodetypes="ccccccccccc" />
+ <circle
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="path4169"
+ cx="14"
+ cy="1040.3622"
+ r="1" />
+ <circle
+ r="1"
+ cy="1048.3622"
+ cx="14"
+ id="circle4185"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_popup.svg b/tools/editor/icons/source/icon_popup.svg
new file mode 100644
index 0000000000..1681e537f6
--- /dev/null
+++ b/tools/editor/icons/source/icon_popup.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_popup.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="7.3021198"
+ inkscape:cy="5.264507"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3 1 C 1.8954305 1 1 1.8954305 1 3 L 1 13 C 1 14.104569 1.8954305 15 3 15 L 13 15 C 14.104569 15 15 14.104569 15 13 L 15 3 C 15 1.8954305 14.104569 1 13 1 L 3 1 z M 7 3 L 9 3 L 9 9 L 7 9 L 7 3 z M 7 11 L 9 11 L 9 13 L 7 13 L 7 11 z "
+ transform="translate(0,1036.3622)"
+ id="rect4140" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_popup_dialog.svg b/tools/editor/icons/source/icon_popup_dialog.svg
new file mode 100644
index 0000000000..54e14accc7
--- /dev/null
+++ b/tools/editor/icons/source/icon_popup_dialog.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_confirmation_dialog.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_popup_dialog.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="7.6244901"
+ inkscape:cy="5.7391918"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3 1 C 1.89543 1 1 1.8954 1 3 L 1 4 L 15 4 L 15 3 C 15 1.8954 14.104569 1 13 1 L 3 1 z M 12 2 L 13 2 L 13 3 L 12 3 L 12 2 z M 1 5 L 1 13 C 1 14.1046 1.89543 15 3 15 L 13 15 C 14.104569 15 15 14.1046 15 13 L 15 5 L 1 5 z M 7 6 L 9 6 L 9 11 L 7 11 L 7 6 z M 7 12 L 9 12 L 9 14 L 7 14 L 7 12 z "
+ transform="translate(0,1036.3622)"
+ id="rect4140" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_popup_menu.svg b/tools/editor/icons/source/icon_popup_menu.svg
new file mode 100644
index 0000000000..e812ca695b
--- /dev/null
+++ b/tools/editor/icons/source/icon_popup_menu.svg
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_button.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_popup_menu.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="7.7434649"
+ inkscape:cy="5.0774028"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 2 6 A 1 1 0 0 0 1 7 L 1 14 A 1 1 0 0 0 2 15 L 14 15 A 1 1 0 0 0 15 14 L 15 7 A 1 1 0 0 0 14 6 L 2 6 z M 3 8 L 13 8 L 13 10 L 3 10 L 3 8 z M 3 11 L 13 11 L 13 13 L 3 13 L 3 11 z "
+ transform="translate(0,1036.3622)"
+ id="rect4161" />
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 1 1 L 1 5 L 7 5 L 7 1 L 1 1 z M 2 2 L 6 2 L 4 4 L 2 2 z "
+ transform="translate(0,1036.3622)"
+ id="rect4155" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_popup_panel.svg b/tools/editor/icons/source/icon_popup_panel.svg
new file mode 100644
index 0000000000..c307257efe
--- /dev/null
+++ b/tools/editor/icons/source/icon_popup_panel.svg
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_button.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_popup_panel.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="8.4838665"
+ inkscape:cy="2.9150134"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 2,6 C 1.4477153,6 1,6.4477153 1,7 l 0,7 c 0,0.552285 0.4477153,1 1,1 l 12,0 c 0.552285,0 1,-0.447715 1,-1 L 15,7 C 15,6.4477153 14.552285,6 14,6 Z"
+ transform="translate(0,1036.3622)"
+ id="rect4161"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sssssssss" />
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 1 1 L 1 5 L 7 5 L 7 1 L 1 1 z M 2 2 L 6 2 L 4 4 L 2 2 z "
+ transform="translate(0,1036.3622)"
+ id="rect4155" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_portal.svg b/tools/editor/icons/source/icon_portal.svg
new file mode 100644
index 0000000000..2f3d22025f
--- /dev/null
+++ b/tools/editor/icons/source/icon_portal.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_portal.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254832"
+ inkscape:cx="3.4176446"
+ inkscape:cy="5.4395319"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 1 A 5 7 0 0 0 3 8 A 5 7 0 0 0 8 15 A 5 7 0 0 0 13 8 A 5 7 0 0 0 8 1 z M 8 3 A 2.9999998 5.0000172 0 0 1 11 8 A 2.9999998 5.0000172 0 0 1 8 13 A 2.9999998 5.0000172 0 0 1 5 8 A 2.9999998 5.0000172 0 0 1 8 3 z "
+ transform="translate(0,1036.3622)"
+ id="path4154" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_position_2d.svg b/tools/editor/icons/source/icon_position_2d.svg
new file mode 100644
index 0000000000..4dbb2c188a
--- /dev/null
+++ b/tools/editor/icons/source/icon_position_2d.svg
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_position_2d.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999999"
+ inkscape:cx="2.4660493"
+ inkscape:cy="9.4601984"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#a5b7f4;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4154"
+ width="4"
+ height="2"
+ x="1"
+ y="1043.3622" />
+ <rect
+ y="1043.3622"
+ x="11"
+ height="2"
+ width="4"
+ id="rect4156"
+ style="opacity:1;fill:#a5b7f4;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#a5b7f4;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4158"
+ width="2"
+ height="4.0000172"
+ x="7"
+ y="1037.3622" />
+ <rect
+ y="1047.3622"
+ x="7"
+ height="4.0000172"
+ width="2"
+ id="rect4160"
+ style="opacity:1;fill:#a5b7f4;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_position_3d.svg b/tools/editor/icons/source/icon_position_3d.svg
new file mode 100644
index 0000000000..b735af4ac3
--- /dev/null
+++ b/tools/editor/icons/source/icon_position_3d.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_position.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999999"
+ inkscape:cx="13.15355"
+ inkscape:cy="10.553948"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 7 1 L 7 5 L 9 5 L 9 1 L 7 1 z M 1 7 L 1 9 L 5 9 L 5 7 L 1 7 z M 11 7 L 11 9 L 15 9 L 15 7 L 11 7 z M 7 11 L 7 15 L 9 15 L 9 11 L 7 11 z "
+ transform="translate(0,1036.3622)"
+ id="rect4154" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_progress_1.svg b/tools/editor/icons/source/icon_progress_1.svg
new file mode 100644
index 0000000000..4b4694d0d4
--- /dev/null
+++ b/tools/editor/icons/source/icon_progress_1.svg
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_wait_preview_8.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_progress.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="4.1004505"
+ inkscape:cy="7.8700042"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 9,1037.4403 0,3.0547 a 4,4 0 0 1 1.027344,0.4258 l 2.158203,-2.1582 A 7,7 0 0 0 9,1037.4403 Z"
+ id="path4179" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 7,1037.4423 a 7,7 0 0 0 -3.1855469,1.3203 l 2.1582031,2.1582 A 4,4 0 0 1 7,1040.4931 l 0,-3.0508 z"
+ id="path4177" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 2.4003906,1040.1767 a 7,7 0 0 0 -1.3222656,3.1855 l 3.0546875,0 a 4,4 0 0 1 0.4257813,-1.0273 l -2.1582032,-2.1582 z"
+ id="path4175" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 13.599609,1040.1767 -2.158203,2.1582 a 4,4 0 0 1 0.427735,1.0273 l 3.050781,0 a 7,7 0 0 0 -1.320313,-3.1855 z"
+ id="path4173" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 1.0800781,1045.3622 a 7,7 0 0 0 1.3203125,3.1855 l 2.1582032,-2.1582 a 4,4 0 0 1 -0.4277344,-1.0273 l -3.0507813,0 z"
+ id="path4171" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 11.867188,1045.3622 a 4,4 0 0 1 -0.425782,1.0273 l 2.158203,2.1582 a 7,7 0 0 0 1.322266,-3.1855 l -3.054687,0 z"
+ id="path4169" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 5.9726562,1047.8036 -2.1582031,2.1582 A 7,7 0 0 0 7,1051.2841 l 0,-3.0547 a 4,4 0 0 1 -1.0273438,-0.4258 z"
+ id="path4167" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 10.027344,1047.8036 A 4,4 0 0 1 9,1048.2313 l 0,3.0508 a 7,7 0 0 0 3.185547,-1.3203 l -2.158203,-2.1582 z"
+ id="path4142" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_progress_2.svg b/tools/editor/icons/source/icon_progress_2.svg
new file mode 100644
index 0000000000..1edad60e03
--- /dev/null
+++ b/tools/editor/icons/source/icon_progress_2.svg
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_wait_preview_8.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_progress_2.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="8.2105087"
+ inkscape:cy="9.593577"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 9,1037.4403 0,3.0547 a 4,4 0 0 1 1.027344,0.4258 l 2.158203,-2.1582 A 7,7 0 0 0 9,1037.4403 Z"
+ id="path4179" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 7,1037.4423 a 7,7 0 0 0 -3.1855469,1.3203 l 2.1582031,2.1582 A 4,4 0 0 1 7,1040.4931 l 0,-3.0508 z"
+ id="path4177" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 2.4003906,1040.1767 a 7,7 0 0 0 -1.3222656,3.1855 l 3.0546875,0 a 4,4 0 0 1 0.4257813,-1.0273 l -2.1582032,-2.1582 z"
+ id="path4175" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 13.599609,1040.1767 -2.158203,2.1582 a 4,4 0 0 1 0.427735,1.0273 l 3.050781,0 a 7,7 0 0 0 -1.320313,-3.1855 z"
+ id="path4173" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 1.0800781,1045.3622 a 7,7 0 0 0 1.3203125,3.1855 l 2.1582032,-2.1582 a 4,4 0 0 1 -0.4277344,-1.0273 l -3.0507813,0 z"
+ id="path4171" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 11.867188,1045.3622 a 4,4 0 0 1 -0.425782,1.0273 l 2.158203,2.1582 a 7,7 0 0 0 1.322266,-3.1855 l -3.054687,0 z"
+ id="path4169" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 5.9726562,1047.8036 -2.1582031,2.1582 A 7,7 0 0 0 7,1051.2841 l 0,-3.0547 a 4,4 0 0 1 -1.0273438,-0.4258 z"
+ id="path4167" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 10.027344,1047.8036 A 4,4 0 0 1 9,1048.2313 l 0,3.0508 a 7,7 0 0 0 3.185547,-1.3203 l -2.158203,-2.1582 z"
+ id="path4142" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_progress_3.svg b/tools/editor/icons/source/icon_progress_3.svg
new file mode 100644
index 0000000000..405a16854e
--- /dev/null
+++ b/tools/editor/icons/source/icon_progress_3.svg
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_wait_preview_8.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_progress_3.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="8.2105087"
+ inkscape:cy="9.593577"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 9,1037.4403 0,3.0547 a 4,4 0 0 1 1.027344,0.4258 l 2.158203,-2.1582 A 7,7 0 0 0 9,1037.4403 Z"
+ id="path4179" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 7,1037.4423 a 7,7 0 0 0 -3.1855469,1.3203 l 2.1582031,2.1582 A 4,4 0 0 1 7,1040.4931 l 0,-3.0508 z"
+ id="path4177" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 2.4003906,1040.1767 a 7,7 0 0 0 -1.3222656,3.1855 l 3.0546875,0 a 4,4 0 0 1 0.4257813,-1.0273 l -2.1582032,-2.1582 z"
+ id="path4175" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 13.599609,1040.1767 -2.158203,2.1582 a 4,4 0 0 1 0.427735,1.0273 l 3.050781,0 a 7,7 0 0 0 -1.320313,-3.1855 z"
+ id="path4173" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 1.0800781,1045.3622 a 7,7 0 0 0 1.3203125,3.1855 l 2.1582032,-2.1582 a 4,4 0 0 1 -0.4277344,-1.0273 l -3.0507813,0 z"
+ id="path4171" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 11.867188,1045.3622 a 4,4 0 0 1 -0.425782,1.0273 l 2.158203,2.1582 a 7,7 0 0 0 1.322266,-3.1855 l -3.054687,0 z"
+ id="path4169" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 5.9726562,1047.8036 -2.1582031,2.1582 A 7,7 0 0 0 7,1051.2841 l 0,-3.0547 a 4,4 0 0 1 -1.0273438,-0.4258 z"
+ id="path4167" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 10.027344,1047.8036 A 4,4 0 0 1 9,1048.2313 l 0,3.0508 a 7,7 0 0 0 3.185547,-1.3203 l -2.158203,-2.1582 z"
+ id="path4142" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_progress_4.svg b/tools/editor/icons/source/icon_progress_4.svg
new file mode 100644
index 0000000000..26e97928ee
--- /dev/null
+++ b/tools/editor/icons/source/icon_progress_4.svg
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_wait_preview_8.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_progress_4.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="8.2105087"
+ inkscape:cy="9.593577"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 9,1037.4403 0,3.0547 a 4,4 0 0 1 1.027344,0.4258 l 2.158203,-2.1582 A 7,7 0 0 0 9,1037.4403 Z"
+ id="path4179" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 7,1037.4423 a 7,7 0 0 0 -3.1855469,1.3203 l 2.1582031,2.1582 A 4,4 0 0 1 7,1040.4931 l 0,-3.0508 z"
+ id="path4177" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 2.4003906,1040.1767 a 7,7 0 0 0 -1.3222656,3.1855 l 3.0546875,0 a 4,4 0 0 1 0.4257813,-1.0273 l -2.1582032,-2.1582 z"
+ id="path4175" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 13.599609,1040.1767 -2.158203,2.1582 a 4,4 0 0 1 0.427735,1.0273 l 3.050781,0 a 7,7 0 0 0 -1.320313,-3.1855 z"
+ id="path4173" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 1.0800781,1045.3622 a 7,7 0 0 0 1.3203125,3.1855 l 2.1582032,-2.1582 a 4,4 0 0 1 -0.4277344,-1.0273 l -3.0507813,0 z"
+ id="path4171" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 11.867188,1045.3622 a 4,4 0 0 1 -0.425782,1.0273 l 2.158203,2.1582 a 7,7 0 0 0 1.322266,-3.1855 l -3.054687,0 z"
+ id="path4169" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 5.9726562,1047.8036 -2.1582031,2.1582 A 7,7 0 0 0 7,1051.2841 l 0,-3.0547 a 4,4 0 0 1 -1.0273438,-0.4258 z"
+ id="path4167" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 10.027344,1047.8036 A 4,4 0 0 1 9,1048.2313 l 0,3.0508 a 7,7 0 0 0 3.185547,-1.3203 l -2.158203,-2.1582 z"
+ id="path4142" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_progress_5.svg b/tools/editor/icons/source/icon_progress_5.svg
new file mode 100644
index 0000000000..024190e9fd
--- /dev/null
+++ b/tools/editor/icons/source/icon_progress_5.svg
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_wait_preview_8.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_progress_5.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="8.2105087"
+ inkscape:cy="9.593577"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 9,1037.4403 0,3.0547 a 4,4 0 0 1 1.027344,0.4258 l 2.158203,-2.1582 A 7,7 0 0 0 9,1037.4403 Z"
+ id="path4179" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 7,1037.4423 a 7,7 0 0 0 -3.1855469,1.3203 l 2.1582031,2.1582 A 4,4 0 0 1 7,1040.4931 l 0,-3.0508 z"
+ id="path4177" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 2.4003906,1040.1767 a 7,7 0 0 0 -1.3222656,3.1855 l 3.0546875,0 a 4,4 0 0 1 0.4257813,-1.0273 l -2.1582032,-2.1582 z"
+ id="path4175" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 13.599609,1040.1767 -2.158203,2.1582 a 4,4 0 0 1 0.427735,1.0273 l 3.050781,0 a 7,7 0 0 0 -1.320313,-3.1855 z"
+ id="path4173" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 1.0800781,1045.3622 a 7,7 0 0 0 1.3203125,3.1855 l 2.1582032,-2.1582 a 4,4 0 0 1 -0.4277344,-1.0273 l -3.0507813,0 z"
+ id="path4171" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 11.867188,1045.3622 a 4,4 0 0 1 -0.425782,1.0273 l 2.158203,2.1582 a 7,7 0 0 0 1.322266,-3.1855 l -3.054687,0 z"
+ id="path4169" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 5.9726562,1047.8036 -2.1582031,2.1582 A 7,7 0 0 0 7,1051.2841 l 0,-3.0547 a 4,4 0 0 1 -1.0273438,-0.4258 z"
+ id="path4167" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 10.027344,1047.8036 A 4,4 0 0 1 9,1048.2313 l 0,3.0508 a 7,7 0 0 0 3.185547,-1.3203 l -2.158203,-2.1582 z"
+ id="path4142" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_progress_6.svg b/tools/editor/icons/source/icon_progress_6.svg
new file mode 100644
index 0000000000..3783c528e7
--- /dev/null
+++ b/tools/editor/icons/source/icon_progress_6.svg
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_wait_preview_8.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_progress_6.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="8.2105087"
+ inkscape:cy="9.593577"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 9,1037.4403 0,3.0547 a 4,4 0 0 1 1.027344,0.4258 l 2.158203,-2.1582 A 7,7 0 0 0 9,1037.4403 Z"
+ id="path4179" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 7,1037.4423 a 7,7 0 0 0 -3.1855469,1.3203 l 2.1582031,2.1582 A 4,4 0 0 1 7,1040.4931 l 0,-3.0508 z"
+ id="path4177" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 2.4003906,1040.1767 a 7,7 0 0 0 -1.3222656,3.1855 l 3.0546875,0 a 4,4 0 0 1 0.4257813,-1.0273 l -2.1582032,-2.1582 z"
+ id="path4175" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 13.599609,1040.1767 -2.158203,2.1582 a 4,4 0 0 1 0.427735,1.0273 l 3.050781,0 a 7,7 0 0 0 -1.320313,-3.1855 z"
+ id="path4173" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 1.0800781,1045.3622 a 7,7 0 0 0 1.3203125,3.1855 l 2.1582032,-2.1582 a 4,4 0 0 1 -0.4277344,-1.0273 l -3.0507813,0 z"
+ id="path4171" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 11.867188,1045.3622 a 4,4 0 0 1 -0.425782,1.0273 l 2.158203,2.1582 a 7,7 0 0 0 1.322266,-3.1855 l -3.054687,0 z"
+ id="path4169" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 5.9726562,1047.8036 -2.1582031,2.1582 A 7,7 0 0 0 7,1051.2841 l 0,-3.0547 a 4,4 0 0 1 -1.0273438,-0.4258 z"
+ id="path4167" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 10.027344,1047.8036 A 4,4 0 0 1 9,1048.2313 l 0,3.0508 a 7,7 0 0 0 3.185547,-1.3203 l -2.158203,-2.1582 z"
+ id="path4142" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_progress_7.svg b/tools/editor/icons/source/icon_progress_7.svg
new file mode 100644
index 0000000000..2a2c744b5b
--- /dev/null
+++ b/tools/editor/icons/source/icon_progress_7.svg
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_wait_preview_8.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_progress_7.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="8.2105087"
+ inkscape:cy="9.593577"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 9,1037.4403 0,3.0547 a 4,4 0 0 1 1.027344,0.4258 l 2.158203,-2.1582 A 7,7 0 0 0 9,1037.4403 Z"
+ id="path4179" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 7,1037.4423 a 7,7 0 0 0 -3.1855469,1.3203 l 2.1582031,2.1582 A 4,4 0 0 1 7,1040.4931 l 0,-3.0508 z"
+ id="path4177" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 2.4003906,1040.1767 a 7,7 0 0 0 -1.3222656,3.1855 l 3.0546875,0 a 4,4 0 0 1 0.4257813,-1.0273 l -2.1582032,-2.1582 z"
+ id="path4175" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 13.599609,1040.1767 -2.158203,2.1582 a 4,4 0 0 1 0.427735,1.0273 l 3.050781,0 a 7,7 0 0 0 -1.320313,-3.1855 z"
+ id="path4173" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 1.0800781,1045.3622 a 7,7 0 0 0 1.3203125,3.1855 l 2.1582032,-2.1582 a 4,4 0 0 1 -0.4277344,-1.0273 l -3.0507813,0 z"
+ id="path4171" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 11.867188,1045.3622 a 4,4 0 0 1 -0.425782,1.0273 l 2.158203,2.1582 a 7,7 0 0 0 1.322266,-3.1855 l -3.054687,0 z"
+ id="path4169" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 5.9726562,1047.8036 -2.1582031,2.1582 A 7,7 0 0 0 7,1051.2841 l 0,-3.0547 a 4,4 0 0 1 -1.0273438,-0.4258 z"
+ id="path4167" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 10.027344,1047.8036 A 4,4 0 0 1 9,1048.2313 l 0,3.0508 a 7,7 0 0 0 3.185547,-1.3203 l -2.158203,-2.1582 z"
+ id="path4142" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_progress_8.svg b/tools/editor/icons/source/icon_progress_8.svg
new file mode 100644
index 0000000000..2331aee2e7
--- /dev/null
+++ b/tools/editor/icons/source/icon_progress_8.svg
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_wait_preview_8.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_progress_8.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="8.2105087"
+ inkscape:cy="9.593577"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 9,1037.4403 0,3.0547 a 4,4 0 0 1 1.027344,0.4258 l 2.158203,-2.1582 A 7,7 0 0 0 9,1037.4403 Z"
+ id="path4179" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 7,1037.4423 a 7,7 0 0 0 -3.1855469,1.3203 l 2.1582031,2.1582 A 4,4 0 0 1 7,1040.4931 l 0,-3.0508 z"
+ id="path4177" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 2.4003906,1040.1767 a 7,7 0 0 0 -1.3222656,3.1855 l 3.0546875,0 a 4,4 0 0 1 0.4257813,-1.0273 l -2.1582032,-2.1582 z"
+ id="path4175" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 13.599609,1040.1767 -2.158203,2.1582 a 4,4 0 0 1 0.427735,1.0273 l 3.050781,0 a 7,7 0 0 0 -1.320313,-3.1855 z"
+ id="path4173" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 1.0800781,1045.3622 a 7,7 0 0 0 1.3203125,3.1855 l 2.1582032,-2.1582 a 4,4 0 0 1 -0.4277344,-1.0273 l -3.0507813,0 z"
+ id="path4171" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 11.867188,1045.3622 a 4,4 0 0 1 -0.425782,1.0273 l 2.158203,2.1582 a 7,7 0 0 0 1.322266,-3.1855 l -3.054687,0 z"
+ id="path4169" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 5.9726562,1047.8036 -2.1582031,2.1582 A 7,7 0 0 0 7,1051.2841 l 0,-3.0547 a 4,4 0 0 1 -1.0273438,-0.4258 z"
+ id="path4167" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.19607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 10.027344,1047.8036 A 4,4 0 0 1 9,1048.2313 l 0,3.0508 a 7,7 0 0 0 3.185547,-1.3203 l -2.158203,-2.1582 z"
+ id="path4142" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_progress_bar.svg b/tools/editor/icons/source/icon_progress_bar.svg
new file mode 100644
index 0000000000..1a5458080b
--- /dev/null
+++ b/tools/editor/icons/source/icon_progress_bar.svg
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_progress_bar.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="8.6672289"
+ inkscape:cy="7.9294918"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3,3 C 1.8954305,3 1,3.8954305 1,5 l 0,6 c 0,1.104569 0.8954305,2 2,2 l 10,0 c 1.104569,0 2,-0.895431 2,-2 L 15,5 C 15,3.8954305 14.104569,3 13,3 Z m 0,2 10,0 0,6 -10,0 z"
+ transform="translate(0,1036.3622)"
+ id="rect4140"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sssssssssccccc" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4167"
+ width="1"
+ height="4.0000172"
+ x="4"
+ y="1042.3622" />
+ <rect
+ y="1042.3622"
+ x="6"
+ height="4.0000172"
+ width="1"
+ id="rect4155"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4157"
+ width="1"
+ height="4.0000172"
+ x="8"
+ y="1042.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_proximity_group.svg b/tools/editor/icons/source/icon_proximity_group.svg
new file mode 100644
index 0000000000..041d0c5ee2
--- /dev/null
+++ b/tools/editor/icons/source/icon_proximity_group.svg
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_proximity_group.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="6.6334983"
+ inkscape:cy="8.2009021"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4154"
+ width="2"
+ height="14"
+ x="1"
+ y="1037.3622" />
+ <rect
+ y="1037.3622"
+ x="1"
+ height="2.0000174"
+ width="14"
+ id="rect4156"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="-1051.3622"
+ x="-15"
+ height="14"
+ width="2"
+ id="rect4158"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="scale(-1,-1)" />
+ <rect
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4160"
+ width="14"
+ height="2.0000174"
+ x="-15"
+ y="-1051.3622"
+ transform="scale(-1,-1)" />
+ <circle
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4162"
+ cx="10.499991"
+ cy="1041.8622"
+ r="1.5000087" />
+ <circle
+ r="1.4999913"
+ cy="1046.8622"
+ cx="5.4999914"
+ id="circle4164"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <circle
+ r="1.5000087"
+ cy="1046.8622"
+ cx="10.499991"
+ id="circle4166"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_quad.svg b/tools/editor/icons/source/icon_quad.svg
new file mode 100644
index 0000000000..86bb1979e7
--- /dev/null
+++ b/tools/editor/icons/source/icon_quad.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_quad.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999999"
+ inkscape:cx="10.348747"
+ inkscape:cy="8.3955541"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 1 1 L 1 3 L 1 13 L 1 15 L 3 15 L 15 15 L 15 13 L 15 1 L 3 1 L 1 1 z M 4.4140625 3 L 13 3 L 13 11.585938 L 4.4140625 3 z M 3 4.4140625 L 11.585938 13 L 3 13 L 3 4.4140625 z "
+ transform="translate(0,1036.3622)"
+ id="rect4154" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_quat.svg b/tools/editor/icons/source/icon_quat.svg
new file mode 100644
index 0000000000..36560d9d8f
--- /dev/null
+++ b/tools/editor/icons/source/icon_quat.svg
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_quat.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627418"
+ inkscape:cx="2.0756935"
+ inkscape:cy="11.847423"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 7 1 L 7 7 L 9 7 L 9 1 L 7 1 z M 7 13 L 7 15 L 9 15 L 9 13 L 7 13 z "
+ transform="translate(0,1036.3622)"
+ id="rect4137" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 11,1039.7528 0,2.0137 a 5,2.0000043 0 0 1 2,1.5957 5,2.0000043 0 0 1 -5,2 5,2.0000043 0 0 1 -5,-2 5,2.0000043 0 0 1 2,-1.5977 l 0,-2.0097 a 7,3.9999957 0 0 0 -4,3.6074 7,3.9999957 0 0 0 7,4 7,3.9999957 0 0 0 7,-4 7,3.9999957 0 0 0 -4,-3.6094 z"
+ id="path4190"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_range.svg b/tools/editor/icons/source/icon_range.svg
new file mode 100644
index 0000000000..1dd857ff32
--- /dev/null
+++ b/tools/editor/icons/source/icon_range.svg
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_range.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="6.7342772"
+ inkscape:cy="7.7859674"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4158"
+ width="2"
+ height="10.000017"
+ x="1"
+ y="1039.3622" />
+ <rect
+ y="1043.3622"
+ x="1"
+ height="2.0000348"
+ width="13"
+ id="rect4160"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ y="1039.3622"
+ x="13"
+ height="9.9999657"
+ width="2"
+ id="rect4162"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4137"
+ width="2"
+ height="6.0000172"
+ x="5"
+ y="1041.3622" />
+ <rect
+ y="1041.3622"
+ x="9"
+ height="6"
+ width="2"
+ id="rect4139"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_ray_cast.svg b/tools/editor/icons/source/icon_ray_cast.svg
new file mode 100644
index 0000000000..b8cab72d07
--- /dev/null
+++ b/tools/editor/icons/source/icon_ray_cast.svg
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_ray_cast.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999999"
+ inkscape:cx="7.3699208"
+ inkscape:cy="8.6534602"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4154"
+ width="2"
+ height="9"
+ x="7"
+ y="1037.3622" />
+ <path
+ style="fill:#fc9c9c;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:0.99607843"
+ d="m 4,1046.3622 8,0 -4,5 z"
+ id="path4156"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_ray_cast_2d.svg b/tools/editor/icons/source/icon_ray_cast_2d.svg
new file mode 100644
index 0000000000..faadd41a17
--- /dev/null
+++ b/tools/editor/icons/source/icon_ray_cast_2d.svg
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_ray_cast_2d.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999999"
+ inkscape:cx="7.3699208"
+ inkscape:cy="8.6534602"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#a5b7f5;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4154"
+ width="2"
+ height="9"
+ x="7"
+ y="1037.3622" />
+ <path
+ style="fill:#a5b7f5;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:0.98823529"
+ d="m 4,1046.3622 8,0 -4,5 z"
+ id="path4156"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_ray_shape.svg b/tools/editor/icons/source/icon_ray_shape.svg
new file mode 100644
index 0000000000..0e0f2940ae
--- /dev/null
+++ b/tools/editor/icons/source/icon_ray_shape.svg
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="icon_ray_shape.svg"
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_box_shape.png"
+ inkscape:version="0.91 r13725"
+ version="1.1"
+ id="svg2"
+ viewBox="0 0 16 16"
+ height="16"
+ width="16">
+ <sodipodi:namedview
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-paths="true"
+ inkscape:window-maximized="1"
+ inkscape:window-y="27"
+ inkscape:window-x="0"
+ inkscape:window-height="1016"
+ inkscape:window-width="1920"
+ inkscape:snap-center="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:bbox-nodes="true"
+ inkscape:bbox-paths="true"
+ inkscape:snap-bbox="true"
+ units="px"
+ showgrid="true"
+ inkscape:current-layer="layer1"
+ inkscape:document-units="px"
+ inkscape:cy="10.045124"
+ inkscape:cx="1.7215967"
+ inkscape:zoom="22.627416"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base">
+ <inkscape:grid
+ id="grid3336"
+ type="xygrid"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <defs
+ id="defs4" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(0,-1036.3622)"
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <path
+ style="fill:#a2d2ff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 8,1051.3622 -2,-2 0,-7 2,2 z"
+ id="path4161"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path4165"
+ d="m 8,1047.8622 -2,-1.5 0,-4 2,2 z"
+ style="fill:#2998ff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:#a2d2ff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 8,1037.3622 -6,5 6,4 z"
+ id="path4157"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path4163"
+ d="m 8,1051.3622 2,-2 0,-7 -2,2 z"
+ style="fill:#2998ff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4159"
+ d="m 8,1037.3622 6,5 -6,4 z"
+ style="fill:#2998ff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ sodipodi:nodetypes="cccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_rayito.svg b/tools/editor/icons/source/icon_rayito.svg
new file mode 100644
index 0000000000..56988b9e4f
--- /dev/null
+++ b/tools/editor/icons/source/icon_rayito.svg
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_rayito.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254833"
+ inkscape:cx="7.3867117"
+ inkscape:cy="10.060119"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#ffd684;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4154"
+ width="7"
+ height="7.0710845"
+ x="152.19386"
+ y="1047.8939"
+ transform="matrix(1,0,-0.14142068,0.98994959,0,0)" />
+ <path
+ style="opacity:1;fill:#ffd684;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 6,1043.3622 8,0 -9,8 z"
+ id="rect4156"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_real.svg b/tools/editor/icons/source/icon_real.svg
new file mode 100644
index 0000000000..1a3406ed48
--- /dev/null
+++ b/tools/editor/icons/source/icon_real.svg
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot-design/assets/icons/svg/icon_graph_scalar_uniform.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_real.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="4.517927"
+ inkscape:cy="5.7292687"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <rect
+ style="opacity:1;fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4154"
+ width="2"
+ height="11.000017"
+ x="3"
+ y="1040.3622" />
+ <rect
+ y="1039.3622"
+ x="3"
+ height="2.0000174"
+ width="4"
+ id="rect4156"
+ style="opacity:1;fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="opacity:1;fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 7 1 L 7 3 A 2 2.0000055 0 0 1 9 5 A 2 2.0000055 0 0 1 7 7 L 7 9 A 4 4 0 0 0 11 5 A 4 4 0 0 0 7 1 z "
+ transform="translate(0,1038.3622)"
+ id="path4156" />
+ <rect
+ style="opacity:1;fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4160"
+ width="4"
+ height="2.0000174"
+ x="3"
+ y="1045.3622" />
+ <rect
+ y="-12"
+ x="1049.3622"
+ height="2.0000174"
+ width="1.9999652"
+ id="rect4162"
+ style="opacity:1;fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0,1,-1,0,0,0)" />
+ <path
+ style="opacity:1;fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 7 L 8 9 A 2 2.0000055 0 0 1 10 11 L 12 11 A 4 4 0 0 0 8 7 z "
+ transform="translate(0,1038.3622)"
+ id="path4164" />
+ <rect
+ transform="matrix(0,1,-1,0,0,0)"
+ style="opacity:1;fill:#cf68ea;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4168"
+ width="1.9999652"
+ height="2.0000174"
+ x="1045.3622"
+ y="-8.0000086" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_reference_frame.svg b/tools/editor/icons/source/icon_reference_frame.svg
new file mode 100644
index 0000000000..76c3247f1b
--- /dev/null
+++ b/tools/editor/icons/source/icon_reference_frame.svg
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_reference_frame.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="4.94489"
+ inkscape:cy="9.0515348"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4154"
+ width="1"
+ height="14"
+ x="1"
+ y="1037.3622" />
+ <rect
+ y="1050.3622"
+ x="1"
+ height="0.9999826"
+ width="14"
+ id="rect4156"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4158"
+ width="14"
+ height="0.9999826"
+ x="1"
+ y="1037.3622" />
+ <rect
+ y="1037.3622"
+ x="14"
+ height="14"
+ width="1"
+ id="rect4160"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_region_edit.svg b/tools/editor/icons/source/icon_region_edit.svg
new file mode 100644
index 0000000000..b42a53e88d
--- /dev/null
+++ b/tools/editor/icons/source/icon_region_edit.svg
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_dependency_changed_hl.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_region_edit.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="30.700696"
+ inkscape:cx="5.9007098"
+ inkscape:cy="9.4003021"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4165"
+ width="6"
+ height="6"
+ x="6"
+ y="1042.3622" />
+ <rect
+ y="1037.3622"
+ x="6"
+ height="4.0000348"
+ width="6"
+ id="rect4167"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.32549021;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.32549021;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4169"
+ width="4"
+ height="4.0000348"
+ x="1"
+ y="1037.3622" />
+ <rect
+ y="1042.3622"
+ x="1"
+ height="6.0000348"
+ width="4"
+ id="rect4171"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.32549021;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.32549021;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4173"
+ width="4"
+ height="2.0000174"
+ x="1"
+ y="1049.3622" />
+ <rect
+ y="1049.3622"
+ x="6"
+ height="2.0000174"
+ width="6"
+ id="rect4175"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.32549021;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.32549021;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4177"
+ width="2"
+ height="6.0000348"
+ x="13"
+ y="1042.3622" />
+ <rect
+ y="1037.3622"
+ x="13"
+ height="4.0000348"
+ width="2"
+ id="rect4179"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.32549021;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.32549021;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4181"
+ width="2"
+ height="2.0000174"
+ x="13"
+ y="1049.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_reload_small.svg b/tools/editor/icons/source/icon_reload_small.svg
new file mode 100644
index 0000000000..2d891c2238
--- /dev/null
+++ b/tools/editor/icons/source/icon_reload_small.svg
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_tool_rotate.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_reload_small.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="10.859062"
+ inkscape:cy="8.1812057"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8,1039.3622 a 6.0000172,6.0000172 0 0 0 -6,6 l 2,0 a 4,4 0 0 1 4,-4 4,4 0 0 1 4,4 4,4 0 0 1 -4,4 l 0,2 a 6.0000172,6.0000172 0 0 0 6,-6 6.0000172,6.0000172 0 0 0 -6,-6 z"
+ id="path4138"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:type="star"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4142"
+ sodipodi:sides="3"
+ sodipodi:cx="3"
+ sodipodi:cy="1046.3622"
+ sodipodi:r1="2.236068"
+ sodipodi:r2="1.118034"
+ sodipodi:arg1="1.0471976"
+ sodipodi:arg2="2.0943951"
+ inkscape:flatsided="false"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 4.1180339,1048.2987 -1.6770509,-0.9683 -1.67705101,-0.9682 1.67705101,-0.9683 1.6770511,-0.9682 -1e-7,1.9365 z"
+ inkscape:transform-center-x="0.00013164169"
+ transform="matrix(0,-1.1925797,1.5491989,0,-1618.0232,1050.2732)"
+ inkscape:transform-center-y="0.66664316" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_remote.svg b/tools/editor/icons/source/icon_remote.svg
new file mode 100644
index 0000000000..f5b458c348
--- /dev/null
+++ b/tools/editor/icons/source/icon_remote.svg
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_packed_scene.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_remote.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="5.572511"
+ inkscape:cy="7.1227734"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <circle
+ style="opacity:1;fill:#f0f0f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4157"
+ cx="8"
+ cy="1043.3622"
+ r="2.0000174" />
+ <rect
+ style="opacity:1;fill:#f0f0f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4159"
+ width="2"
+ height="7"
+ x="7"
+ y="1044.3622" />
+ <path
+ style="opacity:1;fill:#f0f0f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8.0878906 1 A 6.0000172 6.0000172 0 0 0 3.7578125 2.7578125 A 6.0000172 6.0000172 0 0 0 3.7578125 11.242188 L 5.1738281 9.8261719 A 4.0000172 4.0000172 0 0 1 4 7 A 4.0000172 4.0000172 0 0 1 8 3 A 4.0000172 4.0000172 0 0 1 12 7 A 4.0000172 4.0000172 0 0 1 10.826172 9.8261719 L 12.242188 11.242188 A 6.0000172 6.0000172 0 0 0 12.242188 2.7578125 A 6.0000172 6.0000172 0 0 0 8.0878906 1 z "
+ transform="translate(0,1036.3622)"
+ id="circle4163" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_remote_transform_2d.svg b/tools/editor/icons/source/icon_remote_transform_2d.svg
new file mode 100644
index 0000000000..479cc0eb25
--- /dev/null
+++ b/tools/editor/icons/source/icon_remote_transform_2d.svg
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_remote_transform.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16"
+ inkscape:cx="6.9441739"
+ inkscape:cy="9.4988931"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5b7f6;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4155"
+ sodipodi:type="arc"
+ sodipodi:cx="744.13245"
+ sodipodi:cy="734.23291"
+ sodipodi:rx="4"
+ sodipodi:ry="4"
+ sodipodi:start="0"
+ sodipodi:end="3.1415927"
+ d="m 748.13245,734.23291 a 4,4 0 0 1 -2,3.4641 4,4 0 0 1 -4,0 4,4 0 0 1 -2,-3.4641 l 4,0 z"
+ inkscape:transform-center-y="0.58575321"
+ transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)"
+ inkscape:transform-center-x="0.58575732" />
+ <circle
+ style="opacity:1;fill:#a5b7f6;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4159"
+ cx="7"
+ cy="1045.3622"
+ r="1" />
+ <path
+ style="opacity:1;fill:#a5b7f6;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 13.242641,1039.1196 a 6.0000172,6.0000172 0 0 0 -8.4852817,0 l 0.7071068,0.7071 a 5.0000172,5.0000172 0 0 1 7.0710679,0 5.0000172,5.0000172 0 0 1 0,7.071 l 0.707107,0.7071 a 6.0000172,6.0000172 0 0 0 0,-8.4852 z"
+ id="circle4163"
+ inkscape:connector-curvature="0"
+ inkscape:transform-center-y="-0.87867618"
+ inkscape:transform-center-x="-0.8786559" />
+ <path
+ style="opacity:1;fill:#a5b7f6;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 11.828427,1040.5338 a 4.0000172,4.0000172 0 0 0 -5.6568541,0 l 0.7071068,0.7071 a 3.0000174,3.0000174 0 0 1 4.2426403,0 3.0000174,3.0000174 0 0 1 0,4.2426 l 0.707107,0.7071 a 4.0000172,4.0000172 0 0 0 0,-5.6568 z"
+ id="circle4168"
+ inkscape:connector-curvature="0"
+ inkscape:transform-center-y="-0.58578284"
+ inkscape:transform-center-x="-0.58576926" />
+ <path
+ style="opacity:1;fill:#a5b7f6;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 10.414214,1041.948 a 2,2 0 0 0 -2.8284276,0 l 0.7071068,0.7071 a 1.0000174,1.0000174 0 0 1 1.4142136,0 1.0000174,1.0000174 0 0 1 0,1.4142 l 0.7071072,0.7071 a 2,2 0 0 0 0,-2.8284 z"
+ id="circle4172"
+ inkscape:connector-curvature="0"
+ inkscape:transform-center-y="-0.29289334"
+ inkscape:transform-center-x="-0.29288664" />
+ <path
+ style="fill:#a5b7f6;fill-opacity:0.98823529;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 1,1051.3622 4,-5 1,0 0,5 z"
+ id="path4181"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_remove.svg b/tools/editor/icons/source/icon_remove.svg
new file mode 100644
index 0000000000..9d75f1e921
--- /dev/null
+++ b/tools/editor/icons/source/icon_remove.svg
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_remove.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_remove.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="7.6907159"
+ inkscape:cy="8.3329344"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 2 5 L 2 13 A 2 2 0 0 0 4 15 L 12 15 A 2 2 0 0 0 14 13 L 14 5 L 2 5 z M 3 7 L 5 7 L 5 13 L 3 13 L 3 7 z M 7 7 L 9 7 L 9 13 L 7 13 L 7 7 z M 11 7 L 13 7 L 13 13 L 11 13 L 11 7 z "
+ transform="translate(0,1036.3622)"
+ id="rect4136" />
+ <rect
+ y="1038.3622"
+ x="1"
+ height="2.0000174"
+ width="14"
+ id="rect4138"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4140"
+ width="6"
+ height="2.0000174"
+ x="5"
+ y="1037.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_rename.svg b/tools/editor/icons/source/icon_rename.svg
new file mode 100644
index 0000000000..41eb10c7fc
--- /dev/null
+++ b/tools/editor/icons/source/icon_rename.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_rename.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_rename.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000001"
+ inkscape:cx="8.1124598"
+ inkscape:cy="7.4898959"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 5 2 L 5 4 L 7 4 L 7 12 L 5 12 L 5 14 L 7 14 C 7.5522847 14 8 13.5523 8 13 C 8 13.5523 8.4477153 14 9 14 L 11 14 L 11 12 L 9 12 L 9 4 L 11 4 L 11 2 L 9 2 C 8.4477153 2 8 2.4477153 8 3 C 8 2.4477153 7.5522847 2 7 2 L 5 2 z "
+ transform="translate(0,1036.3622)"
+ id="rect4138" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_reparent.svg b/tools/editor/icons/source/icon_reparent.svg
new file mode 100644
index 0000000000..65f101c8f7
--- /dev/null
+++ b/tools/editor/icons/source/icon_reparent.svg
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_edit.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_reparent.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.313708"
+ inkscape:cx="-1.4011549"
+ inkscape:cy="8.7567876"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <circle
+ r="2"
+ cy="1049.3622"
+ cx="3"
+ id="circle4277"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <circle
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4279"
+ cx="3"
+ cy="1039.3622"
+ r="2" />
+ <circle
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4281"
+ cx="13"
+ cy="1049.3622"
+ r="2" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ d="m 3,1039.3622 0,10 10,0"
+ id="path4287"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 9,1038.3622 0,2 a 3,3 0 0 1 3,3 l 2,0 a 5.0000172,5.0000172 0 0 0 -5,-5 z"
+ id="path4289"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4294"
+ width="2"
+ height="2"
+ x="12"
+ y="1043.3622" />
+ <path
+ style="fill:#e0e0e0;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
+ d="m 9,1037.3622 0,4 -3,-2 z"
+ id="path4296"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_resource_preloader.svg b/tools/editor/icons/source/icon_resource_preloader.svg
new file mode 100644
index 0000000000..bab1bb4e1e
--- /dev/null
+++ b/tools/editor/icons/source/icon_resource_preloader.svg
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_sprite.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_resource_preloader.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16"
+ inkscape:cx="5.6052155"
+ inkscape:cy="14.599536"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1-2"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <g
+ inkscape:label="Layer 1"
+ id="layer1-2">
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#e0e0e0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="M 7.9628906 1.0019531 A 1.0001 1.0001 0 0 0 7.5527344 1.1054688 L 1.5527344 4.1054688 A 1.0001 1.0001 0 0 0 1 5 L 1 11 A 1.0001 1.0001 0 0 0 1.5527344 11.894531 L 7.5527344 14.894531 A 1.0001 1.0001 0 0 0 8.4472656 14.894531 L 14.447266 11.894531 A 1.0001 1.0001 0 0 0 15 11 L 15 5 A 1.0001 1.0001 0 0 0 14.447266 4.1054688 L 8.4472656 1.1054688 A 1.0001 1.0001 0 0 0 7.9628906 1.0019531 z M 8 3.1191406 L 11.763672 5 L 8 6.8828125 L 4.2363281 5 L 8 3.1191406 z M 3 6.6191406 L 7 8.6191406 L 7 12.382812 L 3 10.382812 L 3 6.6191406 z M 13 6.6191406 L 13 10.382812 L 9 12.382812 L 9 8.6191406 L 13 6.6191406 z "
+ transform="translate(0,1036.3622)"
+ id="path4139" />
+ <path
+ style="fill:#e0e0e0;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
+ d="m 11,1042.3622 -6,-3 -3,2 6,3 z"
+ id="path4214"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_rich_text_label.svg b/tools/editor/icons/source/icon_rich_text_label.svg
new file mode 100644
index 0000000000..4a77dbe672
--- /dev/null
+++ b/tools/editor/icons/source/icon_rich_text_label.svg
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_rich_text_label.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="9.3773364"
+ inkscape:cy="8.3725226"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4157"
+ width="8"
+ height="2"
+ x="1"
+ y="1037.3622" />
+ <rect
+ y="1041.3622"
+ x="1"
+ height="2"
+ width="2"
+ id="rect4159"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4161"
+ width="4"
+ height="2"
+ x="5"
+ y="1041.3622" />
+ <rect
+ y="1045.3622"
+ x="1"
+ height="2"
+ width="8"
+ id="rect4163"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4165"
+ width="4"
+ height="2"
+ x="1"
+ y="1049.3622" />
+ <rect
+ y="1049.3622"
+ x="7"
+ height="2"
+ width="2"
+ id="rect4167"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 12,1048.3622 -2,0 3,3 3,-3 -2,0 0,-8 2,0 -3,-3 -3,3 2,0 z"
+ id="rect4140"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_rigid_body.svg b/tools/editor/icons/source/icon_rigid_body.svg
new file mode 100644
index 0000000000..6bebb5250f
--- /dev/null
+++ b/tools/editor/icons/source/icon_rigid_body.svg
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_animated_sprite.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_rigid_body.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16"
+ inkscape:cx="5.8981998"
+ inkscape:cy="3.2693775"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 1 A 7 7 0 0 0 1 8 A 7 7 0 0 0 1.0351562 8.6992188 A 7 7 0 0 0 1.3125 10.068359 A 7 7 0 0 0 2.2226562 11.953125 A 7 7 0 0 0 2.5253906 12.361328 C 2.5261756 12.358768 2.5265573 12.356076 2.5273438 12.353516 A 7 7 0 0 0 8 15 A 7 7 0 0 0 11.242188 14.197266 C 11.243563 14.197659 11.244719 14.198826 11.246094 14.199219 A 7 7 0 0 0 11.28125 14.177734 A 7 7 0 0 0 11.707031 13.927734 A 7 7 0 0 0 11.876953 13.824219 A 7 7 0 0 0 12.246094 13.554688 A 7 7 0 0 0 12.451172 13.398438 A 7 7 0 0 0 12.792969 13.089844 A 7 7 0 0 0 12.957031 12.935547 A 7 7 0 0 0 13.287109 12.574219 A 7 7 0 0 0 13.427734 12.414062 A 7 7 0 0 0 13.705078 12.041016 A 7 7 0 0 0 13.84375 11.845703 A 7 7 0 0 0 14.0625 11.484375 A 7 7 0 0 0 14.205078 11.234375 A 7 7 0 0 0 14.361328 10.900391 A 7 7 0 0 0 14.5 10.589844 A 7 7 0 0 0 14.607422 10.28125 A 7 7 0 0 0 14.726562 9.9277344 A 7 7 0 0 0 14.814453 9.5585938 A 7 7 0 0 0 14.880859 9.265625 A 7 7 0 0 0 14.9375 8.8652344 A 7 7 0 0 0 14.974609 8.5527344 A 7 7 0 0 0 15 8 A 7 7 0 0 0 10.615234 1.5117188 A 7 7 0 0 0 10.607422 1.5078125 A 7 7 0 0 0 10.605469 1.5078125 A 7 7 0 0 0 9.9902344 1.2949219 A 7 7 0 0 0 9.9453125 1.2792969 A 7 7 0 0 0 9.9394531 1.2773438 A 7 7 0 0 0 9.3886719 1.1464844 A 7 7 0 0 0 9.2480469 1.1152344 A 7 7 0 0 0 8.6972656 1.0429688 A 7 7 0 0 0 8.5546875 1.0253906 A 7 7 0 0 0 8 1 z M 9.9511719 2.3339844 A 6 6 0 0 1 14 8 L 7 8 A 1.9999826 1.9999826 0 0 1 6.0507812 9.6992188 C 7.3958011 11.726012 8.6521082 12.963726 9.9472656 13.667969 A 6 6 0 0 1 8 14 A 6 6 0 0 1 2.9453125 11.230469 C 3.1830255 10.651966 3.4486773 10.090161 3.7714844 9.5742188 A 1.9999826 1.9999826 0 0 1 3 8 L 2 8 A 6 6 0 0 1 3.1230469 4.5136719 C 3.2693647 5.1646014 3.4808033 5.7970038 3.8066406 6.3984375 A 1.9999826 1.9999826 0 0 1 5 6 A 1.9999826 1.9999826 0 0 1 6.0507812 6.3007812 C 7.397198 4.2718995 8.6545329 3.0376638 9.9511719 2.3339844 z "
+ transform="translate(0,1036.3622)"
+ id="circle4189" />
+ <circle
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4195"
+ cx="5"
+ cy="1044.3622"
+ r="2" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_rigid_body_2d.svg b/tools/editor/icons/source/icon_rigid_body_2d.svg
new file mode 100644
index 0000000000..9c8309ecfb
--- /dev/null
+++ b/tools/editor/icons/source/icon_rigid_body_2d.svg
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_animated_sprite.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_rigid_body_2d.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="6.941452"
+ inkscape:cy="2.9508684"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5b7f1;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8,1037.3622 a 7,7 0 0 0 -7,7 7,7 0 0 0 7,7 7,7 0 0 0 7,-7 7,7 0 0 0 -7,-7 z m 0,1 a 6,6 0 0 1 6,6 6,6 0 0 1 -6,6 6,6 0 0 1 -6,-6 6,6 0 0 1 6,-6 z"
+ id="circle4189"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:1;fill:#a5b7f1;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8,1037.3622 a 7,7 0 0 0 -5.087891,2.2051 c 0.104949,1.1207 0.354173,2.1959 0.894532,3.1933 A 1.9999826,1.9999826 0 0 1 5,1042.3622 a 1.9999826,1.9999826 0 0 1 1.050781,0.3008 c 1.787275,-2.6932 3.418131,-3.9904 5.191407,-4.4981 A 7,7 0 0 0 8,1037.3622 Z m -7,7 a 7,7 0 0 0 1.525391,4.3613 c 0.302809,-0.9877 0.71628,-1.9403 1.246093,-2.7871 A 1.9999826,1.9999826 0 0 1 3,1044.3622 l -2,0 z m 6,0 a 1.9999826,1.9999826 0 0 1 -0.949219,1.6992 c 1.788654,2.6953 3.420447,3.9932 5.195313,4.5 A 7,7 0 0 0 15,1044.3622 l -8,0 z"
+ id="path4174"
+ inkscape:connector-curvature="0" />
+ <circle
+ style="opacity:1;fill:#a5b7f2;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4195"
+ cx="5"
+ cy="1044.3622"
+ r="2" />
+ <path
+ style="opacity:1;fill:#a5b7f2;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 45,1037.3585 a 7,7 0 0 0 -7,7 7,7 0 0 0 7,7 7,7 0 0 0 7,-7 7,7 0 0 0 -7,-7 z m 0,1 a 6.0000172,6.0000172 0 0 1 6,6 6.0000172,6.0000172 0 0 1 -6,6 6.0000172,6.0000172 0 0 1 -6,-6 6.0000172,6.0000172 0 0 1 6,-6 z"
+ id="path4199"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#a5b7f3;fill-opacity:0.98823529;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 38,1044.3585 c 5,0.01 9,0.01 14,0 -2,-2.9934 -5,-4 -7,-4 -2,0 -5,1.0066 -7,4 z"
+ id="path4204"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccsc" />
+ <path
+ style="opacity:1;fill:#a3b6f2;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 38,1044.3585 c 0,3.866 3.134007,7 7,7 3.865993,0 7,-3.134 7,-7 -2,2.9933 -5,4 -7,4 -2,0 -5,-1.0067 -7,-4 z"
+ id="path4224"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:1;fill:#a3b6f2;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m -9,1037.3622 a 7,7 0 0 0 -7,7 7,7 0 0 0 7,7 7,7 0 0 0 7,-7 7,7 0 0 0 -7,-7 z m 0,1 a 6,6 0 0 1 6,6 6,6 0 0 1 -6,6 6,6 0 0 1 -6,-6 6,6 0 0 1 6,-6 z"
+ id="path4230"
+ inkscape:connector-curvature="0" />
+ <circle
+ style="opacity:1;fill:#a3b6f2;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4235"
+ cx="-9"
+ cy="1044.3622"
+ r="2" />
+ <path
+ style="opacity:1;fill:#a3b6f2;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m -9,1037.3622 a 7,7 0 0 0 -3.5,0.9375 l 3.5,6.0625 3.5,-6.0625 a 7,7 0 0 0 -3.5,-0.9375 z m 0,7 3.5,6.0625 a 7,7 0 0 0 2.5625,-2.5625 7,7 0 0 0 0.9375,-3.5 l -7,0 z m 0,0 -7,0 a 7,7 0 0 0 0.9375,3.5 7,7 0 0 0 2.5625,2.5625 l 3.5,-6.0625 z"
+ id="path4237"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_room.svg b/tools/editor/icons/source/icon_room.svg
new file mode 100644
index 0000000000..8a2ccc30c8
--- /dev/null
+++ b/tools/editor/icons/source/icon_room.svg
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_room.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="11.210875"
+ inkscape:cy="4.4642701"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <g
+ id="layer1-7"
+ inkscape:label="Layer 1"
+ transform="translate(0,1.1802001e-5)"
+ style="stroke:#fc9c9c;stroke-opacity:0.99607843">
+ <path
+ sodipodi:nodetypes="ccccccc"
+ inkscape:connector-curvature="0"
+ id="path4139"
+ d="m 8,1050.3622 -6,-3 0,-6 6,-3 6,3 0,6 z"
+ style="fill:none;fill-rule:evenodd;stroke:#fc9c9c;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843" />
+ </g>
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="M 7 2 L 7 7.3828125 L 1.5527344 10.105469 L 2.4472656 11.894531 L 8 9.1191406 L 13.552734 11.894531 L 14.447266 10.105469 L 9 7.3828125 L 9 2 L 7 2 z "
+ transform="translate(0,1036.3622)"
+ id="path4200" />
+ <path
+ style="fill:#fc9c9c;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:0.99607843"
+ d="m 2,1047.3622 0,-6 6,-3 0,6 z"
+ id="path4209"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_rotate_0.svg b/tools/editor/icons/source/icon_rotate_0.svg
new file mode 100644
index 0000000000..710edc8fee
--- /dev/null
+++ b/tools/editor/icons/source/icon_rotate_0.svg
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_tool_rotate.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_rotate_0.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="6.0020505"
+ inkscape:cy="9.5378523"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4155"
+ width="2"
+ height="7.0000172"
+ x="7"
+ y="1038.3622" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 1 A 7 7 0 0 0 1 8 A 7 7 0 0 0 8 15 A 7 7 0 0 0 15 8 A 7 7 0 0 0 8 1 z M 8 3 A 5 5 0 0 1 13 8 A 5 5 0 0 1 8 13 A 5 5 0 0 1 3 8 A 5 5 0 0 1 8 3 z "
+ transform="translate(0,1036.3622)"
+ id="path4157" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_rotate_180.svg b/tools/editor/icons/source/icon_rotate_180.svg
new file mode 100644
index 0000000000..ba44fa295d
--- /dev/null
+++ b/tools/editor/icons/source/icon_rotate_180.svg
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_tool_rotate.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_rotate_180.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="7.9698535"
+ inkscape:cy="9.9922105"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8.0000001,1038.3622 a 6,6 0 0 1 5.9999999,6 l -6,0 z"
+ id="path4183" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4155"
+ width="2"
+ height="7.0000172"
+ x="7"
+ y="1038.3622"
+ inkscape:transform-center-y="-2.5000088" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 1 A 7 7 0 0 0 1 8 A 7 7 0 0 0 8 15 A 7 7 0 0 0 15 8 A 7 7 0 0 0 8 1 z M 8 3 A 5 5 0 0 1 13 8 A 5 5 0 0 1 8 13 A 5 5 0 0 1 3 8 A 5 5 0 0 1 8 3 z "
+ transform="translate(0,1036.3622)"
+ id="path4157" />
+ <rect
+ inkscape:transform-center-y="2.499974"
+ y="-1050.3622"
+ x="-9.0000172"
+ height="7.0000172"
+ width="2"
+ id="rect4181"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="scale(-1,-1)"
+ inkscape:transform-center-x="-1.7183069e-05" />
+ <path
+ id="path4205"
+ d="m 14,1044.3622 a 6,6 0 0 1 -6,6 l 0,-6 z"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ inkscape:connector-curvature="0"
+ inkscape:transform-center-x="-3"
+ inkscape:transform-center-y="3" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_rotate_270.svg b/tools/editor/icons/source/icon_rotate_270.svg
new file mode 100644
index 0000000000..403321cb89
--- /dev/null
+++ b/tools/editor/icons/source/icon_rotate_270.svg
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_tool_rotate.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_rotate_270.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="7.9698535"
+ inkscape:cy="9.9922105"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8.0000001,1038.3622 a 6,6 0 0 1 5.9999999,6 l -6,0 z"
+ id="path4183" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4155"
+ width="2"
+ height="7.0000172"
+ x="7"
+ y="1038.3622"
+ inkscape:transform-center-y="-2.5000088" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 1 A 7 7 0 0 0 1 8 A 7 7 0 0 0 8 15 A 7 7 0 0 0 15 8 A 7 7 0 0 0 8 1 z M 8 3 A 5 5 0 0 1 13 8 A 5 5 0 0 1 8 13 A 5 5 0 0 1 3 8 A 5 5 0 0 1 8 3 z "
+ transform="translate(0,1036.3622)"
+ id="path4157" />
+ <rect
+ inkscape:transform-center-y="-1.7416931e-05"
+ y="2.0000174"
+ x="-1045.3622"
+ height="7.0000172"
+ width="2"
+ id="rect4181"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0,-1,1,0,0,0)"
+ inkscape:transform-center-x="2.499974" />
+ <path
+ id="path4205"
+ d="m 8,1050.3622 a 6,6 0 0 1 -6,-6 l 6,0 z"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ inkscape:connector-curvature="0"
+ inkscape:transform-center-x="3"
+ inkscape:transform-center-y="2.9999999" />
+ <path
+ inkscape:transform-center-y="2.9999999"
+ inkscape:transform-center-x="-3"
+ inkscape:connector-curvature="0"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 14,1044.3622 a 6,6 0 0 1 -6.0000001,6 l 0,-6 z"
+ id="path4226" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_rotate_90.svg b/tools/editor/icons/source/icon_rotate_90.svg
new file mode 100644
index 0000000000..f6b7d84032
--- /dev/null
+++ b/tools/editor/icons/source/icon_rotate_90.svg
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_tool_rotate.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_rotate_90.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="7.9698535"
+ inkscape:cy="9.9922105"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8.0000001,1038.3622 a 6,6 0 0 1 5.9999999,6 l -6,0 z"
+ id="path4183" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4155"
+ width="2"
+ height="7.0000172"
+ x="7"
+ y="1038.3622"
+ inkscape:transform-center-y="-2.5000088" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 1 A 7 7 0 0 0 1 8 A 7 7 0 0 0 8 15 A 7 7 0 0 0 15 8 A 7 7 0 0 0 8 1 z M 8 3 A 5 5 0 0 1 13 8 A 5 5 0 0 1 8 13 A 5 5 0 0 1 3 8 A 5 5 0 0 1 8 3 z "
+ transform="translate(0,1036.3622)"
+ id="path4157" />
+ <rect
+ inkscape:transform-center-y="-1.7383069e-05"
+ y="-14.000017"
+ x="1043.3622"
+ height="7.0000172"
+ width="2"
+ id="rect4181"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0,1,-1,0,0,0)"
+ inkscape:transform-center-x="-2.5000086" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_sample.svg b/tools/editor/icons/source/icon_sample.svg
new file mode 100644
index 0000000000..782e07a012
--- /dev/null
+++ b/tools/editor/icons/source/icon_sample.svg
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_dependency_changed_hl.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_sample.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="30.700696"
+ inkscape:cx="10.421269"
+ inkscape:cy="6.7982798"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4156"
+ width="1"
+ height="1.999948"
+ x="-14"
+ y="1043.3622"
+ transform="scale(-1,1)" />
+ <rect
+ y="1039.3622"
+ x="-12"
+ height="10.000017"
+ width="1"
+ id="rect4158"
+ style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ transform="scale(-1,1)" />
+ <rect
+ style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4160"
+ width="1"
+ height="7.9999475"
+ x="-10"
+ y="1040.3622"
+ transform="scale(-1,1)" />
+ <rect
+ y="1037.3622"
+ x="-8"
+ height="13.999949"
+ width="1"
+ id="rect4162"
+ style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ transform="scale(-1,1)" />
+ <rect
+ style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4164"
+ width="1"
+ height="12.000017"
+ x="-6"
+ y="1038.3622"
+ transform="scale(-1,1)" />
+ <rect
+ y="1041.3622"
+ x="-4"
+ height="6.0000172"
+ width="1"
+ id="rect4166"
+ style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ transform="scale(-1,1)" />
+ <rect
+ style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4168"
+ width="1"
+ height="1.9999824"
+ x="-2"
+ y="1043.3622"
+ transform="scale(-1,1)" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_sample_player.svg b/tools/editor/icons/source/icon_sample_player.svg
new file mode 100644
index 0000000000..2254718a9b
--- /dev/null
+++ b/tools/editor/icons/source/icon_sample_player.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_sample_player.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999999"
+ inkscape:cx="10.445016"
+ inkscape:cy="6.2884774"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 8 1 L 4 6 L 1 6 L 1 10 L 4 10 L 8 15 L 8 1 z M 13 3 L 13 13 L 14 13 L 14 3 L 13 3 z M 10 6 L 10 11 L 11 11 L 11 6 L 10 6 z "
+ transform="translate(0,1036.3622)"
+ id="rect4154" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_sample_player_2d.svg b/tools/editor/icons/source/icon_sample_player_2d.svg
new file mode 100644
index 0000000000..33a7eba019
--- /dev/null
+++ b/tools/editor/icons/source/icon_sample_player_2d.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_sample_player_2d.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999999"
+ inkscape:cx="8.6950163"
+ inkscape:cy="7.1009775"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5b7f7;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 8 1 L 4 6 L 1 6 L 1 10 L 4 10 L 8 15 L 8 1 z M 13 3 L 13 13 L 14 13 L 14 3 L 13 3 z M 10 6 L 10 11 L 11 11 L 11 6 L 10 6 z "
+ transform="translate(0,1036.3622)"
+ id="rect4154" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_save.svg b/tools/editor/icons/source/icon_save.svg
new file mode 100644
index 0000000000..9307537d4b
--- /dev/null
+++ b/tools/editor/icons/source/icon_save.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_save.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_save.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999999"
+ inkscape:cx="12.546235"
+ inkscape:cy="8.6646398"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3,1 C 1.8954305,1 1,1.8954305 1,3 l 0,10 c 0,1.104569 0.8954305,2 2,2 l 10,0 c 1.104569,0 2,-0.895431 2,-2 L 15,5 11,1 Z m 0,0 8,0 0,6 -8,0 z m 5,8 c 1.1045695,0 2,0.8954305 2,2 0,1.104569 -0.8954305,2 -2,2 C 6.8954305,13 6,12.104569 6,11 6,9.8954305 6.8954305,9 8,9 Z"
+ transform="translate(0,1036.3622)"
+ id="rect4135"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ssssssccscccccsssss" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4143"
+ width="3"
+ height="4.9999828"
+ x="4"
+ y="1037.3622" />
+ <path
+ style="fill:#e0e0e0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 11,1037.3622 1,0 3,3 0,2 -4,0 z"
+ id="path4145"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_script.svg b/tools/editor/icons/source/icon_script.svg
new file mode 100644
index 0000000000..8073692ce8
--- /dev/null
+++ b/tools/editor/icons/source/icon_script.svg
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_script.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254833"
+ inkscape:cx="2.4359625"
+ inkscape:cy="9.1567888"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 6 1 L 6 2 A 1 1 0 0 0 5 3 L 5 13 L 4 13 L 4 11 L 2 11 L 2 13 A 1 1 0 0 0 2.5 13.865234 A 1 1 0 0 0 3 14 L 3 15 L 10 15 A 2 2 0 0 0 12 13 L 12 5 L 15 5 L 15 3 A 2 2 0 0 0 13 1 L 6 1 z "
+ transform="translate(0,1036.3622)"
+ id="rect4255" />
+ <path
+ style="opacity:1;fill:#b4b4b4;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 6 1 C 4.8954305 1 4 1.8954305 4 3 L 4 10 L 2 10 L 1 10 L 1 11 L 1 13 C 1 14.104569 1.8954305 15 3 15 C 4.1045695 15 5 14.104569 5 13 L 5 3 C 5 2.4477153 5.4477153 2 6 2 C 6.5522847 2 7 2.4477153 7 3 L 7 4 L 7 5 L 7 6 L 8 6 L 12 6 L 12 5 L 8 5 L 8 4 L 8 3 C 8 1.8954305 7.1045695 1 6 1 z M 2 11 L 4 11 L 4 13 C 4 13.552285 3.5522847 14 3 14 C 2.4477153 14 2 13.552285 2 13 L 2 11 z "
+ transform="translate(0,1036.3622)"
+ id="path4265" />
+ <circle
+ cy="1048.3622"
+ cx="3"
+ id="ellipse4234"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ ry="1.0000174"
+ rx="1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_scroll_bar.svg b/tools/editor/icons/source/icon_scroll_bar.svg
new file mode 100644
index 0000000000..2f007c7c94
--- /dev/null
+++ b/tools/editor/icons/source/icon_scroll_bar.svg
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_h_scroll_bar.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="9.1371771"
+ inkscape:cy="7.8450604"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-paths="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3,3 C 1.8954305,3 1,3.8954305 1,5 l 0,6 c 0,1.104569 0.8954305,2 2,2 l 10,0 c 1.104569,0 2,-0.895431 2,-2 L 15,5 C 15,3.8954305 14.104569,3 13,3 Z m 0,2 10,0 0,6 -10,0 z"
+ transform="translate(0,1036.3622)"
+ id="rect4140"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sssssssssccccc" />
+ <rect
+ style="opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4181"
+ width="4"
+ height="4"
+ x="4"
+ y="1042.3622" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4187"
+ width="4"
+ height="4"
+ x="4"
+ y="1042.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_scroll_container.svg b/tools/editor/icons/source/icon_scroll_container.svg
new file mode 100644
index 0000000000..d694b646e0
--- /dev/null
+++ b/tools/editor/icons/source/icon_scroll_container.svg
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_scroll_container.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="8.2189611"
+ inkscape:cy="10.454966"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3,1 C 1.8954305,1 1,1.8954305 1,3 l 0,10 c 0,1.104569 0.8954305,2 2,2 l 10,0 c 1.104569,0 2,-0.895431 2,-2 L 15,3 C 15,1.8954305 14.104569,1 13,1 Z m 0,2 10,0 0,10 -10,0 z"
+ transform="translate(0,1036.3622)"
+ id="rect4140"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sssssssssccccc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path4161"
+ d="m 10,1042.3622 0,4 2,-2 z"
+ style="fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 6,1042.3622 0,4 -2,-2 z"
+ id="path4155"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 6,1042.3622 4,0 -2,-2 z"
+ id="path4157"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path4159"
+ d="m 6,1046.3622 4,0 -2,2 z"
+ style="fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_shader.svg b/tools/editor/icons/source/icon_shader.svg
new file mode 100644
index 0000000000..4c7b5aafc1
--- /dev/null
+++ b/tools/editor/icons/source/icon_shader.svg
@@ -0,0 +1,275 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_canvas_item_material.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_shader.svg">
+ <defs
+ id="defs4">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4174">
+ <stop
+ style="stop-color:#ff5353;stop-opacity:1"
+ offset="0"
+ id="stop4176" />
+ <stop
+ id="stop4186"
+ offset="0.29999271"
+ style="stop-color:#f1e17a;stop-opacity:1" />
+ <stop
+ id="stop4184"
+ offset="0.55557561"
+ style="stop-color:#6bfcef;stop-opacity:1" />
+ <stop
+ style="stop-color:#9765fd;stop-opacity:1"
+ offset="0.8889094"
+ id="stop4188" />
+ <stop
+ style="stop-color:#ff6092;stop-opacity:1"
+ offset="1"
+ id="stop4178" />
+ </linearGradient>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4253">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ id="path4255"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4174"
+ id="radialGradient4161"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2857125,1.428583,-1.4285914,1.2857189,1540.5411,-308.80327)"
+ cx="7.5384259"
+ cy="1041.7489"
+ fx="7.5384259"
+ fy="1041.7489"
+ r="7" />
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4199">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4201"
+ d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </clipPath>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254832"
+ inkscape:cx="1.7751371"
+ inkscape:cy="8.8192435"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <g
+ id="g4181"
+ mask="none"
+ clip-path="url(#clipPath4199)"
+ transform="matrix(0.59259259,0,0,0.66666674,-1.7777777,353.454)">
+ <rect
+ y="1025.8622"
+ x="3"
+ height="3.0000043"
+ width="27"
+ id="rect4159"
+ style="fill:#ff7070;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#ffeb70;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4161"
+ width="27"
+ height="3.0000041"
+ x="3"
+ y="1028.8622" />
+ <rect
+ style="fill:#9dff70;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4163"
+ width="27"
+ height="2.9999995"
+ x="3"
+ y="1031.8622" />
+ <rect
+ y="1034.8622"
+ x="3"
+ height="3.0000031"
+ width="27"
+ id="rect4165"
+ style="fill:#70ffb9;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ y="1037.8622"
+ x="3"
+ height="3.0000029"
+ width="27"
+ id="rect4167"
+ style="fill:#70deff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#ff70ac;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4169"
+ width="27"
+ height="2.9999976"
+ x="3"
+ y="1043.8622" />
+ <rect
+ style="fill:#9f70ff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4146"
+ width="27"
+ height="3.0000029"
+ x="3"
+ y="1040.8622" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 29.5,1037.3622 -7,3 0,8 7,3 7,-3 0,-8 -7,-3 z"
+ id="path4151" />
+ <path
+ style="fill:#ffff91;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 22.5,1046.3622 7,3 7,-3 -7,-3 z"
+ id="path4223"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4221"
+ d="m 22.5,1043.3622 7,3 7,-3 -7,-3 z"
+ style="fill:#ff91ff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 29.5,1045.3622 -7,-3 0,-2 7,3 z"
+ id="path4143"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4145"
+ d="m 29.5,1045.3622 7,-3 0,-2 -7,3 z"
+ style="fill:#00d8d8;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#91ffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 22.5,1040.3622 7,3 7,-3 -7,-3 z"
+ id="path4149"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ style="fill:#d800d8;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 29.5,1048.3622 7,-3 0,-2 -7,3 z"
+ id="path4208"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4215"
+ d="m 29.5,1048.3622 -7,-3 0,-2 7,3 z"
+ style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4217"
+ d="m 29.5,1051.3622 7,-3 0,-2 -7,3 z"
+ style="fill:#d8d800;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 29.5,1051.3622 -7,-3 0,-2 7,3 z"
+ id="path4219"
+ inkscape:connector-curvature="0" />
+ <g
+ inkscape:label="Layer 1"
+ id="layer1-5"
+ transform="translate(18,1)">
+ <path
+ id="path4151-1"
+ d="m 29.5,1037.3622 -7,3 0,8 7,3 7,-3 0,-8 -7,-3 z"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4149-2"
+ d="m 22.5,1040.3622 7,3 7,-3 -7,-3 z"
+ style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path4143-0"
+ d="m 29.5,1051.3622 -7,-3 0,-8 7,3 z"
+ style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 29.5,1051.3622 7,-3 0,-8 -7,3 z"
+ id="path4145-0"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ style="opacity:1;fill:url(#radialGradient4161);fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 64,1037.3622 a 7,7.0000001 0 0 0 -7,7 7,7.0000001 0 0 0 7,7 7,7.0000001 0 0 0 7,-7 7,7.0000001 0 0 0 -7,-7 z m -2,2 a 2,2 0 0 1 2,2 2,2 0 0 1 -2,2 2,2 0 0 1 -2,-2 2,2 0 0 1 2,-2 z"
+ id="path4159"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_signal.svg b/tools/editor/icons/source/icon_signal.svg
new file mode 100644
index 0000000000..b4d3ff5ac8
--- /dev/null
+++ b/tools/editor/icons/source/icon_signal.svg
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_dependency_changed_hl.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_signal.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="21.70867"
+ inkscape:cx="11.546427"
+ inkscape:cy="8.2846975"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4352"
+ width="6"
+ height="2.0000174"
+ x="5"
+ y="1043.3622" />
+ <path
+ transform="matrix(0,1.2810265,-0.92450034,0,-948.29952,1037.9571)"
+ inkscape:transform-center-y="-9.6789057e-05"
+ d="m 8.122499,-1036.5594 -3.122499,0 -3.122499,0 1.5612495,-2.7042 L 5,-1041.9677 l 1.5612495,2.7041 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="false"
+ sodipodi:arg2="1.5707963"
+ sodipodi:arg1="0.52359878"
+ sodipodi:r2="1.8027756"
+ sodipodi:r1="3.6055512"
+ sodipodi:cy="-1038.3622"
+ sodipodi:cx="5"
+ sodipodi:sides="3"
+ id="path4435"
+ style="fill:#ff8484;fill-opacity:1;stroke:none;stroke-linecap:round;stroke-opacity:1"
+ sodipodi:type="star"
+ inkscape:transform-center-x="1.1667546" />
+ <rect
+ style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4176"
+ width="2"
+ height="10"
+ x="1"
+ y="1039.3622" />
+ <rect
+ y="1047.3622"
+ x="3"
+ height="2.0000174"
+ width="4"
+ id="rect4178"
+ style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4180"
+ width="4"
+ height="2.0000174"
+ x="3"
+ y="1039.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_skeleton.svg b/tools/editor/icons/source/icon_skeleton.svg
new file mode 100644
index 0000000000..2850b0331d
--- /dev/null
+++ b/tools/editor/icons/source/icon_skeleton.svg
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_skeleton.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="8.1423285"
+ inkscape:cy="8.6304475"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 6 2 A 4 4 0 0 0 2 6 A 4 4 0 0 0 5 9.8691406 L 5 9 L 6 9 L 6 10 L 7 10 L 7 9 L 8 9 L 9 9 L 9 10 L 10 10 L 10 9 L 11 9 L 11 9.8671875 A 4 4 0 0 0 14 6 A 4 4 0 0 0 10 2 L 6 2 z M 5 5 A 1.0000174 1.0000174 0 0 1 6 6 A 1.0000174 1.0000174 0 0 1 5 7 A 1.0000174 1.0000174 0 0 1 4 6 A 1.0000174 1.0000174 0 0 1 5 5 z M 11 5 A 1.0000174 1.0000174 0 0 1 12 6 A 1.0000174 1.0000174 0 0 1 11 7 A 1.0000174 1.0000174 0 0 1 10 6 A 1.0000174 1.0000174 0 0 1 11 5 z M 7 7 L 9 7 L 9 8 L 7 8 L 7 7 z "
+ transform="translate(0,1036.3622)"
+ id="path4204" />
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 4 9 L 4 13 L 5 13 L 5 9 L 4 9 z M 11 9 L 11 13 L 12 13 L 12 9 L 11 9 z M 6 12 L 6 13 L 6 15 L 10 15 L 10 13 L 10 12 L 9 12 L 9 13 L 7 13 L 7 12 L 6 12 z "
+ transform="translate(0,1036.3622)"
+ id="rect4222" />
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="path4238"
+ sodipodi:type="arc"
+ sodipodi:cx="6"
+ sodipodi:cy="1049.3622"
+ sodipodi:rx="2"
+ sodipodi:ry="2"
+ sodipodi:start="0"
+ sodipodi:end="3.1415927"
+ d="m 8,1049.3622 a 2,2 0 0 1 -1,1.732 2,2 0 0 1 -2.0000001,0 A 2,2 0 0 1 4,1049.3622 l 2,0 z" />
+ <path
+ d="m 12,1049.3622 a 2,2 0 0 1 -1,1.732 2,2 0 0 1 -2.0000001,0 A 2,2 0 0 1 8,1049.3622 l 2,0 z"
+ sodipodi:end="3.1415927"
+ sodipodi:start="0"
+ sodipodi:ry="2"
+ sodipodi:rx="2"
+ sodipodi:cy="1049.3622"
+ sodipodi:cx="10"
+ sodipodi:type="arc"
+ id="path4248"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_slider_joint.svg b/tools/editor/icons/source/icon_slider_joint.svg
new file mode 100644
index 0000000000..021a295186
--- /dev/null
+++ b/tools/editor/icons/source/icon_slider_joint.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_slider_joint.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="3.8333359"
+ inkscape:cy="8.8668138"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 15,1037.3622 -5,0 0,6 -5,0 0,2 5,0 0,6 5,0 0,-14 z m -7,0 -5,0 -2,0 0,4 0,10 2,0 5,0 0,-4 -5,0 0,-6 5,0 0,-4 z"
+ id="rect4161"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_slot.svg b/tools/editor/icons/source/icon_slot.svg
new file mode 100644
index 0000000000..d613f1e1a4
--- /dev/null
+++ b/tools/editor/icons/source/icon_slot.svg
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_dependency_changed_hl.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_slot.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="21.70867"
+ inkscape:cx="9.141828"
+ inkscape:cy="9.2467418"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="fill:#84ffb1;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4352"
+ width="6"
+ height="2.0000174"
+ x="1"
+ y="1043.3622" />
+ <path
+ transform="matrix(0,1.2810265,-0.92450034,0,-952.29952,1037.9571)"
+ inkscape:transform-center-y="-9.6789057e-05"
+ d="m 8.122499,-1036.5594 -3.122499,0 -3.122499,0 1.5612495,-2.7042 L 5,-1041.9677 l 1.5612495,2.7041 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="false"
+ sodipodi:arg2="1.5707963"
+ sodipodi:arg1="0.52359878"
+ sodipodi:r2="1.8027756"
+ sodipodi:r1="3.6055512"
+ sodipodi:cy="-1038.3622"
+ sodipodi:cx="5"
+ sodipodi:sides="3"
+ id="path4435"
+ style="fill:#84ffb1;fill-opacity:1;stroke:none;stroke-linecap:round;stroke-opacity:1"
+ sodipodi:type="star"
+ inkscape:transform-center-x="1.1667546" />
+ <path
+ style="opacity:1;fill:#84ffb1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 15,1039.3622 0,10 -2,0 -4,0 0,-2 4,0 0,-6 -4,0 0,-2 4,0 2,0 z"
+ id="rect4176"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_snap.svg b/tools/editor/icons/source/icon_snap.svg
new file mode 100644
index 0000000000..04059eb6a2
--- /dev/null
+++ b/tools/editor/icons/source/icon_snap.svg
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_dependency_changed_hl.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_snap.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="30.700696"
+ inkscape:cx="6.9452673"
+ inkscape:cy="8.3355658"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 1 A 7 7 0 0 0 1 8 L 4 8 A 4.0000172 4.0000172 0 0 1 8 4 A 4.0000172 4.0000172 0 0 1 12 8 L 15 8 A 7 7 0 0 0 8 1 z "
+ transform="translate(0,1036.3622)"
+ id="path4137" />
+ <rect
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4156"
+ width="3"
+ height="3.0000174"
+ x="1"
+ y="1048.3622" />
+ <rect
+ style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4158"
+ width="3"
+ height="4"
+ x="1"
+ y="1044.3622" />
+ <rect
+ y="1044.3622"
+ x="12"
+ height="4"
+ width="3"
+ id="rect4160"
+ style="opacity:1;fill:#ff8484;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ y="1048.3622"
+ x="12"
+ height="3.0000174"
+ width="3"
+ id="rect4162"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_sound_room_params.svg b/tools/editor/icons/source/icon_sound_room_params.svg
new file mode 100644
index 0000000000..a71c126ddc
--- /dev/null
+++ b/tools/editor/icons/source/icon_sound_room_params.svg
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_sound_room_params.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999999"
+ inkscape:cx="6.3922684"
+ inkscape:cy="10.780991"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="m 8,1037.3622 -4,5 -3,0 0,4 3,0 4,5 0,-14 z"
+ id="path4158" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="m 13,1039.3622 0,10 1,0 0,-10 -1,0 z"
+ id="path4156" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="m 10,1039.3622 0,10 1,0 0,-10 -1,0 z"
+ id="rect4154"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4160"
+ width="3"
+ height="1"
+ x="9"
+ y="1041.3622" />
+ <rect
+ y="1046.3622"
+ x="12"
+ height="1"
+ width="3"
+ id="rect4162"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_spatial.svg b/tools/editor/icons/source/icon_spatial.svg
new file mode 100644
index 0000000000..0d03754016
--- /dev/null
+++ b/tools/editor/icons/source/icon_spatial.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_spatial.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="5.5236428"
+ inkscape:cy="6.3139768"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 2 A 6 6 0 0 0 2 8 A 6 6 0 0 0 8 14 A 6 6 0 0 0 14 8 A 6 6 0 0 0 8 2 z M 8 4 A 4 4 0 0 1 12 8 A 4 4 0 0 1 8 12 A 4 4 0 0 1 4 8 A 4 4 0 0 1 8 4 z "
+ transform="translate(0,1036.3622)"
+ id="path4154" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_spatial_sample_player.svg b/tools/editor/icons/source/icon_spatial_sample_player.svg
new file mode 100644
index 0000000000..9b5f5d9af6
--- /dev/null
+++ b/tools/editor/icons/source/icon_spatial_sample_player.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_spatial_sample_player.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999999"
+ inkscape:cx="10.757516"
+ inkscape:cy="7.2259775"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 8 1 L 4 6 L 1 6 L 1 10 L 4 10 L 8 15 L 8 1 z M 13 3 L 13 13 L 14 13 L 14 3 L 13 3 z M 10 6 L 10 11 L 11 11 L 11 6 L 10 6 z "
+ transform="translate(0,1036.3622)"
+ id="rect4154" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_spatial_stream_player.svg b/tools/editor/icons/source/icon_spatial_stream_player.svg
new file mode 100644
index 0000000000..bd081a3dc2
--- /dev/null
+++ b/tools/editor/icons/source/icon_spatial_stream_player.svg
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_spatial_stream_player.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="14.523046"
+ inkscape:cy="8.8504614"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 5,2 C 4.4477153,2 4,2.4477153 4,3 l 0,1 0,7 -2,0 c -0.5522847,0 -1,0.447715 -1,1 l 0,2 c 0,0.552285 0.4477153,1 1,1 l 2,0 1,0 c 0.5522847,0 1,-0.447715 1,-1 l 0,-3 0,-7 6,0 0,5 -2,0 C 9.4477153,9 9,9.4477153 9,10 l 0,2 c 0,0.552285 0.4477153,1 1,1 l 3,0 c 0.552285,0 1,-0.447715 1,-1 L 14,9 14,3 C 14,2.4477153 13.552285,2 13,2 L 6,2 Z"
+ transform="translate(0,1036.3622)"
+ id="rect4155"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ssccsssscssccccsssssscsscs" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_sphere_shape.svg b/tools/editor/icons/source/icon_sphere_shape.svg
new file mode 100644
index 0000000000..b1bca49f97
--- /dev/null
+++ b/tools/editor/icons/source/icon_sphere_shape.svg
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="icon_sphere_shape.svg"
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_box_shape.png"
+ inkscape:version="0.91 r13725"
+ version="1.1"
+ id="svg2"
+ viewBox="0 0 16 16"
+ height="16"
+ width="16">
+ <sodipodi:namedview
+ inkscape:snap-smooth-nodes="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-paths="false"
+ inkscape:window-maximized="1"
+ inkscape:window-y="27"
+ inkscape:window-x="0"
+ inkscape:window-height="1016"
+ inkscape:window-width="1920"
+ inkscape:snap-center="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:bbox-nodes="true"
+ inkscape:bbox-paths="true"
+ inkscape:snap-bbox="true"
+ units="px"
+ showgrid="true"
+ inkscape:current-layer="layer1"
+ inkscape:document-units="px"
+ inkscape:cy="11.119425"
+ inkscape:cx="5.7321635"
+ inkscape:zoom="22.627416"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base">
+ <inkscape:grid
+ id="grid3336"
+ type="xygrid"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <defs
+ id="defs4" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(0,-1036.3622)"
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <circle
+ style="opacity:1;fill:#68b6ff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="path4157"
+ cx="8"
+ cy="1044.3622"
+ r="7" />
+ <circle
+ r="2"
+ cy="1041.3622"
+ cx="6"
+ id="circle4159"
+ style="opacity:1;fill:#a2d2ff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_spin_box.svg b/tools/editor/icons/source/icon_spin_box.svg
new file mode 100644
index 0000000000..e0086ed12e
--- /dev/null
+++ b/tools/editor/icons/source/icon_spin_box.svg
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_spin_box.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="3.8344268"
+ inkscape:cy="10.33806"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3,3 C 1.8954305,3 1,3.8954305 1,5 l 0,6 c 0,1.104569 0.8954305,2 2,2 l 7,0 0,-2 -7,0 0,-6 7,0 0,-2 z"
+ transform="translate(0,1036.3622)"
+ id="rect4140"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ssssccccccs" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4157"
+ width="2"
+ height="6"
+ x="8"
+ y="1041.3622" />
+ <path
+ style="fill:#a5efac;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 11,1043.3622 4,0 -2,-3 z"
+ id="path4159"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4164"
+ d="m 11,1045.3622 4,0 -2,3 z"
+ style="fill:#a5efac;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_spot_light.svg b/tools/editor/icons/source/icon_spot_light.svg
new file mode 100644
index 0000000000..b9130eff37
--- /dev/null
+++ b/tools/editor/icons/source/icon_spot_light.svg
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_spot_light.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999999"
+ inkscape:cx="5.5818635"
+ inkscape:cy="8.6161108"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="m 14,1046.3622 -12,0 c 0,-2.7614 2.6862915,-5 6,-5 3.313708,0 6,2.2386 6,5 z"
+ id="path4155"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccsc" />
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 6 1 A 1 1 0 0 0 5 2 L 5 7 L 11 7 L 11 2 A 1 1 0 0 0 10 1 L 6 1 z "
+ transform="translate(0,1036.3622)"
+ id="rect4158" />
+ <circle
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="path4160"
+ cx="8"
+ cy="1046.3622"
+ r="2" />
+ <rect
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4162"
+ width="2"
+ height="2"
+ x="7"
+ y="1049.3622"
+ inkscape:transform-center-y="3.9999826" />
+ <rect
+ inkscape:transform-center-y="2.0000217"
+ y="533.10931"
+ x="-903.17627"
+ height="2"
+ width="2"
+ id="rect4164"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ transform="matrix(0.5,-0.8660254,0.8660254,0.5,0,0)"
+ inkscape:transform-center-x="-3.4640975" />
+ <rect
+ inkscape:transform-center-x="3.4641473"
+ transform="matrix(0.5,0.8660254,-0.8660254,0.5,0,0)"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4166"
+ width="2"
+ height="2"
+ x="909.17621"
+ y="519.25293"
+ inkscape:transform-center-y="1.9999799" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_sprite.svg b/tools/editor/icons/source/icon_sprite.svg
new file mode 100644
index 0000000000..488bbf934d
--- /dev/null
+++ b/tools/editor/icons/source/icon_sprite.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_sprite.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_sprite.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="7.7581185"
+ inkscape:cy="10.410499"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5b7f4;fill-opacity:0.98823529;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 1 A 7 7 0 0 0 1 8 A 7 7 0 0 0 8 15 A 7 7 0 0 0 15 8 A 7 7 0 0 0 8 1 z M 4 6 A 1 1 0 0 1 5 7 A 1 1 0 0 1 4 8 A 1 1 0 0 1 3 7 A 1 1 0 0 1 4 6 z M 12 6 A 1 1 0 0 1 13 7 A 1 1 0 0 1 12 8 A 1 1 0 0 1 11 7 A 1 1 0 0 1 12 6 z M 5 9 L 11 9 A 3 3 0 0 1 9.5 11.597656 A 3 3 0 0 1 6.5 11.597656 A 3 3 0 0 1 5 9 z "
+ transform="translate(0,1036.3622)"
+ id="path4139" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_sprite_3d.svg b/tools/editor/icons/source/icon_sprite_3d.svg
new file mode 100644
index 0000000000..4ea81f7ea2
--- /dev/null
+++ b/tools/editor/icons/source/icon_sprite_3d.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_sprite_3d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_sprite_3d.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="7.7581185"
+ inkscape:cy="10.410499"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 1 A 7 7 0 0 0 1 8 A 7 7 0 0 0 8 15 A 7 7 0 0 0 15 8 A 7 7 0 0 0 8 1 z M 4 6 A 1 1 0 0 1 5 7 A 1 1 0 0 1 4 8 A 1 1 0 0 1 3 7 A 1 1 0 0 1 4 6 z M 12 6 A 1 1 0 0 1 13 7 A 1 1 0 0 1 12 8 A 1 1 0 0 1 11 7 A 1 1 0 0 1 12 6 z M 5 9 L 11 9 A 3 3 0 0 1 9.5 11.597656 A 3 3 0 0 1 6.5 11.597656 A 3 3 0 0 1 5 9 z "
+ transform="translate(0,1036.3622)"
+ id="path4139" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_static_body.svg b/tools/editor/icons/source/icon_static_body.svg
new file mode 100644
index 0000000000..af1ebc8900
--- /dev/null
+++ b/tools/editor/icons/source/icon_static_body.svg
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_sprite.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_static_body.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="7.2543819"
+ inkscape:cy="7.4903504"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:#a5b7f5;fill-opacity:0.98823529;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 25 3 C 22 3 21 6 21 6 C 20.879708 6.3608765 20.803605 6.6663233 20.707031 7 L 21 7 A 1 1 0 0 0 22 8 A 1 1 0 0 0 23 7 L 24 7 A 1 1 0 0 0 25 8 A 1 1 0 0 0 26 7 L 27 7 A 1 1 0 0 0 28 8 A 1 1 0 0 0 29 7 L 29.292969 7 C 29.196395 6.6663233 29.120292 6.3608765 29 6 C 29 6 28 3 25 3 z M 20.369141 8.1542969 C 19.864457 10.037394 19.478832 11.521168 18 13 L 32 13 C 30.521168 11.521168 30.135543 10.037394 29.630859 8.1542969 A 2 2 0 0 1 29 8.7324219 A 2 2 0 0 1 27 8.7324219 A 2 2 0 0 1 26.5 8.3203125 A 2 2 0 0 1 26 8.7324219 A 2 2 0 0 1 24 8.7324219 A 2 2 0 0 1 23.5 8.3203125 A 2 2 0 0 1 23 8.7324219 A 2 2 0 0 1 21 8.7324219 A 2 2 0 0 1 20.369141 8.1542969 z "
+ transform="translate(0,1036.3622)"
+ id="path4161" />
+ <rect
+ style="opacity:1;fill:#fefeff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4175"
+ width="1"
+ height="1"
+ x="20"
+ y="1042.3622" />
+ <rect
+ y="1042.3622"
+ x="29"
+ height="1"
+ width="1"
+ id="rect4177"
+ style="opacity:1;fill:#fefeff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 3 1 A 2 2 0 0 0 1.5859375 1.5859375 A 2 2 0 0 0 1 3 L 1 13 A 2 2 0 0 0 1.5859375 14.414062 A 2 2 0 0 0 3 15 L 13 15 A 2 2 0 0 0 15 13 L 15 3 A 2 2 0 0 0 13 1 L 3 1 z M 3 2 L 13 2 A 1.0000174 1.0000174 0 0 1 14 3 L 14 13 A 1.0000174 1.0000174 0 0 1 13 14 L 3 14 A 1.0000174 1.0000174 0 0 1 2 13 L 2 3 A 1.0000174 1.0000174 0 0 1 3 2 z "
+ transform="translate(0,1036.3622)"
+ id="rect4179" />
+ <rect
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4195"
+ width="2"
+ height="2"
+ x="3"
+ y="1039.3622" />
+ <rect
+ y="1047.3622"
+ x="3"
+ height="2"
+ width="2"
+ id="rect4197"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4199"
+ width="2"
+ height="2"
+ x="11"
+ y="1047.3622" />
+ <rect
+ y="1039.3622"
+ x="11"
+ height="2"
+ width="2"
+ id="rect4201"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <g
+ id="layer1-1"
+ inkscape:label="Layer 1"
+ transform="translate(-23.644738,-1.9878833)">
+ <path
+ id="path4139"
+ transform="translate(0,1036.3622)"
+ d="M 8,1 A 7,7 0 0 0 1,8 7,7 0 0 0 8,15 7,7 0 0 0 15,8 7,7 0 0 0 8,1 Z M 4,6 A 1,1 0 0 1 5,7 1,1 0 0 1 4,8 1,1 0 0 1 3,7 1,1 0 0 1 4,6 Z m 8,0 a 1,1 0 0 1 1,1 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 z m -7,3 6,0 a 3,3 0 0 1 -1.5,2.597656 3,3 0 0 1 -3,0 A 3,3 0 0 1 5,9 Z"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_static_body_2d.svg b/tools/editor/icons/source/icon_static_body_2d.svg
new file mode 100644
index 0000000000..d47e924e37
--- /dev/null
+++ b/tools/editor/icons/source/icon_static_body_2d.svg
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_sprite.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_static_body_2d.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="7.2543819"
+ inkscape:cy="7.4903504"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#fefeff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4175"
+ width="1"
+ height="1"
+ x="20"
+ y="1042.3622" />
+ <rect
+ y="1042.3622"
+ x="29"
+ height="1"
+ width="1"
+ id="rect4177"
+ style="opacity:1;fill:#fefeff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <path
+ style="opacity:1;fill:#a5b7f6;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 3 1 A 2 2 0 0 0 1.5859375 1.5859375 A 2 2 0 0 0 1 3 L 1 13 A 2 2 0 0 0 1.5859375 14.414062 A 2 2 0 0 0 3 15 L 13 15 A 2 2 0 0 0 15 13 L 15 3 A 2 2 0 0 0 13 1 L 3 1 z M 3 2 L 13 2 A 1.0000174 1.0000174 0 0 1 14 3 L 14 13 A 1.0000174 1.0000174 0 0 1 13 14 L 3 14 A 1.0000174 1.0000174 0 0 1 2 13 L 2 3 A 1.0000174 1.0000174 0 0 1 3 2 z "
+ transform="translate(0,1036.3622)"
+ id="rect4179" />
+ <rect
+ style="opacity:1;fill:#a5b7f6;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4195"
+ width="2"
+ height="2"
+ x="3"
+ y="1039.3622" />
+ <rect
+ y="1047.3622"
+ x="3"
+ height="2"
+ width="2"
+ id="rect4197"
+ style="opacity:1;fill:#a5b7f6;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ style="opacity:1;fill:#a5b7f6;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4199"
+ width="2"
+ height="2"
+ x="11"
+ y="1047.3622" />
+ <rect
+ y="1039.3622"
+ x="11"
+ height="2"
+ width="2"
+ id="rect4201"
+ style="opacity:1;fill:#a5b7f6;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_stream_player.svg b/tools/editor/icons/source/icon_stream_player.svg
new file mode 100644
index 0000000000..618646bbed
--- /dev/null
+++ b/tools/editor/icons/source/icon_stream_player.svg
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_stream_player.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="3.1209493"
+ inkscape:cy="9.3365973"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 5,2 C 4.4477153,2 4,2.4477153 4,3 l 0,1 0,7 -2,0 c -0.5522847,0 -1,0.447715 -1,1 l 0,2 c 0,0.552285 0.4477153,1 1,1 l 2,0 1,0 c 0.5522847,0 1,-0.447715 1,-1 l 0,-3 0,-7 6,0 0,5 -2,0 C 9.4477153,9 9,9.4477153 9,10 l 0,2 c 0,0.552285 0.4477153,1 1,1 l 3,0 c 0.552285,0 1,-0.447715 1,-1 L 14,9 14,3 C 14,2.4477153 13.552285,2 13,2 L 6,2 Z"
+ transform="translate(0,1036.3622)"
+ id="rect4155"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ssccsssscssccccsssssscsscs" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_string.svg b/tools/editor/icons/source/icon_string.svg
new file mode 100644
index 0000000000..f32e82256f
--- /dev/null
+++ b/tools/editor/icons/source/icon_string.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_string.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000001"
+ inkscape:cx="4.1642221"
+ inkscape:cy="8.5720882"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 5 1 L 5 3 L 7 3 L 7 13 L 5 13 L 5 15 L 7 15 A 1 1 0 0 0 8 14 A 1 1 0 0 0 9 15 L 11 15 L 11 13 L 9 13 L 9 3 L 11 3 L 11 1 L 9 1 A 1 1 0 0 0 8 2 A 1 1 0 0 0 7 1 L 5 1 z "
+ transform="translate(0,1036.3622)"
+ id="rect4137" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_tab_container.svg b/tools/editor/icons/source/icon_tab_container.svg
new file mode 100644
index 0000000000..b53747bf1c
--- /dev/null
+++ b/tools/editor/icons/source/icon_tab_container.svg
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_tab_container.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="4.8125618"
+ inkscape:cy="8.9338072"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3,1 C 1.8954305,1 1,1.8954305 1,3 l 0,10 c 0,1.104569 0.8954305,2 2,2 l 10,0 c 1.104569,0 2,-0.895431 2,-2 L 15,3 C 15,1.8954305 14.104569,1 13,1 Z m 0,2 10,0 0,10 -10,0 z"
+ transform="translate(0,1036.3622)"
+ id="rect4140"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sssssssssccccc" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4158"
+ width="10"
+ height="2"
+ x="3"
+ y="1041.3622" />
+ <rect
+ y="1039.3622"
+ x="8"
+ height="2"
+ width="5"
+ id="rect4170"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_tabs.svg b/tools/editor/icons/source/icon_tabs.svg
new file mode 100644
index 0000000000..1b389fc30c
--- /dev/null
+++ b/tools/editor/icons/source/icon_tabs.svg
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_tabs.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="3.2506704"
+ inkscape:cy="11.363584"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4156"
+ width="1"
+ height="4.9999828"
+ x="1"
+ y="1042.3622" />
+ <rect
+ y="-8"
+ x="1041.3622"
+ height="6"
+ width="1"
+ id="rect4159"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0,1,-1,0,0,0)" />
+ <rect
+ y="1042.3622"
+ x="8"
+ height="4.9999828"
+ width="1"
+ id="rect4161"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4163"
+ sodipodi:type="arc"
+ sodipodi:cx="2"
+ sodipodi:cy="1042.3622"
+ sodipodi:rx="1"
+ sodipodi:ry="1"
+ sodipodi:start="1.5707963"
+ sodipodi:end="0"
+ d="m 2,1043.3622 a 1,1 0 0 1 -0.9238795,-0.6173 1,1 0 0 1 0.2167727,-1.0898 1,1 0 0 1 1.0897902,-0.2168 A 1,1 0 0 1 3,1042.3622 l -1,0 z" />
+ <path
+ d="m -8,1043.3622 a 1,1 0 0 1 -0.9238795,-0.6173 1,1 0 0 1 0.2167727,-1.0898 1,1 0 0 1 1.0897902,-0.2168 A 1,1 0 0 1 -7,1042.3622 l -1,0 z"
+ sodipodi:end="0"
+ sodipodi:start="1.5707963"
+ sodipodi:ry="1"
+ sodipodi:rx="1"
+ sodipodi:cy="1042.3622"
+ sodipodi:cx="-8"
+ sodipodi:type="arc"
+ id="path4165"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="scale(-1,1)" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4167"
+ width="1"
+ height="4.9999828"
+ x="14"
+ y="1042.3622" />
+ <rect
+ transform="matrix(0,1,-1,0,0,0)"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4169"
+ width="1"
+ height="6"
+ x="1041.3622"
+ y="-14" />
+ <path
+ transform="scale(-1,1)"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4171"
+ sodipodi:type="arc"
+ sodipodi:cx="-14"
+ sodipodi:cy="1042.3622"
+ sodipodi:rx="1"
+ sodipodi:ry="1"
+ sodipodi:start="1.5707963"
+ sodipodi:end="0"
+ d="m -14,1043.3622 a 1,1 0 0 1 -0.92388,-0.6173 1,1 0 0 1 0.216773,-1.0898 1,1 0 0 1 1.08979,-0.2168 1,1 0 0 1 0.617317,0.9239 l -1,0 z" />
+ <rect
+ transform="matrix(0,1,-1,0,0,0)"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4173"
+ width="1"
+ height="13"
+ x="1046.3622"
+ y="-15" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_test_cube.svg b/tools/editor/icons/source/icon_test_cube.svg
new file mode 100644
index 0000000000..8b5db2dc5d
--- /dev/null
+++ b/tools/editor/icons/source/icon_test_cube.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_collision_shape.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_test_cube.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="7.2538994"
+ inkscape:cy="5.8068101"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:snap-midpoints="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <g
+ id="layer1-7"
+ inkscape:label="Layer 1"
+ transform="translate(0,1.1802001e-5)"
+ style="stroke:#fc9c9c;stroke-opacity:0.99607843">
+ <path
+ sodipodi:nodetypes="ccccccc"
+ inkscape:connector-curvature="0"
+ id="path4139"
+ d="m 8,1050.3622 -6,-3 0,-6 6,-3 6,3 0,6 z"
+ style="fill:none;fill-rule:evenodd;stroke:#fc9c9c;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843" />
+ </g>
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="M 2.4472656 4.1054688 L 1.5527344 5.8945312 L 7 8.6191406 L 7 14 L 9 14 L 9 8.6191406 L 14.447266 5.8945312 L 13.552734 4.1054688 L 8 6.8828125 L 2.4472656 4.1054688 z "
+ transform="translate(0,1036.3622)"
+ id="path4155" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_text_edit.svg b/tools/editor/icons/source/icon_text_edit.svg
new file mode 100644
index 0000000000..1daf1ac75a
--- /dev/null
+++ b/tools/editor/icons/source/icon_text_edit.svg
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_sprite.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_text_edit.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="13.881612"
+ inkscape:cy="11.594783"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#fefeff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4175"
+ width="1"
+ height="1"
+ x="20"
+ y="1042.3622" />
+ <rect
+ y="1042.3622"
+ x="29"
+ height="1"
+ width="1"
+ id="rect4177"
+ style="opacity:1;fill:#fefeff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4173"
+ width="1"
+ height="4"
+ x="4"
+ y="1040.3622" />
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 3,1037.3622 c -1.1045695,0 -2,0.8954 -2,2 l 0,10 c 0,1.1046 0.8954305,2 2,2 l 10,0 c 1.104569,0 2,-0.8954 2,-2 l 0,-10 c 0,-1.1046 -0.895431,-2 -2,-2 z m 0,2 10,0 0,10 -10,0 z"
+ id="rect4140"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sssssssssccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_texture.svg b/tools/editor/icons/source/icon_texture.svg
new file mode 100644
index 0000000000..39e88e592b
--- /dev/null
+++ b/tools/editor/icons/source/icon_texture.svg
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_key.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_image_texture.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="9.9365814"
+ inkscape:cy="6.4466253"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 2 1 A 1 1 0 0 0 1 2 L 1 14 A 1 1 0 0 0 2 15 L 14 15 A 1 1 0 0 0 15 14 L 15 2 A 1 1 0 0 0 14 1 L 2 1 z M 3 3 L 13 3 L 13 11 L 3 11 L 3 3 z "
+ transform="translate(0,1036.3622)"
+ id="rect4156" />
+ <rect
+ y="1043.3622"
+ x="6"
+ height="1"
+ width="2"
+ id="rect4197"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4199"
+ width="2"
+ height="2.0000174"
+ x="6"
+ y="1044.3622" />
+ <rect
+ y="1045.3622"
+ x="4"
+ height="1"
+ width="2"
+ id="rect4201"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4203"
+ width="2"
+ height="2.0000174"
+ x="8"
+ y="1044.3622" />
+ <rect
+ y="1044.3622"
+ x="10"
+ height="2.0000174"
+ width="2"
+ id="rect4205"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4207"
+ width="3"
+ height="2.0000174"
+ x="8"
+ y="1042.3622" />
+ <rect
+ y="1041.3622"
+ x="9"
+ height="1"
+ width="1"
+ id="rect4217"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4219"
+ width="1"
+ height="1"
+ x="5"
+ y="1044.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_texture_button.svg b/tools/editor/icons/source/icon_texture_button.svg
new file mode 100644
index 0000000000..ef447af082
--- /dev/null
+++ b/tools/editor/icons/source/icon_texture_button.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_button.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_texture_button.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.313709"
+ inkscape:cx="15.33841"
+ inkscape:cy="14.971735"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 1 3 L 1 11 L 15 11 L 15 3 L 14 3 L 2 3 L 1 3 z M 9 5 L 10 5 L 10 6 L 11 6 L 11 8 L 12 8 L 12 10 L 10 10 L 8 10 L 6 10 L 4 10 L 4 9 L 5 9 L 5 8 L 6 8 L 6 7 L 8 7 L 8 6 L 9 6 L 9 5 z "
+ transform="translate(0,1036.3622)"
+ id="rect4139" />
+ <rect
+ transform="scale(1,-1)"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4160"
+ width="14"
+ height="2.0000522"
+ x="1"
+ y="-1049.3622" />
+ <rect
+ y="-1049.3622"
+ x="1"
+ height="2.0000522"
+ width="14"
+ id="rect4142"
+ style="opacity:1;fill:#000000;fill-opacity:0.07843138;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="scale(1,-1)" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_texture_frame.svg b/tools/editor/icons/source/icon_texture_frame.svg
new file mode 100644
index 0000000000..afab41de41
--- /dev/null
+++ b/tools/editor/icons/source/icon_texture_frame.svg
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_texture_frame.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="14.395168"
+ inkscape:cy="9.9171316"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4154"
+ width="1"
+ height="14"
+ x="1"
+ y="1037.3622" />
+ <rect
+ y="1050.3622"
+ x="1"
+ height="0.9999826"
+ width="14"
+ id="rect4156"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4158"
+ width="14"
+ height="0.9999826"
+ x="1"
+ y="1037.3622" />
+ <rect
+ y="1037.3622"
+ x="14"
+ height="14"
+ width="1"
+ id="rect4160"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="rect4197"
+ d="m 9,1042.3622 0,1 -1,0 0,1 -2,0 0,1 -1,0 0,1 -1,0 0,1 2,0 2,0 2,0 2,0 0,-2 -1,0 0,-2 -1,0 0,-1 -1,0 z"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_texture_progress.svg b/tools/editor/icons/source/icon_texture_progress.svg
new file mode 100644
index 0000000000..493dd7fd63
--- /dev/null
+++ b/tools/editor/icons/source/icon_texture_progress.svg
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_texture_progress.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="8.953439"
+ inkscape:cy="10.793984"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3,3 C 1.8954305,3 1,3.8954305 1,5 l 0,6 c 0,1.104569 0.8954305,2 2,2 l 10,0 c 1.104569,0 2,-0.895431 2,-2 L 15,5 C 15,3.8954305 14.104569,3 13,3 Z m 0,2 10,0 0,6 -10,0 z"
+ transform="translate(0,1036.3622)"
+ id="rect4140"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sssssssssccccc" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4222"
+ width="1"
+ height="2"
+ x="4"
+ y="1042.3622" />
+ <rect
+ y="1043.3622"
+ x="6"
+ height="3.0000174"
+ width="1"
+ id="rect4224"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4226"
+ width="1"
+ height="4.0000172"
+ x="8"
+ y="1042.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_tile_map.svg b/tools/editor/icons/source/icon_tile_map.svg
new file mode 100644
index 0000000000..28f75a97e5
--- /dev/null
+++ b/tools/editor/icons/source/icon_tile_map.svg
@@ -0,0 +1,250 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_sprite.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_tile_map.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="5.8997097"
+ inkscape:cy="7.6139286"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#a5b7f7;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4160"
+ width="2"
+ height="2"
+ x="1"
+ y="1037.3622" />
+ <rect
+ y="1037.3622"
+ x="4"
+ height="2"
+ width="2"
+ id="rect4162"
+ style="opacity:1;fill:#a5b7f7;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ style="opacity:1;fill:#a5b7f7;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4164"
+ width="2"
+ height="2"
+ x="4"
+ y="1040.3622" />
+ <rect
+ y="1040.3622"
+ x="1"
+ height="2"
+ width="2"
+ id="rect4166"
+ style="opacity:1;fill:#a5b7f7;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ y="1037.3622"
+ x="7"
+ height="2"
+ width="2"
+ id="rect4168"
+ style="opacity:1;fill:#a5b7f7;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ style="opacity:1;fill:#a5b7f7;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4170"
+ width="2"
+ height="2"
+ x="10"
+ y="1037.3622" />
+ <rect
+ y="1040.3622"
+ x="10"
+ height="2"
+ width="2"
+ id="rect4172"
+ style="opacity:1;fill:#a5b7f7;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ style="opacity:1;fill:#a5b7f7;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4174"
+ width="2"
+ height="2"
+ x="7"
+ y="1040.3622" />
+ <rect
+ style="opacity:1;fill:#a5b7f7;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4176"
+ width="2"
+ height="2"
+ x="1"
+ y="1043.3622" />
+ <rect
+ y="1043.3622"
+ x="4"
+ height="2"
+ width="2"
+ id="rect4178"
+ style="opacity:1;fill:#a5b7f7;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ style="opacity:1;fill:#a5b7f7;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4180"
+ width="2"
+ height="2"
+ x="4"
+ y="1046.3622" />
+ <rect
+ y="1046.3622"
+ x="1"
+ height="2"
+ width="2"
+ id="rect4182"
+ style="opacity:1;fill:#a5b7f7;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ y="1037.3622"
+ x="13"
+ height="2"
+ width="2"
+ id="rect4184"
+ style="opacity:1;fill:#a5b7f7;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ style="opacity:1;fill:#a5b7f7;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4186"
+ width="2"
+ height="2"
+ x="13"
+ y="1040.3622" />
+ <rect
+ style="opacity:1;fill:#a5b7f7;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4188"
+ width="2"
+ height="2"
+ x="7"
+ y="1043.3622" />
+ <rect
+ y="1043.3622"
+ x="10"
+ height="2"
+ width="2"
+ id="rect4190"
+ style="opacity:1;fill:#a5b7f7;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ style="opacity:1;fill:#a5b7f7;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4192"
+ width="2"
+ height="2"
+ x="10"
+ y="1046.3622" />
+ <rect
+ y="1046.3622"
+ x="7"
+ height="2"
+ width="2"
+ id="rect4194"
+ style="opacity:1;fill:#a5b7f7;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ style="opacity:1;fill:#a5b7f7;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4196"
+ width="2"
+ height="2"
+ x="13"
+ y="1043.3622" />
+ <rect
+ y="1046.3622"
+ x="13"
+ height="2"
+ width="2"
+ id="rect4198"
+ style="opacity:1;fill:#a5b7f7;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ y="1049.3622"
+ x="4"
+ height="2"
+ width="2"
+ id="rect4200"
+ style="opacity:1;fill:#a5b7f7;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ style="opacity:1;fill:#a5b7f7;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4202"
+ width="2"
+ height="2"
+ x="1"
+ y="1049.3622" />
+ <rect
+ y="1049.3622"
+ x="10"
+ height="2"
+ width="2"
+ id="rect4204"
+ style="opacity:1;fill:#a5b7f7;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ style="opacity:1;fill:#a5b7f7;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4206"
+ width="2"
+ height="2"
+ x="7"
+ y="1049.3622" />
+ <rect
+ style="opacity:1;fill:#a5b7f7;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4208"
+ width="2"
+ height="2"
+ x="13"
+ y="1049.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_timer.svg b/tools/editor/icons/source/icon_timer.svg
new file mode 100644
index 0000000000..0615ab865a
--- /dev/null
+++ b/tools/editor/icons/source/icon_timer.svg
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_sprite.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_timer.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="4.6045193"
+ inkscape:cy="8.1915618"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#fefeff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4175"
+ width="1"
+ height="1"
+ x="20"
+ y="1042.3622" />
+ <rect
+ y="1042.3622"
+ x="29"
+ height="1"
+ width="1"
+ id="rect4177"
+ style="opacity:1;fill:#fefeff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 8 1 A 7.0000172 7.0000172 0 0 0 1 8 A 7.0000172 7.0000172 0 0 0 8 15 A 7.0000172 7.0000172 0 0 0 15 8 A 7.0000172 7.0000172 0 0 0 8 1 z M 8 3 A 5.0000172 5.0000172 0 0 1 13 8 A 5.0000172 5.0000172 0 0 1 8 13 A 5.0000172 5.0000172 0 0 1 3 8 A 5.0000172 5.0000172 0 0 1 8 3 z "
+ transform="translate(0,1036.3622)"
+ id="path4156" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4161"
+ width="2"
+ height="3.9999826"
+ x="7"
+ y="1041.3622" />
+ <rect
+ y="1043.3622"
+ x="7"
+ height="1.9999826"
+ width="4"
+ id="rect4163"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_tool_move.svg b/tools/editor/icons/source/icon_tool_move.svg
new file mode 100644
index 0000000000..243b680dfe
--- /dev/null
+++ b/tools/editor/icons/source/icon_tool_move.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_tool_move.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_tool_move.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="5.7373622"
+ inkscape:cy="9.2915869"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 1 L 6.5 2.5 L 5 4 L 7 4 L 7 7 L 4 7 L 4 5 L 2.5 6.5 L 1 8 L 2.5 9.5 L 4 11 L 4 9 L 7 9 L 7 12 L 5 12 L 6.5 13.5 L 8 15 L 9.5 13.5 L 11 12 L 9 12 L 9 9 L 12 9 L 12 11 L 13.5 9.5 L 15 8 L 13.5 6.5 L 12 5 L 12 7 L 9 7 L 9 4 L 11 4 L 9.5 2.5 L 8 1 z "
+ transform="translate(0,1036.3622)"
+ id="rect4140" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_tool_pan.svg b/tools/editor/icons/source/icon_tool_pan.svg
new file mode 100644
index 0000000000..a93fc3d29d
--- /dev/null
+++ b/tools/editor/icons/source/icon_tool_pan.svg
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_tool_pan.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_tool_pan.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="13.577719"
+ inkscape:cy="10.651205"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="false"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-others="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <g
+ transform="matrix(0.63636994,0,0,0.63636994,11.81847,382.85245)"
+ inkscape:label="Layer 1"
+ id="g4515"
+ style="stroke:#ffffff;stroke-width:6.28565216;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 6 8 L 6 15 L 12 15 L 12 13 L 14 13 L 14 8 L 6 8 z "
+ transform="translate(0,1036.3622)"
+ id="rect4179" />
+ <rect
+ y="1039.3622"
+ x="6"
+ height="7.9999657"
+ width="2"
+ id="rect4181"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4183"
+ width="2"
+ height="7.9999657"
+ x="9"
+ y="1038.3622" />
+ <rect
+ y="1040.3622"
+ x="12"
+ height="7.9999657"
+ width="2"
+ id="rect4185"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <circle
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4187"
+ cx="7"
+ cy="1039.3622"
+ r="1" />
+ <circle
+ r="1"
+ cy="1038.3622"
+ cx="10"
+ id="circle4189"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <circle
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4191"
+ cx="13"
+ cy="1040.3622"
+ r="1" />
+ <circle
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4193"
+ cx="12"
+ cy="1049.3622"
+ r="2" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 3.5251027,1045.5875 c -0.520152,-0.3803 -1.1942798,-0.4556 -1.6498687,0 -0.4556596,0.4556 -0.4556352,1.1943 -2.36e-5,1.6499 L 6,1051.3622 l 1.6498923,-2.7593 z"
+ id="rect4208"
+ inkscape:connector-curvature="0"
+ inkscape:transform-center-x="1.4083061"
+ inkscape:transform-center-y="-3.0582"
+ sodipodi:nodetypes="sssccs" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_tool_rotate.svg b/tools/editor/icons/source/icon_tool_rotate.svg
new file mode 100644
index 0000000000..817aee3995
--- /dev/null
+++ b/tools/editor/icons/source/icon_tool_rotate.svg
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_tool_rotate.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_tool_rotate.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="3.9785059"
+ inkscape:cy="10.426966"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 9 2 A 6.0000172 6.0000172 0 0 0 3 8 L 5 8 A 4 4 0 0 1 9 4 A 4 4 0 0 1 13 8 A 4 4 0 0 1 9 12 L 9 14 A 6.0000172 6.0000172 0 0 0 15 8 A 6.0000172 6.0000172 0 0 0 9 2 z "
+ transform="translate(0,1036.3622)"
+ id="path4138" />
+ <path
+ sodipodi:type="star"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4142"
+ sodipodi:sides="3"
+ sodipodi:cx="3"
+ sodipodi:cy="1046.3622"
+ sodipodi:r1="2.236068"
+ sodipodi:r2="1.118034"
+ sodipodi:arg1="1.0471976"
+ sodipodi:arg2="2.0943951"
+ inkscape:flatsided="false"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 4.1180339,1048.2987 -1.6770509,-0.9683 -1.67705101,-0.9682 1.67705101,-0.9683 1.6770511,-0.9682 -1e-7,1.9365 z"
+ inkscape:transform-center-x="0.00013164169"
+ transform="matrix(0,-1.1925797,1.5491989,0,-1617.0232,1049.2732)"
+ inkscape:transform-center-y="0.66664316" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_tool_scale.svg b/tools/editor/icons/source/icon_tool_scale.svg
new file mode 100644
index 0000000000..515bef3bb7
--- /dev/null
+++ b/tools/editor/icons/source/icon_tool_scale.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_tool_scale.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_tool_scale.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="8.7380314"
+ inkscape:cy="11.043755"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 14.019532,1038.3427 -2.828125,0.707 -2.8281258,0.707 1.4140624,1.4141 -4.9492186,4.9492 -1.4140625,-1.4141 -0.7070313,2.8282 L 2,1050.3622 l 2.828125,-0.707 2.828125,-0.7071 -1.4140625,-1.414 4.9492195,-4.9492 1.414062,1.414 0.707031,-2.8281 0.707032,-2.8281 z"
+ id="rect4135"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_tool_select.svg b/tools/editor/icons/source/icon_tool_select.svg
new file mode 100644
index 0000000000..2da6a3e6ba
--- /dev/null
+++ b/tools/editor/icons/source/icon_tool_select.svg
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_tool_select.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_tool_select.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="8.6219069"
+ inkscape:cy="11.371689"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1-6"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <g
+ id="layer1-6"
+ inkscape:label="Layer 1"
+ transform="translate(-26.000893,-9.8683103)">
+ <g
+ style="stroke:#ffffff;stroke-width:6.28565216;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="g4515"
+ inkscape:label="Layer 1"
+ transform="matrix(0.63636994,0,0,0.63636994,11.81847,382.85245)" />
+ <path
+ sodipodi:nodetypes="cccccccc"
+ inkscape:connector-curvature="0"
+ id="rect4163"
+ d="m 40.000893,1053.167 -12,-4.9365 4.936497,12 1.420656,-4.2301 2.8254,2.8252 1.412701,-1.4127 -2.8254,-2.8252 z"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_tools.svg b/tools/editor/icons/source/icon_tools.svg
new file mode 100644
index 0000000000..f2b8cd9343
--- /dev/null
+++ b/tools/editor/icons/source/icon_tools.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_g_d_script.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_g_d_script.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="6.7306265"
+ inkscape:cy="9.0071681"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 7 1 L 6.4355469 3.2578125 A 5.0000172 5.0000172 0 0 0 5.7460938 3.5371094 L 3.7578125 2.34375 L 2.34375 3.7578125 L 3.5390625 5.7519531 A 5.0000172 5.0000172 0 0 0 3.2539062 6.4375 L 1 7 L 1 9 L 3.2578125 9.5644531 A 5.0000172 5.0000172 0 0 0 3.5371094 10.251953 L 2.34375 12.242188 L 3.7578125 13.65625 L 5.7519531 12.460938 A 5.0000172 5.0000172 0 0 0 6.4375 12.746094 L 7 15 L 9 15 L 9.5644531 12.742188 A 5.0000172 5.0000172 0 0 0 10.251953 12.462891 L 12.242188 13.65625 L 13.65625 12.242188 L 12.460938 10.248047 A 5.0000172 5.0000172 0 0 0 12.746094 9.5625 L 15 9 L 15 7 L 12.742188 6.4355469 A 5.0000172 5.0000172 0 0 0 12.462891 5.7480469 L 13.65625 3.7578125 L 12.242188 2.34375 L 10.248047 3.5390625 A 5.0000172 5.0000172 0 0 0 9.5625 3.2539062 L 9 1 L 7 1 z M 8 6 A 2.0000174 2.0000174 0 0 1 10 8 A 2.0000174 2.0000174 0 0 1 8 10 A 2.0000174 2.0000174 0 0 1 6 8 A 2.0000174 2.0000174 0 0 1 8 6 z "
+ transform="translate(0,1036.3622)"
+ id="path4176" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_touch_screen_button.svg b/tools/editor/icons/source/icon_touch_screen_button.svg
new file mode 100644
index 0000000000..70abc964aa
--- /dev/null
+++ b/tools/editor/icons/source/icon_touch_screen_button.svg
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_sprite.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_touch_screen_button.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="8.4904718"
+ inkscape:cy="7.5523354"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <g
+ transform="matrix(0.63636994,0,0,0.63636994,10.81847,386.85247)"
+ inkscape:label="Layer 1"
+ id="g4515"
+ style="fill:#a5b7f8;fill-opacity:0.98823529;stroke:#ffffff;stroke-width:6.28565216;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="opacity:1;fill:#a5b7f8;fill-opacity:0.98823529;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 6.0000004,1040.3624 0,7 0,0.033 -2.4746094,-1.8086 c -0.520152,-0.3803 -1.1948017,-0.4556 -1.6503906,0 -0.4556596,0.4556 -0.4556116,1.1948 0,1.6504 l 4.125,4.125 5.9999996,0 c 1.104569,0 2,-0.8954 2,-2 l 0,-5 -5.9999996,0 0,-4 -2,0 z"
+ id="rect4179"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccscssccccc" />
+ <circle
+ style="opacity:1;fill:#a5b7f8;fill-opacity:0.98823529;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4187"
+ cx="7"
+ cy="1040.3622"
+ r="1" />
+ <rect
+ style="opacity:1;fill:#a5b7f8;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4226"
+ width="2"
+ height="1"
+ x="3"
+ y="1040.3622" />
+ <rect
+ y="1037.3622"
+ x="3"
+ height="1"
+ width="8"
+ id="rect4228"
+ style="opacity:1;fill:#a5b7f8;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ y="1040.3622"
+ x="9"
+ height="1"
+ width="2"
+ id="rect4230"
+ style="opacity:1;fill:#a5b7f8;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ style="opacity:1;fill:#a5b7f8;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4232"
+ width="1"
+ height="2.0000174"
+ x="2"
+ y="1038.3622" />
+ <rect
+ y="1038.3622"
+ x="11"
+ height="2.0000174"
+ width="1"
+ id="rect4234"
+ style="opacity:1;fill:#a5b7f8;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <path
+ style="opacity:1;fill:#a5b7f8;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="path4236"
+ sodipodi:type="arc"
+ sodipodi:cx="3"
+ sodipodi:cy="1038.3622"
+ sodipodi:rx="1"
+ sodipodi:ry="1"
+ sodipodi:start="3.1415927"
+ sodipodi:end="0"
+ d="m 2,1038.3622 a 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 l -1,0 z" />
+ <path
+ d="m -12,1038.3622 a 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 l -1,0 z"
+ sodipodi:end="0"
+ sodipodi:start="3.1415927"
+ sodipodi:ry="1"
+ sodipodi:rx="1"
+ sodipodi:cy="1038.3622"
+ sodipodi:cx="-11"
+ sodipodi:type="arc"
+ id="path4238"
+ style="opacity:1;fill:#a5b7f8;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ transform="scale(-1,1)" />
+ <path
+ transform="scale(-1,-1)"
+ style="opacity:1;fill:#a5b7f8;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="path4240"
+ sodipodi:type="arc"
+ sodipodi:cx="-11"
+ sodipodi:cy="-1040.3622"
+ sodipodi:rx="1"
+ sodipodi:ry="1"
+ sodipodi:start="3.1415927"
+ sodipodi:end="0"
+ d="m -12,-1040.3622 a 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 l -1,0 z" />
+ <path
+ d="m -4,-1040.3622 a 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 l -1,0 z"
+ sodipodi:end="0"
+ sodipodi:start="3.1415927"
+ sodipodi:ry="1"
+ sodipodi:rx="1"
+ sodipodi:cy="-1040.3622"
+ sodipodi:cx="-3"
+ sodipodi:type="arc"
+ id="path4242"
+ style="opacity:1;fill:#a5b7f8;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ transform="scale(-1,-1)" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_track_add_key.svg b/tools/editor/icons/source/icon_track_add_key.svg
new file mode 100644
index 0000000000..96761526a8
--- /dev/null
+++ b/tools/editor/icons/source/icon_track_add_key.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="8"
+ height="8"
+ viewBox="0 0 8 8"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_track_add_key.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_track_add_key.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="6.0361164"
+ inkscape:cy="4.9218153"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1044.3622)">
+ <path
+ style="fill:#a9e100;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 3 0 L 3 3 L 0 3 L 0 5 L 3 5 L 3 8 L 5 8 L 5 5 L 8 5 L 8 3 L 5 3 L 5 0 L 3 0 z "
+ transform="translate(0,1044.3622)"
+ id="rect4137" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_track_add_key_hl.svg b/tools/editor/icons/source/icon_track_add_key_hl.svg
new file mode 100644
index 0000000000..79e566dde6
--- /dev/null
+++ b/tools/editor/icons/source/icon_track_add_key_hl.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="8"
+ height="8"
+ viewBox="0 0 8 8"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_track_add_key_hl.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_track_add_key_hl.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="5.3806528"
+ inkscape:cy="6.0126016"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1044.3622)">
+ <path
+ style="fill:#e3fe03;fill-opacity:0.98823529;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 3 0 L 3 3 L 0 3 L 0 5 L 3 5 L 3 8 L 5 8 L 5 5 L 8 5 L 8 3 L 5 3 L 5 0 L 3 0 z "
+ transform="translate(0,1044.3622)"
+ id="rect4137" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_track_continuous.svg b/tools/editor/icons/source/icon_track_continuous.svg
new file mode 100644
index 0000000000..78b9dd3f4b
--- /dev/null
+++ b/tools/editor/icons/source/icon_track_continuous.svg
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="8"
+ viewBox="0 0 16 8"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_track_continuous.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="7.8686169"
+ inkscape:cy="5.8136992"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1044.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2,1050.3622 c 6,0 6,-4 12,-4"
+ id="path4156"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_track_discrete.svg b/tools/editor/icons/source/icon_track_discrete.svg
new file mode 100644
index 0000000000..381782cf6f
--- /dev/null
+++ b/tools/editor/icons/source/icon_track_discrete.svg
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="8"
+ viewBox="0 0 16 8"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_track_discrete.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="7.8686169"
+ inkscape:cy="5.8136992"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1044.3622)">
+ <circle
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4230"
+ cx="2"
+ cy="1050.3622"
+ r="1" />
+ <circle
+ r="1"
+ cy="1048.3622"
+ cx="8"
+ id="circle4232"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <circle
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4234"
+ cx="14"
+ cy="1046.3622"
+ r="1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_translation.svg b/tools/editor/icons/source/icon_translation.svg
new file mode 100644
index 0000000000..389b8a40de
--- /dev/null
+++ b/tools/editor/icons/source/icon_translation.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_translation.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="8.1812988"
+ inkscape:cy="6.7732008"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 2 1 L 2 15 L 12 15 A 1.9999826 1.9999826 0 0 0 14 13 L 14 3 A 1.9999826 1.9999826 0 0 0 12 1 L 12 6 L 12 8 L 10 6 L 8 8 L 8 6 L 8 1 L 2 1 z "
+ transform="translate(0,1036.3622)"
+ id="rect4159" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_transpose.svg b/tools/editor/icons/source/icon_transpose.svg
new file mode 100644
index 0000000000..ceccfecfa3
--- /dev/null
+++ b/tools/editor/icons/source/icon_transpose.svg
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_tool_scale.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_transpose.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="11.628028"
+ inkscape:cy="13.482329"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4154"
+ width="2"
+ height="14"
+ x="1"
+ y="1037.3622" />
+ <rect
+ y="1037.3622"
+ x="1"
+ height="2.0000174"
+ width="14"
+ id="rect4156"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="1049.3622"
+ x="1"
+ height="1.9999652"
+ width="7"
+ id="rect4158"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="1037.3622"
+ x="6"
+ height="14"
+ width="2"
+ id="rect4160"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4162"
+ width="14"
+ height="2"
+ x="1"
+ y="1042.3622" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4164"
+ width="7.0000172"
+ height="1.9999828"
+ x="1037.3622"
+ y="-14.999983"
+ transform="matrix(0,1,-1,0,0,0)" />
+ <path
+ style="fill:#e0e0e0;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
+ d="m 15,1051.3622 -5,0 5,-5 z"
+ id="path4168"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4170"
+ width="5"
+ height="3"
+ x="8"
+ y="1039.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_tree.svg b/tools/editor/icons/source/icon_tree.svg
new file mode 100644
index 0000000000..b31fd38097
--- /dev/null
+++ b/tools/editor/icons/source/icon_tree.svg
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_sprite.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_tree.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="10.885344"
+ inkscape:cy="6.8775392"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#fefeff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4175"
+ width="1"
+ height="1"
+ x="20"
+ y="1042.3622" />
+ <rect
+ y="1042.3622"
+ x="29"
+ height="1"
+ width="1"
+ id="rect4177"
+ style="opacity:1;fill:#fefeff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 3 1 A 2 2 0 0 0 1.5859375 1.5859375 A 2 2 0 0 0 1 3 L 1 13 A 2 2 0 0 0 1.5859375 14.414062 A 2 2 0 0 0 3 15 L 13 15 A 2 2 0 0 0 15 13 L 15 3 A 2 2 0 0 0 13 1 L 3 1 z M 3 2 L 13 2 A 1.0000174 1.0000174 0 0 1 14 3 L 14 13 A 1.0000174 1.0000174 0 0 1 13 14 L 3 14 A 1.0000174 1.0000174 0 0 1 2 13 L 2 3 A 1.0000174 1.0000174 0 0 1 3 2 z "
+ transform="translate(0,1036.3622)"
+ id="rect4179" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4173"
+ width="1"
+ height="5.0000172"
+ x="4"
+ y="1040.3622" />
+ <rect
+ y="1041.3622"
+ x="4"
+ height="1.0000174"
+ width="8"
+ id="rect4176"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4178"
+ width="7"
+ height="1.0000174"
+ x="5"
+ y="1044.3622" />
+ <rect
+ y="1045.3622"
+ x="7"
+ height="3.0000174"
+ width="1"
+ id="rect4180"
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4191"
+ width="5"
+ height="1"
+ x="7"
+ y="1047.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_tween.svg b/tools/editor/icons/source/icon_tween.svg
new file mode 100644
index 0000000000..5cb5cad227
--- /dev/null
+++ b/tools/editor/icons/source/icon_tween.svg
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_tween.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_tween.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="6.0670176"
+ inkscape:cy="10.041334"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 9,1050.3622 -7,0 0,-7"
+ id="path4138"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <path
+ sodipodi:nodetypes="ccc"
+ inkscape:connector-curvature="0"
+ id="path4140"
+ d="m 7,1038.3622 7,0 0,7"
+ style="fill:none;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path4142"
+ d="m 6.0000002,1041.3622 4.9999998,0 0,5 z"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4144"
+ d="m 2,1050.3622 7,-7"
+ style="fill:none;fill-rule:evenodd;stroke:#e0e0e0;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_unbone.svg b/tools/editor/icons/source/icon_unbone.svg
new file mode 100644
index 0000000000..7e4109f2ec
--- /dev/null
+++ b/tools/editor/icons/source/icon_unbone.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_bone.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_unbone.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="6.4412926"
+ inkscape:cy="9.085446"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 10.478516 1 A 2.4664114 2.4663006 0 0 0 8.6972656 1.7207031 A 2.4664114 2.4663006 0 0 0 8.3828125 4.8242188 L 7.3105469 5.8964844 L 10.101562 8.6875 L 11.177734 7.6132812 A 2.4664198 2.4663006 0 0 0 14.277344 7.3027344 A 2.4664198 2.4663006 0 0 0 14.277344 3.8144531 A 2.4664198 2.4663006 0 0 0 12.880859 3.1171875 A 2.4664114 2.4663006 0 0 0 12.185547 1.7207031 A 2.4664114 2.4663006 0 0 0 10.478516 1 z M 5.8964844 7.3105469 L 4.8242188 8.3847656 A 2.4664114 2.4663006 0 0 0 1.7226562 8.6972656 A 2.4664114 2.4663006 0 0 0 1.7226562 12.185547 A 2.4664114 2.4663006 0 0 0 3.1191406 12.880859 A 2.4664198 2.4663006 0 0 0 3.8144531 14.277344 A 2.4664198 2.4663006 0 0 0 7.3027344 14.277344 A 2.4664198 2.4663006 0 0 0 7.6171875 11.173828 L 8.6875 10.101562 L 5.8964844 7.3105469 z "
+ transform="translate(0,1036.3622)"
+ id="path4139" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_ungroup.svg b/tools/editor/icons/source/icon_ungroup.svg
new file mode 100644
index 0000000000..c45e3e4cb9
--- /dev/null
+++ b/tools/editor/icons/source/icon_ungroup.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_ungroup.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.999999"
+ inkscape:cx="11.746278"
+ inkscape:cy="8.8711774"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8 3 A 2 2 0 0 0 6 5 A 2 2 0 0 0 8 7 A 2 2 0 0 0 10 5 A 2 2 0 0 0 8 3 z M 5 8 A 2 2 0 0 0 3 10 A 2 2 0 0 0 5 12 A 2 2 0 0 0 7 10 A 2 2 0 0 0 5 8 z M 11 8 A 2 2 0 0 0 9 10 A 2 2 0 0 0 11 12 A 2 2 0 0 0 13 10 A 2 2 0 0 0 11 8 z "
+ transform="translate(0,1036.3622)"
+ id="path4155" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_unlock.svg b/tools/editor/icons/source/icon_unlock.svg
new file mode 100644
index 0000000000..b821d486ed
--- /dev/null
+++ b/tools/editor/icons/source/icon_unlock.svg
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_unlock.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_unlock.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="6.9526998"
+ inkscape:cy="6.9680614"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="false"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-others="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <g
+ transform="matrix(0.63636994,0,0,0.63636994,11.81847,382.85245)"
+ inkscape:label="Layer 1"
+ id="g4515"
+ style="stroke:#ffffff;stroke-width:6.28565216;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 2 8 L 2 15 L 14 15 L 14 8 L 2 8 z M 7 10 L 9 10 L 9 13 L 7 13 L 7 10 z "
+ id="rect4139"
+ transform="translate(0,1036.3622)" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 8,1 C 7.1226197,1.001545 6.2610925,1.233935 5.5019531,1.6738281 l 1,1.7324219 C 6.9570181,3.1417636 7.4736593,3.0016575 8,3 c 1.6568542,0 3,1.3431458 3,3 l 2,0 C 13,3.2385763 10.761424,1 8,1 Z"
+ transform="translate(0,1036.3622)"
+ id="path4141"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <rect
+ y="1042.3622"
+ x="11"
+ height="2"
+ width="2"
+ id="rect4147"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_uv.svg b/tools/editor/icons/source/icon_uv.svg
new file mode 100644
index 0000000000..698a57fc0a
--- /dev/null
+++ b/tools/editor/icons/source/icon_uv.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_tool_rotate.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_uv.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="-4.4331479"
+ inkscape:cy="7.1529248"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-intersection-paths="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 1 5 L 1 9 A 3 2.9999914 0 0 0 2.5 11.597656 A 3 2.9999914 0 0 0 5.5 11.597656 A 3 2.9999914 0 0 0 7 9 L 7 5 L 5 5 L 5 9 A 1 1 0 0 1 4 10 A 1 1 0 0 1 3 9 L 3 5 L 1 5 z M 9 5 L 11 12 L 12 12 L 13 12 L 14 12 L 16 5 L 14 5 L 12.5 10.25 L 11 5 L 9 5 z "
+ transform="translate(0,1036.3622)"
+ id="rect4155" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_v_box_container.svg b/tools/editor/icons/source/icon_v_box_container.svg
new file mode 100644
index 0000000000..9773b253fb
--- /dev/null
+++ b/tools/editor/icons/source/icon_v_box_container.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_v_box_container.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="2.6758349"
+ inkscape:cy="9.0861534"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 15,1039.3622 c 0,-1.1046 -0.89543,-2 -2,-2 l -10,0 c -1.104569,0 -2,0.8954 -2,2 l 0,10 c 0,1.1046 0.895431,2 2,2 l 10,0 c 1.10457,0 2,-0.8954 2,-2 l 0,-10 z m -2,0 0,2 -10,0 0,-2 10,0 z m 0,4 0,2 -10,0 0,-2 10,0 z m 0,4 0,2 -10,0 0,-2 10,0 z"
+ id="rect4140"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_v_button_array.svg b/tools/editor/icons/source/icon_v_button_array.svg
new file mode 100644
index 0000000000..aded4b401b
--- /dev/null
+++ b/tools/editor/icons/source/icon_v_button_array.svg
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_button.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_v_button_array.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="5.9547041"
+ inkscape:cy="8.9802416"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4156"
+ width="14"
+ height="6.0000172"
+ x="1"
+ y="1037.3622" />
+ <rect
+ y="1042.3622"
+ x="1"
+ height="0.99996543"
+ width="14"
+ id="rect4161"
+ style="opacity:1;fill:#98dc9f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 1 9 L 1 15 L 3 13 L 5 15 L 7 13 L 9 15 L 11 13 L 13 15 L 15 13 L 15 9 L 1 9 z "
+ transform="translate(0,1036.3622)"
+ id="rect4157" />
+ <path
+ style="opacity:1;fill:#98dc9f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 1 14 L 1 15 L 2 14 L 1 14 z M 4 14 L 5 15 L 6 14 L 4 14 z M 8 14 L 9 15 L 10 14 L 8 14 z M 12 14 L 13 15 L 14 14 L 12 14 z "
+ transform="translate(0,1036.3622)"
+ id="rect4159" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_v_scroll_bar.svg b/tools/editor/icons/source/icon_v_scroll_bar.svg
new file mode 100644
index 0000000000..659dc39b0b
--- /dev/null
+++ b/tools/editor/icons/source/icon_v_scroll_bar.svg
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_v_scroll_bar.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="10.543346"
+ inkscape:cy="9.3134214"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-paths="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 13,1039.3622 c 0,-1.1046 -0.89543,-2 -2,-2 l -6,0 c -1.104569,0 -2,0.8954 -2,2 l 0,10 c 0,1.1046 0.895431,2 2,2 l 6,0 c 1.10457,0 2,-0.8954 2,-2 z m -2,0 0,10 -6,0 0,-10 z"
+ id="rect4140"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sssssssssccccc" />
+ <rect
+ style="opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4181"
+ width="4"
+ height="4"
+ x="1042.3622"
+ y="-8"
+ transform="matrix(0,1,-1,0,0,0)" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4187"
+ width="4"
+ height="4"
+ x="1040.3622"
+ y="-10"
+ transform="matrix(0,1,-1,0,0,0)" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_v_separator.svg b/tools/editor/icons/source/icon_v_separator.svg
new file mode 100644
index 0000000000..7e5ce39ba0
--- /dev/null
+++ b/tools/editor/icons/source/icon_v_separator.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_v_separator.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="10.534143"
+ inkscape:cy="10.281549"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="m 2,1047.3622 3,0 0,-6 -3,0 0,6 z m 5,4 2,0 0,-14 -2,0 0,14 z m 4,-4 3,0 0,-6 -3,0 0,6 z"
+ id="rect4156"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_v_slider.svg b/tools/editor/icons/source/icon_v_slider.svg
new file mode 100644
index 0000000000..74b59cfce5
--- /dev/null
+++ b/tools/editor/icons/source/icon_v_slider.svg
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_v_slider.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="9.3533577"
+ inkscape:cy="8.3875011"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 9,1038.3622 a 1,1 0 0 0 -1,-1 1,1 0 0 0 -1,1 l 0,3.1738 a 3,3 0 0 1 1,-0.1738 3,3 0 0 1 1,0.1758 l 0,-3.1758 z m 0,8.8262 a 3,3 0 0 1 -1,0.1738 3,3 0 0 1 -1,-0.1758 l 0,3.1758 a 1,1 0 0 0 1,1 1,1 0 0 0 1,-1 l 0,-3.1738 z"
+ id="rect4157"
+ inkscape:connector-curvature="0" />
+ <circle
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="path4167"
+ cx="8"
+ cy="1044.3622"
+ r="2" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_v_split_container.svg b/tools/editor/icons/source/icon_v_split_container.svg
new file mode 100644
index 0000000000..4e7704eb4e
--- /dev/null
+++ b/tools/editor/icons/source/icon_v_split_container.svg
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_v_split_container.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="6.8095409"
+ inkscape:cy="10.783047"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3,1 C 1.8954305,1 1,1.8954305 1,3 l 0,10 c 0,1.104569 0.8954305,2 2,2 l 10,0 c 1.104569,0 2,-0.895431 2,-2 L 15,3 C 15,1.8954305 14.104569,1 13,1 Z m 0,2 10,0 0,10 -10,0 z"
+ id="rect4140"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sssssssssccccc"
+ transform="translate(0,1036.3622)" />
+ <rect
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4155"
+ width="2"
+ height="10"
+ x="1043.3622"
+ y="-13"
+ transform="matrix(0,1,-1,0,0,0)" />
+ <path
+ style="fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 10,1045.3622 -4,0 2,2 z"
+ id="path4173"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 10,1043.3622 -2,-2 -2,2 z"
+ id="path4171"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_vector.svg b/tools/editor/icons/source/icon_vector.svg
new file mode 100644
index 0000000000..3260aa77ac
--- /dev/null
+++ b/tools/editor/icons/source/icon_vector.svg
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot-design/assets/icons/svg/icon_graph_scalar_uniform.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_vector.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="4.3605855"
+ inkscape:cy="6.1062603"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#b8ea68;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 7,1047.3622 -4,4"
+ id="path4161"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#b8ea68;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 7,1040.3622 0,7 7,0"
+ id="path4163"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_vector2.svg b/tools/editor/icons/source/icon_vector2.svg
new file mode 100644
index 0000000000..b7b157db01
--- /dev/null
+++ b/tools/editor/icons/source/icon_vector2.svg
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot-design/assets/icons/svg/icon_graph_scalar_uniform.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_vector_2.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="4.3478451"
+ inkscape:cy="7.2601098"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#b8ea68;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 4,1041.3622 0,9 9,0"
+ id="path4163"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_vehicle_body.svg b/tools/editor/icons/source/icon_vehicle_body.svg
new file mode 100644
index 0000000000..a168b98a99
--- /dev/null
+++ b/tools/editor/icons/source/icon_vehicle_body.svg
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_vehicle_body.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="63.999997"
+ inkscape:cx="8.7499158"
+ inkscape:cy="7.6997367"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 5 3 A 1 1 0 0 0 4 4 L 3 7 L 1 7 L 1 11 L 2.0507812 11 C 2.2824511 9.8589301 3.2905526 9 4.5 9 C 5.7094474 9 6.717549 9.8589301 6.9492188 11 L 9.0507812 11 C 9.2824511 9.8589301 10.290553 9 11.5 9 C 12.709447 9 13.717549 9.8589301 13.949219 11 L 15 11 L 15 7 L 11 7 L 11 3 L 5 3 z M 6 4 L 10 4 L 10 7 L 6 7 L 6 4 z "
+ transform="translate(0,1036.3622)"
+ id="rect4167" />
+ <circle
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="path4154"
+ cx="4.5"
+ cy="1047.8622"
+ r="1.5" />
+ <circle
+ r="1.5"
+ cy="1047.8622"
+ cx="11.5"
+ id="circle4165"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_vehicle_wheel.svg b/tools/editor/icons/source/icon_vehicle_wheel.svg
new file mode 100644
index 0000000000..dff80c4d00
--- /dev/null
+++ b/tools/editor/icons/source/icon_vehicle_wheel.svg
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_vehicle_wheel.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="5.9995914"
+ inkscape:cy="9.3390829"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 8 1 A 7 7 0 0 0 1 8 A 7 7 0 0 0 8 15 A 7 7 0 0 0 15 8 A 7 7 0 0 0 8 1 z M 8 3 A 5 5 0 0 1 13 8 A 5 5 0 0 1 8 13 A 5 5 0 0 1 3 8 A 5 5 0 0 1 8 3 z "
+ transform="translate(0,1036.3622)"
+ id="path4212" />
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 8 4 A 4 4 0 0 0 4 8 A 4 4 0 0 0 8 12 A 4 4 0 0 0 12 8 A 4 4 0 0 0 8 4 z M 8 5 A 1 1 0 0 1 9 6 A 1 1 0 0 1 8 7 A 1 1 0 0 1 7 6 A 1 1 0 0 1 8 5 z M 6 7 A 1 1 0 0 1 7 8 A 1 1 0 0 1 6 9 A 1 1 0 0 1 5 8 A 1 1 0 0 1 6 7 z M 10 7 A 1 1 0 0 1 11 8 A 1 1 0 0 1 10 9 A 1 1 0 0 1 9 8 A 1 1 0 0 1 10 7 z M 8 9 A 1 1 0 0 1 9 10 A 1 1 0 0 1 8 11 A 1 1 0 0 1 7 10 A 1 1 0 0 1 8 9 z "
+ id="circle4229"
+ transform="translate(0,1036.3622)" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_video_player.svg b/tools/editor/icons/source/icon_video_player.svg
new file mode 100644
index 0000000000..bfb499518b
--- /dev/null
+++ b/tools/editor/icons/source/icon_video_player.svg
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_sprite.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_video_player.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16"
+ inkscape:cx="4.9323208"
+ inkscape:cy="11.020342"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#fefeff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4175"
+ width="1"
+ height="1"
+ x="20"
+ y="1042.3622" />
+ <rect
+ y="1042.3622"
+ x="29"
+ height="1"
+ width="1"
+ id="rect4177"
+ style="opacity:1;fill:#fefeff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 3 1 A 2 2 0 0 0 1.5859375 1.5859375 A 2 2 0 0 0 1 3 L 1 13 A 2 2 0 0 0 1.5859375 14.414062 A 2 2 0 0 0 3 15 L 13 15 A 2 2 0 0 0 15 13 L 15 3 A 2 2 0 0 0 13 1 L 3 1 z M 3 2 L 13 2 A 1.0000174 1.0000174 0 0 1 14 3 L 14 13 A 1.0000174 1.0000174 0 0 1 13 14 L 3 14 A 1.0000174 1.0000174 0 0 1 2 13 L 2 3 A 1.0000174 1.0000174 0 0 1 3 2 z "
+ transform="translate(0,1036.3622)"
+ id="rect4179" />
+ <path
+ style="fill:#a5efac;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 6,1047.3622 0,-6 5,3 z"
+ id="path4180"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_viewport.svg b/tools/editor/icons/source/icon_viewport.svg
new file mode 100644
index 0000000000..fcbe094fca
--- /dev/null
+++ b/tools/editor/icons/source/icon_viewport.svg
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_sprite.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_viewport.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="7.693363"
+ inkscape:cy="8.1399132"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#fefeff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4175"
+ width="1"
+ height="1"
+ x="20"
+ y="1042.3622" />
+ <rect
+ y="1042.3622"
+ x="29"
+ height="1"
+ width="1"
+ id="rect4177"
+ style="opacity:1;fill:#fefeff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 3,2 C 2.4695977,2.0000801 1.9609485,2.2108464 1.5859375,2.5859375 1.2108464,2.9609485 1.0000801,3.4695977 1,4 l 0,8 c 8.03e-5,0.530402 0.2108465,1.039051 0.5859375,1.414062 C 1.9609484,13.789153 2.4695976,13.99992 3,14 l 10,0 c 1.104569,0 2,-0.895431 2,-2 L 15,4 C 15,2.8954305 14.104569,2 13,2 Z m 0,1 10,0 c 0.552281,9.6e-6 0.99999,0.4477192 1,1 l 0,8 c -10e-6,0.552281 -0.447719,0.99999 -1,1 L 3,13 C 2.4477192,12.99999 2.0000096,12.552281 2,12 L 2,4 c 9.6e-6,-0.5522808 0.4477192,-0.9999904 1,-1 z"
+ transform="translate(0,1036.3622)"
+ id="rect4179"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccsssscccccccccc" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_viewport_sprite.svg b/tools/editor/icons/source/icon_viewport_sprite.svg
new file mode 100644
index 0000000000..7e7a64144c
--- /dev/null
+++ b/tools/editor/icons/source/icon_viewport_sprite.svg
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_sprite.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_viewport_sprite.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254834"
+ inkscape:cx="3.6977136"
+ inkscape:cy="6.6658528"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#fefeff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4175"
+ width="1"
+ height="1"
+ x="20"
+ y="1042.3622" />
+ <rect
+ y="1042.3622"
+ x="29"
+ height="1"
+ width="1"
+ id="rect4177"
+ style="opacity:1;fill:#fefeff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <path
+ style="opacity:1;fill:#a5b7f8;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 3,2 C 2.4695977,2.0000801 1.9609485,2.2108464 1.5859375,2.5859375 1.2108464,2.9609485 1.0000801,3.4695977 1,4 l 0,8 c 8.03e-5,0.530402 0.2108465,1.039051 0.5859375,1.414062 C 1.9609484,13.789153 2.4695976,13.99992 3,14 l 10,0 c 1.104569,0 2,-0.895431 2,-2 L 15,4 C 15,2.8954305 14.104569,2 13,2 Z m 0,1 10,0 c 0.552281,9.6e-6 0.99999,0.4477192 1,1 l 0,8 c -10e-6,0.552281 -0.447719,0.99999 -1,1 L 3,13 C 2.4477192,12.99999 2.0000096,12.552281 2,12 L 2,4 c 9.6e-6,-0.5522808 0.4477192,-0.9999904 1,-1 z"
+ transform="translate(0,1036.3622)"
+ id="rect4179"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccsssscccccccccc" />
+ <rect
+ style="opacity:1;fill:#a5b7f8;fill-opacity:0.98823529;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4213"
+ width="1"
+ height="1"
+ x="5"
+ y="1043.3622" />
+ <rect
+ y="1043.3622"
+ x="10"
+ height="1"
+ width="1"
+ id="rect4215"
+ style="opacity:1;fill:#a5b7f8;fill-opacity:0.98823529;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="1045.3622"
+ x="4"
+ height="1"
+ width="8"
+ id="rect4217"
+ style="opacity:1;fill:#a5b7f8;fill-opacity:0.98823529;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_visibility_enabler.svg b/tools/editor/icons/source/icon_visibility_enabler.svg
new file mode 100644
index 0000000000..7c3bc54c99
--- /dev/null
+++ b/tools/editor/icons/source/icon_visibility_enabler.svg
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_visibility_enabler.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.313708"
+ inkscape:cx="7.6618615"
+ inkscape:cy="10.09281"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-intersection-paths="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <g
+ id="layer1-0"
+ inkscape:label="Layer 1"
+ transform="translate(-1.5201563e-4,0)"
+ style="fill:#fc9c9c;fill-opacity:0.99607843">
+ <path
+ id="path4165"
+ transform="translate(0,1036.3622)"
+ d="M 8,2 C 5.4432667,2 2.2093331,3.9476781 1.0449219,7.7050781 a 1.0001,1.0001 0 0 0 -0.00586,0.5703125 C 2.1634651,12.210791 5.5,14 8,14 c 2.5,0 5.836534,-1.789209 6.960938,-5.7246094 a 1.0001,1.0001 0 0 0 0,-0.5527344 C 13.86059,3.9350563 10.554367,2 8,2 Z M 8,4 A 4,4 0 0 1 12,8 4,4 0 0 1 8,12 4,4 0 0 1 4,8 4,4 0 0 1 8,4 Z"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ <circle
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4192"
+ cx="8"
+ cy="1044.3622"
+ r="2" />
+ </g>
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 1 1 L 1 4 L 2 4 L 2 2 L 4 2 L 4 1 L 1 1 z M 12 1 L 12 2 L 14 2 L 14 4 L 15 4 L 15 1 L 12 1 z M 1 12 L 1 15 L 4 15 L 4 14 L 2 14 L 2 12 L 1 12 z M 14 12 L 14 14 L 12 14 L 12 15 L 15 15 L 15 12 L 14 12 z "
+ transform="translate(0,1036.3622)"
+ id="rect4176" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_visibility_enabler_2d.svg b/tools/editor/icons/source/icon_visibility_enabler_2d.svg
new file mode 100644
index 0000000000..1e7d1a751f
--- /dev/null
+++ b/tools/editor/icons/source/icon_visibility_enabler_2d.svg
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_visibility_enabler_2d.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.313708"
+ inkscape:cx="3.8611624"
+ inkscape:cy="11.15347"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-intersection-paths="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <g
+ id="layer1-0"
+ inkscape:label="Layer 1"
+ transform="translate(-1.5201563e-4,0)"
+ style="fill:#a5b7f9;fill-opacity:0.98823529">
+ <path
+ id="path4165"
+ transform="translate(0,1036.3622)"
+ d="M 8,2 C 5.4432667,2 2.2093331,3.9476781 1.0449219,7.7050781 a 1.0001,1.0001 0 0 0 -0.00586,0.5703125 C 2.1634651,12.210791 5.5,14 8,14 c 2.5,0 5.836534,-1.789209 6.960938,-5.7246094 a 1.0001,1.0001 0 0 0 0,-0.5527344 C 13.86059,3.9350563 10.554367,2 8,2 Z M 8,4 A 4,4 0 0 1 12,8 4,4 0 0 1 8,12 4,4 0 0 1 4,8 4,4 0 0 1 8,4 Z"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#a5b7f9;fill-opacity:0.98823529;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ <circle
+ style="opacity:1;fill:#a5b7f9;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4192"
+ cx="8"
+ cy="1044.3622"
+ r="2" />
+ </g>
+ <path
+ style="opacity:1;fill:#a5b7f9;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 1 1 L 1 4 L 2 4 L 2 2 L 4 2 L 4 1 L 1 1 z M 12 1 L 12 2 L 14 2 L 14 4 L 15 4 L 15 1 L 12 1 z M 1 12 L 1 15 L 4 15 L 4 14 L 2 14 L 2 12 L 1 12 z M 14 12 L 14 14 L 12 14 L 12 15 L 15 15 L 15 12 L 14 12 z "
+ transform="translate(0,1036.3622)"
+ id="rect4176" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_visibility_notifier.svg b/tools/editor/icons/source/icon_visibility_notifier.svg
new file mode 100644
index 0000000000..b307a6162d
--- /dev/null
+++ b/tools/editor/icons/source/icon_visibility_notifier.svg
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_visibility_notifier.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="15.999999"
+ inkscape:cx="0.5167491"
+ inkscape:cy="12.138813"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-intersection-paths="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="M 8 3 C 5.4432667 3 2.2093331 4.9476781 1.0449219 8.7050781 A 1.0001 1.0001 0 0 0 1.0390625 9.2753906 C 2.1634657 13.210791 5.5 15 8 15 C 9.4906676 15 11.271733 14.347929 12.710938 13 L 12 13 L 10 13 L 10 12.458984 A 4 4 0 0 1 8 13 A 4 4 0 0 1 4 9 A 4 4 0 0 1 8 5 A 4 4 0 0 1 10 5.5410156 L 10 3.359375 C 9.3168765 3.1210335 8.635589 3 8 3 z M 8 7 A 2 2 0 0 0 6 9 A 2 2 0 0 0 8 11 A 2 2 0 0 0 10 9 A 2 2 0 0 0 8 7 z "
+ transform="translate(0,1036.3622)"
+ id="path4165" />
+ <rect
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4157"
+ width="2"
+ height="6"
+ x="12"
+ y="1037.3622" />
+ <rect
+ y="-1047.3622"
+ x="12"
+ height="2.0000174"
+ width="2"
+ id="rect4159"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ transform="scale(1,-1)" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_visibility_notifier_2d.svg b/tools/editor/icons/source/icon_visibility_notifier_2d.svg
new file mode 100644
index 0000000000..dc2482f9e1
--- /dev/null
+++ b/tools/editor/icons/source/icon_visibility_notifier_2d.svg
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_visibility_notifier_2d.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="15.999999"
+ inkscape:cx="0.5167491"
+ inkscape:cy="12.138813"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:object-nodes="false"
+ inkscape:snap-intersection-paths="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#a5b7fa;fill-opacity:0.98823529;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="M 8 3 C 5.4432667 3 2.2093331 4.9476781 1.0449219 8.7050781 A 1.0001 1.0001 0 0 0 1.0390625 9.2753906 C 2.1634657 13.210791 5.5 15 8 15 C 9.4906676 15 11.271733 14.347929 12.710938 13 L 12 13 L 10 13 L 10 12.458984 A 4 4 0 0 1 8 13 A 4 4 0 0 1 4 9 A 4 4 0 0 1 8 5 A 4 4 0 0 1 10 5.5410156 L 10 3.359375 C 9.3168765 3.1210335 8.635589 3 8 3 z M 8 7 A 2 2 0 0 0 6 9 A 2 2 0 0 0 8 11 A 2 2 0 0 0 10 9 A 2 2 0 0 0 8 7 z "
+ transform="translate(0,1036.3622)"
+ id="path4165" />
+ <rect
+ style="opacity:1;fill:#a5b7fa;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4157"
+ width="2"
+ height="6"
+ x="12"
+ y="1037.3622" />
+ <rect
+ y="-1047.3622"
+ x="12"
+ height="2.0000174"
+ width="2"
+ id="rect4159"
+ style="opacity:1;fill:#a5b7fa;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ transform="scale(1,-1)" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_visible.svg b/tools/editor/icons/source/icon_visible.svg
new file mode 100644
index 0000000000..0185e1f3a9
--- /dev/null
+++ b/tools/editor/icons/source/icon_visible.svg
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_history.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_visible.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="13.144261"
+ inkscape:cy="10.090962"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="M 8 2 C 5.4432667 2 2.2093331 3.9476781 1.0449219 7.7050781 A 1.0001 1.0001 0 0 0 1.0390625 8.2753906 C 2.1634651 12.210791 5.5 14 8 14 C 10.5 14 13.836534 12.210791 14.960938 8.2753906 A 1.0001 1.0001 0 0 0 14.960938 7.7226562 C 13.86059 3.9350563 10.554367 2 8 2 z M 8 4 A 4 4 0 0 1 12 8 A 4 4 0 0 1 8 12 A 4 4 0 0 1 4 8 A 4 4 0 0 1 8 4 z "
+ transform="translate(0,1036.3622)"
+ id="path4165" />
+ <circle
+ r="2"
+ cy="1044.3622"
+ cx="8"
+ id="circle4192"
+ style="opacity:1;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_vu_empty.svg b/tools/editor/icons/source/icon_vu_empty.svg
new file mode 100644
index 0000000000..e2c102a45a
--- /dev/null
+++ b/tools/editor/icons/source/icon_vu_empty.svg
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="128"
+ height="4"
+ viewBox="0 0 128 4"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_vu_empty.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_vu_empty.svg">
+ <defs
+ id="defs4">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4211">
+ <stop
+ style="stop-color:#84ffb1;stop-opacity:1"
+ offset="0"
+ id="stop4213" />
+ <stop
+ id="stop4221"
+ offset="0.5"
+ style="stop-color:#e1dc7a;stop-opacity:1" />
+ <stop
+ style="stop-color:#ff8484;stop-opacity:1"
+ offset="1"
+ id="stop4215" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4211"
+ id="linearGradient4219"
+ x1="0"
+ y1="2"
+ x2="128"
+ y2="2"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="8"
+ inkscape:cx="62.578607"
+ inkscape:cy="5.6676337"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:snap-midpoints="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1048.3622)">
+ <path
+ style="opacity:1;fill:url(#linearGradient4219);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 2 0 A 2 2 0 0 0 0 2 A 2 2 0 0 0 2 4 L 80 4 L 80 0 L 2 0 z M 82 0 L 82 4 L 126 4 A 2 2 0 0 0 128 2 A 2 2 0 0 0 126 0 L 82 0 z "
+ transform="translate(0,1048.3622)"
+ id="rect4204" />
+ <path
+ id="path4242"
+ transform="translate(0,1048.3622)"
+ d="M 2 0 A 2 2 0 0 0 0 2 A 2 2 0 0 0 2 4 L 80 4 L 80 0 L 2 0 z M 82 0 L 82 4 L 126 4 A 2 2 0 0 0 128 2 A 2 2 0 0 0 126 0 L 82 0 z "
+ style="opacity:1;fill:#000000;fill-opacity:0.23529412;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_vu_full.svg b/tools/editor/icons/source/icon_vu_full.svg
new file mode 100644
index 0000000000..b96af9218a
--- /dev/null
+++ b/tools/editor/icons/source/icon_vu_full.svg
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="128"
+ height="4"
+ viewBox="0 0 128 4"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_vu_full.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_vu_full.svg">
+ <defs
+ id="defs4">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4211">
+ <stop
+ style="stop-color:#84ffb1;stop-opacity:1"
+ offset="0"
+ id="stop4213" />
+ <stop
+ id="stop4221"
+ offset="0.5"
+ style="stop-color:#e1dc7a;stop-opacity:1" />
+ <stop
+ style="stop-color:#ff8484;stop-opacity:1"
+ offset="1"
+ id="stop4215" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4211"
+ id="linearGradient4219"
+ x1="0"
+ y1="2"
+ x2="128"
+ y2="2"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="8"
+ inkscape:cx="37.328607"
+ inkscape:cy="1.9176337"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:snap-midpoints="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1048.3622)">
+ <path
+ style="opacity:1;fill:url(#linearGradient4219);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 2 0 A 2 2 0 0 0 0 2 A 2 2 0 0 0 2 4 L 80 4 L 80 0 L 2 0 z M 82 0 L 82 4 L 126 4 A 2 2 0 0 0 128 2 A 2 2 0 0 0 126 0 L 82 0 z "
+ transform="translate(0,1048.3622)"
+ id="rect4204" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_warning.svg b/tools/editor/icons/source/icon_warning.svg
new file mode 100644
index 0000000000..ee89f3ec99
--- /dev/null
+++ b/tools/editor/icons/source/icon_warning.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="8"
+ height="8"
+ viewBox="0 0 8 8"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_warning.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="1.5203658"
+ inkscape:cy="5.6414917"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1044.3622)">
+ <rect
+ style="opacity:1;fill:#ffd684;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4154"
+ width="8"
+ height="8"
+ x="2.220446e-16"
+ y="1044.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_window_dialog.svg b/tools/editor/icons/source/icon_window_dialog.svg
new file mode 100644
index 0000000000..433ae48a55
--- /dev/null
+++ b/tools/editor/icons/source/icon_window_dialog.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_confirmation_dialog.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_window_dialog.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="2.2494901"
+ inkscape:cy="5.6766918"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#a5efac;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 3 1 C 1.89543 1 1 1.8954 1 3 L 1 4 L 15 4 L 15 3 C 15 1.8954 14.104569 1 13 1 L 3 1 z M 12 2 L 13 2 L 13 3 L 12 3 L 12 2 z M 1 5 L 1 13 C 1 14.1046 1.89543 15 3 15 L 13 15 C 14.104569 15 15 14.1046 15 13 L 15 5 L 1 5 z "
+ transform="translate(0,1036.3622)"
+ id="rect4140" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_world_environment.svg b/tools/editor/icons/source/icon_world_environment.svg
new file mode 100644
index 0000000000..b06dd2a826
--- /dev/null
+++ b/tools/editor/icons/source/icon_world_environment.svg
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_node_2d.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_world_environment.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627416"
+ inkscape:cx="10.565197"
+ inkscape:cy="6.6366465"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ d="M 8 1 A 7 7 0 0 0 1 8 A 7 7 0 0 0 8 15 A 7 7 0 0 0 15 8 A 7 7 0 0 0 8 1 z M 8 2 A 6 6 0 0 1 14 8 A 6 6 0 0 1 8 14 A 6 6 0 0 1 2 8 A 6 6 0 0 1 8 2 z "
+ transform="translate(0,1036.3622)"
+ id="path4158" />
+ <rect
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843"
+ id="rect4163"
+ width="12"
+ height="1"
+ x="2"
+ y="1041.3622" />
+ <rect
+ y="1046.3622"
+ x="2"
+ height="1"
+ width="12"
+ id="rect4165"
+ style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99607843" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#fc9c9c;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.99607843"
+ d="m 8,1038.3622 c 0,0 -3,2 -3,6 0,4 3,6 3,6"
+ id="path4167"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="czc" />
+ <path
+ sodipodi:nodetypes="czc"
+ inkscape:connector-curvature="0"
+ id="path4169"
+ d="m 8,1038.3622 c 0,0 3,2 3,6 0,4 -3,6 -3,6"
+ style="fill:none;fill-rule:evenodd;stroke:#fc9c9c;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.99607843" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_y_sort.svg b/tools/editor/icons/source/icon_y_sort.svg
new file mode 100644
index 0000000000..65990097c6
--- /dev/null
+++ b/tools/editor/icons/source/icon_y_sort.svg
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_center_container.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_y_sort.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="4.9766986"
+ inkscape:cy="10.397342"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <rect
+ style="opacity:1;fill:#a5b7f9;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4157"
+ width="6"
+ height="2"
+ x="9"
+ y="1038.3622" />
+ <path
+ style="opacity:1;fill:#a5b7f9;fill-opacity:0.98823529;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 3,1048.3622 -2,0 3,3 3,-3 -2,0 0,-8 2,0 -3,-3 -3,3 2,0 z"
+ id="rect4140"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccc" />
+ <rect
+ y="1043.3622"
+ x="9"
+ height="2"
+ width="4"
+ id="rect4160"
+ style="opacity:1;fill:#a5b7f9;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#a5b7f9;fill-opacity:0.98823529;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4162"
+ width="2"
+ height="2"
+ x="9"
+ y="1048.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_zoom.svg b/tools/editor/icons/source/icon_zoom.svg
new file mode 100644
index 0000000000..811036b370
--- /dev/null
+++ b/tools/editor/icons/source/icon_zoom.svg
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_zoom.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="icon_zoom.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="3.7772222"
+ inkscape:cy="11.922647"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <path
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 6,1037.3622 a 5,5 0 0 0 -5,5 5,5 0 0 0 5,5 5,5 0 0 0 5,-5 5,5 0 0 0 -5,-5 z m 0,2 a 3,3 0 0 1 3,3 3,3 0 0 1 -3,3 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 z"
+ id="path4135"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="opacity:1;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4140"
+ width="2"
+ height="7.0000172"
+ x="-733.81873"
+ y="745.30402"
+ inkscape:transform-center-y="5.3032921"
+ transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,0,0)"
+ inkscape:transform-center-x="-5.3033134" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/svgs_2_pngs.py b/tools/editor/icons/svgs_2_pngs.py
new file mode 100644
index 0000000000..fd1e9017b6
--- /dev/null
+++ b/tools/editor/icons/svgs_2_pngs.py
@@ -0,0 +1,76 @@
+# -*- coding: utf-8 -*-
+
+# Basic exporter for svg icons (requires Inkscape)
+
+import os.path
+from os import listdir
+from os.path import isfile, join
+import subprocess
+import sys
+
+SVGS_PATH = 'source/'
+OUT_DIR = './'
+DPI = 90
+
+if len(sys.argv) >= 2:
+ try:
+ scale = int(sys.argv[1])
+ if scale > 1:
+ OUT_DIR = '%sx/' % scale
+ DPI *= scale
+ except:
+ pass
+
+
+def export_all(svgs_path=SVGS_PATH, out_dir=OUT_DIR, dpi=DPI):
+ if not os.path.isdir(out_dir):
+ os.makedirs(out_dir)
+
+ file_names = [f for f in listdir(svgs_path) if isfile(join(svgs_path, f))]
+
+ for file_name in file_names:
+ # name without extensions
+ name_only = file_name.replace('.svg', '')
+
+ icon_from_name = name_only
+ out_icon_names = [name_only] # export to a png with the same file name
+ rotations = []
+ transforms = []
+
+ # special cases
+ if special_icons.has_key(name_only):
+ special_icon = special_icons[name_only]
+ if type(special_icon) is dict:
+ if special_icon.has_key('output_names'):
+ out_icon_names += special_icon['output_names']
+
+ svg_file_path = '%s%s.svg' % (svgs_path, icon_from_name)
+
+ for index, out_icon_name in enumerate(out_icon_names):
+ subprocess.call(
+ 'inkscape -z -f {input} -d {dpi} -e{output}'.format(
+ input=svg_file_path,
+ dpi=dpi,
+ output='%s%s.png' % (out_dir, out_icon_name)
+ ), shell=True)
+
+
+# special cases for icons that will be exported to multiple target pngs or that require transforms.
+special_icons = {
+ 'icon_add_track': dict( output_names=['icon_add'] ),
+ 'icon_new': dict( output_names=['icon_file'] ),
+ 'icon_animation_tree_player': dict( output_names=['icon_animation_tree'] ),
+ 'icon_tool_rotate': dict( output_names=['icon_reload'] ),
+ 'icon_multi_edit': dict( output_names=['icon_multi_node_edit'] ),
+ 'icon_folder': dict( output_names=['icon_load', 'icon_open'] ),
+ 'icon_file_list': dict( output_names=['icon_enum'] ),
+ 'icon_collision_2d': dict( output_names=['icon_collision_polygon_2d', 'icon_polygon_2d'] ),
+ 'icon_class_list': dict( output_names=['icon_filesystem'] ),
+ 'icon_color_ramp': dict( output_names=['icon_graph_color_ramp'] ),
+ 'icon_translation': dict( output_names=['icon_p_hash_translation'] ),
+ 'icon_shader': dict( output_names=['icon_shader_material', 'icon_material_shader'] ),
+ 'icon_canvas_item_shader_graph': dict( output_names=['icon_material_shader_graph'] ),
+
+}
+
+export_all()
diff --git a/tools/editor/import_settings.cpp b/tools/editor/import_settings.cpp
index 3b3ebb0ad7..dfaeca03db 100644
--- a/tools/editor/import_settings.cpp
+++ b/tools/editor/import_settings.cpp
@@ -278,7 +278,7 @@ ImportSettingsDialog::ImportSettingsDialog(EditorNode *p_editor) {
set_child_rect(tree);
set_title(TTR("Imported Resources"));
- texformat=TTR("Keep,None,Disk,VRAM");
+// texformat="Keep,None,Disk,VRAM";
tree->set_hide_root(true);
tree->set_columns(2);
@@ -288,7 +288,7 @@ ImportSettingsDialog::ImportSettingsDialog(EditorNode *p_editor) {
tree->connect("item_edited",this,"_item_edited");
tree->connect("button_pressed",this,"_button_pressed");
-// add_button(TTR("Re-Import"),"reimport");
+// add_button("Re-Import","reimport");
get_ok()->set_text(TTR("Re-Import"));
get_cancel()->set_text(TTR("Close"));
diff --git a/tools/editor/io_plugins/editor_bitmask_import_plugin.cpp b/tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
new file mode 100644
index 0000000000..dca7d011ff
--- /dev/null
+++ b/tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
@@ -0,0 +1,357 @@
+#include "editor_bitmask_import_plugin.h"
+#include "io/image_loader.h"
+#include "tools/editor/editor_file_dialog.h"
+#include "tools/editor/editor_dir_dialog.h"
+#include "tools/editor/editor_node.h"
+#include "tools/editor/property_editor.h"
+#include "io/resource_saver.h"
+#include "os/file_access.h"
+#include "io/marshalls.h"
+#include "tools/editor/editor_settings.h"
+
+class _EditorBitMaskImportOptions : public Object {
+
+ OBJ_TYPE(_EditorBitMaskImportOptions, Object);
+public:
+
+ bool _set(const StringName& p_name, const Variant& p_value) {
+
+ return false;
+ }
+
+ bool _get(const StringName& p_name, Variant &r_ret) const{
+
+ return false;
+ }
+
+ void _get_property_list(List<PropertyInfo> *p_list) const{
+
+ }
+
+ static void _bind_methods() {
+
+ ADD_SIGNAL(MethodInfo("changed"));
+ }
+
+
+ _EditorBitMaskImportOptions() {
+
+ }
+
+};
+
+class EditorBitMaskImportDialog : public ConfirmationDialog {
+
+ OBJ_TYPE(EditorBitMaskImportDialog, ConfirmationDialog);
+
+ EditorBitMaskImportPlugin *plugin;
+
+ LineEdit *import_path;
+ LineEdit *save_path;
+ EditorFileDialog *file_select;
+ EditorDirDialog *save_select;
+ ConfirmationDialog *error_dialog;
+ PropertyEditor *option_editor;
+
+public:
+
+ void _choose_files(const Vector<String>& p_path) {
+
+ String files;
+ for (int i = 0; i<p_path.size(); i++) {
+
+ if (i>0)
+ files += ",";
+ files += p_path[i];
+ }
+
+ import_path->set_text(files);
+
+ }
+ void _choose_save_dir(const String& p_path) {
+
+ save_path->set_text(p_path);
+ }
+
+ void _browse() {
+
+ file_select->popup_centered_ratio();
+ }
+
+ void _browse_target() {
+
+ save_select->popup_centered_ratio();
+
+ }
+
+
+ void popup_import(const String& p_path) {
+
+ popup_centered(Size2(400, 100)*EDSCALE);
+ if (p_path != "") {
+
+ Ref<ResourceImportMetadata> rimd = ResourceLoader::load_import_metadata(p_path);
+ ERR_FAIL_COND(!rimd.is_valid());
+
+ save_path->set_text(p_path.get_base_dir());
+
+ String src = "";
+ for (int i = 0; i<rimd->get_source_count(); i++) {
+ if (i>0)
+ src += ",";
+ src += EditorImportPlugin::expand_source_path(rimd->get_source_path(i));
+ }
+ import_path->set_text(src);
+ }
+ }
+
+
+ void _import() {
+
+ Vector<String> bitmasks = import_path->get_text().split(",");
+
+ if (bitmasks.size() == 0) {
+ error_dialog->set_text(TTR("No bit masks to import!"));
+ error_dialog->popup_centered(Size2(200, 100)*EDSCALE);
+ }
+
+ if (save_path->get_text().strip_edges() == "") {
+ error_dialog->set_text(TTR("Target path is empty."));
+ error_dialog->popup_centered_minsize();
+ return;
+ }
+
+ if (!save_path->get_text().begins_with("res://")) {
+ error_dialog->set_text(TTR("Target path must be a complete resource path."));
+ error_dialog->popup_centered_minsize();
+ return;
+ }
+
+ if (!DirAccess::exists(save_path->get_text())) {
+ error_dialog->set_text(TTR("Target path must exist."));
+ error_dialog->popup_centered_minsize();
+ return;
+ }
+
+ for (int i = 0; i<bitmasks.size(); i++) {
+
+ Ref<ResourceImportMetadata> imd = memnew(ResourceImportMetadata);
+
+ imd->add_source(EditorImportPlugin::validate_source_path(bitmasks[i]));
+
+ String dst = save_path->get_text();
+ if (dst == "") {
+ error_dialog->set_text(TTR("Save path is empty!"));
+ error_dialog->popup_centered(Size2(200, 100)*EDSCALE);
+ }
+
+ dst = dst.plus_file(bitmasks[i].get_file().basename() + ".pbm");
+
+ Error err = plugin->import(dst, imd);
+ }
+
+ hide();
+
+ }
+
+
+ void _notification(int p_what) {
+
+ }
+
+ static void _bind_methods() {
+
+
+ ObjectTypeDB::bind_method("_choose_files", &EditorBitMaskImportDialog::_choose_files);
+ ObjectTypeDB::bind_method("_choose_save_dir", &EditorBitMaskImportDialog::_choose_save_dir);
+ ObjectTypeDB::bind_method("_import", &EditorBitMaskImportDialog::_import);
+ ObjectTypeDB::bind_method("_browse", &EditorBitMaskImportDialog::_browse);
+ ObjectTypeDB::bind_method("_browse_target", &EditorBitMaskImportDialog::_browse_target);
+ // ADD_SIGNAL( MethodInfo("imported",PropertyInfo(Variant::OBJECT,"scene")) );
+ }
+
+ EditorBitMaskImportDialog(EditorBitMaskImportPlugin *p_plugin) {
+
+ plugin = p_plugin;
+
+
+ set_title(TTR("Import BitMasks"));
+
+ VBoxContainer *vbc = memnew(VBoxContainer);
+ add_child(vbc);
+ set_child_rect(vbc);
+
+
+ HBoxContainer *hbc = memnew(HBoxContainer);
+ vbc->add_margin_child(TTR("Source Texture(s):"), hbc);
+
+ import_path = memnew(LineEdit);
+ import_path->set_h_size_flags(SIZE_EXPAND_FILL);
+ hbc->add_child(import_path);
+
+ Button * import_choose = memnew(Button);
+ import_choose->set_text(" .. ");
+ hbc->add_child(import_choose);
+
+ import_choose->connect("pressed", this, "_browse");
+
+ hbc = memnew(HBoxContainer);
+ vbc->add_margin_child(TTR("Target Path:"), hbc);
+
+ save_path = memnew(LineEdit);
+ save_path->set_h_size_flags(SIZE_EXPAND_FILL);
+ hbc->add_child(save_path);
+
+ Button * save_choose = memnew(Button);
+ save_choose->set_text(" .. ");
+ hbc->add_child(save_choose);
+
+ save_choose->connect("pressed", this, "_browse_target");
+
+ file_select = memnew(EditorFileDialog);
+ file_select->set_access(EditorFileDialog::ACCESS_FILESYSTEM);
+ add_child(file_select);
+ file_select->set_mode(EditorFileDialog::MODE_OPEN_FILES);
+ file_select->connect("files_selected", this, "_choose_files");
+
+ List<String> extensions;
+ ImageLoader::get_recognized_extensions(&extensions);
+ file_select->clear_filters();
+ for (int i = 0; i<extensions.size(); i++) {
+
+ file_select->add_filter("*." + extensions[i] + " ; " + extensions[i].to_upper());
+ }
+
+ save_select = memnew(EditorDirDialog);
+ add_child(save_select);
+
+ // save_select->set_mode(EditorFileDialog::MODE_OPEN_DIR);
+ save_select->connect("dir_selected", this, "_choose_save_dir");
+
+ get_ok()->connect("pressed", this, "_import");
+ get_ok()->set_text(TTR("Import"));
+
+
+ error_dialog = memnew(ConfirmationDialog);
+ add_child(error_dialog);
+ error_dialog->get_ok()->set_text(TTR("Accept"));
+ // error_dialog->get_cancel()->hide();
+
+ set_hide_on_ok(false);
+ }
+
+ ~EditorBitMaskImportDialog() {
+ }
+
+};
+
+
+String EditorBitMaskImportPlugin::get_name() const {
+
+ return "bitmask";
+}
+String EditorBitMaskImportPlugin::get_visible_name() const{
+
+ return TTR("Bit Mask");
+}
+void EditorBitMaskImportPlugin::import_dialog(const String& p_from){
+
+ dialog->popup_import(p_from);
+}
+Error EditorBitMaskImportPlugin::import(const String& p_path, const Ref<ResourceImportMetadata>& p_from){
+
+ ERR_FAIL_COND_V(p_from->get_source_count() != 1, ERR_INVALID_PARAMETER);
+
+ Ref<ResourceImportMetadata> from = p_from;
+
+ String src_path = EditorImportPlugin::expand_source_path(from->get_source_path(0));
+ Ref<ImageTexture> it = ResourceLoader::load(src_path);
+ ERR_FAIL_COND_V(it.is_null(), ERR_CANT_OPEN);
+
+ Ref<BitMap> target = memnew(BitMap);
+ target->create_from_image_alpha(it.ptr()->get_data());
+
+ from->set_source_md5(0, FileAccess::get_md5(src_path));
+ from->set_editor(get_name());
+ target->set_import_metadata(from);
+
+
+ Error err = ResourceSaver::save(p_path, target);
+
+ return err;
+
+}
+
+
+EditorBitMaskImportPlugin* EditorBitMaskImportPlugin::singleton = NULL;
+
+
+void EditorBitMaskImportPlugin::import_from_drop(const Vector<String>& p_drop, const String &p_dest_path) {
+
+ Vector<String> files;
+
+ List<String> valid_extensions;
+ ImageLoader::get_recognized_extensions(&valid_extensions);
+ for(int i=0;i<p_drop.size();i++) {
+
+ String extension=p_drop[i].extension().to_lower();
+
+ for (List<String>::Element *E=valid_extensions.front();E;E=E->next()) {
+
+ if (E->get()==extension) {
+ files.push_back(p_drop[i]);
+ break;
+ }
+ }
+ }
+
+ if (files.size()) {
+ import_dialog();
+ dialog->_choose_files(files);
+ dialog->_choose_save_dir(p_dest_path);
+ }
+}
+
+void EditorBitMaskImportPlugin::reimport_multiple_files(const Vector<String>& p_list) {
+
+ if (p_list.size() == 0)
+ return;
+
+ Vector<String> sources;
+ for (int i = 0; i<p_list.size(); i++) {
+ int idx;
+ EditorFileSystemDirectory *efsd = EditorFileSystem::get_singleton()->find_file(p_list[i], &idx);
+ if (efsd) {
+ for (int j = 0; j<efsd->get_source_count(idx); j++) {
+ String file = expand_source_path(efsd->get_source_file(idx, j));
+ if (sources.find(file) == -1) {
+ sources.push_back(file);
+ }
+
+ }
+ }
+ }
+
+ if (sources.size()) {
+
+ dialog->popup_import(p_list[0]);
+ dialog->_choose_files(sources);
+ dialog->_choose_save_dir(p_list[0].get_base_dir());
+ }
+}
+
+bool EditorBitMaskImportPlugin::can_reimport_multiple_files() const {
+
+ return true;
+}
+
+EditorBitMaskImportPlugin::EditorBitMaskImportPlugin(EditorNode* p_editor) {
+
+ singleton = this;
+ dialog = memnew(EditorBitMaskImportDialog(this));
+ p_editor->get_gui_base()->add_child(dialog);
+}
+
+EditorBitMaskExportPlugin::EditorBitMaskExportPlugin() {
+
+}
diff --git a/tools/editor/io_plugins/editor_bitmask_import_plugin.h b/tools/editor/io_plugins/editor_bitmask_import_plugin.h
new file mode 100644
index 0000000000..d9ca33cd97
--- /dev/null
+++ b/tools/editor/io_plugins/editor_bitmask_import_plugin.h
@@ -0,0 +1,41 @@
+#ifndef EDITOR_BITMASK_IMPORT_PLUGIN_H
+#define EDITOR_BITMASK_IMPORT_PLUGIN_H
+
+#include "tools/editor/editor_import_export.h"
+#include "scene/resources/font.h"
+
+class EditorNode;
+class EditorBitMaskImportDialog;
+
+class EditorBitMaskImportPlugin : public EditorImportPlugin {
+
+ OBJ_TYPE(EditorBitMaskImportPlugin, EditorImportPlugin);
+
+ EditorBitMaskImportDialog *dialog;
+public:
+
+ static EditorBitMaskImportPlugin *singleton;
+
+ virtual String get_name() const;
+ virtual String get_visible_name() const;
+ virtual void import_dialog(const String& p_from = "");
+ virtual Error import(const String& p_path, const Ref<ResourceImportMetadata>& p_from);
+ void import_from_drop(const Vector<String>& p_drop, const String &p_dest_path);
+ virtual void reimport_multiple_files(const Vector<String>& p_list);
+ virtual bool can_reimport_multiple_files() const;
+
+
+ EditorBitMaskImportPlugin(EditorNode* p_editor);
+};
+
+class EditorBitMaskExportPlugin : public EditorExportPlugin {
+
+ OBJ_TYPE(EditorBitMaskExportPlugin, EditorExportPlugin);
+
+
+public:
+
+ EditorBitMaskExportPlugin();
+};
+
+#endif // EDITOR_SAMPLE_IMPORT_PLUGIN_H
diff --git a/tools/editor/io_plugins/editor_font_import_plugin.cpp b/tools/editor/io_plugins/editor_font_import_plugin.cpp
index 970b8fe0ca..d5e6e3077e 100644
--- a/tools/editor/io_plugins/editor_font_import_plugin.cpp
+++ b/tools/editor/io_plugins/editor_font_import_plugin.cpp
@@ -510,13 +510,13 @@ class EditorFontImportDialog : public ConfirmationDialog {
if (source->get_line_edit()->get_text()=="") {
error_dialog->set_text(TTR("No source font file!"));
- error_dialog->popup_centered(Size2(200,100));
+ error_dialog->popup_centered(Size2(200,100)*EDSCALE);
return;
}
if (dest->get_line_edit()->get_text()=="") {
error_dialog->set_text(TTR("No target font resource!"));
- error_dialog->popup_centered(Size2(200,100));
+ error_dialog->popup_centered(Size2(200,100)*EDSCALE);
return;
}
@@ -527,8 +527,8 @@ class EditorFontImportDialog : public ConfirmationDialog {
Ref<ResourceImportMetadata> rimd = get_rimd();
if (rimd.is_null()) {
- error_dialog->set_text(TTR("Can't load/process source font"));
- error_dialog->popup_centered(Size2(200,100));
+ error_dialog->set_text(TTR("Can't load/process source font."));
+ error_dialog->popup_centered(Size2(200,100)*EDSCALE);
return;
}
@@ -536,7 +536,7 @@ class EditorFontImportDialog : public ConfirmationDialog {
if (err!=OK) {
error_dialog->set_text(TTR("Couldn't save font."));
- error_dialog->popup_centered(Size2(200,100));
+ error_dialog->popup_centered(Size2(200,100)*EDSCALE);
return;
}
@@ -573,7 +573,7 @@ public:
void popup_import(const String& p_path) {
- popup_centered(Size2(600,500));
+ popup_centered(Size2(600,500)*EDSCALE);
if (p_path!="") {
@@ -601,6 +601,13 @@ public:
}
}
+
+ void set_source_and_dest(const String& p_font,const String& p_dest) {
+ source->get_line_edit()->set_text(p_font);
+ dest->get_line_edit()->set_text(p_dest);
+ _prop_changed();
+ }
+
EditorFontImportDialog(EditorFontImportPlugin *p_plugin) {
plugin=p_plugin;
VBoxContainer *vbc = memnew( VBoxContainer );
@@ -657,14 +664,14 @@ public:
testhb->add_child(test_color);
vbl->add_spacer();
- vbl->add_margin_child(TTR("Test: "),testhb);
+ vbl->add_margin_child(TTR("Test:")+" ",testhb);
/*
HBoxContainer *upd_hb = memnew( HBoxContainer );
// vbl->add_child(upd_hb);
upd_hb->add_spacer();
Button *update = memnew( Button);
upd_hb->add_child(update);
- update->set_text(TTR("Update"));
+ update->set_text("Update");
update->connect("pressed",this,"_update");
*/
options = memnew( _EditorFontImportOptions );
@@ -887,7 +894,7 @@ Ref<BitmapFont> EditorFontImportPlugin::generate_font(const Ref<ResourceImportMe
if (src_path.extension().to_lower()=="fnt") {
if (ResourceLoader::load(src_path).is_valid()) {
- EditorNode::get_singleton()->show_warning(TTR("Path: ")+src_path+"\nIs a Godot font file, please supply a BMFont type file instead.");
+ EditorNode::get_singleton()->show_warning(TTR("Path:")+" "+src_path+"\n"+TTR("This file is already a Godot font file, please supply a BMFont type file instead."));
return Ref<BitmapFont>();
}
@@ -895,7 +902,7 @@ Ref<BitmapFont> EditorFontImportPlugin::generate_font(const Ref<ResourceImportMe
font.instance();
Error err = font->create_from_fnt(src_path);
if (err) {
- EditorNode::get_singleton()->show_warning(TTR("Path: ")+src_path+"\nFailed opening as BMFont file.");
+ EditorNode::get_singleton()->show_warning(TTR("Path:")+" "+src_path+"\n"+TTR("Failed opening as BMFont file."));
return Ref<BitmapFont>();
}
@@ -939,7 +946,7 @@ Ref<BitmapFont> EditorFontImportPlugin::generate_font(const Ref<ResourceImportMe
if ( error ) {
FT_Done_FreeType( library );
- ERR_EXPLAIN(TTR("Invalid font size. "));
+ ERR_EXPLAIN(TTR("Invalid font size."));
ERR_FAIL_COND_V( error,Ref<BitmapFont>() );
}
@@ -986,7 +993,7 @@ Ref<BitmapFont> EditorFontImportPlugin::generate_font(const Ref<ResourceImportMe
if ( !fa ) {
FT_Done_FreeType( library );
- ERR_EXPLAIN(TTR("Invalid font custom source. "));
+ ERR_EXPLAIN(TTR("Invalid font custom source."));
ERR_FAIL_COND_V( !fa,Ref<BitmapFont>() );
}
@@ -1607,7 +1614,7 @@ String EditorFontImportPlugin::get_name() const {
}
String EditorFontImportPlugin::get_visible_name() const{
- return "Font";
+ return TTR("Font");
}
void EditorFontImportPlugin::import_dialog(const String& p_from){
@@ -1629,6 +1636,20 @@ Error EditorFontImportPlugin::import(const String& p_path, const Ref<ResourceImp
}
+void EditorFontImportPlugin::import_from_drop(const Vector<String>& p_drop, const String &p_dest_path) {
+
+ for(int i=0;i<p_drop.size();i++) {
+ String ext = p_drop[i].extension().to_lower();
+ String file = p_drop[i].get_file();
+ if (ext=="ttf" || ext=="otf" || ext=="fnt") {
+
+ import_dialog();
+ dialog->set_source_and_dest(p_drop[i],p_dest_path.plus_file(file.basename()+".fnt"));
+ break;
+ }
+ }
+}
+
EditorFontImportPlugin::EditorFontImportPlugin(EditorNode* p_editor) {
diff --git a/tools/editor/io_plugins/editor_font_import_plugin.h b/tools/editor/io_plugins/editor_font_import_plugin.h
index ce26ef91e2..25914e6f83 100644
--- a/tools/editor/io_plugins/editor_font_import_plugin.h
+++ b/tools/editor/io_plugins/editor_font_import_plugin.h
@@ -48,6 +48,7 @@ public:
virtual String get_visible_name() const;
virtual void import_dialog(const String& p_from="");
virtual Error import(const String& p_path, const Ref<ResourceImportMetadata>& p_from);
+ virtual void import_from_drop(const Vector<String>& p_drop,const String& p_dest_path);
EditorFontImportPlugin(EditorNode* p_editor);
diff --git a/tools/editor/io_plugins/editor_mesh_import_plugin.cpp b/tools/editor/io_plugins/editor_mesh_import_plugin.cpp
index e628bed2dd..c20515f0f3 100644
--- a/tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+++ b/tools/editor/io_plugins/editor_mesh_import_plugin.cpp
@@ -173,7 +173,7 @@ public:
void popup_import(const String& p_path) {
- popup_centered(Size2(400,400));
+ popup_centered(Size2(400,400)*EDSCALE);
if (p_path!="") {
@@ -207,6 +207,13 @@ public:
return;
}
+ String dst = save_path->get_text();
+ if (dst=="") {
+ error_dialog->set_text(TTR("Save path is empty!"));
+ error_dialog->popup_centered_minsize();
+ return;
+ }
+
for(int i=0;i<meshes.size();i++) {
Ref<ResourceImportMetadata> imd = memnew( ResourceImportMetadata );
@@ -224,16 +231,9 @@ public:
imd->add_source(EditorImportPlugin::validate_source_path(meshes[i]));
- String dst = save_path->get_text();
- if (dst=="") {
- error_dialog->set_text(TTR("Save path is empty!"));
- error_dialog->popup_centered_minsize();
- return;
- }
-
- dst = dst.plus_file(meshes[i].get_file().basename()+".msh");
+ String file_path = dst.plus_file(meshes[i].get_file().basename()+".msh");
- plugin->import(dst,imd);
+ plugin->import(file_path,imd);
}
hide();
@@ -331,7 +331,7 @@ String EditorMeshImportPlugin::get_name() const {
}
String EditorMeshImportPlugin::get_visible_name() const{
- return "3D Mesh";
+ return TTR("Mesh");
}
void EditorMeshImportPlugin::import_dialog(const String& p_from){
@@ -362,7 +362,7 @@ Error EditorMeshImportPlugin::import(const String& p_path, const Ref<ResourceImp
if (mesh->surface_get_name(i)!="")
name=mesh->surface_get_name(i);
else
- name=TTR("Surface ")+itos(i+1);
+ name=vformat(TTR("Surface %d"),i+1);
name_map[name]=mesh->surface_get_material(i);
}
@@ -498,7 +498,7 @@ Error EditorMeshImportPlugin::import(const String& p_path, const Ref<ResourceImp
surf_tool->index();
mesh = surf_tool->commit(mesh);
if (name=="")
- name=TTR("Surface ")+itos(mesh->get_surface_count()-1);
+ name=vformat(TTR("Surface %d"),mesh->get_surface_count()-1);
mesh->surface_set_name(mesh->get_surface_count()-1,name);
name="";
surf_tool->clear();
@@ -536,9 +536,28 @@ Error EditorMeshImportPlugin::import(const String& p_path, const Ref<ResourceImp
}
+void EditorMeshImportPlugin::import_from_drop(const Vector<String>& p_drop, const String &p_dest_path) {
+
+
+ Vector<String> files;
+ for(int i=0;i<p_drop.size();i++) {
+ String ext = p_drop[i].extension().to_lower();
+ String file = p_drop[i].get_file();
+ if (ext=="obj") {
+
+ files.push_back(p_drop[i]);
+ }
+ }
+
+ if (files.size()) {
+ import_dialog();
+ dialog->_choose_files(files);
+ dialog->_choose_save_dir(p_dest_path);
+ }
+}
+
EditorMeshImportPlugin::EditorMeshImportPlugin(EditorNode* p_editor) {
dialog = memnew( EditorMeshImportDialog(this));
p_editor->get_gui_base()->add_child(dialog);
}
-
diff --git a/tools/editor/io_plugins/editor_mesh_import_plugin.h b/tools/editor/io_plugins/editor_mesh_import_plugin.h
index 014954685d..ed30d69e18 100644
--- a/tools/editor/io_plugins/editor_mesh_import_plugin.h
+++ b/tools/editor/io_plugins/editor_mesh_import_plugin.h
@@ -21,6 +21,7 @@ public:
virtual String get_visible_name() const;
virtual void import_dialog(const String& p_from="");
virtual Error import(const String& p_path, const Ref<ResourceImportMetadata>& p_from);
+ void import_from_drop(const Vector<String>& p_drop, const String &p_dest_path);
EditorMeshImportPlugin(EditorNode* p_editor);
diff --git a/tools/editor/io_plugins/editor_sample_import_plugin.cpp b/tools/editor/io_plugins/editor_sample_import_plugin.cpp
index d2939cd556..ac0795f522 100644
--- a/tools/editor/io_plugins/editor_sample_import_plugin.cpp
+++ b/tools/editor/io_plugins/editor_sample_import_plugin.cpp
@@ -221,7 +221,7 @@ public:
void popup_import(const String& p_path) {
- popup_centered(Size2(400,400));
+ popup_centered(Size2(400,400)*EDSCALE);
if (p_path!="") {
Ref<ResourceImportMetadata> rimd = ResourceLoader::load_import_metadata(p_path);
@@ -252,7 +252,7 @@ public:
if (samples.size()==0) {
error_dialog->set_text(TTR("No samples to import!"));
- error_dialog->popup_centered(Size2(200,100));
+ error_dialog->popup_centered(Size2(200,100)*EDSCALE);
}
if (save_path->get_text().strip_edges()=="") {
@@ -262,7 +262,7 @@ public:
}
if (!save_path->get_text().begins_with("res://")) {
- error_dialog->set_text(TTR("Target path must be full resource path."));
+ error_dialog->set_text(TTR("Target path must be a complete resource path."));
error_dialog->popup_centered_minsize();
return;
}
@@ -293,7 +293,7 @@ public:
String dst = save_path->get_text();
if (dst=="") {
error_dialog->set_text(TTR("Save path is empty!"));
- error_dialog->popup_centered(Size2(200,100));
+ error_dialog->popup_centered(Size2(200,100)*EDSCALE);
}
dst = dst.plus_file(samples[i].get_file().basename()+".smp");
@@ -823,6 +823,58 @@ void EditorSampleImportPlugin::_compress_ima_adpcm(const Vector<float>& p_data,D
EditorSampleImportPlugin* EditorSampleImportPlugin::singleton=NULL;
+void EditorSampleImportPlugin::import_from_drop(const Vector<String>& p_drop, const String &p_dest_path) {
+
+
+ Vector<String> files;
+ for(int i=0;i<p_drop.size();i++) {
+ String ext = p_drop[i].extension().to_lower();
+
+ if (ext=="wav") {
+
+ files.push_back(p_drop[i]);
+ }
+ }
+
+ if (files.size()) {
+ import_dialog();
+ dialog->_choose_files(files);
+ dialog->_choose_save_dir(p_dest_path);
+ }
+}
+
+void EditorSampleImportPlugin::reimport_multiple_files(const Vector<String>& p_list) {
+
+ if (p_list.size()==0)
+ return;
+
+ Vector<String> sources;
+ for(int i=0;i<p_list.size();i++) {
+ int idx;
+ EditorFileSystemDirectory *efsd = EditorFileSystem::get_singleton()->find_file(p_list[i],&idx);
+ if (efsd) {
+ for(int j=0;j<efsd->get_source_count(idx);j++) {
+ String file = expand_source_path(efsd->get_source_file(idx,j));
+ if (sources.find(file)==-1) {
+ sources.push_back(file);
+ }
+
+ }
+ }
+ }
+
+ if (sources.size()) {
+
+ dialog->popup_import(p_list[0]);
+ dialog->_choose_files(sources);
+ dialog->_choose_save_dir(p_list[0].get_base_dir());
+ }
+}
+
+bool EditorSampleImportPlugin::can_reimport_multiple_files() const {
+
+ return true;
+}
EditorSampleImportPlugin::EditorSampleImportPlugin(EditorNode* p_editor) {
@@ -865,8 +917,7 @@ Vector<uint8_t> EditorSampleExportPlugin::custom_export(String& p_path,const Ref
}
+
EditorSampleExportPlugin::EditorSampleExportPlugin() {
}
-
-
diff --git a/tools/editor/io_plugins/editor_sample_import_plugin.h b/tools/editor/io_plugins/editor_sample_import_plugin.h
index b31562af76..a2686ebe4f 100644
--- a/tools/editor/io_plugins/editor_sample_import_plugin.h
+++ b/tools/editor/io_plugins/editor_sample_import_plugin.h
@@ -49,6 +49,9 @@ public:
virtual String get_visible_name() const;
virtual void import_dialog(const String& p_from="");
virtual Error import(const String& p_path, const Ref<ResourceImportMetadata>& p_from);
+ void import_from_drop(const Vector<String>& p_drop, const String &p_dest_path);
+ virtual void reimport_multiple_files(const Vector<String>& p_list);
+ virtual bool can_reimport_multiple_files() const;
EditorSampleImportPlugin(EditorNode* p_editor);
diff --git a/tools/editor/io_plugins/editor_scene_import_plugin.cpp b/tools/editor/io_plugins/editor_scene_import_plugin.cpp
index 1843fbf612..594d3f5bcd 100644
--- a/tools/editor/io_plugins/editor_scene_import_plugin.cpp
+++ b/tools/editor/io_plugins/editor_scene_import_plugin.cpp
@@ -41,6 +41,7 @@
#include "scene/3d/physics_body.h"
#include "scene/3d/portal.h"
#include "scene/3d/vehicle_body.h"
+#include "tools/editor/create_dialog.h"
#include "os/os.h"
@@ -95,6 +96,7 @@ class EditorImportAnimationOptions : public VBoxContainer {
Tree *optimization_tree;
Vector<TreeItem*> items;
+
bool updating;
bool validating;
@@ -167,6 +169,7 @@ class EditorSceneImportDialog : public ConfirmationDialog {
EditorFileDialog *script_select;
EditorDirDialog *save_select;
OptionButton *texture_action;
+ CreateDialog *root_type_choose;
ConfirmationDialog *confirm_open;
@@ -178,8 +181,13 @@ class EditorSceneImportDialog : public ConfirmationDialog {
Map<Ref<Mesh>,Ref<Shape> > collision_map;
ConfirmationDialog *error_dialog;
- OptionButton *this_import;
- OptionButton *next_import;
+ Button *root_type;
+ CheckBox *root_default;
+
+
+ void _root_default_pressed();
+ void _root_type_pressed();
+ void _set_root_type();
void _choose_file(const String& p_path);
void _choose_save_file(const String& p_path);
@@ -206,6 +214,11 @@ protected:
static void _bind_methods();
public:
+ void setup_popup(const String& p_from,const String& p_to_path) {
+ _choose_file(p_from);
+ _choose_save_file(p_to_path);
+ }
+
Error import(const String& p_from, const String& p_to, const String& p_preset);
void popup_import(const String& p_from);
EditorSceneImportDialog(EditorNode *p_editor,EditorSceneImportPlugin *p_plugin);
@@ -661,7 +674,7 @@ void EditorSceneImportDialog::_open_and_import() {
if (unsaved) {
- confirm_open->popup_centered_minsize(Size2(300,80));
+ confirm_open->popup_centered_minsize(Size2(300,80)*EDSCALE);
} else {
_import(true);
}
@@ -686,7 +699,7 @@ void EditorSceneImportDialog::_import(bool p_and_open) {
}
if (!save_path->get_text().begins_with("res://")) {
- error_dialog->set_text(TTR("Target path must be full resource path."));
+ error_dialog->set_text(TTR("Target path must be a complete resource path."));
error_dialog->popup_centered_minsize();
return;
}
@@ -721,8 +734,8 @@ void EditorSceneImportDialog::_import(bool p_and_open) {
if (script_path->get_text()!="") {
Ref<Script> scr = ResourceLoader::load(script_path->get_text());
if (!scr.is_valid()) {
- error_dialog->set_text(TTR("Couldn't load Post-Import Script."));
- error_dialog->popup_centered(Size2(200,100));
+ error_dialog->set_text(TTR("Couldn't load post-import script."));
+ error_dialog->popup_centered(Size2(200,100)*EDSCALE);
return;
}
@@ -730,8 +743,8 @@ void EditorSceneImportDialog::_import(bool p_and_open) {
pi->set_script(scr.get_ref_ptr());
if (!pi->get_script_instance()) {
- error_dialog->set_text(TTR("Invalid/Broken Script for Post-Import."));
- error_dialog->popup_centered(Size2(200,100));
+ error_dialog->set_text(TTR("Invalid/broken script for post-import."));
+ error_dialog->popup_centered(Size2(200,100)*EDSCALE);
return;
}
@@ -764,9 +777,10 @@ void EditorSceneImportDialog::_import(bool p_and_open) {
rim->set_option("animation_filters",animation_options->get_filter());
rim->set_option("animation_clips",animation_options->get_clips());
rim->set_option("post_import_script",script_path->get_text());
- rim->set_option("import_this_time",this_import->get_selected());
- rim->set_option("import_next_time",next_import->get_selected());
rim->set_option("reimport",true);
+ if (!root_default->is_pressed()) {
+ rim->set_option("root_type",root_type->get_text());
+ }
List<String> missing;
Error err = plugin->import1(rim,&scene,&missing);
@@ -774,7 +788,7 @@ void EditorSceneImportDialog::_import(bool p_and_open) {
if (err || !scene) {
error_dialog->set_text(TTR("Error importing scene."));
- error_dialog->popup_centered(Size2(200,100));
+ error_dialog->popup_centered(Size2(200,100)*EDSCALE);
return;
}
@@ -799,7 +813,7 @@ void EditorSceneImportDialog::_import(bool p_and_open) {
if (err) {
error_dialog->set_text(TTR("Error importing scene."));
- error_dialog->popup_centered(Size2(200,100));
+ error_dialog->popup_centered(Size2(200,100)*EDSCALE);
return;
}
if (wip_open)
@@ -816,7 +830,7 @@ void EditorSceneImportDialog::_import(bool p_and_open) {
if (err) {
- error_dialog->set_text(TTR("Error importing scene."));
+ error_dialog->set_text("Error importing scene.");
error_dialog->popup_centered(Size2(200,100));
return;
}
@@ -843,7 +857,7 @@ void EditorSceneImportDialog::_import_confirm() {
wip_save_file="";
error_dialog->set_text(TTR("Error importing scene."));
- error_dialog->popup_centered(Size2(200,100));
+ error_dialog->popup_centered(Size2(200,100)*EDSCALE);
return;
}
@@ -878,7 +892,7 @@ void EditorSceneImportDialog::_browse_script() {
void EditorSceneImportDialog::popup_import(const String &p_from) {
- popup_centered(Size2(750,550));
+ popup_centered(Size2(750,550)*EDSCALE);
if (p_from!="") {
Ref<ResourceImportMetadata> rimd = ResourceLoader::load_import_metadata(p_from);
if (rimd.is_null())
@@ -909,12 +923,24 @@ void EditorSceneImportDialog::popup_import(const String &p_from) {
if (rimd->has_option("animation_optimizer_max_angle"))
animation_options->set_optimize_max_angle(rimd->get_option("animation_optimizer_max_angle"));
+ if (rimd->has_option("root_type")) {
+ root_default->set_pressed(false);
+ String type = rimd->get_option("root_type");
+ root_type->set_text(type);
+ root_type->set_disabled(false);
+
+ if (has_icon(type,"EditorIcons")) {
+ root_type->set_icon(get_icon(type,"EditorIcons"));
+ } else {
+ root_type->set_icon(get_icon("Object","EditorIcons"));
+ }
+
+ } else {
+ root_default->set_pressed(true);
+ root_type->set_disabled(true);
+ }
script_path->set_text(rimd->get_option("post_import_script"));
- if (rimd->has_option("import_this_time"))
- this_import->select(rimd->get_option("import_this_time"));
- if (rimd->has_option("import_next_time"))
- next_import->select(rimd->get_option("import_next_time"));
save_path->set_text(p_from.get_base_dir());
import_path->set_text(EditorImportPlugin::expand_source_path(rimd->get_source_path(0)));
@@ -931,6 +957,9 @@ void EditorSceneImportDialog::_notification(int p_what) {
List<String> extensions;
file_select->clear_filters();
+ root_type->set_icon(get_icon("Spatial","EditorIcons"));
+ root_type->set_text("Spatial");
+ root_type->set_disabled(true);
for(int i=0;i<plugin->get_importers().size();i++) {
plugin->get_importers()[i]->get_extensions(&extensions);
@@ -981,7 +1010,30 @@ void EditorSceneImportDialog::_dialog_hid() {
wip_rimd=Ref<ResourceImportMetadata>();
}
}
+void EditorSceneImportDialog::_root_default_pressed() {
+
+ root_type->set_disabled(root_default->is_pressed());
+}
+void EditorSceneImportDialog::_root_type_pressed() {
+
+
+ root_type_choose->popup(false);
+}
+
+
+void EditorSceneImportDialog::_set_root_type() {
+
+ String type = root_type_choose->get_selected_type();
+ if (type==String())
+ return;
+ root_type->set_text(type);
+ if (has_icon(type,"EditorIcons")) {
+ root_type->set_icon(get_icon(type,"EditorIcons"));
+ } else {
+ root_type->set_icon(get_icon("Object","EditorIcons"));
+ }
+}
void EditorSceneImportDialog::_bind_methods() {
@@ -996,13 +1048,16 @@ void EditorSceneImportDialog::_bind_methods() {
ObjectTypeDB::bind_method("_dialog_hid",&EditorSceneImportDialog::_dialog_hid);
ObjectTypeDB::bind_method("_import_confirm",&EditorSceneImportDialog::_import_confirm);
ObjectTypeDB::bind_method("_open_and_import",&EditorSceneImportDialog::_open_and_import);
+ ObjectTypeDB::bind_method("_root_default_pressed",&EditorSceneImportDialog::_root_default_pressed);
+ ObjectTypeDB::bind_method("_root_type_pressed",&EditorSceneImportDialog::_root_type_pressed);
+ ObjectTypeDB::bind_method("_set_root_type",&EditorSceneImportDialog::_set_root_type);
+
ADD_SIGNAL( MethodInfo("imported",PropertyInfo(Variant::OBJECT,"scene")) );
}
-
const EditorSceneImportDialog::FlagInfo EditorSceneImportDialog::scene_flag_names[]={
{EditorSceneImportPlugin::SCENE_FLAG_REMOVE_NOIMP,("Actions"),"Remove Nodes (-noimp)",true},
@@ -1162,20 +1217,37 @@ EditorSceneImportDialog::EditorSceneImportDialog(EditorNode *p_editor, EditorSce
error_dialog->get_ok()->set_text(TTR("Accept"));
// error_dialog->get_cancel()->hide();
+
+ HBoxContainer *custom_root_hb = memnew( HBoxContainer );
+ vbc->add_margin_child(TTR("Custom Root Node Type:"),custom_root_hb);
+ root_type = memnew(Button);
+ root_type->set_h_size_flags(SIZE_EXPAND_FILL);
+ root_type->set_text_align(Button::ALIGN_LEFT);
+ root_type->connect("pressed",this,"_root_type_pressed");
+ custom_root_hb->add_child(root_type);
+
+ root_default = memnew(CheckBox);
+ root_default->set_text(TTR("Auto"));
+ root_default->set_pressed(true);
+ root_default->connect("pressed",this,"_root_default_pressed");
+ custom_root_hb->add_child(root_default);
+
+
+ /*
this_import = memnew( OptionButton );
- this_import->add_item(TTR("Overwrite Existing Scene"));
+ this_import->add_item("Overwrite Existing Scene");
this_import->add_item("Overwrite Existing, Keep Materials");
- this_import->add_item(TTR("Keep Existing, Merge with New"));
- this_import->add_item(TTR("Keep Existing, Ignore New"));
- vbc->add_margin_child(TTR("This Time:"),this_import);
+ this_import->add_item("Keep Existing, Merge with New");
+ this_import->add_item("Keep Existing, Ignore New");
+ vbc->add_margin_child("This Time:",this_import);
next_import = memnew( OptionButton );
- next_import->add_item(TTR("Overwrite Existing Scene"));
+ next_import->add_item("Overwrite Existing Scene");
next_import->add_item("Overwrite Existing, Keep Materials");
- next_import->add_item(TTR("Keep Existing, Merge with New"));
- next_import->add_item(TTR("Keep Existing, Ignore New"));
- vbc->add_margin_child(TTR("Next Time:"),next_import);
-
+ next_import->add_item("Keep Existing, Merge with New");
+ next_import->add_item("Keep Existing, Ignore New");
+ vbc->add_margin_child("Next Time:",next_import);
+*/
set_hide_on_ok(false);
GLOBAL_DEF("import/shared_textures","res://");
@@ -1183,6 +1255,7 @@ EditorSceneImportDialog::EditorSceneImportDialog(EditorNode *p_editor, EditorSce
import_hb->add_constant_override("separation",30);
+
VBoxContainer *ovb = memnew( VBoxContainer);
ovb->set_h_size_flags(SIZE_EXPAND_FILL);
import_hb->add_child(ovb);
@@ -1232,6 +1305,10 @@ EditorSceneImportDialog::EditorSceneImportDialog(EditorNode *p_editor, EditorSce
wip_open=false;
//texture_options->set_format(EditorImport::IMAGE_FORMAT_C);
+ root_type_choose = memnew( CreateDialog );
+ add_child(root_type_choose);
+ root_type_choose->set_base_type("Node");
+ root_type_choose->connect("create",this,"_set_root_type");
}
@@ -1247,7 +1324,7 @@ String EditorSceneImportPlugin::get_name() const {
String EditorSceneImportPlugin::get_visible_name() const{
- return "3D Scene";
+ return TTR("Scene");
}
void EditorSceneImportPlugin::import_dialog(const String& p_from){
@@ -1906,397 +1983,7 @@ Node* EditorSceneImportPlugin::_fix_node(Node *p_node,Node *p_root,Map<Ref<Mesh>
}
-void EditorSceneImportPlugin::_merge_existing_node(Node *p_node,Node *p_imported_scene,Set<Ref<Resource> >& checked_resources,Set<Node*> &checked_nodes) {
-
-
- NodePath path = p_node->get_import_path();
-
- if (!path.is_empty() && p_imported_scene->has_node(path)) {
-
- Node *imported_node = p_imported_scene->get_node(path);
-
- if (imported_node->get_type()==p_node->get_type()) {
- //same thing, check what it is
-
- if (p_node->get_type()=="MeshInstance") {
-
- //merge mesh instance, this is a special case!
- MeshInstance *mi_imported=imported_node->cast_to<MeshInstance>();
- MeshInstance *mi_node=p_node->cast_to<MeshInstance>();
-
- Ref<Mesh> mesh_imported = mi_imported->get_mesh();
- Ref<Mesh> mesh_node = mi_node->get_mesh();
-
- if (mesh_node.is_null() && mesh_imported.is_valid()) {
-
- mi_node->set_mesh(mesh_imported);
-
- } else if (mesh_node.is_valid() && mesh_imported.is_valid()) {
-
- if (checked_resources.has(mesh_imported)) {
-
- mi_node->set_mesh(mesh_imported);
- } else {
- //mix up meshes
- //import new geometry but keep materials
- for(int i=0;i<mesh_imported->get_surface_count();i++) {
-
- String name = mesh_imported->surface_get_name(i);
-
- for(int j=0;j<mesh_node->get_surface_count();j++) {
-
- Ref<Material> mat = mesh_node->surface_get_material(j);
- if (mat.is_valid() && mesh_node->surface_get_name(j)==name ) {
-
- mesh_imported->surface_set_material(i,mat);
- break;
- }
- }
- }
- // was imported, do nothing further
- checked_resources.insert(mesh_imported);
- mi_node->set_mesh(mesh_imported);
- }
-
- }
- } else if (p_node->get_type()=="Path") {
- //for paths, overwrite path
- Path *path_imported =imported_node->cast_to<Path>();
- Path *path_node =p_node->cast_to<Path>();
-
- if (path_imported->get_curve().is_valid()) {
-
- path_node->set_curve(path_imported->get_curve());
- }
- } else if (p_node->get_type()=="Portal") {
- //for paths, overwrite path
-
- Portal *portal_imported =imported_node->cast_to<Portal>();
- Portal *portal_node =p_node->cast_to<Portal>();
-
- portal_node->set_shape( portal_imported->get_shape() );
-
- } else if (p_node->get_type()=="Room") {
- //for paths, overwrite path
- Room *room_imported =imported_node->cast_to<Room>();
- Room *room_node =p_node->cast_to<Room>();
-
- room_node->set_room( room_imported->get_room() );
-
- } else if (p_node->get_type()=="Skeleton") {
- //for paths, overwrite path
-
- Skeleton *skeleton_imported =imported_node->cast_to<Skeleton>();
- Skeleton *skeleton_node =p_node->cast_to<Skeleton>();
-
- //use imported bones, obviously
- skeleton_node->clear_bones();
- for(int i=0;i<skeleton_imported->get_bone_count();i++) {
-
- skeleton_node->add_bone(skeleton_imported->get_bone_name(i));
- skeleton_node->set_bone_parent(i,skeleton_imported->get_bone_parent(i));
- skeleton_node->set_bone_rest(i,skeleton_imported->get_bone_rest(i));
- //skeleton_node->set_bone_pose(i,skeleton_imported->get_bone_pose(i)); // not in a scene, will throw errors
- }
- }
- else if (p_node->get_type() == "AnimationPlayer") {
- //for paths, overwrite path
- AnimationPlayer *aplayer_imported = imported_node->cast_to<AnimationPlayer>();
- AnimationPlayer *aplayer_node = p_node->cast_to<AnimationPlayer>();
-
- //use imported bones, obviously
- List<StringName> anims;
- List<StringName> existing_anims;
- aplayer_imported->get_animation_list(&anims);
- aplayer_node->get_animation_list(&existing_anims);
-
- //use imported animations
- for (List<StringName>::Element *N = anims.front(); N; N = N->next()) {
-
- Ref<Animation> candidate = aplayer_imported->get_animation(N->get());
-
- if (aplayer_node->has_animation(N->get())) {
-
- Ref<Animation> found = aplayer_node->get_animation(N->get());
-
- candidate->set_loop(found->has_loop());
- candidate->set_step(found->get_step());
-
- //For each track candidate
- for (int i = 0; i < candidate->get_track_count(); i++) {
-
- NodePath track_path = candidate->track_get_path(i);
- // For each track existing
- for (int x = 0; x < found->get_track_count(); x++) {
-
- NodePath path_to_compare = found->track_get_path(x);
-
- if (track_path.hash() == path_to_compare.hash() && candidate->track_get_type(x) == found->track_get_type(i)) {
-
- //Tracks matches
- if (candidate->track_get_interpolation_type(i) != found->track_get_interpolation_type(x))
- candidate->track_set_interpolation_type(i, found->track_get_interpolation_type(x));
- if (candidate->track_get_type(i) == Animation::TYPE_VALUE && candidate->value_track_is_continuous(i) != found->value_track_is_continuous(x))
- candidate->value_track_set_continuous(i, found->value_track_is_continuous(x));
-
- //Key transitions might have changed, but the animation remained unchanged
- if (candidate->track_get_key_count(i) == found->track_get_key_count(x)) {
- for (int k = 0; k < candidate->track_get_key_count(i); k++) {
-
- if (candidate->track_get_key_transition(i, k) != found->track_get_key_transition(x, k))
- candidate->track_set_key_transition(i, k, found->track_get_key_transition(x, k));
- }
- }
-
- }
-
- }
- }
-
- // Append function callbacks and values
- for (int x = 0; x < found->get_track_count(); x++) {
- if (found->track_get_type(x) == Animation::TYPE_METHOD || found->track_get_type(x) == Animation::TYPE_VALUE)
- candidate->add_track(found->track_get_type(x), candidate->get_track_count());
-
- for (int k = 0; k < found->track_get_key_count(x); k++)
- candidate->track_insert_key(x, found->track_get_key_time(x, k), found->track_get_key_value(x, k), found->track_get_key_transition(x, k));
- }
- }
-
- aplayer_node->add_animation(N->get(), candidate);
- }
-
- } else if (p_node->get_type()=="CollisionShape") {
- //for paths, overwrite path
-
- CollisionShape *collision_imported =imported_node->cast_to<CollisionShape>();
- CollisionShape *collision_node =p_node->cast_to<CollisionShape>();
-
- collision_node->set_shape( collision_imported->get_shape() );
- }
- }
-
- if (p_node->cast_to<Spatial>() && imported_node->cast_to<Spatial>()) {
- //apply transform if changed
- Spatial *snode = p_node->cast_to<Spatial>();
- Spatial *simp = imported_node->cast_to<Spatial>();
-
- if (snode->get_import_transform() == snode->get_transform()) {
- //not moved, apply new
- snode->set_import_transform(simp->get_transform());
- snode->set_transform(simp->get_transform());
- } else if (snode->get_import_transform() == simp->get_import_transform()) {
- //do nothing, nothing changed keep local changes
- } else {
- //changed both, imported and edited, merge
- Transform local_xform = snode->get_import_transform().affine_inverse() * snode->get_transform();
- snode->set_import_transform(simp->get_import_transform());
- snode->set_transform(simp->get_import_transform() * local_xform);
- }
- }
-
- checked_nodes.insert(imported_node);
-
- }
-#if 0
- else {
-
- if (p_node!=p_root && p_existing->has_node(p_root->get_path_to(p_node->get_parent()))) {
-
- Node *parent = p_existing->get_node(p_root->get_path_to(p_node->get_parent()));
- NodePath path = p_root->get_path_to(p_node);
-
- //add it.. because not existing in existing scene
- Object *o = ObjectTypeDB::instance(p_existing->get_type());
- Node *n=NULL;
- if (o)
- n=o->cast_to<Node>();
-
- if (n) {
-
- List<PropertyInfo> pl;
- p_existing->get_property_list(&pl);
- for(List<PropertyInfo>::Element *E=pl.front();E;E=E->next()) {
- if (!(E->get().usage&PROPERTY_USAGE_STORAGE))
- continue;
- n->set( E->get().name, p_existing->get(E->get().name) );
- }
-
- parent->add_child(n);
-
- valid=true;
- }
- }
-
- }
-#endif
-
- for(int i=0;i<p_node->get_child_count();i++) {
- _merge_existing_node(p_node->get_child(i),p_imported_scene,checked_resources,checked_nodes);
- }
-}
-
-
-void EditorSceneImportPlugin::_add_new_nodes(Node *p_node,Node *p_imported,Node *p_imported_scene,Node *p_existing_scene,Set<Node*> &checked_nodes) {
-
-
- for(int i=0;i<p_imported->get_child_count();i++) {
-
-
- Node *imported_node = p_imported->get_child(i);
-
- if (imported_node->get_owner()!=p_imported_scene) {
- // print_line("skipping because not imported at "+String(imported_node->get_name()));
- continue; //end of the road
- }
-
- Vector<StringName> nn;
- nn.push_back(imported_node->get_name());
- NodePath imported_path(nn,false);
- //print_line("check for: "+String(imported_path));
-
- if (!p_node->has_node(imported_path) && !checked_nodes.has(imported_node)) {
- //not there, re-add it
- //add it.. because not existing in existing scene
- Object *o = ObjectTypeDB::instance(imported_node->get_type());
- Node *n=NULL;
- if (o)
- n=o->cast_to<Node>();
-
- //print_line("creating node of same type..");
-
- if (n) {
-
- //print_line("copy props and add");
- List<PropertyInfo> pl;
- imported_node->get_property_list(&pl);
- for(List<PropertyInfo>::Element *E=pl.front();E;E=E->next()) {
- if (!(E->get().usage&PROPERTY_USAGE_STORAGE))
- continue;
- n->set( E->get().name, imported_node->get(E->get().name) );
- }
-
- p_node->add_child(n);
- n->set_owner(p_existing_scene);
- }
-
- } else {
- //print_line("already exists");
- }
-
-
- if (p_node->has_node(imported_path)) {
-
- Node *other_node = p_node->get_node(imported_path);
-
- _add_new_nodes(other_node,imported_node,p_imported_scene,p_existing_scene,checked_nodes);
-
- }
-
- }
-}
-
-
-void EditorSceneImportPlugin::_merge_scenes(Node *p_node,Node *p_imported) {
-
- Set<Ref<Resource> > checked_resources;
- Set<Node*> checked_nodes;
- _merge_existing_node(p_node,p_imported,checked_resources,checked_nodes);
- _add_new_nodes(p_node,p_imported,p_imported,p_node,checked_nodes);
- //add existing.. ?
-}
-
-
-void EditorSceneImportPlugin::_scan_materials(Node*p_base,Node *p_node,Map<String,Ref<Material> > &mesh_materials,Map<String,Ref<Material> >& override_materials) {
-
- if (!p_base && p_node->get_owner()!=p_base)
- return;
- MeshInstance *mi=p_node->cast_to<MeshInstance>();
-
- if (mi) {
- if (mi->get_material_override().is_valid()) {
- String path = p_base->get_path_to(p_node);
- override_materials[path]=mi->get_material_override();
- }
- Ref<Mesh> mesh = mi->get_mesh();
- if (mesh.is_valid()) {
-
- for(int i=0;i<mesh->get_surface_count();i++) {
-
- String name = mesh->get_name()+":"+mesh->surface_get_name(i);
- if (!mesh_materials.has(name)) {
- mesh_materials[name]=mesh->surface_get_material(i);
- }
- }
- }
- }
-
- for(int i=0;i<p_node->get_child_count();i++) {
- _scan_materials(p_base,p_node->get_child(i),mesh_materials,override_materials);
- }
-}
-
-
-void EditorSceneImportPlugin::_apply_materials(Node*p_base,Node *p_node,Map<String,Ref<Material> > &mesh_materials,Map<String,Ref<Material> >& override_materials,Set<Ref<Mesh> >& meshes_processed) {
-
- if (p_node!=p_base && p_node->get_owner()!=p_base)
- return;
-
- MeshInstance *mi=p_node->cast_to<MeshInstance>();
-
- if (mi) {
-
- print_line("is mesh "+String(p_node->get_name()));
- String path = p_base->get_path_to(p_node);
- if (override_materials.has(path)) {
- print_line("is in material overrides");
- mi->set_material_override(override_materials[path]);
- }
-
- Ref<Mesh> mesh = mi->get_mesh();
- if (mesh.is_valid() && !meshes_processed.has(mesh)) {
- print_line("mesh was not processed");
- meshes_processed.insert(mesh);
- for(int i=0;i<mesh->get_surface_count();i++) {
-
- String name = mesh->get_name()+":"+mesh->surface_get_name(i);
- print_line("name for surface "+itos(i)+": "+name);
- if (mesh_materials.has(name)) {
-
- Ref<Material> mat = mesh_materials[name];
- mesh->surface_set_material(i,mat);
- print_line("overriding!");
- }
- }
- }
- }
-
- for(int i=0;i<p_node->get_child_count();i++) {
- _apply_materials(p_base,p_node->get_child(i),mesh_materials,override_materials,meshes_processed);
- }
-}
-
-void EditorSceneImportPlugin::_merge_materials(Node *p_node,Node *p_imported) {
-
- Map<String,Ref<Material> > mesh_materials;
- Map<String,Ref<Material> > override_materials;
-
- _scan_materials(p_node,p_node,mesh_materials,override_materials);
-
- for (Map<String,Ref<Material> >::Element *E=mesh_materials.front();E;E=E->next()) {
- print_line("Mats: "+String(E->key()));
- }
-
- for (Map<String,Ref<Material> >::Element *E=override_materials.front();E;E=E->next()) {
- print_line("Overrides: "+String(E->key()));
- }
-
- Set<Ref<Mesh> > mp;
- _apply_materials(p_imported,p_imported,mesh_materials,override_materials,mp);
-
-
-}
#if 0
@@ -2397,6 +2084,21 @@ Error EditorSceneImportPlugin::import1(const Ref<ResourceImportMetadata>& p_from
return err;
}
+ if (from->has_option("root_type")) {
+ String type = from->get_option("root_type");
+ Object *base = ObjectTypeDB::instance(type);
+ Node *base_node = NULL;
+ if (base)
+ base_node=base->cast_to<Node>();
+
+ if (base_node) {
+
+ scene->replace_by(base_node);
+ memdelete(scene);
+ scene=base_node;
+ }
+ }
+
_tag_import_paths(scene,scene);
*r_node=scene;
@@ -2735,13 +2437,13 @@ Error EditorSceneImportPlugin::import2(Node *scene, const String& p_dest_path, c
post_import_script_path = post_import_script_path;
Ref<Script> scr = ResourceLoader::load(post_import_script_path);
if (!scr.is_valid()) {
- EditorNode::add_io_error(TTR("Couldn't load post-import script: '")+post_import_script_path);
+ EditorNode::add_io_error(TTR("Couldn't load post-import script:")+" "+post_import_script_path);
} else {
post_import_script = Ref<EditorScenePostImport>( memnew( EditorScenePostImport ) );
post_import_script->set_script(scr.get_ref_ptr());
if (!post_import_script->get_script_instance()) {
- EditorNode::add_io_error(TTR("Invalid/Broken Script for Post-Import: '")+post_import_script_path);
+ EditorNode::add_io_error(TTR("Invalid/broken script for post-import:")+" "+post_import_script_path);
post_import_script.unref();
}
}
@@ -2751,7 +2453,7 @@ Error EditorSceneImportPlugin::import2(Node *scene, const String& p_dest_path, c
if (post_import_script.is_valid()) {
scene = post_import_script->post_import(scene);
if (!scene) {
- EditorNode::add_io_error(TTR("Error running Post-Import script: '")+post_import_script_path);
+ EditorNode::add_io_error(TTR("Error running post-import script:")+" "+post_import_script_path);
return err;
}
@@ -2780,18 +2482,18 @@ Error EditorSceneImportPlugin::import2(Node *scene, const String& p_dest_path, c
String path = texture->get_path();
String fname= path.get_file();
String target_path = Globals::get_singleton()->localize_path(target_res_path.plus_file(fname));
- progress.step(TTR("Import Img: ")+fname,3+(idx)*100/imagemap.size());
+ progress.step(TTR("Import Image:")+" "+fname,3+(idx)*100/imagemap.size());
idx++;
if (path==target_path) {
- EditorNode::add_io_error(TTR("Can't import a file over itself: '")+target_path);
+ EditorNode::add_io_error(TTR("Can't import a file over itself:")+" "+target_path);
continue;
}
if (!target_path.begins_with("res://")) {
- EditorNode::add_io_error(TTR("Couldn't localize path: '")+target_path+"' (already local)");
+ EditorNode::add_io_error(vformat(TTR("Couldn't localize path: %s (already local)"),target_path));
continue;
}
@@ -2839,66 +2541,12 @@ Error EditorSceneImportPlugin::import2(Node *scene, const String& p_dest_path, c
}
}
- Error err = EditorTextureImportPlugin::get_singleton(EditorTextureImportPlugin::MODE_TEXTURE_3D)->import(target_path,imd);
+ Error err = EditorTextureImportPlugin::get_singleton()->import(target_path,imd);
}
}
- /// BEFORE SAVING - MERGE
-
-
- if (import_action!=SCENE_UPDATE_REPLACE_WITH_NEW) {
-
-
- progress.step(TTR("Merging.."),103);
-
- FileAccess *fa = FileAccess::create(FileAccess::ACCESS_RESOURCES);
-
- if (fa->file_exists(p_dest_path)) {
-
-
- //try to merge
-
- Ref<PackedScene> s = ResourceLoader::load(p_dest_path);
- if (s.is_valid()) {
-
- Node *existing = s->instance(true);
-
- if (existing) {
-
-
- switch(import_action) {
-
- case SCENE_UPDATE_REPLACE_WITH_NEW: break;
- case SCENE_UPDATE_REPLACE_WITH_NEW_KEEP_MATERIALS: {
-
- _merge_materials(existing,scene);
- memdelete(existing);
-
- } break;
- case SCENE_UPDATE_KEEP_OLD_MERGE_CHANGES: {
-
- _merge_scenes(existing,scene);
- memdelete(scene);
- scene=existing;
-
- } break;
- case SCENE_UPDATE_KEEP_OLD: {
-
- memdelete(scene);
- scene=existing;
- } break;
- }
-
- }
- }
-
- }
-
- memdelete(fa);
- }
-
progress.step(TTR("Saving.."),104);
@@ -2957,6 +2605,30 @@ void EditorSceneImportPlugin::add_importer(const Ref<EditorSceneImporter>& p_imp
importers.push_back(p_importer);
}
+void EditorSceneImportPlugin::import_from_drop(const Vector<String>& p_drop,const String& p_dest_path) {
+
+ List<String> extensions;
+ for(int i=0;i<importers.size();i++) {
+ importers[i]->get_extensions(&extensions);
+ }
+ //bool warn_compatible=false;
+ for(int i=0;i<p_drop.size();i++) {
+
+ String extension = p_drop[i].extension().to_lower();
+
+ for(List<String>::Element *E=extensions.front();E;E=E->next()) {
+
+ if (E->get()==extension) {
+
+ dialog->popup_import(String());
+ dialog->setup_popup(p_drop[i],p_dest_path);
+ return;
+ }
+ }
+ }
+
+}
+
EditorSceneImportPlugin::EditorSceneImportPlugin(EditorNode* p_editor) {
@@ -2975,7 +2647,7 @@ String EditorSceneAnimationImportPlugin::get_name() const {
String EditorSceneAnimationImportPlugin::get_visible_name() const{
- return "3D Scene Animation";
+ return TTR("3D Scene Animation");
}
void EditorSceneAnimationImportPlugin::import_dialog(const String& p_from){
@@ -2990,4 +2662,3 @@ EditorSceneAnimationImportPlugin::EditorSceneAnimationImportPlugin(EditorNode* p
}
-
diff --git a/tools/editor/io_plugins/editor_scene_import_plugin.h b/tools/editor/io_plugins/editor_scene_import_plugin.h
index a1a090de7e..8a2d30f1f6 100644
--- a/tools/editor/io_plugins/editor_scene_import_plugin.h
+++ b/tools/editor/io_plugins/editor_scene_import_plugin.h
@@ -45,6 +45,7 @@
#include "tools/editor/io_plugins/editor_texture_import_plugin.h"
#include "scene/resources/animation.h"
+
class EditorNode;
class EditorSceneImportDialog;
@@ -111,16 +112,8 @@ class EditorSceneImportPlugin : public EditorImportPlugin {
void _create_clips(Node *scene, const Array& p_clips, bool p_bake_all);
void _filter_anim_tracks(Ref<Animation> anim,Set<String> &keep);
void _filter_tracks(Node *scene, const String& p_text);
- void _merge_existing_node(Node *p_node,Node *p_imported_scene,Set<Ref<Resource> >& checked_resources,Set<Node*> &checked_nodes);
-
- void _add_new_nodes(Node *p_node,Node *p_imported,Node *p_imported_scene,Node *p_existing_scene,Set<Node*> &checked_nodes);
void _optimize_animations(Node *scene, float p_max_lin_error,float p_max_ang_error,float p_max_angle);
- void _merge_scenes(Node *p_node, Node *p_imported);
- void _scan_materials(Node*p_base,Node *p_node,Map<String,Ref<Material> > &mesh_materials,Map<String,Ref<Material> >& override_materials);
- void _apply_materials(Node*p_base,Node *p_node,Map<String,Ref<Material> > &mesh_materials,Map<String,Ref<Material> >& override_materials,Set<Ref<Mesh> >& meshes_processed);
- void _merge_materials(Node *p_node,Node *p_imported);
-
void _tag_import_paths(Node *p_scene,Node *p_node);
public:
@@ -150,13 +143,6 @@ public:
SCENE_FLAG_CONVERT_NORMALMAPS_TO_XY=1<<30,
};
- enum SceneUpdate {
- SCENE_UPDATE_REPLACE_WITH_NEW,
- SCENE_UPDATE_REPLACE_WITH_NEW_KEEP_MATERIALS,
- SCENE_UPDATE_KEEP_OLD_MERGE_CHANGES,
- SCENE_UPDATE_KEEP_OLD,
- };
-
virtual String get_name() const;
virtual String get_visible_name() const;
@@ -169,6 +155,8 @@ public:
void add_importer(const Ref<EditorSceneImporter>& p_importer);
const Vector<Ref<EditorSceneImporter> >& get_importers() { return importers; }
+ virtual void import_from_drop(const Vector<String>& p_drop,const String& p_dest_path);
+
EditorSceneImportPlugin(EditorNode* p_editor=NULL);
diff --git a/tools/editor/io_plugins/editor_scene_importer_fbxconv.cpp b/tools/editor/io_plugins/editor_scene_importer_fbxconv.cpp
index 9cedf1c70a..0c388b91ca 100644
--- a/tools/editor/io_plugins/editor_scene_importer_fbxconv.cpp
+++ b/tools/editor/io_plugins/editor_scene_importer_fbxconv.cpp
@@ -507,15 +507,15 @@ void EditorSceneImporterFBXConv::_parse_materials(State& state) {
if (tex.is_valid() && texture.has("type")) {
String type=texture["type"];
- if (type==TTR("DIFFUSE"))
+ if (type=="DIFFUSE")
mat->set_texture(FixedMaterial::PARAM_DIFFUSE,tex);
- else if (type==TTR("SPECULAR"))
+ else if (type=="SPECULAR")
mat->set_texture(FixedMaterial::PARAM_SPECULAR,tex);
- else if (type==TTR("SHININESS"))
+ else if (type=="SHININESS")
mat->set_texture(FixedMaterial::PARAM_SPECULAR_EXP,tex);
else if (type=="NORMAL")
mat->set_texture(FixedMaterial::PARAM_NORMAL,tex);
- else if (type==TTR("EMISSIVE"))
+ else if (type=="EMISSIVE")
mat->set_texture(FixedMaterial::PARAM_EMISSION,tex);
}
@@ -570,13 +570,13 @@ void EditorSceneImporterFBXConv::_parse_surfaces(State& state) {
exists[Mesh::ARRAY_COLOR]=true;
ofs[Mesh::ARRAY_COLOR]=stride;
stride+=4;
- } else if (attr==TTR("COLORPACKED")) {
+ } else if (attr=="COLORPACKED") {
stride+=1; //ignore
- } else if (attr==TTR("TANGENT")) {
+ } else if (attr=="TANGENT") {
exists[Mesh::ARRAY_TANGENT]=true;
ofs[Mesh::ARRAY_TANGENT]=stride;
stride+=3;
- } else if (attr==TTR("BINORMAL")) {
+ } else if (attr=="BINORMAL") {
binormal_ofs=stride;
stride+=3;
} else if (attr=="TEXCOORD0") {
@@ -587,10 +587,10 @@ void EditorSceneImporterFBXConv::_parse_surfaces(State& state) {
exists[Mesh::ARRAY_TEX_UV2]=true;
ofs[Mesh::ARRAY_TEX_UV2]=stride;
stride+=2;
- } else if (attr.begins_with(TTR("TEXCOORD"))) {
+ } else if (attr.begins_with("TEXCOORD")) {
stride+=2;
- } else if (attr.begins_with(TTR("BLENDWEIGHT"))) {
- int idx=attr.replace(TTR("BLENDWEIGHT"),"").to_int();
+ } else if (attr.begins_with("BLENDWEIGHT")) {
+ int idx=attr.replace("BLENDWEIGHT","").to_int();
if (idx==0) {
exists[Mesh::ARRAY_BONES]=true;
ofs[Mesh::ARRAY_BONES]=stride;
@@ -799,13 +799,13 @@ void EditorSceneImporterFBXConv::_parse_surfaces(State& state) {
if (part.has("type")) {
String type=part["type"];
- if (type==TTR("LINES"))
+ if (type=="LINES")
pt=Mesh::PRIMITIVE_LINES;
- else if (type==TTR("POINTS"))
+ else if (type=="POINTS")
pt=Mesh::PRIMITIVE_POINTS;
- else if (type==TTR("TRIANGLE_STRIP"))
+ else if (type=="TRIANGLE_STRIP")
pt=Mesh::PRIMITIVE_TRIANGLE_STRIP;
- else if (type==TTR("LINE_STRIP"))
+ else if (type=="LINE_STRIP")
pt=Mesh::PRIMITIVE_LINE_STRIP;
}
@@ -1056,7 +1056,7 @@ Error EditorSceneImporterFBXConv::_parse_fbx(State& state,const String& p_path)
}
args.push_back("-o");
- args.push_back(TTR("G3DJ"));
+ args.push_back("G3DJ");
args.push_back(path);
int res;
diff --git a/tools/editor/io_plugins/editor_texture_import_plugin.cpp b/tools/editor/io_plugins/editor_texture_import_plugin.cpp
index 713b92b037..31b6333975 100644
--- a/tools/editor/io_plugins/editor_texture_import_plugin.cpp
+++ b/tools/editor/io_plugins/editor_texture_import_plugin.cpp
@@ -35,6 +35,9 @@
#include "io/md5.h"
#include "io/marshalls.h"
#include "globals.h"
+#include "scene/gui/check_button.h"
+#include "scene/gui/button_group.h"
+#include "scene/gui/margin_container.h"
static const char *flag_names[]={
("Streaming Format"),
@@ -53,17 +56,17 @@ static const char *flag_names[]={
#if 0 // not used
static const char *flag_short_names[]={
- TTR("Stream"),
- TTR("FixBorder"),
- TTR("AlphBit"),
- TTR("ExtComp"),
- TTR("NoMipMap"),
- TTR("Repeat"),
- TTR("Filter"),
- TTR("PMAlpha"),
- TTR("ToLinear"),
- TTR("ToRG"),
- TTR("Anisoropic"),
+ "Stream",
+ "FixBorder",
+ "AlphBit",
+ "ExtComp",
+ "NoMipMap",
+ "Repeat",
+ "Filter",
+ "PMAlpha",
+ "ToLinear",
+ "ToRG",
+ "Anisoropic",
NULL
};
#endif
@@ -164,12 +167,13 @@ void EditorImportTextureOptions::_notification(int p_what) {
void EditorImportTextureOptions::show_2d_notice() {
- notice_for_2d->show();
+ //notice_for_2d->show();
}
EditorImportTextureOptions::EditorImportTextureOptions() {
+ add_constant_override("separation",3);
updating=false;
format = memnew( OptionButton );
@@ -223,12 +227,6 @@ EditorImportTextureOptions::EditorImportTextureOptions() {
add_margin_child(TTR("Texture Options"),flags,true);
- notice_for_2d = memnew( Label );
- notice_for_2d->set_text(TTR("NOTICE: You are not forced to import textures for 2D projects. Just copy your .jpg or .png files to your project, and change export options later. Atlases can be generated on export too."));
- notice_for_2d->set_custom_minimum_size(Size2(0,50));
- notice_for_2d->set_autowrap(true);
- add_child(notice_for_2d);
- notice_for_2d->hide();
}
@@ -242,8 +240,13 @@ class EditorTextureImportDialog : public ConfirmationDialog {
OBJ_TYPE(EditorTextureImportDialog,ConfirmationDialog);
+
+ HBoxContainer *mode_hb;
+ CheckBox *mode_check[EditorTextureImportPlugin::MODE_MAX];
+
EditorImportTextureOptions *texture_options;
+ EditorTextureImportPlugin::Mode mode;
//EditorNode *editor;
LineEdit *import_path;
@@ -255,11 +258,16 @@ class EditorTextureImportDialog : public ConfirmationDialog {
ConfirmationDialog *error_dialog;
CheckButton *crop_source;
SpinBox *size;
- bool atlas;
- bool large;
+
+ MarginContainer *size_mc;
+ Label* size_label;
+
+ Label* source_label;
+ Label *notice_for_2d;
EditorTextureImportPlugin *plugin;
+ void _mode_changed(int p_mode);
void _choose_files(const Vector<String>& p_path);
void _choose_file(const String& p_path);
void _choose_save_dir(const String& p_path);
@@ -274,9 +282,23 @@ protected:
static void _bind_methods();
public:
+
+ void setup_multiple_import_3d(const Vector<String>& p_path,const String& p_dest) {
+
+ _mode_changed(EditorTextureImportPlugin::MODE_TEXTURE_3D);
+ _choose_files(p_path);
+ _choose_save_dir(p_dest);
+ }
+
+ void add_sources_and_dest(const Vector<String>& p_path,const String& p_dest) {
+
+ _choose_files(p_path);
+ _choose_save_dir(p_dest);
+ }
+
Error import(const String& p_from, const String& p_to, const String& p_preset);
void popup_import(const String &p_from=String());
- EditorTextureImportDialog(EditorTextureImportPlugin *p_plugin=NULL,bool p_2d=false,bool p_atlas=false,bool p_large=false);
+ EditorTextureImportDialog(EditorTextureImportPlugin *p_plugin=NULL);
};
@@ -330,7 +352,7 @@ void EditorTextureImportDialog::_import() {
if (!files.size()) {
error_dialog->set_text(TTR("Please specify some files!"));
- error_dialog->popup_centered(Size2(200,100));
+ error_dialog->popup_centered(Size2(200,100)*EDSCALE);
return;
}
@@ -343,24 +365,24 @@ void EditorTextureImportDialog::_import() {
}
if (!save_path->get_text().begins_with("res://")) {
- error_dialog->set_text(TTR("Target path must be full resource path."));
+ error_dialog->set_text(TTR("Target path must be a complete resource path."));
error_dialog->popup_centered_minsize();
return;
}
- if (!atlas && !large && !DirAccess::exists(save_path->get_text())) {
+ if (mode!=EditorTextureImportPlugin::MODE_ATLAS && mode!=EditorTextureImportPlugin::MODE_LARGE && !DirAccess::exists(save_path->get_text())) {
error_dialog->set_text(TTR("Target path must exist."));
error_dialog->popup_centered_minsize();
return;
}
- if (atlas) { //atlas
+ if (mode==EditorTextureImportPlugin::MODE_ATLAS) { //atlas
if (files.size()==0) {
error_dialog->set_text(TTR("At least one file needed for Atlas."));
- error_dialog->popup_centered(Size2(200,100));
+ error_dialog->popup_centered(Size2(200,100)*EDSCALE);
return;
}
@@ -378,21 +400,22 @@ void EditorTextureImportDialog::_import() {
imd->set_option("atlas_size",int(size->get_val()));
imd->set_option("large",false);
imd->set_option("crop",crop_source->is_pressed());
+ imd->set_option("mode",mode);
Error err = plugin->import(dst_file,imd);
if (err) {
- error_dialog->set_text(TTR("Error importing: ")+dst_file.get_file());
- error_dialog->popup_centered(Size2(200,100));
+ error_dialog->set_text(TTR("Error importing:")+" "+dst_file.get_file());
+ error_dialog->popup_centered(Size2(200,100)*EDSCALE);
return;
}
- } else if (large) { //atlas
+ } else if (mode==EditorTextureImportPlugin::MODE_LARGE) { //large
if (files.size()!=1) {
- error_dialog->set_text(TTR("Only one file is required for large texture"));
- error_dialog->popup_centered(Size2(200,100));
+ error_dialog->set_text(TTR("Only one file is required for large texture."));
+ error_dialog->popup_centered(Size2(200,100)*EDSCALE);
return;
}
@@ -410,12 +433,13 @@ void EditorTextureImportDialog::_import() {
imd->set_option("large",true);
imd->set_option("large_cell_size",int(size->get_val()));
imd->set_option("crop",crop_source->is_pressed());
+ imd->set_option("mode",mode);
Error err = plugin->import(dst_file,imd);
if (err) {
- error_dialog->set_text(TTR("Error importing: ")+dst_file.get_file());
- error_dialog->popup_centered(Size2(200,100));
+ error_dialog->set_text(TTR("Error importing:")+" "+dst_file.get_file());
+ error_dialog->popup_centered(Size2(200,100)*EDSCALE);
return;
}
@@ -434,12 +458,13 @@ void EditorTextureImportDialog::_import() {
imd->set_option("quality",texture_options->get_quality());
imd->set_option("atlas",false);
imd->set_option("large",false);
+ imd->set_option("mode",mode);
Error err = plugin->import(dst_file,imd);
if (err) {
- error_dialog->set_text(TTR("Error importing: ")+dst_file.get_file());
- error_dialog->popup_centered(Size2(200,100));
+ error_dialog->set_text(TTR("Error importing:")+" "+dst_file.get_file());
+ error_dialog->popup_centered(Size2(200,100)*EDSCALE);
return;
}
@@ -456,7 +481,7 @@ void EditorTextureImportDialog::_browse() {
void EditorTextureImportDialog::_browse_target() {
- if (atlas || large) {
+ if (mode==EditorTextureImportPlugin::MODE_ATLAS || mode==EditorTextureImportPlugin::MODE_LARGE) {
save_file_select->popup_centered_ratio();
} else {
save_select->popup_centered_ratio();
@@ -467,12 +492,28 @@ void EditorTextureImportDialog::_browse_target() {
void EditorTextureImportDialog::popup_import(const String& p_from) {
- popup_centered(Size2(400,400));
+ popup_centered(Size2(600,500)*EDSCALE);
if (p_from!="") {
Ref<ResourceImportMetadata> rimd = ResourceLoader::load_import_metadata(p_from);
ERR_FAIL_COND(!rimd.is_valid());
- if (plugin->get_mode()==EditorTextureImportPlugin::MODE_ATLAS || plugin->get_mode()==EditorTextureImportPlugin::MODE_LARGE)
+ if (rimd->has_option("mode")) {
+ //new imported stuff uses this option
+ _mode_changed(rimd->get_option("mode"));
+ } else {
+ //this one is for compatibility, will have to guess it
+ if (rimd->has_option("atlas") && rimd->get_option("atlas")) {
+ _mode_changed(EditorTextureImportPlugin::MODE_ATLAS);
+ } else if (rimd->has_option("large") && rimd->get_option("large")) {
+ _mode_changed(EditorTextureImportPlugin::MODE_LARGE);
+ } else {
+ //guess by usage of mipmaps..?
+ _mode_changed(EditorTextureImportPlugin::MODE_TEXTURE_2D);
+ }
+
+ }
+
+ if (mode==EditorTextureImportPlugin::MODE_ATLAS || mode==EditorTextureImportPlugin::MODE_LARGE)
save_path->set_text(p_from);
else
save_path->set_text(p_from.get_base_dir());
@@ -499,7 +540,7 @@ void EditorTextureImportDialog::_notification(int p_what) {
List<String> extensions;
ImageLoader::get_recognized_extensions(&extensions);
- // ResourceLoader::get_recognized_extensions_for_type(TTR("PackedTexture"),&extensions);
+ // ResourceLoader::get_recognized_extensions_for_type("PackedTexture",&extensions);
file_select->clear_filters();
for(int i=0;i<extensions.size();i++) {
@@ -518,6 +559,81 @@ Error EditorTextureImportDialog::import(const String& p_from, const String& p_to
return OK;
}
+void EditorTextureImportDialog::_mode_changed(int p_mode) {
+
+ mode = EditorTextureImportPlugin::Mode(p_mode);
+
+ for(int i=0;i<EditorTextureImportPlugin::MODE_MAX;i++) {
+ mode_check[i]->set_pressed(i==mode);
+ }
+
+ if (p_mode==EditorTextureImportPlugin::MODE_ATLAS) {
+
+ size_label->set_text(TTR("Max Texture Size:"));
+ size->set_val(2048);
+ crop_source->show();
+ size_label->show();
+ size->show();
+
+ texture_options->set_flags(EditorTextureImportPlugin::IMAGE_FLAG_FIX_BORDER_ALPHA|EditorTextureImportPlugin::IMAGE_FLAG_NO_MIPMAPS|EditorTextureImportPlugin::IMAGE_FLAG_FILTER);
+ texture_options->set_quality(0.7);
+ texture_options->set_format(EditorTextureImportPlugin::IMAGE_FORMAT_COMPRESS_DISK_LOSSY);
+ set_title(TTR("Import Textures for Atlas (2D)"));
+
+ } else {
+ crop_source->hide();
+ }
+
+
+ if (p_mode==EditorTextureImportPlugin::MODE_LARGE) {
+
+ size_label->set_text(TTR("Cell Size:"));
+ size->set_val(256);
+ size_label->show();
+ size->show();
+
+ file_select->set_mode(EditorFileDialog::MODE_OPEN_FILE);
+ save_file_select->add_filter("*.ltex;"+TTR("Large Texture"));
+
+ texture_options->set_flags(EditorTextureImportPlugin::IMAGE_FLAG_FIX_BORDER_ALPHA|EditorTextureImportPlugin::IMAGE_FLAG_NO_MIPMAPS|EditorTextureImportPlugin::IMAGE_FLAG_FILTER);
+ texture_options->set_quality(0.7);
+ texture_options->set_format(EditorTextureImportPlugin::IMAGE_FORMAT_COMPRESS_DISK_LOSSLESS);
+ set_title(TTR("Import Large Textures (2D)"));
+ source_label->set_text(TTR("Source Texture"));
+
+ } else {
+ file_select->set_mode(EditorFileDialog::MODE_OPEN_FILES);
+ save_file_select->add_filter("*.tex;"+TTR("Base Atlas Texture"));
+ source_label->set_text(TTR("Source Texture(s)"));
+ }
+
+ if (p_mode==EditorTextureImportPlugin::MODE_TEXTURE_2D) {
+
+ size_label->hide();
+ size->hide();
+
+ texture_options->set_flags(EditorTextureImportPlugin::IMAGE_FLAG_NO_MIPMAPS|EditorTextureImportPlugin::IMAGE_FLAG_FIX_BORDER_ALPHA|EditorTextureImportPlugin::IMAGE_FLAG_FILTER);
+ texture_options->set_quality(0.7);
+ texture_options->set_format(EditorTextureImportPlugin::IMAGE_FORMAT_COMPRESS_DISK_LOSSY);
+ notice_for_2d->show();
+ set_title(TTR("Import Textures for 2D"));
+
+ } else {
+ notice_for_2d->hide();
+ }
+
+ if (p_mode==EditorTextureImportPlugin::MODE_TEXTURE_3D) {
+
+ size_label->hide();
+ size->hide();
+ //texture_options->set_flags(EditorTextureImportPlugin::IMAGE_FLAG_);
+ //texture_options->set_flags(EditorTextureImportPlugin::IMAGE_FLAG_NO_MIPMAPS);
+ texture_options->set_flags(EditorTextureImportPlugin::IMAGE_FLAG_FIX_BORDER_ALPHA|EditorTextureImportPlugin::IMAGE_FLAG_FILTER|EditorTextureImportPlugin::IMAGE_FLAG_REPEAT);
+ texture_options->set_format(EditorTextureImportPlugin::IMAGE_FORMAT_COMPRESS_RAM);
+ set_title(TTR("Import Textures for 3D"));
+ }
+}
+
void EditorTextureImportDialog::_bind_methods() {
@@ -527,28 +643,64 @@ void EditorTextureImportDialog::_bind_methods() {
ObjectTypeDB::bind_method("_import",&EditorTextureImportDialog::_import);
ObjectTypeDB::bind_method("_browse",&EditorTextureImportDialog::_browse);
ObjectTypeDB::bind_method("_browse_target",&EditorTextureImportDialog::_browse_target);
+ ObjectTypeDB::bind_method("_mode_changed",&EditorTextureImportDialog::_mode_changed);
// ADD_SIGNAL( MethodInfo("imported",PropertyInfo(Variant::OBJECT,"scene")) );
}
-EditorTextureImportDialog::EditorTextureImportDialog(EditorTextureImportPlugin* p_plugin, bool p_2d, bool p_atlas,bool p_large) {
+EditorTextureImportDialog::EditorTextureImportDialog(EditorTextureImportPlugin* p_plugin) {
+
+
+
- atlas=p_atlas;
- large=p_large;
plugin=p_plugin;
set_title(TTR("Import Textures"));
+ mode_hb = memnew( HBoxContainer );
+ add_child(mode_hb);
+ set_child_rect(mode_hb);
+
+ VBoxContainer *vbcg = memnew( VBoxContainer);
+
+
+ mode_hb->add_child(vbcg);
+ mode_hb->add_constant_override("separation",15);
+ ButtonGroup *bg = memnew( ButtonGroup );
+ vbcg->add_margin_child("Import Mode",bg);
+
+ for(int i=0;i<EditorTextureImportPlugin::MODE_MAX;i++) {
+ String mode_name[EditorTextureImportPlugin::MODE_MAX]={
+ TTR("2D Texture"),
+ TTR("3D Texture"),
+ TTR("Atlas Texture"),
+ TTR("Large Texture")
+ };
+
+
+ mode_check[i]=memnew(CheckBox);
+ bg->add_child(mode_check[i]);
+ mode_check[i]->set_text(mode_name[i]);
+ mode_check[i]->connect("pressed",this,"_mode_changed",varray(i));
+ }
VBoxContainer *vbc = memnew(VBoxContainer);
- add_child(vbc);
- set_child_rect(vbc);
+ mode_hb->add_child(vbc);
+ vbc->set_h_size_flags(SIZE_EXPAND_FILL);
+ vbc->add_constant_override("separation",4);
+ notice_for_2d = memnew( Label );
+ notice_for_2d->set_text(TTR("NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to the project."));
+ //notice_for_2d->set_custom_minimum_size(Size2(0,50));
+ notice_for_2d->set_autowrap(true);
+ notice_for_2d->hide();
+ vbcg->add_child(notice_for_2d);
+ notice_for_2d->set_v_size_flags(SIZE_EXPAND_FILL);
+ notice_for_2d->set_valign(Label::VALIGN_BOTTOM);
VBoxContainer *source_vb=memnew(VBoxContainer);
- if (large)
- vbc->add_margin_child(TTR("Source Texture:"),source_vb);
- else
- vbc->add_margin_child(TTR("Source Texture(s):"),source_vb);
+ MarginContainer *source_mc = vbc->add_margin_child(TTR("Source Texture(s):"),source_vb);
+
+ source_label = vbc->get_child(source_mc->get_index()-1)->cast_to<Label>();
HBoxContainer *hbc = memnew( HBoxContainer );
source_vb->add_child(hbc);
@@ -560,8 +712,6 @@ EditorTextureImportDialog::EditorTextureImportDialog(EditorTextureImportPlugin*
crop_source->set_pressed(true);
source_vb->add_child(crop_source);
crop_source->set_text(TTR("Crop empty space."));
- if (!p_atlas)
- crop_source->hide();
Button * import_choose = memnew( Button );
@@ -577,13 +727,10 @@ EditorTextureImportDialog::EditorTextureImportDialog(EditorTextureImportPlugin*
size->set_min(128);
size->set_max(16384);
- if (p_atlas) {
- size->set_val(2048);
- vbc->add_margin_child(TTR("Max Texture size:"),size);
- } else {
- size->set_val(256);
- vbc->add_margin_child(TTR("Cell Size:"),size);
- }
+
+ size->set_val(256);
+ size_mc=vbc->add_margin_child(TTR("Cell Size:"),size);
+ size_label=vbc->get_child(size_mc->get_index()-1)->cast_to<Label>();
save_path = memnew( LineEdit );
@@ -599,10 +746,7 @@ EditorTextureImportDialog::EditorTextureImportDialog(EditorTextureImportPlugin*
file_select = memnew(EditorFileDialog);
file_select->set_access(EditorFileDialog::ACCESS_FILESYSTEM);
add_child(file_select);
- if (!large)
- file_select->set_mode(EditorFileDialog::MODE_OPEN_FILES);
- else
- file_select->set_mode(EditorFileDialog::MODE_OPEN_FILE);
+
file_select->connect("files_selected", this,"_choose_files");
file_select->connect("file_selected", this,"_choose_file");
@@ -611,10 +755,7 @@ EditorTextureImportDialog::EditorTextureImportDialog(EditorTextureImportPlugin*
add_child(save_file_select);
save_file_select->set_mode(EditorFileDialog::MODE_SAVE_FILE);
save_file_select->clear_filters();
- if (large)
- save_file_select->add_filter("*.ltex;Large Texture");
- else
- save_file_select->add_filter("*.tex;Base Atlas Texture");
+
save_file_select->connect("file_selected", this,"_choose_save_dir");
save_select = memnew( EditorDirDialog );
@@ -641,36 +782,7 @@ EditorTextureImportDialog::EditorTextureImportDialog(EditorTextureImportPlugin*
vbc->add_child(texture_options);
texture_options->set_v_size_flags(SIZE_EXPAND_FILL);
- if (atlas) {
-
- texture_options->set_flags(EditorTextureImportPlugin::IMAGE_FLAG_FIX_BORDER_ALPHA|EditorTextureImportPlugin::IMAGE_FLAG_NO_MIPMAPS|EditorTextureImportPlugin::IMAGE_FLAG_FILTER);
- texture_options->set_quality(0.7);
- texture_options->set_format(EditorTextureImportPlugin::IMAGE_FORMAT_COMPRESS_DISK_LOSSY);
- //texture_options->show_2d_notice();
- set_title(TTR("Import Textures for Atlas (2D)"));
- } else if (large) {
-
- texture_options->set_flags(EditorTextureImportPlugin::IMAGE_FLAG_FIX_BORDER_ALPHA|EditorTextureImportPlugin::IMAGE_FLAG_NO_MIPMAPS|EditorTextureImportPlugin::IMAGE_FLAG_FILTER);
- texture_options->set_quality(0.7);
- texture_options->set_format(EditorTextureImportPlugin::IMAGE_FORMAT_COMPRESS_DISK_LOSSLESS);
- texture_options->show_2d_notice();
- set_title(TTR("Import Large Textures (2D)"));
-
- } else if (p_2d) {
-
- texture_options->set_flags(EditorTextureImportPlugin::IMAGE_FLAG_NO_MIPMAPS|EditorTextureImportPlugin::IMAGE_FLAG_FIX_BORDER_ALPHA|EditorTextureImportPlugin::IMAGE_FLAG_FILTER);
- texture_options->set_quality(0.7);
- texture_options->set_format(EditorTextureImportPlugin::IMAGE_FORMAT_COMPRESS_DISK_LOSSY);
- texture_options->show_2d_notice();
- set_title(TTR("Import Textures for 2D"));
- } else {
-
- //texture_options->set_flags(EditorTextureImportPlugin::IMAGE_FLAG_);
- //texture_options->set_flags(EditorTextureImportPlugin::IMAGE_FLAG_NO_MIPMAPS);
- texture_options->set_flags(EditorTextureImportPlugin::IMAGE_FLAG_FIX_BORDER_ALPHA|EditorTextureImportPlugin::IMAGE_FLAG_FILTER|EditorTextureImportPlugin::IMAGE_FLAG_REPEAT);
- texture_options->set_format(EditorTextureImportPlugin::IMAGE_FORMAT_COMPRESS_RAM);
- set_title(TTR("Import Textures for 3D"));
- }
+ _mode_changed(EditorTextureImportPlugin::MODE_TEXTURE_3D);
// GLOBAL_DEF("import/shared_textures","res://");
@@ -686,6 +798,8 @@ EditorTextureImportDialog::EditorTextureImportDialog(EditorTextureImportPlugin*
String EditorTextureImportPlugin::get_name() const {
+ return "texture";
+#if 0 //old names, kept for compatibility reference
switch(mode) {
case MODE_TEXTURE_2D: {
@@ -707,34 +821,14 @@ String EditorTextureImportPlugin::get_name() const {
}
- return "";
+ return "";
+#endif
}
String EditorTextureImportPlugin::get_visible_name() const {
- switch(mode) {
- case MODE_TEXTURE_2D: {
-
- return "2D Texture";
- } break;
- case MODE_TEXTURE_3D: {
-
- return "3D Texture";
-
- } break;
- case MODE_ATLAS: {
-
- return "2D Atlas Texture";
- } break;
- case MODE_LARGE: {
-
- return "2D Large Texture";
- } break;
-
- }
-
- return "";
+ return TTR("Texture");
}
void EditorTextureImportPlugin::import_dialog(const String& p_from) {
@@ -1057,7 +1151,7 @@ Error EditorTextureImportPlugin::import2(const String& p_path, const Ref<Resourc
err = ResourceSaver::save(p_path,existing);
if (err!=OK) {
- EditorNode::add_io_error(TTR("Couldn't save large texture: ")+p_path);
+ EditorNode::add_io_error(TTR("Couldn't save large texture:")+" "+p_path);
return err;
}
@@ -1072,7 +1166,7 @@ Error EditorTextureImportPlugin::import2(const String& p_path, const Ref<Resourc
bool alpha=false;
bool crop = from->get_option("crop");
- EditorProgress ep("make_atlas",TTR("Build Atlas For: ")+p_path.get_file(),from->get_source_count()+3);
+ EditorProgress ep("make_atlas",TTR("Build Atlas For:")+" "+p_path.get_file(),from->get_source_count()+3);
print_line("sources: "+itos(from->get_source_count()));
@@ -1081,12 +1175,12 @@ Error EditorTextureImportPlugin::import2(const String& p_path, const Ref<Resourc
String path = EditorImportPlugin::expand_source_path(from->get_source_path(i));
String md5 = FileAccess::get_md5(path);
from->set_source_md5(i,FileAccess::get_md5(path));
- ep.step(TTR("Loading Image: ")+path,i);
+ ep.step(TTR("Loading Image:")+" "+path,i);
print_line("source path: "+path+" md5 "+md5);
Image src;
Error err = ImageLoader::load_image(path,&src);
if (err) {
- EditorNode::add_io_error(TTR("Couldn't load image: ")+path);
+ EditorNode::add_io_error(TTR("Couldn't load image:")+" "+path);
return err;
}
@@ -1176,7 +1270,7 @@ Error EditorTextureImportPlugin::import2(const String& p_path, const Ref<Resourc
Size2i dst_size;
EditorAtlas::fit(src_sizes,dst_positions,dst_size);
- print_line("size that workeD: "+itos(dst_size.width)+","+itos(dst_size.height));
+ print_line("size that worked: "+itos(dst_size.width)+","+itos(dst_size.height));
ep.step(TTR("Blitting Images"),sources.size()+2);
@@ -1291,7 +1385,7 @@ Error EditorTextureImportPlugin::import2(const String& p_path, const Ref<Resourc
atlases[i]->set_atlas(texture);
Error err = ResourceSaver::save(apath,atlases[i]);
if (err) {
- EditorNode::add_io_error(TTR("Couldn't save atlas image: ")+apath);
+ EditorNode::add_io_error(TTR("Couldn't save atlas image:")+" "+apath);
return err;
}
//from->set_source_md5(i,FileAccess::get_md5(apath));
@@ -1433,7 +1527,7 @@ Error EditorTextureImportPlugin::import2(const String& p_path, const Ref<Resourc
Error err = ResourceSaver::save(p_path,texture,save_flags);
if (err!=OK) {
- EditorNode::add_io_error(TTR("Couldn't save converted texture: ")+p_path);
+ EditorNode::add_io_error(TTR("Couldn't save converted texture:")+" "+p_path);
return err;
}
@@ -1626,15 +1720,93 @@ Vector<uint8_t> EditorTextureImportPlugin::custom_export(const String& p_path, c
return ret;
}
+void EditorTextureImportPlugin::import_from_drop(const Vector<String>& p_drop,const String& p_dest_path) {
+
+ Vector<String> valid;
+
+ List<String> valid_extensions;
+ ImageLoader::get_recognized_extensions(&valid_extensions);
+ for(int i=0;i<p_drop.size();i++) {
+
+ String extension=p_drop[i].extension().to_lower();
+
+ for (List<String>::Element *E=valid_extensions.front();E;E=E->next()) {
+
+ if (E->get()==extension) {
+ valid.push_back(p_drop[i]);
+ break;
+ }
+ }
+ }
+
+ if (valid.size()) {
+ dialog->popup_import();
+ dialog->setup_multiple_import_3d(valid,p_dest_path);
+ }
+}
+
+void EditorTextureImportPlugin::reimport_multiple_files(const Vector<String>& p_list) {
+
+ Vector<String> valid;
+
+
+ bool warning=false;
+ for(int i=0;i<p_list.size();i++) {
+
+ Ref<ResourceImportMetadata> rimd = ResourceLoader::load_import_metadata(p_list[i]);
+ String type = rimd->get_editor();
+ if (type=="texture" || type.begins_with("texture_")) {
+
+ if ((rimd->has_option("atlas") && rimd->get_option("atlas")) || (rimd->has_option("large") && rimd->get_option("large"))) {
+ warning=true;
+ continue;
+ }
+
+ valid.push_back(p_list[i]);
+ }
+ }
+
+ if (valid.size()) {
+
+ dialog->popup_import(valid[0]);
+
+ Vector<String> sources;
+ for(int i=0;i<valid.size();i++) {
+ int idx;
+ EditorFileSystemDirectory *efsd = EditorFileSystem::get_singleton()->find_file(valid[i],&idx);
+ if (efsd) {
+ for(int j=0;j<efsd->get_source_count(idx);j++) {
+ String file = expand_source_path(efsd->get_source_file(idx,j));
+ if (sources.find(file)==-1) {
+ sources.push_back(file);
+ }
+
+ }
+ }
+ }
+
+ if (sources.size()) {
+
+ dialog->add_sources_and_dest(sources,valid[0].get_base_dir());
+ }
+ }
+}
+
+bool EditorTextureImportPlugin::can_reimport_multiple_files() const {
+
+ return true;
+
+}
+
+
-EditorTextureImportPlugin *EditorTextureImportPlugin::singleton[EditorTextureImportPlugin::MODE_MAX]={NULL,NULL,NULL,NULL};
+EditorTextureImportPlugin *EditorTextureImportPlugin::singleton=NULL;
-EditorTextureImportPlugin::EditorTextureImportPlugin(EditorNode *p_editor, Mode p_mode) {
+EditorTextureImportPlugin::EditorTextureImportPlugin(EditorNode *p_editor) {
- singleton[p_mode]=this;
+ singleton=this;
editor=p_editor;
- mode=p_mode;
- dialog = memnew( EditorTextureImportDialog(this,p_mode==MODE_TEXTURE_2D || p_mode==MODE_ATLAS || p_mode==MODE_LARGE,p_mode==MODE_ATLAS,p_mode==MODE_LARGE) );
+ dialog = memnew( EditorTextureImportDialog(this) );
editor->get_gui_base()->add_child(dialog);
}
@@ -1662,7 +1834,7 @@ EditorTextureImportPlugin::EditorTextureImportPlugin(EditorNode *p_editor, Mode
} else if (EditorImportExport::get_singleton()->image_get_export_group(p_path)) {
- Ref<EditorImportPlugin> pl = EditorImportExport::get_singleton()->get_import_plugin_by_name("texture_2d");
+ Ref<EditorImportPlugin> pl = EditorImportExport::get_singleton()->get_import_plugin_by_name("texture");
if (pl.is_valid()) {
Vector<uint8_t> ce = pl->custom_export(p_path,p_platform);
if (ce.size()) {
@@ -1676,7 +1848,7 @@ EditorTextureImportPlugin::EditorTextureImportPlugin(EditorNode *p_editor, Mode
String xt = p_path.extension().to_lower();
if (EditorImportExport::get_singleton()->get_image_formats().has(xt)) { //should check for more I guess?
- Ref<EditorImportPlugin> pl = EditorImportExport::get_singleton()->get_import_plugin_by_name("texture_2d");
+ Ref<EditorImportPlugin> pl = EditorImportExport::get_singleton()->get_import_plugin_by_name("texture");
if (pl.is_valid()) {
Vector<uint8_t> ce = pl->custom_export(p_path,p_platform);
if (ce.size()) {
diff --git a/tools/editor/io_plugins/editor_texture_import_plugin.h b/tools/editor/io_plugins/editor_texture_import_plugin.h
index cb63ba98c8..5c8abd10a4 100644
--- a/tools/editor/io_plugins/editor_texture_import_plugin.h
+++ b/tools/editor/io_plugins/editor_texture_import_plugin.h
@@ -64,10 +64,10 @@ public:
private:
- Mode mode;
+
EditorNode *editor;
EditorTextureImportDialog *dialog;
- static EditorTextureImportPlugin *singleton[MODE_MAX];
+ static EditorTextureImportPlugin *singleton;
//used by other importers such as mesh
Error _process_texture_data(Ref<ImageTexture> &texture, int format, float quality, int flags,EditorExportPlatform::ImageCompression p_compr,int tex_flags,float shrink);
@@ -75,7 +75,7 @@ private:
public:
- static EditorTextureImportPlugin *get_singleton(Mode p_mode) { return singleton[p_mode]; }
+ static EditorTextureImportPlugin *get_singleton() { return singleton; }
enum ImageFormat {
@@ -100,7 +100,6 @@ public:
IMAGE_FLAG_USE_ANISOTROPY=1024, //convert image to linear
};
- Mode get_mode() const { return mode; }
virtual String get_name() const;
virtual String get_visible_name() const;
virtual void import_dialog(const String& p_from="");
@@ -108,8 +107,11 @@ public:
virtual Error import2(const String& p_path, const Ref<ResourceImportMetadata>& p_from,EditorExportPlatform::ImageCompression p_compr, bool p_external=false);
virtual Vector<uint8_t> custom_export(const String& p_path,const Ref<EditorExportPlatform> &p_platform);
+ virtual void import_from_drop(const Vector<String>& p_drop,const String& p_dest_path);
+ virtual void reimport_multiple_files(const Vector<String>& p_list);
+ virtual bool can_reimport_multiple_files() const;
- EditorTextureImportPlugin(EditorNode* p_editor=NULL,Mode p_mode=MODE_TEXTURE_2D);
+ EditorTextureImportPlugin(EditorNode* p_editor=NULL);
};
@@ -134,7 +136,7 @@ class EditorImportTextureOptions : public VBoxContainer {
HSlider *quality;
Tree *flags;
Vector<TreeItem*> items;
- Label *notice_for_2d;
+
bool updating;
diff --git a/tools/editor/io_plugins/editor_translation_import_plugin.cpp b/tools/editor/io_plugins/editor_translation_import_plugin.cpp
index 03abc3a82b..aa36fefdb7 100644
--- a/tools/editor/io_plugins/editor_translation_import_plugin.cpp
+++ b/tools/editor/io_plugins/editor_translation_import_plugin.cpp
@@ -65,7 +65,7 @@ public:
if (!f) {
error_dialog->set_text(TTR("Invalid source!"));
- error_dialog->popup_centered(Size2(200,100));
+ error_dialog->popup_centered(Size2(200,100)*EDSCALE);
return;
}
@@ -76,7 +76,7 @@ public:
if (csvh.size()<2) {
error_dialog->set_text(TTR("Invalid translation source!"));
- error_dialog->popup_centered(Size2(200,100));
+ error_dialog->popup_centered(Size2(200,100)*EDSCALE);
return;
}
@@ -171,7 +171,7 @@ public:
void popup_import(const String& p_from) {
- popup_centered(Size2(400,400));
+ popup_centered(Size2(400,400)*EDSCALE);
if (p_from!="") {
@@ -232,12 +232,12 @@ public:
if (items.size()==0) {
error_dialog->set_text(TTR("No items to import!"));
- error_dialog->popup_centered(Size2(200,100));
+ error_dialog->popup_centered(Size2(200,100)*EDSCALE);
}
if (!save_path->get_text().begins_with("res://")) {
- error_dialog->set_text(TTR("No target path!!"));
- error_dialog->popup_centered(Size2(200,100));
+ error_dialog->set_text(TTR("No target path!"));
+ error_dialog->popup_centered(Size2(200,100)*EDSCALE);
}
EditorProgress progress("import_xl",TTR("Import Translations"),items.size());
@@ -258,8 +258,8 @@ public:
String savefile = save_path->get_text().plus_file(import_path->get_text().get_file().basename()+"."+locale+".xl");
Error err = plugin->import(savefile,imd);
if (err!=OK) {
- error_dialog->set_text(TTR("Couldnt import!"));
- error_dialog->popup_centered(Size2(200,100));
+ error_dialog->set_text(TTR("Couldn't import!"));
+ error_dialog->popup_centered(Size2(200,100)*EDSCALE);
} else if (add_to_project->is_pressed()) {
ProjectSettings::get_singleton()->add_translation(savefile);
@@ -387,13 +387,33 @@ String EditorTranslationImportPlugin::get_name() const {
}
String EditorTranslationImportPlugin::get_visible_name() const {
- return "Translation";
+ return TTR("Translation");
}
void EditorTranslationImportPlugin::import_dialog(const String& p_from) {
dialog->popup_import(p_from);
}
+
+
+void EditorTranslationImportPlugin::import_from_drop(const Vector<String>& p_drop, const String &p_dest_path) {
+
+
+ for(int i=0;i<p_drop.size();i++) {
+ String ext = p_drop[i].extension().to_lower();
+
+ if (ext=="csv") {
+
+ import_dialog();
+ dialog->_choose_file(p_drop[i]);
+ dialog->_choose_save_dir(p_dest_path);
+ break;
+ }
+ }
+
+
+}
+
Error EditorTranslationImportPlugin::import(const String& p_path, const Ref<ResourceImportMetadata>& p_from) {
Ref<ResourceImportMetadata> from = p_from;
diff --git a/tools/editor/io_plugins/editor_translation_import_plugin.h b/tools/editor/io_plugins/editor_translation_import_plugin.h
index cadcdc03b3..532f2cedcc 100644
--- a/tools/editor/io_plugins/editor_translation_import_plugin.h
+++ b/tools/editor/io_plugins/editor_translation_import_plugin.h
@@ -46,6 +46,7 @@ public:
virtual String get_visible_name() const;
virtual void import_dialog(const String& p_from="");
virtual Error import(const String& p_path, const Ref<ResourceImportMetadata>& p_from);
+ void import_from_drop(const Vector<String>& p_drop, const String &p_dest_path);
EditorTranslationImportPlugin(EditorNode* p_editor);
diff --git a/tools/editor/multi_node_edit.cpp b/tools/editor/multi_node_edit.cpp
index 54697d41ab..b5bae82ae0 100644
--- a/tools/editor/multi_node_edit.cpp
+++ b/tools/editor/multi_node_edit.cpp
@@ -9,7 +9,7 @@ bool MultiNodeEdit::_set(const StringName& p_name, const Variant& p_value){
UndoRedo *ur=EditorNode::get_singleton()->get_undo_redo();
- ur->create_action(TTR("MultiNode Set ")+String(p_name));
+ ur->create_action(TTR("MultiNode Set")+" "+String(p_name));
for (const List<NodePath>::Element *E=nodes.front();E;E=E->next()) {
if (!es->has_node(E->get()))
diff --git a/tools/editor/node_dock.cpp b/tools/editor/node_dock.cpp
new file mode 100644
index 0000000000..fb5a50e633
--- /dev/null
+++ b/tools/editor/node_dock.cpp
@@ -0,0 +1,104 @@
+#include "node_dock.h"
+#include "editor_node.h"
+
+void NodeDock::show_groups() {
+
+ groups_button->set_pressed(true);
+ connections_button->set_pressed(false);
+ groups->show();
+ connections->hide();
+}
+
+void NodeDock::show_connections(){
+
+ groups_button->set_pressed(false);
+ connections_button->set_pressed(true);
+ groups->hide();
+ connections->show();
+}
+
+
+void NodeDock::_bind_methods() {
+
+ ObjectTypeDB::bind_method(_MD("show_groups"),&NodeDock::show_groups);
+ ObjectTypeDB::bind_method(_MD("show_connections"),&NodeDock::show_connections);
+}
+
+void NodeDock::_notification(int p_what) {
+
+ if (p_what==NOTIFICATION_ENTER_TREE) {
+ connections_button->set_icon(get_icon("Connect","EditorIcons"));
+ groups_button->set_icon(get_icon("Groups","EditorIcons"));
+ }
+}
+
+NodeDock *NodeDock::singleton=NULL;
+
+void NodeDock::set_node(Node* p_node) {
+
+ connections->set_node(p_node);
+ groups->set_current(p_node);
+
+ if (p_node) {
+ if (connections_button->is_pressed())
+ connections->show();
+ else
+ groups->show();
+
+ mode_hb->show();
+ select_a_node->hide();
+ } else {
+ connections->hide();
+ groups->hide();
+ mode_hb->hide();
+ select_a_node->show();
+ }
+}
+
+NodeDock::NodeDock()
+{
+ singleton=this;
+
+ set_name(TTR("Node"));
+ mode_hb = memnew( HBoxContainer );
+ add_child(mode_hb);
+ mode_hb->hide();
+
+
+ connections_button = memnew( ToolButton );
+ connections_button->set_text(TTR("Signals"));
+ connections_button->set_toggle_mode(true);
+ connections_button->set_pressed(true);
+ connections_button->set_h_size_flags(SIZE_EXPAND_FILL);
+ mode_hb->add_child(connections_button);
+ connections_button->connect("pressed",this,"show_connections");
+
+ groups_button = memnew( ToolButton );
+ groups_button->set_text(TTR("Groups"));
+ groups_button->set_toggle_mode(true);
+ groups_button->set_pressed(false);
+ groups_button->set_h_size_flags(SIZE_EXPAND_FILL);
+ mode_hb->add_child(groups_button);
+ groups_button->connect("pressed",this,"show_groups");
+
+ connections = memnew( ConnectionsDock(EditorNode::get_singleton()) );
+ connections->set_undoredo(EditorNode::get_singleton()->get_undo_redo());
+ add_child(connections);
+ connections->set_v_size_flags(SIZE_EXPAND_FILL);
+ connections->hide();
+
+ groups = memnew( GroupsEditor );
+ groups->set_undo_redo(EditorNode::get_singleton()->get_undo_redo());
+ add_child(groups);
+ groups->set_v_size_flags(SIZE_EXPAND_FILL);
+ groups->hide();
+
+ select_a_node = memnew( Label );
+ select_a_node->set_text(TTR("Select a Node to edit Signals and Groups."));
+ select_a_node->set_v_size_flags(SIZE_EXPAND_FILL);
+ select_a_node->set_valign(Label::VALIGN_CENTER);
+ select_a_node->set_align(Label::ALIGN_CENTER);
+ select_a_node->set_autowrap(true);
+ add_child(select_a_node);
+
+}
diff --git a/tools/editor/node_dock.h b/tools/editor/node_dock.h
new file mode 100644
index 0000000000..02312b90b5
--- /dev/null
+++ b/tools/editor/node_dock.h
@@ -0,0 +1,38 @@
+#ifndef NODE_DOCK_H
+#define NODE_DOCK_H
+
+#include "connections_dialog.h"
+#include "groups_editor.h"
+
+class NodeDock : public VBoxContainer {
+
+ OBJ_TYPE(NodeDock,VBoxContainer);
+
+ ToolButton *connections_button;
+ ToolButton *groups_button;
+
+ ConnectionsDock *connections;
+ GroupsEditor *groups;
+
+ HBoxContainer *mode_hb;
+
+ Label* select_a_node;
+
+protected:
+
+ static void _bind_methods();
+ void _notification(int p_what);
+
+public:
+
+ static NodeDock *singleton;
+
+ void set_node(Node* p_node);
+
+ void show_groups();
+ void show_connections();
+
+ NodeDock();
+};
+
+#endif // NODE_DOCK_H
diff --git a/tools/editor/plugins/animation_player_editor_plugin.cpp b/tools/editor/plugins/animation_player_editor_plugin.cpp
index 77bd5d0fef..4bbcb396af 100644
--- a/tools/editor/plugins/animation_player_editor_plugin.cpp
+++ b/tools/editor/plugins/animation_player_editor_plugin.cpp
@@ -496,7 +496,7 @@ void AnimationPlayerEditor::_animation_name_edited() {
}
if (player->has_animation(new_name)) {
- error_dialog->set_text(TTR("ERROR: Animation Name Already Exists!"));
+ error_dialog->set_text(TTR("ERROR: Animation name already exists!"));
error_dialog->popup_centered_minsize();
return;
}
@@ -1022,7 +1022,7 @@ void AnimationPlayerEditor::_editor_store() {
return; //already there
- undo_redo->create_action(TTR("Store anim in editor"));
+ undo_redo->create_action("Store anim in editor");
undo_redo->add_do_method(key_editor,"set_animation",anim);
undo_redo->add_undo_method(key_editor,"remove_animation",anim);
undo_redo->commit_action();
@@ -1044,7 +1044,7 @@ void AnimationPlayerEditor::_editor_load(){
String base=anim->get_name();
bool noname=false;
if (base=="") {
- base=TTR("New Anim");
+ base="New Anim";
noname=true;
}
@@ -1063,7 +1063,7 @@ void AnimationPlayerEditor::_editor_load(){
if (noname)
anim->set_name(base);
- undo_redo->create_action(TTR("Add Animation From Editor"));
+ undo_redo->create_action("Add Animation From Editor");
undo_redo->add_do_method(player,"add_animation",base,anim);
undo_redo->add_undo_method(player,"remove_animation",base);
undo_redo->add_do_method(this,"_animation_player_changed",player);
@@ -1298,7 +1298,7 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor) {
Label * l;
/*l= memnew( Label );
- l->set_text(TTR("Animation Player:"));
+ l->set_text("Animation Player:");
add_child(l);*/
HBoxContainer *hb = memnew( HBoxContainer );
@@ -1306,11 +1306,11 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor) {
play_bw_from = memnew( ToolButton );
- play_bw_from->set_tooltip(TTR("Play backwards selected animation from current pos. (A)"));
+ play_bw_from->set_tooltip(TTR("Play selected animation backwards from current pos. (A)"));
hb->add_child(play_bw_from);
play_bw = memnew( ToolButton );
- play_bw->set_tooltip(TTR("Play backwards selected animation from end. (Shift+A)"));
+ play_bw->set_tooltip(TTR("Play selected animation backwards from end. (Shift+A)"));
hb->add_child(play_bw);
stop = memnew( ToolButton );
@@ -1391,7 +1391,7 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor) {
autoplay = memnew( ToolButton );
hb->add_child(autoplay);
- autoplay->set_tooltip(TTR("Autoplay On Load"));
+ autoplay->set_tooltip(TTR("Autoplay on Load"));
@@ -1405,7 +1405,7 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor) {
tool_anim->get_popup()->add_item(TTR("Copy Animation"),TOOL_COPY_ANIM);
tool_anim->get_popup()->add_item(TTR("Paste Animation"),TOOL_PASTE_ANIM);
//tool_anim->get_popup()->add_separator();
- //tool_anim->get_popup()->add_item(TTR("Edit Anim Resource"),TOOL_PASTE_ANIM);
+ //tool_anim->get_popup()->add_item("Edit Anim Resource",TOOL_PASTE_ANIM);
hb->add_child(tool_anim);
nodename = memnew( Button );
@@ -1444,7 +1444,7 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor) {
error_dialog = memnew( ConfirmationDialog );
error_dialog->get_ok()->set_text(TTR("Close"));
- //error_dialog->get_cancel()->set_text(TTR("Close"));
+ //error_dialog->get_cancel()->set_text("Close");
error_dialog->set_text(TTR("Error!"));
add_child(error_dialog);
@@ -1459,7 +1459,7 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor) {
blend_editor.dialog->set_child_rect(blend_vb);
blend_editor.tree = memnew( Tree );
blend_editor.tree->set_columns(2);
- blend_vb->add_margin_child(TTR("Blend Times: "),blend_editor.tree,true);
+ blend_vb->add_margin_child(TTR("Blend Times:"),blend_editor.tree,true);
blend_editor.next = memnew( OptionButton );
blend_vb->add_margin_child(TTR("Next (Auto Queue):"),blend_editor.next);
blend_editor.dialog->set_title(TTR("Cross-Animation Blend Times"));
@@ -1544,7 +1544,7 @@ AnimationPlayerEditorPlugin::AnimationPlayerEditorPlugin(EditorNode *p_node) {
anim_editor = memnew( AnimationPlayerEditor(editor) );
anim_editor->set_undo_redo(editor->get_undo_redo());
- editor->add_bottom_panel_item("Animation",anim_editor);
+ editor->add_bottom_panel_item(TTR("Animation"),anim_editor);
/*
editor->get_viewport()->add_child(anim_editor);
anim_editor->set_area_as_parent_rect();
@@ -1562,5 +1562,3 @@ AnimationPlayerEditorPlugin::AnimationPlayerEditorPlugin(EditorNode *p_node) {
AnimationPlayerEditorPlugin::~AnimationPlayerEditorPlugin()
{
}
-
-
diff --git a/tools/editor/plugins/animation_player_editor_plugin.h b/tools/editor/plugins/animation_player_editor_plugin.h
index 9583f3e663..3f3cda25b2 100644
--- a/tools/editor/plugins/animation_player_editor_plugin.h
+++ b/tools/editor/plugins/animation_player_editor_plugin.h
@@ -203,7 +203,7 @@ public:
virtual Dictionary get_state() const { return anim_editor->get_state(); }
virtual void set_state(const Dictionary& p_state) { anim_editor->set_state(p_state); }
- virtual String get_name() const { return TTR("Anim"); }
+ virtual String get_name() const { return "Anim"; }
bool has_main_screen() const { return false; }
virtual void edit(Object *p_node);
virtual bool handles(Object *p_node) const;
diff --git a/tools/editor/plugins/animation_tree_editor_plugin.cpp b/tools/editor/plugins/animation_tree_editor_plugin.cpp
index dc857bfacb..a381ec4678 100644
--- a/tools/editor/plugins/animation_tree_editor_plugin.cpp
+++ b/tools/editor/plugins/animation_tree_editor_plugin.cpp
@@ -990,12 +990,12 @@ void AnimationTreeEditor::_notification(int p_what) {
case AnimationTreePlayer::CONNECT_OK: {
Ref<Font> f = get_font("font","Label");
- f->draw(get_canvas_item(),Point2(5,25+f->get_ascent()),TTR("Animation Tree is Valid."),Color(0,1,0.6,0.8));
+ f->draw(get_canvas_item(),Point2(5,25+f->get_ascent()),TTR("Animation tree is valid."),Color(0,1,0.6,0.8));
} break;
default: {
Ref<Font> f = get_font("font","Label");
- f->draw(get_canvas_item(),Point2(5,25+f->get_ascent()),TTR("Animation Tree is Invalid."),Color(1,0.6,0.0,0.8));
+ f->draw(get_canvas_item(),Point2(5,25+f->get_ascent()),TTR("Animation tree is invalid."),Color(1,0.6,0.0,0.8));
} break;
}
@@ -1369,7 +1369,7 @@ AnimationTreeEditor::AnimationTreeEditor() {
p->add_item(TTR("TimeSeek Node"),AnimationTreePlayer::NODE_TIMESEEK);
p->add_item(TTR("Transition Node"),AnimationTreePlayer::NODE_TRANSITION);
p->add_separator();
- p->add_item(TTR("Import Animations..."), MENU_IMPORT_ANIMATIONS); // wtf
+ p->add_item(TTR("Import Animations.."), MENU_IMPORT_ANIMATIONS); // wtf
p->add_separator();
p->add_item(TTR("Clear"),MENU_GRAPH_CLEAR);
@@ -1524,7 +1524,7 @@ AnimationTreeEditorPlugin::AnimationTreeEditorPlugin(EditorNode *p_node) {
anim_tree_editor = memnew( AnimationTreeEditor );
anim_tree_editor->set_custom_minimum_size(Size2(0,300));
- button=editor->add_bottom_panel_item(TTR("AnimationTree"),anim_tree_editor);
+ button=editor->add_bottom_panel_item("AnimationTree",anim_tree_editor);
button->hide();
diff --git a/tools/editor/plugins/animation_tree_editor_plugin.h b/tools/editor/plugins/animation_tree_editor_plugin.h
index 989a6b0b04..4884a22d90 100644
--- a/tools/editor/plugins/animation_tree_editor_plugin.h
+++ b/tools/editor/plugins/animation_tree_editor_plugin.h
@@ -180,7 +180,7 @@ class AnimationTreeEditorPlugin : public EditorPlugin {
public:
- virtual String get_name() const { return TTR("AnimTree"); }
+ virtual String get_name() const { return "AnimTree"; }
bool has_main_screen() const { return false; }
virtual void edit(Object *p_node);
virtual bool handles(Object *p_node) const;
diff --git a/tools/editor/plugins/baked_light_baker.cpp b/tools/editor/plugins/baked_light_baker.cpp
index c7ae98e919..b6bb774364 100644
--- a/tools/editor/plugins/baked_light_baker.cpp
+++ b/tools/editor/plugins/baked_light_baker.cpp
@@ -728,14 +728,14 @@ void BakedLightBaker::_make_octree() {
for(int i=0;i<8;i++)
root->children[i]=0;
- EditorProgress ep("bake_octree",TTR("Parsing ")+itos(triangles.size())+" Triangles:",triangles.size());
+ EditorProgress ep("bake_octree",vformat(TTR("Parsing %d Triangles:"), triangles.size()),triangles.size());
for(int i=0;i<triangles.size();i++) {
_octree_insert(0,&triangles[i],octree_depth-1);
if ((i%1000)==0) {
- ep.step(TTR("Triangle# ")+itos(i),i);
+ ep.step(TTR("Triangle #")+itos(i),i);
}
}
diff --git a/tools/editor/plugins/canvas_item_editor_plugin.cpp b/tools/editor/plugins/canvas_item_editor_plugin.cpp
index 0213dbda59..0cbc867b47 100644
--- a/tools/editor/plugins/canvas_item_editor_plugin.cpp
+++ b/tools/editor/plugins/canvas_item_editor_plugin.cpp
@@ -1906,7 +1906,7 @@ void CanvasItemEditor::_viewport_draw() {
if (h_scroll->is_visible())
size.height-=h_scroll->get_size().height;
- get_stylebox(TTR("EditorFocus"),"EditorStyles")->draw(ci,Rect2(Point2(),size));
+ get_stylebox("EditorFocus","EditorStyles")->draw(ci,Rect2(Point2(),size));
}
Ref<Texture> lock = get_icon("Lock","EditorIcons");
@@ -2229,7 +2229,7 @@ void CanvasItemEditor::_notification(int p_what) {
key_insert_button->set_icon(get_icon("Key","EditorIcons"));
- //anchor_menu->add_icon_override(TTR("Align Top Left"));
+ //anchor_menu->add_icon_override("Align Top Left");
anchor_menu->set_icon(get_icon("Anchor","EditorIcons"));
PopupMenu *p=anchor_menu->get_popup();
@@ -3147,7 +3147,7 @@ void CanvasItemEditor::end_drag() {
if (undo_redo) {
- undo_redo->create_action(TTR("Edit CanvasItem"));
+ undo_redo->create_action("Edit CanvasItem");
for(CanvasItemMap::Element *E=canvas_items.front();E;E=E->next()) {
CanvasItem *canvas_item = E->key();
Variant state=canvas_item->edit_get_state();
@@ -3285,7 +3285,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
hb->add_child(select_button);
select_button->connect("pressed",this,"_tool_select",make_binds(TOOL_SELECT));
select_button->set_pressed(true);
- select_button->set_tooltip("Select Mode (Q)\n"+keycode_get_string(KEY_MASK_CMD)+"Drag: Rotate\nAlt+Drag: Move\nPress 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving).\nAlt+RMB: Depth list selection");
+ select_button->set_tooltip(TTR("Select Mode (Q)")+"\n"+keycode_get_string(KEY_MASK_CMD)+TTR("Drag: Rotate")+"\n"+TTR("Alt+Drag: Move")+"\n"+TTR("Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving).")+"\n"+TTR("Alt+RMB: Depth list selection"));
move_button = memnew( ToolButton );
@@ -3306,13 +3306,13 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
list_select_button->set_toggle_mode(true);
hb->add_child(list_select_button);
list_select_button->connect("pressed",this,"_tool_select",make_binds(TOOL_LIST_SELECT));
- list_select_button->set_tooltip("Show a list of all objects at the position clicked\n(same as Alt+RMB in selet mode).");
+ list_select_button->set_tooltip(TTR("Show a list of all objects at the position clicked\n(same as Alt+RMB in select mode)."));
pivot_button = memnew( ToolButton );
pivot_button->set_toggle_mode(true);
hb->add_child(pivot_button);
pivot_button->connect("pressed",this,"_tool_select",make_binds(TOOL_EDIT_PIVOT));
- pivot_button->set_tooltip(TTR("Click to change object's rotation pivot"));
+ pivot_button->set_tooltip(TTR("Click to change object's rotation pivot."));
pan_button = memnew( ToolButton );
pan_button->set_toggle_mode(true);
@@ -3326,7 +3326,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
hb->add_child(lock_button);
lock_button->connect("pressed",this,"_popup_callback",varray(LOCK_SELECTED));
- lock_button->set_tooltip("Lock the selected object in-place (can't be moved).");
+ lock_button->set_tooltip(TTR("Lock the selected object in place (can't be moved)."));
unlock_button = memnew( ToolButton );
hb->add_child(unlock_button);
@@ -3336,12 +3336,12 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
group_button = memnew( ToolButton );
hb->add_child(group_button);
group_button->connect("pressed",this,"_popup_callback",varray(GROUP_SELECTED));
- group_button->set_tooltip("Makes sure the object's' children are not selectable.");
+ group_button->set_tooltip(TTR("Makes sure the object's children are not selectable."));
ungroup_button = memnew( ToolButton );
hb->add_child(ungroup_button);
ungroup_button->connect("pressed",this,"_popup_callback",varray(UNGROUP_SELECTED));
- ungroup_button->set_tooltip("Restores the object's' children ability to be selected.");
+ ungroup_button->set_tooltip(TTR("Restores the object's children's ability to be selected."));
hb->add_child(memnew(VSeparator));
@@ -3375,10 +3375,10 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
/*
- p->add_item(TTR("Align Horizontal"),ALIGN_HORIZONTAL);
- p->add_item(TTR("Align Vertical"),ALIGN_VERTICAL);
- p->add_item(TTR("Space Horizontal"),SPACE_HORIZONTAL);
- p->add_item(TTR("Space Vertical"),SPACE_VERTICAL);*/
+ p->add_item("Align Horizontal",ALIGN_HORIZONTAL);
+ p->add_item("Align Vertical",ALIGN_VERTICAL);
+ p->add_item("Space Horizontal",SPACE_HORIZONTAL);
+ p->add_item("Space Vertical",SPACE_VERTICAL);*/
view_menu = memnew( MenuButton );
view_menu->set_text(TTR("View"));
@@ -3436,12 +3436,12 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
key_insert_button = memnew( Button );
key_insert_button->set_focus_mode(FOCUS_NONE);
key_insert_button->connect("pressed",this,"_popup_callback",varray(ANIM_INSERT_KEY));
- key_insert_button->set_tooltip(TTR("Insert Keys (Insert)"));
+ key_insert_button->set_tooltip(TTR("Insert Keys (Ins)"));
animation_hb->add_child(key_insert_button);
animation_menu = memnew( MenuButton );
- animation_menu->set_text("Animation");
+ animation_menu->set_text(TTR("Animation"));
animation_hb->add_child(animation_menu);
animation_menu->get_popup()->connect("item_pressed", this,"_popup_callback");
diff --git a/tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp b/tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
index 8abb51159e..14a61d46b5 100644
--- a/tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+++ b/tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
@@ -390,7 +390,7 @@ CollisionPolygon2DEditor::CollisionPolygon2DEditor(EditorNode *p_editor) {
add_child(button_create);
button_create->connect("pressed",this,"_menu_option",varray(MODE_CREATE));
button_create->set_toggle_mode(true);
- button_create->set_tooltip(TTR("Create a new polygon from scratch"));
+ button_create->set_tooltip(TTR("Create a new polygon from scratch."));
button_edit = memnew( ToolButton );
add_child(button_edit);
@@ -404,8 +404,8 @@ CollisionPolygon2DEditor::CollisionPolygon2DEditor(EditorNode *p_editor) {
options = memnew( MenuButton );
add_child(options);
options->set_area_as_parent_rect();
- options->set_text(TTR("Polygon"));
- //options->get_popup()->add_item(TTR("Parse BBCODE"),PARSE_BBCODE);
+ options->set_text("Polygon");
+ //options->get_popup()->add_item("Parse BBCode",PARSE_BBCODE);
options->get_popup()->connect("item_pressed", this,"_menu_option");
#endif
diff --git a/tools/editor/plugins/collision_polygon_editor_plugin.cpp b/tools/editor/plugins/collision_polygon_editor_plugin.cpp
index 5cd09f1a93..b18afe7838 100644
--- a/tools/editor/plugins/collision_polygon_editor_plugin.cpp
+++ b/tools/editor/plugins/collision_polygon_editor_plugin.cpp
@@ -559,8 +559,8 @@ CollisionPolygonEditor::CollisionPolygonEditor(EditorNode *p_editor) {
options = memnew( MenuButton );
add_child(options);
options->set_area_as_parent_rect();
- options->set_text(TTR("Polygon"));
- //options->get_popup()->add_item(TTR("Parse BBCODE"),PARSE_BBCODE);
+ options->set_text("Polygon");
+ //options->get_popup()->add_item("Parse BBCode",PARSE_BBCODE);
options->get_popup()->connect("item_pressed", this,"_menu_option");
#endif
diff --git a/tools/editor/plugins/color_ramp_editor_plugin.cpp b/tools/editor/plugins/color_ramp_editor_plugin.cpp
index 854a0149a5..267f3aa5bd 100644
--- a/tools/editor/plugins/color_ramp_editor_plugin.cpp
+++ b/tools/editor/plugins/color_ramp_editor_plugin.cpp
@@ -6,16 +6,13 @@
#include "spatial_editor_plugin.h"
#include "canvas_item_editor_plugin.h"
-ColorRampEditorPlugin::ColorRampEditorPlugin(EditorNode *p_node, bool p_2d) {
+ColorRampEditorPlugin::ColorRampEditorPlugin(EditorNode *p_node) {
editor=p_node;
ramp_editor = memnew( ColorRampEdit );
- _2d=p_2d;
- if (p_2d)
- add_control_to_container(CONTAINER_CANVAS_EDITOR_BOTTOM,ramp_editor);
- else
- add_control_to_container(CONTAINER_SPATIAL_EDITOR_BOTTOM,ramp_editor);
+
+ add_control_to_container(CONTAINER_PROPERTY_EDITOR_BOTTOM,ramp_editor);
ramp_editor->set_custom_minimum_size(Size2(100, 48));
ramp_editor->hide();
@@ -33,10 +30,8 @@ void ColorRampEditorPlugin::edit(Object *p_object) {
bool ColorRampEditorPlugin::handles(Object *p_object) const {
- if (_2d)
- return p_object->is_type("ColorRamp") && CanvasItemEditor::get_singleton()->is_visible() == true;
- else
- return p_object->is_type("ColorRamp") && SpatialEditor::get_singleton()->is_visible() == true;
+ return p_object->is_type("ColorRamp");
+
}
void ColorRampEditorPlugin::make_visible(bool p_visible) {
diff --git a/tools/editor/plugins/color_ramp_editor_plugin.h b/tools/editor/plugins/color_ramp_editor_plugin.h
index f07dbabeb3..02d691239f 100644
--- a/tools/editor/plugins/color_ramp_editor_plugin.h
+++ b/tools/editor/plugins/color_ramp_editor_plugin.h
@@ -30,7 +30,7 @@ public:
virtual bool handles(Object *p_node) const;
virtual void make_visible(bool p_visible);
- ColorRampEditorPlugin(EditorNode *p_node, bool p_2d);
+ ColorRampEditorPlugin(EditorNode *p_node);
~ColorRampEditorPlugin();
};
diff --git a/tools/editor/plugins/control_editor_plugin.cpp b/tools/editor/plugins/control_editor_plugin.cpp
index 0958343f2c..9dff5e6ce4 100644
--- a/tools/editor/plugins/control_editor_plugin.cpp
+++ b/tools/editor/plugins/control_editor_plugin.cpp
@@ -112,7 +112,7 @@ void ControlEditor::_key_move(const Vector2& p_dir, bool p_snap) {
if (p_snap)
motion*=snap_val->get_text().to_double();
- undo_redo->create_action(TTR("Edit Control"));
+ undo_redo->create_action("Edit Control");
for(ControlMap::Element *E=controls.front();E;E=E->next()) {
Control *control = E->key();
undo_redo->add_do_method(control,"set_pos",control->get_pos()+motion);
@@ -156,7 +156,7 @@ void ControlEditor::_input_event(InputEvent p_event) {
if (undo_redo) {
- undo_redo->create_action(TTR("Edit Control"));
+ undo_redo->create_action("Edit Control");
for(ControlMap::Element *E=controls.front();E;E=E->next()) {
Control *control = E->key();
undo_redo->add_do_method(control,"set_pos",control->get_pos());
@@ -752,17 +752,17 @@ ControlEditor::ControlEditor(EditorNode *p_editor) {
handle_len=10;
popup=memnew( PopupMenu );
- popup->add_check_item(TTR("Use Snap"));
- popup->add_item(TTR("Configure Snap.."));
+ popup->add_check_item("Use Snap");
+ popup->add_item("Configure Snap..");
add_child(popup);
snap_dialog = memnew( ConfirmationDialog );
snap_dialog->get_ok()->hide();
- snap_dialog->get_cancel()->set_text(TTR("Close"));
+ snap_dialog->get_cancel()->set_text("Close");
add_child(snap_dialog);
Label *l = memnew(Label);
- l->set_text(TTR("Snap:"));
+ l->set_text("Snap:");
l->set_pos(Point2(5,5));
snap_dialog->add_child(l);
diff --git a/tools/editor/plugins/control_editor_plugin.h b/tools/editor/plugins/control_editor_plugin.h
index 67db981c0d..6234698ee8 100644
--- a/tools/editor/plugins/control_editor_plugin.h
+++ b/tools/editor/plugins/control_editor_plugin.h
@@ -125,7 +125,7 @@ class ControlEditorPlugin : public EditorPlugin {
public:
- virtual String get_name() const { return TTR("GUI"); }
+ virtual String get_name() const { return "GUI"; }
bool has_main_screen() const { return true; }
virtual void edit(Object *p_object);
virtual bool handles(Object *p_object) const;
diff --git a/tools/editor/plugins/cube_grid_theme_editor_plugin.cpp b/tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
index 788e3c61f1..b6f3db73f7 100644
--- a/tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+++ b/tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
@@ -256,7 +256,7 @@ void MeshLibraryEditor::_menu_cbk(int p_option) {
if (p.begins_with("/MeshLibrary/item") && p.get_slice_count("/")>=3) {
to_erase = p.get_slice("/",3).to_int();
- cd->set_text(TTR("Remove Item ")+itos(to_erase)+"?");
+ cd->set_text(vformat(TTR("Remove item %d?"),to_erase));
cd->popup_centered(Size2(300,60));
}
} break;
diff --git a/tools/editor/plugins/editor_preview_plugins.cpp b/tools/editor/plugins/editor_preview_plugins.cpp
index 12d50cd4b8..300e35f94d 100644
--- a/tools/editor/plugins/editor_preview_plugins.cpp
+++ b/tools/editor/plugins/editor_preview_plugins.cpp
@@ -7,7 +7,7 @@
#include "scene/resources/sample.h"
#include "scene/resources/mesh.h"
#include "scene/resources/bit_mask.h"
-
+#include "tools/editor/editor_scale.h"
bool EditorTexturePreviewPlugin::handles(const String& p_type) const {
return (ObjectTypeDB::is_type(p_type,"ImageTexture") || ObjectTypeDB::is_type(p_type, "AtlasTexture"));
@@ -36,6 +36,7 @@ Ref<Texture> EditorTexturePreviewPlugin::generate(const RES& p_from) {
img.clear_mipmaps();
int thumbnail_size = EditorSettings::get_singleton()->get("file_dialog/thumbnail_size");
+ thumbnail_size*=EDSCALE;
if (img.is_compressed()) {
if (img.decompress()!=OK)
return Ref<Texture>();
@@ -111,6 +112,7 @@ Ref<Texture> EditorBitmapPreviewPlugin::generate(const RES& p_from) {
Image img(bm->get_size().width,bm->get_size().height,0,Image::FORMAT_GRAYSCALE,data);
int thumbnail_size = EditorSettings::get_singleton()->get("file_dialog/thumbnail_size");
+ thumbnail_size*=EDSCALE;
if (img.is_compressed()) {
if (img.decompress()!=OK)
return Ref<Texture>();
@@ -233,6 +235,7 @@ Ref<Texture> EditorMaterialPreviewPlugin::generate(const RES& p_from) {
VS::get_singleton()->mesh_surface_set_material(sphere,0,RID());
int thumbnail_size = EditorSettings::get_singleton()->get("file_dialog/thumbnail_size");
+ thumbnail_size*=EDSCALE;
img.resize(thumbnail_size,thumbnail_size);
Ref<ImageTexture> ptex = Ref<ImageTexture>( memnew( ImageTexture ));
@@ -401,6 +404,7 @@ Ref<Texture> EditorScriptPreviewPlugin::generate(const RES& p_from) {
int line = 0;
int col=0;
int thumbnail_size = EditorSettings::get_singleton()->get("file_dialog/thumbnail_size");
+ thumbnail_size*=EDSCALE;
Image img(thumbnail_size,thumbnail_size,0,Image::FORMAT_RGBA);
@@ -501,7 +505,7 @@ Ref<Texture> EditorSamplePreviewPlugin::generate(const RES& p_from) {
int thumbnail_size = EditorSettings::get_singleton()->get("file_dialog/thumbnail_size");
-
+ thumbnail_size*=EDSCALE;
DVector<uint8_t> img;
int w = thumbnail_size;
int h = thumbnail_size;
@@ -815,6 +819,7 @@ Ref<Texture> EditorMeshPreviewPlugin::generate(const RES& p_from) {
VS::get_singleton()->instance_set_base(mesh_instance,RID());
int thumbnail_size = EditorSettings::get_singleton()->get("file_dialog/thumbnail_size");
+ thumbnail_size*=EDSCALE;
img.resize(thumbnail_size,thumbnail_size);
Ref<ImageTexture> ptex = Ref<ImageTexture>( memnew( ImageTexture ));
diff --git a/tools/editor/plugins/item_list_editor_plugin.cpp b/tools/editor/plugins/item_list_editor_plugin.cpp
index 9f47d26492..b711e13193 100644
--- a/tools/editor/plugins/item_list_editor_plugin.cpp
+++ b/tools/editor/plugins/item_list_editor_plugin.cpp
@@ -129,7 +129,7 @@ int ItemListOptionButtonPlugin::get_flags() const {
void ItemListOptionButtonPlugin::add_item() {
- ob->add_item( TTR("Item ")+itos(ob->get_item_count()));
+ ob->add_item( vformat(TTR("Item %d"),ob->get_item_count()));
_change_notify();
}
@@ -171,7 +171,7 @@ int ItemListPopupMenuPlugin::get_flags() const {
void ItemListPopupMenuPlugin::add_item() {
- pp->add_item( TTR("Item ")+itos(pp->get_item_count()));
+ pp->add_item( vformat(TTR("Item %d"),pp->get_item_count()));
_change_notify();
}
diff --git a/tools/editor/plugins/light_occluder_2d_editor_plugin.cpp b/tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
index fe031d1657..bf3b2fa68d 100644
--- a/tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+++ b/tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
@@ -421,13 +421,13 @@ LightOccluder2DEditor::LightOccluder2DEditor(EditorNode *p_editor) {
add_child(button_create);
button_create->connect("pressed",this,"_menu_option",varray(MODE_CREATE));
button_create->set_toggle_mode(true);
- button_create->set_tooltip(TTR("Create a new polygon from scratch"));
+ button_create->set_tooltip(TTR("Create a new polygon from scratch."));
button_edit = memnew( ToolButton );
add_child(button_edit);
button_edit->connect("pressed",this,"_menu_option",varray(MODE_EDIT));
button_edit->set_toggle_mode(true);
- button_edit->set_tooltip("Edit existing polygon:\nLMB: Move Point.\nCtrl+LMB: Split Segment.\nRMB: Erase Point.");
+ button_edit->set_tooltip(TTR("Edit existing polygon:")+"\n"+TTR("LMB: Move Point.")+"\n"+TTR("Ctrl+LMB: Split Segment.")+"\n"+TTR("RMB: Erase Point."));
create_poly = memnew( ConfirmationDialog );
add_child(create_poly);
@@ -440,8 +440,8 @@ LightOccluder2DEditor::LightOccluder2DEditor(EditorNode *p_editor) {
options = memnew( MenuButton );
add_child(options);
options->set_area_as_parent_rect();
- options->set_text(TTR("Polygon"));
- //options->get_popup()->add_item(TTR("Parse BBCODE"),PARSE_BBCODE);
+ options->set_text("Polygon");
+ //options->get_popup()->add_item("Parse BBCode",PARSE_BBCODE);
options->get_popup()->connect("item_pressed", this,"_menu_option");
#endif
diff --git a/tools/editor/plugins/material_editor_plugin.cpp b/tools/editor/plugins/material_editor_plugin.cpp
new file mode 100644
index 0000000000..f4258836e5
--- /dev/null
+++ b/tools/editor/plugins/material_editor_plugin.cpp
@@ -0,0 +1,381 @@
+#include "material_editor_plugin.h"
+#include "scene/main/viewport.h"
+
+void MaterialEditor::_input_event(InputEvent p_event) {
+
+
+}
+
+void MaterialEditor::_notification(int p_what) {
+
+ if (p_what==NOTIFICATION_FIXED_PROCESS) {
+
+ }
+
+
+ if (p_what==NOTIFICATION_READY) {
+
+ //get_scene()->connect("node_removed",this,"_node_removed");
+
+ if (first_enter) {
+ //it's in propertyeditor so.. could be moved around
+
+ light_1_switch->set_normal_texture(get_icon("MaterialPreviewLight1","EditorIcons"));
+ light_1_switch->set_pressed_texture(get_icon("MaterialPreviewLight1Off","EditorIcons"));
+ light_2_switch->set_normal_texture(get_icon("MaterialPreviewLight2","EditorIcons"));
+ light_2_switch->set_pressed_texture(get_icon("MaterialPreviewLight2Off","EditorIcons"));
+
+ sphere_switch->set_normal_texture(get_icon("MaterialPreviewSphereOff","EditorIcons"));
+ sphere_switch->set_pressed_texture(get_icon("MaterialPreviewSphere","EditorIcons"));
+ box_switch->set_normal_texture(get_icon("MaterialPreviewCubeOff","EditorIcons"));
+ box_switch->set_pressed_texture(get_icon("MaterialPreviewCube","EditorIcons"));
+
+ first_enter=false;
+ }
+
+ }
+
+ if (p_what==NOTIFICATION_DRAW) {
+
+
+ Ref<Texture> checkerboard = get_icon("Checkerboard","EditorIcons");
+ Size2 size = get_size();
+
+ draw_texture_rect(checkerboard,Rect2(Point2(),size),true);
+
+ }
+}
+
+
+
+void MaterialEditor::edit(Ref<Material> p_material) {
+
+ material=p_material;
+
+ if (!material.is_null()) {
+ sphere_mesh->surface_set_material(0,material);
+ box_mesh->surface_set_material(0,material);
+ } else {
+
+ hide();
+ }
+
+}
+
+
+void MaterialEditor::_button_pressed(Node* p_button) {
+
+ if (p_button==light_1_switch) {
+ light1->set_enabled(!light_1_switch->is_pressed());
+ }
+
+ if (p_button==light_2_switch) {
+ light2->set_enabled(!light_2_switch->is_pressed());
+ }
+
+ if (p_button==box_switch) {
+ box_instance->show();
+ sphere_instance->hide();
+ box_switch->set_pressed(true);
+ sphere_switch->set_pressed(false);
+ }
+
+ if (p_button==sphere_switch) {
+ box_instance->hide();
+ sphere_instance->show();
+ box_switch->set_pressed(false);
+ sphere_switch->set_pressed(true);
+ }
+
+}
+
+void MaterialEditor::_bind_methods() {
+
+ ObjectTypeDB::bind_method(_MD("_input_event"),&MaterialEditor::_input_event);
+ ObjectTypeDB::bind_method(_MD("_button_pressed"),&MaterialEditor::_button_pressed);
+
+}
+
+MaterialEditor::MaterialEditor() {
+
+ viewport = memnew( Viewport );
+ Ref<World> world;
+ world.instance();
+ viewport->set_world(world); //use own world
+ add_child(viewport);
+ viewport->set_process_input(false);
+
+ camera = memnew( Camera );
+ camera->set_transform(Transform(Matrix3(),Vector3(0,0,3)));
+ camera->set_perspective(45,0.1,10);
+ viewport->add_child(camera);
+
+ light1 = memnew( DirectionalLight );
+ light1->set_transform(Transform().looking_at(Vector3(-1,-1,-1),Vector3(0,1,0)));
+ viewport->add_child(light1);
+
+ light2 = memnew( DirectionalLight );
+ light2->set_transform(Transform().looking_at(Vector3(0,1,0),Vector3(0,0,1)));
+ light2->set_color(Light::COLOR_DIFFUSE,Color(0.7,0.7,0.7));
+ light2->set_color(Light::COLOR_SPECULAR,Color(0.7,0.7,0.7));
+ viewport->add_child(light2);
+
+ sphere_instance = memnew( MeshInstance );
+ viewport->add_child(sphere_instance);
+
+ box_instance = memnew( MeshInstance );
+ viewport->add_child(box_instance);
+
+ Transform box_xform;
+ box_xform.basis.rotate(Vector3(1,0,0),Math::deg2rad(-25));
+ box_xform.basis = box_xform.basis * Matrix3().rotated(Vector3(0,1,0),Math::deg2rad(-25));
+ box_xform.basis.scale(Vector3(0.8,0.8,0.8));
+ box_instance->set_transform(box_xform);
+
+ {
+
+ sphere_mesh.instance();
+
+
+ int lats=32;
+ int lons=32;
+ float radius=1.0;
+
+ DVector<Vector3> vertices;
+ DVector<Vector3> normals;
+ DVector<Vector2> uvs;
+ DVector<float> tangents;
+ Matrix3 tt = Matrix3(Vector3(0,1,0),Math_PI*0.5);
+
+ for(int i = 1; i <= lats; i++) {
+ double lat0 = Math_PI * (-0.5 + (double) (i - 1) / lats);
+ double z0 = Math::sin(lat0);
+ double zr0 = Math::cos(lat0);
+
+ double lat1 = Math_PI * (-0.5 + (double) i / lats);
+ double z1 = Math::sin(lat1);
+ double zr1 = Math::cos(lat1);
+
+ for(int j = lons; j >= 1; j--) {
+
+ double lng0 = 2 * Math_PI * (double) (j - 1) / lons;
+ double x0 = Math::cos(lng0);
+ double y0 = Math::sin(lng0);
+
+ double lng1 = 2 * Math_PI * (double) (j) / lons;
+ double x1 = Math::cos(lng1);
+ double y1 = Math::sin(lng1);
+
+
+ Vector3 v[4]={
+ Vector3(x1 * zr0, z0, y1 *zr0),
+ Vector3(x1 * zr1, z1, y1 *zr1),
+ Vector3(x0 * zr1, z1, y0 *zr1),
+ Vector3(x0 * zr0, z0, y0 *zr0)
+ };
+
+ #define ADD_POINT(m_idx) \
+ normals.push_back(v[m_idx]);\
+ vertices.push_back(v[m_idx]*radius);\
+ { Vector2 uv(Math::atan2(v[m_idx].x,v[m_idx].z),Math::atan2(-v[m_idx].y,v[m_idx].z));\
+ uv/=Math_PI;\
+ uv*=4.0;\
+ uv=uv*0.5+Vector2(0.5,0.5);\
+ uvs.push_back(uv);\
+ }\
+ { Vector3 t = tt.xform(v[m_idx]);\
+ tangents.push_back(t.x);\
+ tangents.push_back(t.y);\
+ tangents.push_back(t.z);\
+ tangents.push_back(1.0);\
+ }
+
+
+
+ ADD_POINT(0);
+ ADD_POINT(1);
+ ADD_POINT(2);
+
+ ADD_POINT(2);
+ ADD_POINT(3);
+ ADD_POINT(0);
+ }
+ }
+
+ Array arr;
+ arr.resize(VS::ARRAY_MAX);
+ arr[VS::ARRAY_VERTEX]=vertices;
+ arr[VS::ARRAY_NORMAL]=normals;
+ arr[VS::ARRAY_TANGENT]=tangents;
+ arr[VS::ARRAY_TEX_UV]=uvs;
+
+ sphere_mesh->add_surface(Mesh::PRIMITIVE_TRIANGLES,arr);
+
+ sphere_instance->set_mesh(sphere_mesh);
+
+ }
+ {
+
+
+ box_mesh.instance();
+
+ DVector<Vector3> vertices;
+ DVector<Vector3> normals;
+ DVector<float> tangents;
+ DVector<Vector3> uvs;
+
+ int vtx_idx=0;
+ #define ADD_VTX(m_idx);\
+ vertices.push_back( face_points[m_idx] );\
+ normals.push_back( normal_points[m_idx] );\
+ tangents.push_back( normal_points[m_idx][1] );\
+ tangents.push_back( normal_points[m_idx][2] );\
+ tangents.push_back( normal_points[m_idx][0] );\
+ tangents.push_back( 1.0 );\
+ uvs.push_back( Vector3(uv_points[m_idx*2+0],uv_points[m_idx*2+1],0) );\
+ vtx_idx++;\
+
+ for (int i=0;i<6;i++) {
+
+
+ Vector3 face_points[4];
+ Vector3 normal_points[4];
+ float uv_points[8]={0,0,0,1,1,1,1,0};
+
+ for (int j=0;j<4;j++) {
+
+ float v[3];
+ v[0]=1.0;
+ v[1]=1-2*((j>>1)&1);
+ v[2]=v[1]*(1-2*(j&1));
+
+ for (int k=0;k<3;k++) {
+
+ if (i<3)
+ face_points[j][(i+k)%3]=v[k]*(i>=3?-1:1);
+ else
+ face_points[3-j][(i+k)%3]=v[k]*(i>=3?-1:1);
+ }
+ normal_points[j]=Vector3();
+ normal_points[j][i%3]=(i>=3?-1:1);
+ }
+
+ //tri 1
+ ADD_VTX(0);
+ ADD_VTX(1);
+ ADD_VTX(2);
+ //tri 2
+ ADD_VTX(2);
+ ADD_VTX(3);
+ ADD_VTX(0);
+
+ }
+
+
+
+ Array d;
+ d.resize(VS::ARRAY_MAX);
+ d[VisualServer::ARRAY_NORMAL]= normals ;
+ d[VisualServer::ARRAY_TANGENT]= tangents ;
+ d[VisualServer::ARRAY_TEX_UV]= uvs ;
+ d[VisualServer::ARRAY_VERTEX]= vertices ;
+
+ DVector<int> indices;
+ indices.resize(vertices.size());
+ for(int i=0;i<vertices.size();i++)
+ indices.set(i,i);
+ d[VisualServer::ARRAY_INDEX]=indices;
+
+ box_mesh->add_surface(Mesh::PRIMITIVE_TRIANGLES,d);
+ box_instance->set_mesh(box_mesh);
+ box_instance->hide();
+
+
+
+ }
+
+ set_custom_minimum_size(Size2(1,150)*EDSCALE);
+
+ HBoxContainer *hb = memnew( HBoxContainer );
+ add_child(hb);
+ hb->set_area_as_parent_rect(2);
+
+ VBoxContainer *vb_shape = memnew( VBoxContainer );
+ hb->add_child(vb_shape);
+
+ sphere_switch = memnew( TextureButton );
+ sphere_switch->set_toggle_mode(true);
+ sphere_switch->set_pressed(true);
+ vb_shape->add_child(sphere_switch);
+ sphere_switch->connect("pressed",this,"_button_pressed",varray(sphere_switch));
+
+ box_switch = memnew( TextureButton );
+ box_switch->set_toggle_mode(true);
+ box_switch->set_pressed(false);
+ vb_shape->add_child(box_switch);
+ box_switch->connect("pressed",this,"_button_pressed",varray(box_switch));
+
+ hb->add_spacer();
+
+ VBoxContainer *vb_light = memnew( VBoxContainer );
+ hb->add_child(vb_light);
+
+ light_1_switch = memnew( TextureButton );
+ light_1_switch->set_toggle_mode(true);
+ vb_light->add_child(light_1_switch);
+ light_1_switch->connect("pressed",this,"_button_pressed",varray(light_1_switch));
+
+ light_2_switch = memnew( TextureButton );
+ light_2_switch->set_toggle_mode(true);
+ vb_light->add_child(light_2_switch);
+ light_2_switch->connect("pressed",this,"_button_pressed",varray(light_2_switch));
+
+ first_enter=true;
+
+}
+
+
+void MaterialEditorPlugin::edit(Object *p_object) {
+
+ Material * s = p_object->cast_to<Material>();
+ if (!s)
+ return;
+
+ material_editor->edit(Ref<Material>(s));
+}
+
+bool MaterialEditorPlugin::handles(Object *p_object) const {
+
+ return p_object->is_type("Material");
+}
+
+void MaterialEditorPlugin::make_visible(bool p_visible) {
+
+ if (p_visible) {
+ material_editor->show();
+// material_editor->set_process(true);
+ } else {
+
+ material_editor->hide();
+// material_editor->set_process(false);
+ }
+
+}
+
+MaterialEditorPlugin::MaterialEditorPlugin(EditorNode *p_node) {
+
+ editor=p_node;
+ material_editor = memnew( MaterialEditor );
+ add_control_to_container(CONTAINER_PROPERTY_EDITOR_BOTTOM,material_editor);
+ material_editor->hide();
+
+
+
+}
+
+
+MaterialEditorPlugin::~MaterialEditorPlugin()
+{
+}
+
+
diff --git a/tools/editor/plugins/material_editor_plugin.h b/tools/editor/plugins/material_editor_plugin.h
new file mode 100644
index 0000000000..49e92493b3
--- /dev/null
+++ b/tools/editor/plugins/material_editor_plugin.h
@@ -0,0 +1,71 @@
+#ifndef MATERIAL_EDITOR_PLUGIN_H
+#define MATERIAL_EDITOR_PLUGIN_H
+
+#include "tools/editor/editor_plugin.h"
+#include "tools/editor/editor_node.h"
+#include "scene/resources/material.h"
+#include "scene/3d/light.h"
+#include "scene/3d/mesh_instance.h"
+#include "scene/3d/camera.h"
+
+
+class MaterialEditor : public Control {
+
+ OBJ_TYPE(MaterialEditor, Control);
+
+
+ Viewport *viewport;
+ MeshInstance *sphere_instance;
+ MeshInstance *box_instance;
+ DirectionalLight *light1;
+ DirectionalLight *light2;
+ Camera *camera;
+
+ Ref<Mesh> sphere_mesh;
+ Ref<Mesh> box_mesh;
+
+ TextureButton *sphere_switch;
+ TextureButton *box_switch;
+
+ TextureButton *light_1_switch;
+ TextureButton *light_2_switch;
+
+
+ Ref<Material> material;
+
+
+ void _button_pressed(Node* p_button);
+ bool first_enter;
+
+protected:
+ void _notification(int p_what);
+ void _input_event(InputEvent p_event);
+ static void _bind_methods();
+public:
+
+ void edit(Ref<Material> p_material);
+ MaterialEditor();
+};
+
+
+class MaterialEditorPlugin : public EditorPlugin {
+
+ OBJ_TYPE( MaterialEditorPlugin, EditorPlugin );
+
+ MaterialEditor *material_editor;
+ EditorNode *editor;
+
+public:
+
+ virtual String get_name() const { return "Material"; }
+ bool has_main_screen() const { return false; }
+ virtual void edit(Object *p_node);
+ virtual bool handles(Object *p_node) const;
+ virtual void make_visible(bool p_visible);
+
+ MaterialEditorPlugin(EditorNode *p_node);
+ ~MaterialEditorPlugin();
+
+};
+
+#endif // MATERIAL_EDITOR_PLUGIN_H
diff --git a/tools/editor/plugins/mesh_editor_plugin.cpp b/tools/editor/plugins/mesh_editor_plugin.cpp
index 8671734c25..51a436e58d 100644
--- a/tools/editor/plugins/mesh_editor_plugin.cpp
+++ b/tools/editor/plugins/mesh_editor_plugin.cpp
@@ -1,300 +1,215 @@
#include "mesh_editor_plugin.h"
-#include "scene/3d/physics_body.h"
-#include "scene/3d/body_shape.h"
-#include "scene/gui/box_container.h"
-#include "scene/3d/navigation_mesh.h"
-#include "spatial_editor_plugin.h"
+void MeshEditor::_input_event(InputEvent p_event) {
-void MeshInstanceEditor::_node_removed(Node *p_node) {
- if(p_node==node) {
- node=NULL;
- options->hide();
- }
+ if (p_event.type==InputEvent::MOUSE_MOTION && p_event.mouse_motion.button_mask&BUTTON_MASK_LEFT) {
+ rot_x-=p_event.mouse_motion.relative_y*0.01;
+ rot_y-=p_event.mouse_motion.relative_x*0.01;
+ if (rot_x<-Math_PI/2)
+ rot_x=-Math_PI/2;
+ else if (rot_x>Math_PI/2) {
+ rot_x=Math_PI/2;
+ }
+ _update_rotation();
+ }
}
+void MeshEditor::_notification(int p_what) {
+ if (p_what==NOTIFICATION_FIXED_PROCESS) {
-void MeshInstanceEditor::edit(MeshInstance *p_mesh) {
-
- node=p_mesh;
-
-}
-
-void MeshInstanceEditor::_menu_option(int p_option) {
-
- Ref<Mesh> mesh = node->get_mesh();
- if (mesh.is_null()) {
- err_dialog->set_text(TTR("Mesh is empty!"));
- err_dialog->popup_centered_minsize();
- return;
}
- switch(p_option) {
- case MENU_OPTION_CREATE_STATIC_TRIMESH_BODY:
- case MENU_OPTION_CREATE_STATIC_CONVEX_BODY: {
-
- bool trimesh_shape = (p_option==MENU_OPTION_CREATE_STATIC_TRIMESH_BODY);
-
- EditorSelection *editor_selection = EditorNode::get_singleton()->get_editor_selection();
- UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
-
- List<Node*> selection = editor_selection->get_selected_node_list();
-
- if (selection.empty()) {
- Ref<Shape> shape = trimesh_shape ? mesh->create_trimesh_shape() : mesh->create_convex_shape();
- if (shape.is_null())
- return;
- CollisionShape *cshape = memnew( CollisionShape );
- cshape->set_shape(shape);
- StaticBody *body = memnew( StaticBody );
- body->add_child(cshape);
+ if (p_what==NOTIFICATION_READY) {
- Node *owner = node==get_tree()->get_edited_scene_root() ? node : node->get_owner();
+ //get_scene()->connect("node_removed",this,"_node_removed");
- if (trimesh_shape)
- ur->create_action(TTR("Create Static Trimesh Body"));
- else
- ur->create_action(TTR("Create Static Convex Body"));
+ if (first_enter) {
+ //it's in propertyeditor so.. could be moved around
- ur->add_do_method(node,"add_child",body);
- ur->add_do_method(body,"set_owner",owner);
- ur->add_do_method(cshape,"set_owner",owner);
- ur->add_do_reference(body);
- ur->add_undo_method(node,"remove_child",body);
- ur->commit_action();
- return;
- }
+ light_1_switch->set_normal_texture(get_icon("MaterialPreviewLight1","EditorIcons"));
+ light_1_switch->set_pressed_texture(get_icon("MaterialPreviewLight1Off","EditorIcons"));
+ light_2_switch->set_normal_texture(get_icon("MaterialPreviewLight2","EditorIcons"));
+ light_2_switch->set_pressed_texture(get_icon("MaterialPreviewLight2Off","EditorIcons"));
+ first_enter=false;
+ }
- if (trimesh_shape)
- ur->create_action(TTR("Create Static Trimesh Body"));
- else
- ur->create_action(TTR("Create Static Convex Body"));
-
- for (List<Node*>::Element *E=selection.front();E;E=E->next()) {
-
- MeshInstance *instance = E->get()->cast_to<MeshInstance>();
- if (!instance)
- continue;
-
- Ref<Mesh> m = instance->get_mesh();
- if (m.is_null())
- continue;
-
- Ref<Shape> shape = trimesh_shape ? m->create_trimesh_shape() : m->create_convex_shape();
- if (shape.is_null())
- continue;
-
- CollisionShape *cshape = memnew( CollisionShape );
- cshape->set_shape(shape);
- StaticBody *body = memnew( StaticBody );
- body->add_child(cshape);
-
- Node *owner = instance==get_tree()->get_edited_scene_root() ? instance : instance->get_owner();
-
- ur->add_do_method(instance,"add_child",body);
- ur->add_do_method(body,"set_owner",owner);
- ur->add_do_method(cshape,"set_owner",owner);
- ur->add_do_reference(body);
- ur->add_undo_method(instance,"remove_child",body);
- }
-
- ur->commit_action();
-
- } break;
-
- case MENU_OPTION_CREATE_TRIMESH_COLLISION_SHAPE:
- case MENU_OPTION_CREATE_CONVEX_COLLISION_SHAPE: {
-
- if (node==get_tree()->get_edited_scene_root()) {
- err_dialog->set_text(TTR("This doesn't work on scene root!"));
- err_dialog->popup_centered_minsize();
- return;
- }
-
- bool trimesh_shape = (p_option==MENU_OPTION_CREATE_TRIMESH_COLLISION_SHAPE);
+ }
- Ref<Shape> shape = trimesh_shape ? mesh->create_trimesh_shape() : mesh->create_convex_shape();
- if (shape.is_null())
- return;
+ if (p_what==NOTIFICATION_DRAW) {
- CollisionShape *cshape = memnew( CollisionShape );
- cshape->set_shape(shape);
- Node *owner = node->get_owner();
+ Ref<Texture> checkerboard = get_icon("Checkerboard","EditorIcons");
+ Size2 size = get_size();
- UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
+ draw_texture_rect(checkerboard,Rect2(Point2(),size),true);
- if (trimesh_shape)
- ur->create_action(TTR("Create Trimesh Shape"));
- else
- ur->create_action(TTR("Create Convex Shape"));
+ }
+}
- ur->add_do_method(node->get_parent(),"add_child",cshape);
- ur->add_do_method(node->get_parent(),"move_child",cshape,node->get_index()+1);
- ur->add_do_method(cshape,"set_owner",owner);
- ur->add_do_reference(cshape);
- ur->add_undo_method(node->get_parent(),"remove_child",cshape);
- ur->commit_action();
+void MeshEditor::_update_rotation() {
- } break;
+ Transform t;
+ t.basis.rotate(Vector3(0, 1, 0), rot_y);
+ t.basis.rotate(Vector3(1, 0, 0), rot_x);
+ mesh_instance->set_transform(t);
- case MENU_OPTION_CREATE_NAVMESH: {
+}
- Ref<NavigationMesh> nmesh = memnew( NavigationMesh );
+void MeshEditor::edit(Ref<Mesh> p_mesh) {
- if (nmesh.is_null())
- return;
+ mesh=p_mesh;
+ mesh_instance->set_mesh(mesh);
- nmesh->create_from_mesh(mesh);
- NavigationMeshInstance *nmi = memnew( NavigationMeshInstance );
- nmi->set_navigation_mesh(nmesh);
+ if (mesh.is_null()) {
- Node *owner = node==get_tree()->get_edited_scene_root() ? node : node->get_owner();
+ hide();
+ } else {
+ rot_x=0;
+ rot_y=0;
+ _update_rotation();
+
+ AABB aabb= mesh->get_aabb();
+ Vector3 ofs = aabb.pos + aabb.size*0.5;
+ aabb.pos-=ofs;
+ float m = MAX(aabb.size.x,aabb.size.y)*0.5;
+ if (m!=0) {
+ m=1.0/m;
+ m*=0.5;
+ //print_line("scale: "+rtos(m));
+ Transform xform;
+ xform.basis.scale(Vector3(m,m,m));
+ xform.origin=-xform.basis.xform(ofs); //-ofs*m;
+ xform.origin.z-=aabb.size.z*2;
+ mesh_instance->set_transform(xform);
+ }
- UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
- ur->create_action(TTR("Create Navigation Mesh"));
+ }
- ur->add_do_method(node,"add_child",nmi);
- ur->add_do_method(nmi,"set_owner",owner);
+}
- ur->add_do_reference(nmi);
- ur->add_undo_method(node,"remove_child",nmi);
- ur->commit_action();
- } break;
- case MENU_OPTION_CREATE_OUTLINE_MESH: {
+void MeshEditor::_button_pressed(Node* p_button) {
- outline_dialog->popup_centered(Vector2(200, 90));
- } break;
+ if (p_button==light_1_switch) {
+ light1->set_enabled(!light_1_switch->is_pressed());
}
-}
+ if (p_button==light_2_switch) {
+ light2->set_enabled(!light_2_switch->is_pressed());
+ }
-void MeshInstanceEditor::_create_outline_mesh() {
- Ref<Mesh> mesh = node->get_mesh();
- if (mesh.is_null()) {
- err_dialog->set_text(TTR("MeshInstance lacks a Mesh!"));
- err_dialog->popup_centered_minsize();
- return;
- }
+}
- Ref<Mesh> mesho = mesh->create_outline(outline_size->get_val());
+void MeshEditor::_bind_methods() {
- if (mesho.is_null()) {
- err_dialog->set_text(TTR("Could not create outline!"));
- err_dialog->popup_centered_minsize();
- return;
- }
+ ObjectTypeDB::bind_method(_MD("_input_event"),&MeshEditor::_input_event);
+ ObjectTypeDB::bind_method(_MD("_button_pressed"),&MeshEditor::_button_pressed);
- MeshInstance *mi = memnew( MeshInstance );
- mi->set_mesh(mesho);
- Node *owner=node->get_owner();
- if (get_tree()->get_edited_scene_root()==node) {
- owner=node;
- }
+}
- UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
+MeshEditor::MeshEditor() {
- ur->create_action(TTR("Create Outline"));
+ viewport = memnew( Viewport );
+ Ref<World> world;
+ world.instance();
+ viewport->set_world(world); //use own world
+ add_child(viewport);
+ viewport->set_process_input(false);
- ur->add_do_method(node,"add_child",mi);
- ur->add_do_method(mi,"set_owner",owner);
+ camera = memnew( Camera );
+ camera->set_transform(Transform(Matrix3(),Vector3(0,0,3)));
+ camera->set_perspective(45,0.1,10);
+ viewport->add_child(camera);
- ur->add_do_reference(mi);
- ur->add_undo_method(node,"remove_child",mi);
- ur->commit_action();
-}
+ light1 = memnew( DirectionalLight );
+ light1->set_transform(Transform().looking_at(Vector3(-1,-1,-1),Vector3(0,1,0)));
+ viewport->add_child(light1);
-void MeshInstanceEditor::_bind_methods() {
+ light2 = memnew( DirectionalLight );
+ light2->set_transform(Transform().looking_at(Vector3(0,1,0),Vector3(0,0,1)));
+ light2->set_color(Light::COLOR_DIFFUSE,Color(0.7,0.7,0.7));
+ light2->set_color(Light::COLOR_SPECULAR,Color(0.7,0.7,0.7));
+ viewport->add_child(light2);
- ObjectTypeDB::bind_method("_menu_option",&MeshInstanceEditor::_menu_option);
- ObjectTypeDB::bind_method("_create_outline_mesh",&MeshInstanceEditor::_create_outline_mesh);
-}
+ mesh_instance = memnew( MeshInstance );
+ viewport->add_child(mesh_instance);
-MeshInstanceEditor::MeshInstanceEditor() {
- options = memnew( MenuButton );
- SpatialEditor::get_singleton()->add_control_to_menu_panel(options);
+ set_custom_minimum_size(Size2(1,150)*EDSCALE);
- options->set_text("Mesh");
- options->set_icon(EditorNode::get_singleton()->get_gui_base()->get_icon("MeshInstance","EditorIcons"));
+ HBoxContainer *hb = memnew( HBoxContainer );
+ add_child(hb);
+ hb->set_area_as_parent_rect(2);
- options->get_popup()->add_item(TTR("Create Trimesh Static Body"),MENU_OPTION_CREATE_STATIC_TRIMESH_BODY);
- options->get_popup()->add_item(TTR("Create Convex Static Body"),MENU_OPTION_CREATE_STATIC_CONVEX_BODY);
- options->get_popup()->add_separator();
- options->get_popup()->add_item(TTR("Create Trimesh Collision Sibling"),MENU_OPTION_CREATE_TRIMESH_COLLISION_SHAPE);
- options->get_popup()->add_item(TTR("Create Convex Collision Sibling"),MENU_OPTION_CREATE_CONVEX_COLLISION_SHAPE);
- options->get_popup()->add_separator();
- options->get_popup()->add_item(TTR("Create Navigation Mesh"),MENU_OPTION_CREATE_NAVMESH);
- options->get_popup()->add_separator();
- options->get_popup()->add_item(TTR("Create Outline Mesh.."),MENU_OPTION_CREATE_OUTLINE_MESH);
+ hb->add_spacer();
- options->get_popup()->connect("item_pressed", this,"_menu_option");
+ VBoxContainer *vb_light = memnew( VBoxContainer );
+ hb->add_child(vb_light);
- outline_dialog = memnew( ConfirmationDialog );
- outline_dialog->set_title(TTR("Create Outline Mesh"));
- outline_dialog->get_ok()->set_text(TTR("Create"));
+ light_1_switch = memnew( TextureButton );
+ light_1_switch->set_toggle_mode(true);
+ vb_light->add_child(light_1_switch);
+ light_1_switch->connect("pressed",this,"_button_pressed",varray(light_1_switch));
- VBoxContainer *outline_dialog_vbc = memnew( VBoxContainer );
- outline_dialog->add_child(outline_dialog_vbc);
- outline_dialog->set_child_rect(outline_dialog_vbc);
+ light_2_switch = memnew( TextureButton );
+ light_2_switch->set_toggle_mode(true);
+ vb_light->add_child(light_2_switch);
+ light_2_switch->connect("pressed",this,"_button_pressed",varray(light_2_switch));
- outline_size = memnew( SpinBox );
- outline_size->set_min(0.001);
- outline_size->set_max(1024);
- outline_size->set_step(0.001);
- outline_size->set_val(0.05);
- outline_dialog_vbc->add_margin_child(TTR("Outline Size:"),outline_size);
+ first_enter=true;
- add_child(outline_dialog);
- outline_dialog->connect("confirmed",this,"_create_outline_mesh");
+ rot_x=0;
+ rot_y=0;
- err_dialog = memnew( AcceptDialog );
- add_child(err_dialog);
}
-void MeshInstanceEditorPlugin::edit(Object *p_object) {
+void MeshEditorPlugin::edit(Object *p_object) {
- mesh_editor->edit(p_object->cast_to<MeshInstance>());
+ Mesh * s = p_object->cast_to<Mesh>();
+ if (!s)
+ return;
+
+ mesh_editor->edit(Ref<Mesh>(s));
}
-bool MeshInstanceEditorPlugin::handles(Object *p_object) const {
+bool MeshEditorPlugin::handles(Object *p_object) const {
- return p_object->is_type("MeshInstance");
+ return p_object->is_type("Mesh");
}
-void MeshInstanceEditorPlugin::make_visible(bool p_visible) {
+void MeshEditorPlugin::make_visible(bool p_visible) {
if (p_visible) {
- mesh_editor->options->show();
+ mesh_editor->show();
+// mesh_editor->set_process(true);
} else {
- mesh_editor->options->hide();
- mesh_editor->edit(NULL);
+ mesh_editor->hide();
+// mesh_editor->set_process(false);
}
}
-MeshInstanceEditorPlugin::MeshInstanceEditorPlugin(EditorNode *p_node) {
+MeshEditorPlugin::MeshEditorPlugin(EditorNode *p_node) {
editor=p_node;
- mesh_editor = memnew( MeshInstanceEditor );
- editor->get_viewport()->add_child(mesh_editor);
+ mesh_editor = memnew( MeshEditor );
+ add_control_to_container(CONTAINER_PROPERTY_EDITOR_BOTTOM,mesh_editor);
+ mesh_editor->hide();
- mesh_editor->options->hide();
-}
-MeshInstanceEditorPlugin::~MeshInstanceEditorPlugin()
-{
}
+MeshEditorPlugin::~MeshEditorPlugin()
+{
+}
diff --git a/tools/editor/plugins/mesh_editor_plugin.h b/tools/editor/plugins/mesh_editor_plugin.h
index 6b3e23f31f..190dfca464 100644
--- a/tools/editor/plugins/mesh_editor_plugin.h
+++ b/tools/editor/plugins/mesh_editor_plugin.h
@@ -1,68 +1,66 @@
#ifndef MESH_EDITOR_PLUGIN_H
#define MESH_EDITOR_PLUGIN_H
-
#include "tools/editor/editor_plugin.h"
#include "tools/editor/editor_node.h"
+#include "scene/resources/material.h"
+#include "scene/3d/light.h"
#include "scene/3d/mesh_instance.h"
-#include "scene/gui/spin_box.h"
-
+#include "scene/3d/camera.h"
-class MeshInstanceEditor : public Node {
+class MeshEditor : public Control {
- OBJ_TYPE(MeshInstanceEditor, Node );
+ OBJ_TYPE(MeshEditor, Control);
- enum Menu {
- MENU_OPTION_CREATE_STATIC_TRIMESH_BODY,
- MENU_OPTION_CREATE_STATIC_CONVEX_BODY,
- MENU_OPTION_CREATE_TRIMESH_COLLISION_SHAPE,
- MENU_OPTION_CREATE_CONVEX_COLLISION_SHAPE,
- MENU_OPTION_CREATE_NAVMESH,
- MENU_OPTION_CREATE_OUTLINE_MESH,
- };
+ float rot_x;
+ float rot_y;
- MeshInstance *node;
+ Viewport *viewport;
+ MeshInstance *mesh_instance;
+ DirectionalLight *light1;
+ DirectionalLight *light2;
+ Camera *camera;
- MenuButton *options;
+ Ref<Mesh> mesh;
- ConfirmationDialog *outline_dialog;
- SpinBox *outline_size;
- AcceptDialog *err_dialog;
+ TextureButton *light_1_switch;
+ TextureButton *light_2_switch;
- void _menu_option(int p_option);
- void _create_outline_mesh();
-
-friend class MeshInstanceEditorPlugin;
+ void _button_pressed(Node* p_button);
+ bool first_enter;
+ void _update_rotation();
protected:
- void _node_removed(Node *p_node);
+ void _notification(int p_what);
+ void _input_event(InputEvent p_event);
static void _bind_methods();
public:
- void edit(MeshInstance *p_mesh);
- MeshInstanceEditor();
+ void edit(Ref<Mesh> p_mesh);
+ MeshEditor();
};
-class MeshInstanceEditorPlugin : public EditorPlugin {
- OBJ_TYPE( MeshInstanceEditorPlugin, EditorPlugin );
+class MeshEditorPlugin : public EditorPlugin {
+
+ OBJ_TYPE( MeshEditorPlugin, EditorPlugin );
- MeshInstanceEditor *mesh_editor;
+ MeshEditor *mesh_editor;
EditorNode *editor;
public:
- virtual String get_name() const { return "MeshInstance"; }
+ virtual String get_name() const { return "Mesh"; }
bool has_main_screen() const { return false; }
virtual void edit(Object *p_node);
virtual bool handles(Object *p_node) const;
virtual void make_visible(bool p_visible);
- MeshInstanceEditorPlugin(EditorNode *p_node);
- ~MeshInstanceEditorPlugin();
+ MeshEditorPlugin(EditorNode *p_node);
+ ~MeshEditorPlugin();
};
diff --git a/tools/editor/plugins/mesh_instance_editor_plugin.cpp b/tools/editor/plugins/mesh_instance_editor_plugin.cpp
new file mode 100644
index 0000000000..f604e4c57c
--- /dev/null
+++ b/tools/editor/plugins/mesh_instance_editor_plugin.cpp
@@ -0,0 +1,300 @@
+#include "mesh_instance_editor_plugin.h"
+
+#include "scene/3d/physics_body.h"
+#include "scene/3d/body_shape.h"
+#include "scene/gui/box_container.h"
+#include "scene/3d/navigation_mesh.h"
+#include "spatial_editor_plugin.h"
+
+void MeshInstanceEditor::_node_removed(Node *p_node) {
+
+ if(p_node==node) {
+ node=NULL;
+ options->hide();
+ }
+
+}
+
+
+
+void MeshInstanceEditor::edit(MeshInstance *p_mesh) {
+
+ node=p_mesh;
+
+}
+
+void MeshInstanceEditor::_menu_option(int p_option) {
+
+ Ref<Mesh> mesh = node->get_mesh();
+ if (mesh.is_null()) {
+ err_dialog->set_text(TTR("Mesh is empty!"));
+ err_dialog->popup_centered_minsize();
+ return;
+ }
+
+ switch(p_option) {
+ case MENU_OPTION_CREATE_STATIC_TRIMESH_BODY:
+ case MENU_OPTION_CREATE_STATIC_CONVEX_BODY: {
+
+ bool trimesh_shape = (p_option==MENU_OPTION_CREATE_STATIC_TRIMESH_BODY);
+
+ EditorSelection *editor_selection = EditorNode::get_singleton()->get_editor_selection();
+ UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
+
+ List<Node*> selection = editor_selection->get_selected_node_list();
+
+ if (selection.empty()) {
+ Ref<Shape> shape = trimesh_shape ? mesh->create_trimesh_shape() : mesh->create_convex_shape();
+ if (shape.is_null())
+ return;
+
+ CollisionShape *cshape = memnew( CollisionShape );
+ cshape->set_shape(shape);
+ StaticBody *body = memnew( StaticBody );
+ body->add_child(cshape);
+
+ Node *owner = node==get_tree()->get_edited_scene_root() ? node : node->get_owner();
+
+ if (trimesh_shape)
+ ur->create_action(TTR("Create Static Trimesh Body"));
+ else
+ ur->create_action(TTR("Create Static Convex Body"));
+
+ ur->add_do_method(node,"add_child",body);
+ ur->add_do_method(body,"set_owner",owner);
+ ur->add_do_method(cshape,"set_owner",owner);
+ ur->add_do_reference(body);
+ ur->add_undo_method(node,"remove_child",body);
+ ur->commit_action();
+ return;
+ }
+
+ if (trimesh_shape)
+ ur->create_action(TTR("Create Static Trimesh Body"));
+ else
+ ur->create_action(TTR("Create Static Convex Body"));
+
+ for (List<Node*>::Element *E=selection.front();E;E=E->next()) {
+
+ MeshInstance *instance = E->get()->cast_to<MeshInstance>();
+ if (!instance)
+ continue;
+
+ Ref<Mesh> m = instance->get_mesh();
+ if (m.is_null())
+ continue;
+
+ Ref<Shape> shape = trimesh_shape ? m->create_trimesh_shape() : m->create_convex_shape();
+ if (shape.is_null())
+ continue;
+
+ CollisionShape *cshape = memnew( CollisionShape );
+ cshape->set_shape(shape);
+ StaticBody *body = memnew( StaticBody );
+ body->add_child(cshape);
+
+ Node *owner = instance==get_tree()->get_edited_scene_root() ? instance : instance->get_owner();
+
+ ur->add_do_method(instance,"add_child",body);
+ ur->add_do_method(body,"set_owner",owner);
+ ur->add_do_method(cshape,"set_owner",owner);
+ ur->add_do_reference(body);
+ ur->add_undo_method(instance,"remove_child",body);
+ }
+
+ ur->commit_action();
+
+ } break;
+
+ case MENU_OPTION_CREATE_TRIMESH_COLLISION_SHAPE:
+ case MENU_OPTION_CREATE_CONVEX_COLLISION_SHAPE: {
+
+ if (node==get_tree()->get_edited_scene_root()) {
+ err_dialog->set_text(TTR("This doesn't work on scene root!"));
+ err_dialog->popup_centered_minsize();
+ return;
+ }
+
+ bool trimesh_shape = (p_option==MENU_OPTION_CREATE_TRIMESH_COLLISION_SHAPE);
+
+ Ref<Shape> shape = trimesh_shape ? mesh->create_trimesh_shape() : mesh->create_convex_shape();
+ if (shape.is_null())
+ return;
+
+ CollisionShape *cshape = memnew( CollisionShape );
+ cshape->set_shape(shape);
+
+ Node *owner = node->get_owner();
+
+ UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
+
+ if (trimesh_shape)
+ ur->create_action(TTR("Create Trimesh Shape"));
+ else
+ ur->create_action(TTR("Create Convex Shape"));
+
+ ur->add_do_method(node->get_parent(),"add_child",cshape);
+ ur->add_do_method(node->get_parent(),"move_child",cshape,node->get_index()+1);
+ ur->add_do_method(cshape,"set_owner",owner);
+ ur->add_do_reference(cshape);
+ ur->add_undo_method(node->get_parent(),"remove_child",cshape);
+ ur->commit_action();
+
+ } break;
+
+ case MENU_OPTION_CREATE_NAVMESH: {
+
+ Ref<NavigationMesh> nmesh = memnew( NavigationMesh );
+
+ if (nmesh.is_null())
+ return;
+
+ nmesh->create_from_mesh(mesh);
+ NavigationMeshInstance *nmi = memnew( NavigationMeshInstance );
+ nmi->set_navigation_mesh(nmesh);
+
+ Node *owner = node==get_tree()->get_edited_scene_root() ? node : node->get_owner();
+
+ UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
+ ur->create_action(TTR("Create Navigation Mesh"));
+
+ ur->add_do_method(node,"add_child",nmi);
+ ur->add_do_method(nmi,"set_owner",owner);
+
+ ur->add_do_reference(nmi);
+ ur->add_undo_method(node,"remove_child",nmi);
+ ur->commit_action();
+ } break;
+
+ case MENU_OPTION_CREATE_OUTLINE_MESH: {
+
+ outline_dialog->popup_centered(Vector2(200, 90));
+ } break;
+ }
+
+}
+
+void MeshInstanceEditor::_create_outline_mesh() {
+
+ Ref<Mesh> mesh = node->get_mesh();
+ if (mesh.is_null()) {
+ err_dialog->set_text(TTR("MeshInstance lacks a Mesh!"));
+ err_dialog->popup_centered_minsize();
+ return;
+ }
+
+ Ref<Mesh> mesho = mesh->create_outline(outline_size->get_val());
+
+ if (mesho.is_null()) {
+ err_dialog->set_text(TTR("Could not create outline!"));
+ err_dialog->popup_centered_minsize();
+ return;
+ }
+
+ MeshInstance *mi = memnew( MeshInstance );
+ mi->set_mesh(mesho);
+ Node *owner=node->get_owner();
+ if (get_tree()->get_edited_scene_root()==node) {
+ owner=node;
+ }
+
+ UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
+
+ ur->create_action(TTR("Create Outline"));
+
+ ur->add_do_method(node,"add_child",mi);
+ ur->add_do_method(mi,"set_owner",owner);
+
+ ur->add_do_reference(mi);
+ ur->add_undo_method(node,"remove_child",mi);
+ ur->commit_action();
+}
+
+void MeshInstanceEditor::_bind_methods() {
+
+ ObjectTypeDB::bind_method("_menu_option",&MeshInstanceEditor::_menu_option);
+ ObjectTypeDB::bind_method("_create_outline_mesh",&MeshInstanceEditor::_create_outline_mesh);
+}
+
+MeshInstanceEditor::MeshInstanceEditor() {
+
+
+ options = memnew( MenuButton );
+ SpatialEditor::get_singleton()->add_control_to_menu_panel(options);
+
+ options->set_text(TTR("Mesh"));
+ options->set_icon(EditorNode::get_singleton()->get_gui_base()->get_icon("MeshInstance","EditorIcons"));
+
+ options->get_popup()->add_item(TTR("Create Trimesh Static Body"),MENU_OPTION_CREATE_STATIC_TRIMESH_BODY);
+ options->get_popup()->add_item(TTR("Create Convex Static Body"),MENU_OPTION_CREATE_STATIC_CONVEX_BODY);
+ options->get_popup()->add_separator();
+ options->get_popup()->add_item(TTR("Create Trimesh Collision Sibling"),MENU_OPTION_CREATE_TRIMESH_COLLISION_SHAPE);
+ options->get_popup()->add_item(TTR("Create Convex Collision Sibling"),MENU_OPTION_CREATE_CONVEX_COLLISION_SHAPE);
+ options->get_popup()->add_separator();
+ options->get_popup()->add_item(TTR("Create Navigation Mesh"),MENU_OPTION_CREATE_NAVMESH);
+ options->get_popup()->add_separator();
+ options->get_popup()->add_item(TTR("Create Outline Mesh.."),MENU_OPTION_CREATE_OUTLINE_MESH);
+
+ options->get_popup()->connect("item_pressed", this,"_menu_option");
+
+ outline_dialog = memnew( ConfirmationDialog );
+ outline_dialog->set_title(TTR("Create Outline Mesh"));
+ outline_dialog->get_ok()->set_text(TTR("Create"));
+
+ VBoxContainer *outline_dialog_vbc = memnew( VBoxContainer );
+ outline_dialog->add_child(outline_dialog_vbc);
+ outline_dialog->set_child_rect(outline_dialog_vbc);
+
+ outline_size = memnew( SpinBox );
+ outline_size->set_min(0.001);
+ outline_size->set_max(1024);
+ outline_size->set_step(0.001);
+ outline_size->set_val(0.05);
+ outline_dialog_vbc->add_margin_child(TTR("Outline Size:"),outline_size);
+
+ add_child(outline_dialog);
+ outline_dialog->connect("confirmed",this,"_create_outline_mesh");
+
+ err_dialog = memnew( AcceptDialog );
+ add_child(err_dialog);
+
+}
+
+
+void MeshInstanceEditorPlugin::edit(Object *p_object) {
+
+ mesh_editor->edit(p_object->cast_to<MeshInstance>());
+}
+
+bool MeshInstanceEditorPlugin::handles(Object *p_object) const {
+
+ return p_object->is_type("MeshInstance");
+}
+
+void MeshInstanceEditorPlugin::make_visible(bool p_visible) {
+
+ if (p_visible) {
+ mesh_editor->options->show();
+ } else {
+
+ mesh_editor->options->hide();
+ mesh_editor->edit(NULL);
+ }
+
+}
+
+MeshInstanceEditorPlugin::MeshInstanceEditorPlugin(EditorNode *p_node) {
+
+ editor=p_node;
+ mesh_editor = memnew( MeshInstanceEditor );
+ editor->get_viewport()->add_child(mesh_editor);
+
+ mesh_editor->options->hide();
+}
+
+
+MeshInstanceEditorPlugin::~MeshInstanceEditorPlugin()
+{
+}
+
+
diff --git a/tools/editor/plugins/mesh_instance_editor_plugin.h b/tools/editor/plugins/mesh_instance_editor_plugin.h
new file mode 100644
index 0000000000..a698cf382f
--- /dev/null
+++ b/tools/editor/plugins/mesh_instance_editor_plugin.h
@@ -0,0 +1,69 @@
+#ifndef MESH_INSTANCE_EDITOR_PLUGIN_H
+#define MESH_INSTANCE_EDITOR_PLUGIN_H
+
+
+#include "tools/editor/editor_plugin.h"
+#include "tools/editor/editor_node.h"
+#include "scene/3d/mesh_instance.h"
+#include "scene/gui/spin_box.h"
+
+
+class MeshInstanceEditor : public Node {
+
+ OBJ_TYPE(MeshInstanceEditor, Node );
+
+
+ enum Menu {
+
+ MENU_OPTION_CREATE_STATIC_TRIMESH_BODY,
+ MENU_OPTION_CREATE_STATIC_CONVEX_BODY,
+ MENU_OPTION_CREATE_TRIMESH_COLLISION_SHAPE,
+ MENU_OPTION_CREATE_CONVEX_COLLISION_SHAPE,
+ MENU_OPTION_CREATE_NAVMESH,
+ MENU_OPTION_CREATE_OUTLINE_MESH,
+ };
+
+ MeshInstance *node;
+
+ MenuButton *options;
+
+ ConfirmationDialog *outline_dialog;
+ SpinBox *outline_size;
+
+ AcceptDialog *err_dialog;
+
+ void _menu_option(int p_option);
+ void _create_outline_mesh();
+
+friend class MeshInstanceEditorPlugin;
+
+protected:
+ void _node_removed(Node *p_node);
+ static void _bind_methods();
+public:
+
+ void edit(MeshInstance *p_mesh);
+ MeshInstanceEditor();
+};
+
+class MeshInstanceEditorPlugin : public EditorPlugin {
+
+ OBJ_TYPE( MeshInstanceEditorPlugin, EditorPlugin );
+
+ MeshInstanceEditor *mesh_editor;
+ EditorNode *editor;
+
+public:
+
+ virtual String get_name() const { return "MeshInstance"; }
+ bool has_main_screen() const { return false; }
+ virtual void edit(Object *p_node);
+ virtual bool handles(Object *p_node) const;
+ virtual void make_visible(bool p_visible);
+
+ MeshInstanceEditorPlugin(EditorNode *p_node);
+ ~MeshInstanceEditorPlugin();
+
+};
+
+#endif // MESH_EDITOR_PLUGIN_H
diff --git a/tools/editor/plugins/multimesh_editor_plugin.cpp b/tools/editor/plugins/multimesh_editor_plugin.cpp
index e22dfb3d13..8a0c6b3fe8 100644
--- a/tools/editor/plugins/multimesh_editor_plugin.cpp
+++ b/tools/editor/plugins/multimesh_editor_plugin.cpp
@@ -73,7 +73,7 @@ void MultiMeshEditor::_populate() {
if (!ms_node) {
- err_dialog->set_text(TTR("Mesh source is invalid (Invalid Path)."));
+ err_dialog->set_text(TTR("Mesh source is invalid (invalid path)."));
err_dialog->popup_centered_minsize();
return;
}
@@ -82,7 +82,7 @@ void MultiMeshEditor::_populate() {
if (!ms_instance) {
- err_dialog->set_text(TTR("Mesh source is invalid (Not a MeshInstance)."));
+ err_dialog->set_text(TTR("Mesh source is invalid (not a MeshInstance)."));
err_dialog->popup_centered_minsize();
return;
}
@@ -91,7 +91,7 @@ void MultiMeshEditor::_populate() {
if (mesh.is_null()) {
- err_dialog->set_text(TTR("Mesh source is invalid (Contains no Mesh resource)."));
+ err_dialog->set_text(TTR("Mesh source is invalid (contains no Mesh resource)."));
err_dialog->popup_centered_minsize();
return;
}
@@ -109,7 +109,7 @@ void MultiMeshEditor::_populate() {
if (!ss_node) {
- err_dialog->set_text(TTR("Surface source is invalid (Invalid Path)."));
+ err_dialog->set_text(TTR("Surface source is invalid (invalid path)."));
err_dialog->popup_centered_minsize();
return;
}
@@ -118,7 +118,7 @@ void MultiMeshEditor::_populate() {
if (!ss_instance) {
- err_dialog->set_text(TTR("Surface source is invalid (Not Geometry)."));
+ err_dialog->set_text(TTR("Surface source is invalid (no geometry)."));
err_dialog->popup_centered_minsize();
return;
}
@@ -129,7 +129,7 @@ void MultiMeshEditor::_populate() {
if (geometry.size()==0) {
- err_dialog->set_text(TTR("Surface source is invalid (No Faces)."));
+ err_dialog->set_text(TTR("Surface source is invalid (no faces)."));
err_dialog->popup_centered_minsize();
return;
}
@@ -153,10 +153,10 @@ void MultiMeshEditor::_populate() {
node->populate_parent(populate_rotate_random->get_val(),populate_tilt_random->get_val(),populate_scale_random->get_val(),populate_scale->get_val());
- ERR_EXPLAIN(TTR("Parent is not of type VisualInstance."));
+ ERR_EXPLAIN("Parent is not of type VisualInstance.");
ERR_FAIL_COND(!get_parent() || !get_parent()->is_type("VisualInstance"));
- ERR_EXPLAIN(TTR("Multimesh not present"));
+ ERR_EXPLAIN("Multimesh not present.");
ERR_FAIL_COND(multimesh.is_null());
VisualInstance *vi = get_parent()->cast_to<VisualInstance>();
@@ -184,9 +184,9 @@ void MultiMeshEditor::_populate() {
area_accum+=area;
}
- ERR_EXPLAIN(TTR("Couldn't map area"));
+ ERR_EXPLAIN(TTR("Couldn't map area."));
ERR_FAIL_COND(triangle_area_map.size()==0);
- ERR_EXPLAIN(TTR("Couldn't map area"));
+ ERR_EXPLAIN(TTR("Couldn't map area."));
ERR_FAIL_COND(area_accum==0);
diff --git a/tools/editor/plugins/navigation_polygon_editor_plugin.cpp b/tools/editor/plugins/navigation_polygon_editor_plugin.cpp
index 038c1d48a7..1ee388ca18 100644
--- a/tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+++ b/tools/editor/plugins/navigation_polygon_editor_plugin.cpp
@@ -469,13 +469,13 @@ NavigationPolygonEditor::NavigationPolygonEditor(EditorNode *p_editor) {
add_child(button_create);
button_create->connect("pressed",this,"_menu_option",varray(MODE_CREATE));
button_create->set_toggle_mode(true);
- button_create->set_tooltip(TTR("Create a new polygon from scratch"));
+ button_create->set_tooltip(TTR("Create a new polygon from scratch."));
button_edit = memnew( ToolButton );
add_child(button_edit);
button_edit->connect("pressed",this,"_menu_option",varray(MODE_EDIT));
button_edit->set_toggle_mode(true);
- button_edit->set_tooltip("Edit existing polygon:\nLMB: Move Point.\nCtrl+LMB: Split Segment.\nRMB: Erase Point.");
+ button_edit->set_tooltip(TTR("Edit existing polygon:")+"\n"+TTR("LMB: Move Point.")+"\n"+TTR("Ctrl+LMB: Split Segment.")+"\n"+TTR("RMB: Erase Point."));
create_nav = memnew( ConfirmationDialog );
add_child(create_nav);
create_nav->get_ok()->set_text(TTR("Create"));
@@ -487,8 +487,8 @@ NavigationPolygonEditor::NavigationPolygonEditor(EditorNode *p_editor) {
options = memnew( MenuButton );
add_child(options);
options->set_area_as_parent_rect();
- options->set_text(TTR("Polygon"));
- //options->get_popup()->add_item(TTR("Parse BBCODE"),PARSE_BBCODE);
+ options->set_text("Polygon");
+ //options->get_popup()->add_item("Parse BBCode",PARSE_BBCODE);
options->get_popup()->connect("item_pressed", this,"_menu_option");
#endif
diff --git a/tools/editor/plugins/particles_2d_editor_plugin.cpp b/tools/editor/plugins/particles_2d_editor_plugin.cpp
index 8892950feb..ce25f34c1f 100644
--- a/tools/editor/plugins/particles_2d_editor_plugin.cpp
+++ b/tools/editor/plugins/particles_2d_editor_plugin.cpp
@@ -66,7 +66,7 @@ void Particles2DEditorPlugin::_file_selected(const String& p_file) {
Image img;
Error err = ImageLoader::load_image(p_file,&img);
- ERR_EXPLAIN(TTR("Error loading image: ")+p_file);
+ ERR_EXPLAIN(TTR("Error loading image:")+" "+p_file);
ERR_FAIL_COND(err!=OK);
img.convert(Image::FORMAT_GRAYSCALE_ALPHA);
diff --git a/tools/editor/plugins/particles_editor_plugin.cpp b/tools/editor/plugins/particles_editor_plugin.cpp
index b7ba987622..93e2fb2f38 100644
--- a/tools/editor/plugins/particles_editor_plugin.cpp
+++ b/tools/editor/plugins/particles_editor_plugin.cpp
@@ -249,7 +249,7 @@ void ParticlesEditor::_generate_emission_points() {
if (gcount==0) {
- err_dialog->set_text(TTR("No Faces!"));
+ err_dialog->set_text(TTR("No faces!"));
err_dialog->popup_centered_minsize();
return;
}
diff --git a/tools/editor/plugins/path_2d_editor_plugin.cpp b/tools/editor/plugins/path_2d_editor_plugin.cpp
index 079ca3a339..107ec30a91 100644
--- a/tools/editor/plugins/path_2d_editor_plugin.cpp
+++ b/tools/editor/plugins/path_2d_editor_plugin.cpp
@@ -622,8 +622,8 @@ Path2DEditor::Path2DEditor(EditorNode *p_editor) {
options = memnew( MenuButton );
add_child(options);
options->set_area_as_parent_rect();
- options->set_text(TTR("Polygon"));
- //options->get_popup()->add_item(TTR("Parse BBCODE"),PARSE_BBCODE);
+ options->set_text("Polygon");
+ //options->get_popup()->add_item("Parse BBCode",PARSE_BBCODE);
options->get_popup()->connect("item_pressed", this,"_menu_option");
#endif
@@ -636,7 +636,7 @@ Path2DEditor::Path2DEditor(EditorNode *p_editor) {
curve_edit->set_icon(CanvasItemEditor::get_singleton()->get_icon("CurveEdit","EditorIcons"));
curve_edit->set_toggle_mode(true);
curve_edit->set_focus_mode(Control::FOCUS_NONE);
- curve_edit->set_tooltip("Select Points\nShift+Drag: Select Control Points\n"+keycode_get_string(KEY_MASK_CMD)+"Click: Add Point\nRight Click: Delete Point.");
+ curve_edit->set_tooltip(TTR("Select Points")+"\n"+TTR("Shift+Drag: Select Control Points")+"\n"+keycode_get_string(KEY_MASK_CMD)+TTR("Click: Add Point")+"\n"+TTR("Right Click: Delete Point"));
curve_edit->connect("pressed",this,"_mode_selected",varray(MODE_EDIT));
base_hb->add_child(curve_edit);
curve_edit_curve = memnew( ToolButton );
@@ -650,14 +650,14 @@ Path2DEditor::Path2DEditor(EditorNode *p_editor) {
curve_create->set_icon(CanvasItemEditor::get_singleton()->get_icon("CurveCreate","EditorIcons"));
curve_create->set_toggle_mode(true);
curve_create->set_focus_mode(Control::FOCUS_NONE);
- curve_create->set_tooltip("Add Point (in empty space)\nSplit Segment (in curve).");
+ curve_create->set_tooltip(TTR("Add Point (in empty space)")+"\n"+TTR("Split Segment (in curve)"));
curve_create->connect("pressed",this,"_mode_selected",varray(MODE_CREATE));
base_hb->add_child(curve_create);
curve_del = memnew( ToolButton );
curve_del->set_icon(CanvasItemEditor::get_singleton()->get_icon("CurveDelete","EditorIcons"));
curve_del->set_toggle_mode(true);
curve_del->set_focus_mode(Control::FOCUS_NONE);
- curve_del->set_tooltip(TTR("Delete Point."));
+ curve_del->set_tooltip(TTR("Delete Point"));
curve_del->connect("pressed",this,"_mode_selected",varray(MODE_DELETE));
base_hb->add_child(curve_del);
curve_close = memnew( ToolButton );
diff --git a/tools/editor/plugins/path_editor_plugin.cpp b/tools/editor/plugins/path_editor_plugin.cpp
index 6820eed297..d7cc2bd157 100644
--- a/tools/editor/plugins/path_editor_plugin.cpp
+++ b/tools/editor/plugins/path_editor_plugin.cpp
@@ -546,21 +546,21 @@ PathEditorPlugin::PathEditorPlugin(EditorNode *p_node) {
curve_edit->set_toggle_mode(true);
curve_edit->hide();
curve_edit->set_focus_mode(Control::FOCUS_NONE);
- curve_edit->set_tooltip("Select Points\nShift+Drag: Select Control Points\n"+keycode_get_string(KEY_MASK_CMD)+"Click: Add Point\nRight Click: Delete Point.");
+ curve_edit->set_tooltip(TTR("Select Points")+"\n"+TTR("Shift+Drag: Select Control Points")+"\n"+keycode_get_string(KEY_MASK_CMD)+TTR("Click: Add Point")+"\n"+TTR("Right Click: Delete Point"));
SpatialEditor::get_singleton()->add_control_to_menu_panel(curve_edit);
curve_create = memnew( ToolButton );
curve_create->set_icon(SpatialEditor::get_singleton()->get_icon("CurveCreate","EditorIcons"));
curve_create->set_toggle_mode(true);
curve_create->hide();
curve_create->set_focus_mode(Control::FOCUS_NONE);
- curve_create->set_tooltip("Add Point (in empty space)\nSplit Segment (in curve).");
+ curve_create->set_tooltip(TTR("Add Point (in empty space)")+"\n"+TTR("Split Segment (in curve)"));
SpatialEditor::get_singleton()->add_control_to_menu_panel(curve_create);
curve_del = memnew( ToolButton );
curve_del->set_icon(SpatialEditor::get_singleton()->get_icon("CurveDelete","EditorIcons"));
curve_del->set_toggle_mode(true);
curve_del->hide();
curve_del->set_focus_mode(Control::FOCUS_NONE);
- curve_del->set_tooltip(TTR("Delete Point."));
+ curve_del->set_tooltip(TTR("Delete Point"));
SpatialEditor::get_singleton()->add_control_to_menu_panel(curve_del);
curve_close = memnew( ToolButton );
curve_close->set_icon(SpatialEditor::get_singleton()->get_icon("CurveClose","EditorIcons"));
diff --git a/tools/editor/plugins/polygon_2d_editor_plugin.cpp b/tools/editor/plugins/polygon_2d_editor_plugin.cpp
index f07c43b8e4..f873b43fd9 100644
--- a/tools/editor/plugins/polygon_2d_editor_plugin.cpp
+++ b/tools/editor/plugins/polygon_2d_editor_plugin.cpp
@@ -840,8 +840,8 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) {
options = memnew( MenuButton );
add_child(options);
options->set_area_as_parent_rect();
- options->set_text(TTR("Polygon"));
- //options->get_popup()->add_item(TTR("Parse BBCODE"),PARSE_BBCODE);
+ options->set_text("Polygon");
+ //options->get_popup()->add_item("Parse BBCode",PARSE_BBCODE);
options->get_popup()->connect("item_pressed", this,"_menu_option");
#endif
@@ -868,7 +868,7 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) {
uv_button[i]->set_focus_mode(FOCUS_NONE);
}
- uv_button[0]->set_tooltip("Move Point\nCtrl: Rotate\nShift: Move All\n:Shift+Ctrl: Scale");
+ uv_button[0]->set_tooltip(TTR("Move Point")+"\n"+TTR("Ctrl: Rotate")+"\n"+TTR("Shift: Move All")+"\n"+TTR("Shift+Ctrl: Scale"));
uv_button[1]->set_tooltip(TTR("Move Polygon"));
uv_button[2]->set_tooltip(TTR("Rotate Polygon"));
uv_button[3]->set_tooltip(TTR("Scale Polygon"));
diff --git a/tools/editor/plugins/resource_preloader_editor_plugin.cpp b/tools/editor/plugins/resource_preloader_editor_plugin.cpp
index cc9aca1a25..cce0ba3d62 100644
--- a/tools/editor/plugins/resource_preloader_editor_plugin.cpp
+++ b/tools/editor/plugins/resource_preloader_editor_plugin.cpp
@@ -72,7 +72,7 @@ void ResourcePreloaderEditor::_files_load_request(const Vector<String>& p_paths)
if (resource.is_null()) {
dialog->set_text(TTR("ERROR: Couldn't load resource!"));
dialog->set_title(TTR("Error!"));
- //dialog->get_cancel()->set_text(TTR("Close"));
+ //dialog->get_cancel()->set_text("Close");
dialog->get_ok()->set_text(TTR("Close"));
dialog->popup_centered_minsize();
return; ///beh should show an error i guess
@@ -169,7 +169,7 @@ void ResourcePreloaderEditor::_paste_pressed() {
if (!r.is_valid()) {
dialog->set_text(TTR("Resource clipboard is empty!"));
dialog->set_title(TTR("Error!"));
- //dialog->get_cancel()->set_text(TTR("Close"));
+ //dialog->get_cancel()->set_text("Close");
dialog->get_ok()->set_text(TTR("Close"));
dialog->popup_centered_minsize();
return; ///beh should show an error i guess
@@ -206,11 +206,11 @@ void ResourcePreloaderEditor::_delete_pressed() {
_delete_confirm_pressed(); //it has undo.. why bother with a dialog..
/*
- dialog->set_title(TTR("Confirm..."));
- dialog->set_text(TTR("Remove Resource '")+tree->get_selected()->get_text(0)+"' ?");
- //dialog->get_cancel()->set_text(TTR("Cancel"));
+ dialog->set_title("Confirm...");
+ dialog->set_text("Remove Resource '"+tree->get_selected()->get_text(0)+"' ?");
+ //dialog->get_cancel()->set_text("Cancel");
//dialog->get_ok()->show();
- dialog->get_ok()->set_text(TTR("Remove"));
+ dialog->get_ok()->set_text("Remove");
dialog->popup_centered(Size2(300,60));*/
}
diff --git a/tools/editor/plugins/rich_text_editor_plugin.cpp b/tools/editor/plugins/rich_text_editor_plugin.cpp
index 99d75dff1d..bec48ca293 100644
--- a/tools/editor/plugins/rich_text_editor_plugin.cpp
+++ b/tools/editor/plugins/rich_text_editor_plugin.cpp
@@ -106,8 +106,8 @@ RichTextEditor::RichTextEditor() {
CanvasItemEditor::get_singleton()->add_control_to_menu_panel(options);
options->set_area_as_parent_rect();
- options->set_text(TTR("RichText"));
- options->get_popup()->add_item(TTR("Parse BBCODE"),PARSE_BBCODE);
+ options->set_text("RichText");
+ options->get_popup()->add_item(TTR("Parse BBCode"),PARSE_BBCODE);
options->get_popup()->add_item(TTR("Clear"),CLEAR);
options->get_popup()->connect("item_pressed", this,"_menu_option");
diff --git a/tools/editor/plugins/rich_text_editor_plugin.h b/tools/editor/plugins/rich_text_editor_plugin.h
index 0196a30332..ae1d04be01 100644
--- a/tools/editor/plugins/rich_text_editor_plugin.h
+++ b/tools/editor/plugins/rich_text_editor_plugin.h
@@ -77,7 +77,7 @@ class RichTextEditorPlugin : public EditorPlugin {
public:
- virtual String get_name() const { return TTR("RichText"); }
+ virtual String get_name() const { return "RichText"; }
bool has_main_screen() const { return false; }
virtual void edit(Object *p_node);
virtual bool handles(Object *p_node) const;
diff --git a/tools/editor/plugins/sample_editor_plugin.cpp b/tools/editor/plugins/sample_editor_plugin.cpp
index 8c5036b424..a3891a648b 100644
--- a/tools/editor/plugins/sample_editor_plugin.cpp
+++ b/tools/editor/plugins/sample_editor_plugin.cpp
@@ -328,7 +328,7 @@ void SampleEditor::_update_sample() {
return; //bye or unsupported
generate_preview_texture(sample,peakdisplay);
- info_label->set_text(TTR("Length: ")+itos(sample->get_length())+" frames ("+String::num(sample->get_length()/(float)sample->get_mix_rate(),2)+" s), "+(sample->get_format()==Sample::FORMAT_PCM16?"16 Bits, ":"8 bits, ")+(sample->is_stereo()?"Stereo.":"Mono."));
+ info_label->set_text(TTR("Length:")+" "+String::num(sample->get_length()/(float)sample->get_mix_rate(),2)+"s");
library->add_sample("default",sample);
}
@@ -404,6 +404,8 @@ SampleEditor::SampleEditor() {
play->connect("pressed", this,"_play_pressed");
stop->connect("pressed", this,"_stop_pressed");
+ set_custom_minimum_size(Size2(1,150)*EDSCALE);
+
}
@@ -438,10 +440,7 @@ SampleEditorPlugin::SampleEditorPlugin(EditorNode *p_node) {
editor=p_node;
sample_editor = memnew( SampleEditor );
- editor->get_viewport()->add_child(sample_editor);
- sample_editor->set_area_as_parent_rect();
- sample_editor->set_anchor( MARGIN_TOP, Control::ANCHOR_END);
- sample_editor->set_margin( MARGIN_TOP, 120 );
+ add_control_to_container(CONTAINER_PROPERTY_EDITOR_BOTTOM,sample_editor);
sample_editor->hide();
diff --git a/tools/editor/plugins/sample_library_editor_plugin.cpp b/tools/editor/plugins/sample_library_editor_plugin.cpp
index 8b03c4651d..2a6940332c 100644
--- a/tools/editor/plugins/sample_library_editor_plugin.cpp
+++ b/tools/editor/plugins/sample_library_editor_plugin.cpp
@@ -76,7 +76,7 @@ void SampleLibraryEditor::_file_load_request(const DVector<String>& p_path) {
if (sample.is_null()) {
dialog->set_text(TTR("ERROR: Couldn't load sample!"));
dialog->set_title(TTR("Error!"));
- //dialog->get_cancel()->set_text(TTR("Close"));
+ //dialog->get_cancel()->set_text("Close");
dialog->get_ok()->set_text(TTR("Close"));
dialog->popup_centered_minsize();
return; ///beh should show an error i guess
@@ -248,7 +248,7 @@ void SampleLibraryEditor::_update_library() {
ti->set_cell_mode(2,TreeItem::CELL_MODE_STRING);
ti->set_editable(2,false);
ti->set_selectable(2,false);
- ti->set_text(2,String()+/*itos(smp->get_length())+" frames ("+String::num(smp->get_length()/(float)smp->get_mix_rate(),2)+" smp), "+*/(smp->get_format()==Sample::FORMAT_PCM16?"16 Bits, ":(smp->get_format()==Sample::FORMAT_PCM8?"8 bits, ":TTR("IMA-ADPCM,")))+(smp->is_stereo()?"Stereo":"Mono"));
+ ti->set_text(2,String()+(smp->get_format()==Sample::FORMAT_PCM16?TTR("16 Bits")+", ":(smp->get_format()==Sample::FORMAT_PCM8?TTR("8 Bits")+", ":"IMA-ADPCM,"))+(smp->is_stereo()?TTR("Stereo"):TTR("Mono")));
// Volume dB
ti->set_cell_mode(3,TreeItem::CELL_MODE_RANGE);
@@ -457,7 +457,7 @@ SampleLibraryEditor::SampleLibraryEditor() {
tree->set_column_title(1,TTR("Preview"));
tree->set_column_title(2,TTR("Format"));
tree->set_column_title(3,"dB");
- tree->set_column_title(4,"Pitch");
+ tree->set_column_title(4,TTR("Pitch"));
tree->set_column_title(5,"");
tree->set_column_min_width(1,150);
@@ -481,7 +481,7 @@ SampleLibraryEditor::SampleLibraryEditor() {
file->connect("files_selected", this,"_file_load_request");
tree->connect("item_edited", this,"_item_edited");
-
+ is_playing = false;
}
diff --git a/tools/editor/plugins/script_editor_plugin.cpp b/tools/editor/plugins/script_editor_plugin.cpp
index d8d5fddfe9..39b350eb4e 100644
--- a/tools/editor/plugins/script_editor_plugin.cpp
+++ b/tools/editor/plugins/script_editor_plugin.cpp
@@ -298,6 +298,10 @@ void ScriptTextEditor::_load_theme_settings() {
get_text_edit()->add_color_override("number_color",EDITOR_DEF("text_editor/number_color",Color(0.9,0.6,0.0,2)));
get_text_edit()->add_color_override("function_color",EDITOR_DEF("text_editor/function_color",Color(0.4,0.6,0.8)));
get_text_edit()->add_color_override("member_variable_color",EDITOR_DEF("text_editor/member_variable_color",Color(0.9,0.3,0.3)));
+ get_text_edit()->add_color_override("mark_color", EDITOR_DEF("text_editor/mark_color", Color(1.0,0.4,0.4,0.4)));
+ get_text_edit()->add_color_override("breakpoint_color", EDITOR_DEF("text_editor/breakpoint_color", Color(0.8,0.8,0.4,0.2)));
+ get_text_edit()->add_color_override("search_result_color",EDITOR_DEF("text_editor/search_result_color",Color(0.05,0.25,0.05,1)));
+ get_text_edit()->add_color_override("search_result_border_color",EDITOR_DEF("text_editor/search_result_border_color",Color(0.1,0.45,0.1,1)));
Color keyword_color= EDITOR_DEF("text_editor/keyword_color",Color(0.5,0.0,0.2));
@@ -584,7 +588,7 @@ void ScriptTextEditor::_bind_methods() {
}
ScriptTextEditor::ScriptTextEditor() {
-
+ get_text_edit()->set_breakpoint_gutter_width(12);
}
/*** SCRIPT EDITOR ******/
@@ -883,8 +887,19 @@ void ScriptEditor::_res_saved_callback(const Ref<Resource>& p_res) {
_update_script_names();
+
+ if (!pending_auto_reload && auto_reload_running_scripts) {
+ call_deferred("_live_auto_reload_running_scripts");
+ pending_auto_reload=true;
+ }
+}
+
+void ScriptEditor::_live_auto_reload_running_scripts() {
+ pending_auto_reload=false;
+ debugger->reload_scripts();
}
+
bool ScriptEditor::_test_script_times_on_disk() {
@@ -951,13 +966,30 @@ void ScriptEditor::swap_lines(TextEdit *tx, int line1, int line2)
tx->cursor_set_line(line2);
}
+void ScriptEditor::_file_dialog_action(String p_file) {
+
+ switch (file_dialog_option) {
+ case FILE_SAVE_THEME_AS: {
+ if(!EditorSettings::get_singleton()->save_text_editor_theme_as(p_file)) {
+ editor->show_warning(TTR("Error while saving theme"), TTR("Error saving"));
+ }
+ } break;
+ case FILE_IMPORT_THEME: {
+ if(!EditorSettings::get_singleton()->import_text_editor_theme(p_file)) {
+ editor->show_warning(TTR("Error importing theme"), TTR("Error importing"));
+ }
+ } break;
+ }
+ file_dialog_option = -1;
+}
+
void ScriptEditor::_menu_option(int p_option) {
switch(p_option) {
case FILE_NEW: {
script_create_dialog->config("Node", ".gd");
- script_create_dialog->popup_centered(Size2(300, 300));
+ script_create_dialog->popup_centered(Size2(300, 300)*EDSCALE);
} break;
case FILE_OPEN: {
@@ -990,6 +1022,33 @@ void ScriptEditor::_menu_option(int p_option) {
#endif
} break;
+ case FILE_IMPORT_THEME: {
+ file_dialog->set_mode(EditorFileDialog::MODE_OPEN_FILE);
+ file_dialog->set_access(EditorFileDialog::ACCESS_FILESYSTEM);
+ file_dialog_option = FILE_IMPORT_THEME;
+ file_dialog->clear_filters();
+ file_dialog->add_filter("*.tet");
+ file_dialog->popup_centered_ratio();
+ file_dialog->set_title(TTR("Import Theme"));
+ } break;
+ case FILE_RELOAD_THEME: {
+ EditorSettings::get_singleton()->load_text_editor_theme();
+ } break;
+ case FILE_SAVE_THEME: {
+ if(!EditorSettings::get_singleton()->save_text_editor_theme()) {
+ editor->show_warning(TTR("Error while saving theme"), TTR("Error saving"));
+ }
+ } break;
+ case FILE_SAVE_THEME_AS: {
+ file_dialog->set_mode(EditorFileDialog::MODE_SAVE_FILE);
+ file_dialog->set_access(EditorFileDialog::ACCESS_FILESYSTEM);
+ file_dialog_option = FILE_SAVE_THEME_AS;
+ file_dialog->clear_filters();
+ file_dialog->add_filter("*.tet");
+ file_dialog->set_current_path(EditorSettings::get_singleton()->get_settings_path() + "/text_editor_themes/" + EditorSettings::get_singleton()->get("text_editor/color_theme"));
+ file_dialog->popup_centered_ratio();
+ file_dialog->set_title(TTR("Save Theme As.."));
+ } break;
case SEARCH_HELP: {
help_search_dialog->popup();
@@ -1052,7 +1111,7 @@ void ScriptEditor::_menu_option(int p_option) {
switch(p_option) {
case FILE_NEW: {
script_create_dialog->config("Node", ".gd");
- script_create_dialog->popup_centered(Size2(300, 300));
+ script_create_dialog->popup_centered(Size2(300, 300)*EDSCALE);
} break;
case FILE_SAVE: {
@@ -1252,16 +1311,35 @@ void ScriptEditor::_menu_option(int p_option) {
Ref<Script> scr = current->get_edited_script();
if (scr.is_null())
return;
- int line = tx->cursor_get_line();
- int next_line = line + 1;
+
+ int from_line = tx->cursor_get_line();
+ int to_line = tx->cursor_get_line();
int column = tx->cursor_get_column();
- if (line >= tx->get_line_count() - 1)
- tx->set_line(line, tx->get_line(line) + "\n");
+ if (tx->is_selection_active()) {
+ from_line = tx->get_selection_from_line();
+ to_line = tx->get_selection_to_line();
+ column = tx->cursor_get_column();
+ }
+ int next_line = to_line + 1;
+
+ tx->begin_complex_operation();
+ for (int i = from_line; i <= to_line; i++) {
+
+ if (i >= tx->get_line_count() - 1) {
+ tx->set_line(i, tx->get_line(i) + "\n");
+ }
+ String line_clone = tx->get_line(i);
+ tx->insert_at(line_clone, next_line);
+ next_line++;
+ }
- String line_clone = tx->get_line(line);
- tx->insert_at(line_clone, next_line);
tx->cursor_set_column(column);
+ if (tx->is_selection_active()) {
+ tx->select(to_line + 1, tx->get_selection_from_column(), next_line - 1, tx->get_selection_to_column());
+ }
+
+ tx->end_complex_operation();
tx->update();
} break;
@@ -1340,18 +1418,19 @@ void ScriptEditor::_menu_option(int p_option) {
} break;
case SEARCH_FIND: {
- find_replace_dialog->set_text_edit(current->get_text_edit());
- find_replace_dialog->popup_search();
+ current->get_find_replace_bar()->popup_search();
} break;
case SEARCH_FIND_NEXT: {
- find_replace_dialog->set_text_edit(current->get_text_edit());
- find_replace_dialog->search_next();
+ current->get_find_replace_bar()->search_next();
+ } break;
+ case SEARCH_FIND_PREV: {
+
+ current->get_find_replace_bar()->search_prev();
} break;
case SEARCH_REPLACE: {
- find_replace_dialog->set_text_edit(current->get_text_edit());
- find_replace_dialog->popup_replace();
+ current->get_find_replace_bar()->popup_replace();
} break;
case SEARCH_LOCATE_FUNCTION: {
@@ -1369,6 +1448,61 @@ void ScriptEditor::_menu_option(int p_option) {
current->get_text_edit()->set_line_as_breakpoint(line,dobreak);
get_debugger()->set_breakpoint(current->get_edited_script()->get_path(),line+1,dobreak);
} break;
+ case DEBUG_REMOVE_ALL_BREAKPOINTS: {
+ List<int> bpoints;
+ current->get_text_edit()->get_breakpoints(&bpoints);
+
+ for(List<int>::Element *E=bpoints.front();E;E=E->next()) {
+ int line = E->get();
+ bool dobreak = !current->get_text_edit()->is_line_set_as_breakpoint(line);
+ current->get_text_edit()->set_line_as_breakpoint(line,dobreak);
+ get_debugger()->set_breakpoint(current->get_edited_script()->get_path(),line+1,dobreak);
+ }
+ }
+ case DEBUG_GOTO_NEXT_BREAKPOINT: {
+ List<int> bpoints;
+ current->get_text_edit()->get_breakpoints(&bpoints);
+ if (bpoints.size() <= 0) {
+ return;
+ }
+
+ int line=current->get_text_edit()->cursor_get_line();
+ // wrap around
+ if (line >= bpoints[bpoints.size() - 1]) {
+ current->get_text_edit()->cursor_set_line(bpoints[0]);
+ } else {
+ for(List<int>::Element *E=bpoints.front();E;E=E->next()) {
+ int bline = E->get();
+ if (bline > line) {
+ current->get_text_edit()->cursor_set_line(bline);
+ return;
+ }
+ }
+ }
+
+ } break;
+ case DEBUG_GOTO_PREV_BREAKPOINT: {
+ List<int> bpoints;
+ current->get_text_edit()->get_breakpoints(&bpoints);
+ if (bpoints.size() <= 0) {
+ return;
+ }
+
+ int line=current->get_text_edit()->cursor_get_line();
+ // wrap around
+ if (line <= bpoints[0]) {
+ current->get_text_edit()->cursor_set_line(bpoints[bpoints.size() - 1]);
+ } else {
+ for(List<int>::Element *E=bpoints.back();E;E=E->prev()) {
+ int bline = E->get();
+ if (bline < line) {
+ current->get_text_edit()->cursor_set_line(bline);
+ return;
+ }
+ }
+ }
+
+ } break;
case DEBUG_NEXT: {
if (debugger)
@@ -1969,6 +2103,7 @@ void ScriptEditor::edit(const Ref<Script>& p_script) {
ste->get_text_edit()->set_highlight_all_occurrences(EditorSettings::get_singleton()->get("text_editor/highlight_all_occurrences"));
ste->get_text_edit()->cursor_set_blink_enabled(EditorSettings::get_singleton()->get("text_editor/caret_blink"));
ste->get_text_edit()->cursor_set_blink_speed(EditorSettings::get_singleton()->get("text_editor/caret_blink_speed"));
+ ste->get_text_edit()->set_draw_breakpoint_gutter(EditorSettings::get_singleton()->get("text_editor/show_breakpoint_gutter"));
ste->get_text_edit()->set_callhint_settings(
EditorSettings::get_singleton()->get("text_editor/put_callhint_tooltip_below_current_line"),
EditorSettings::get_singleton()->get("text_editor/callhint_tooltip_offset"));
@@ -2103,6 +2238,13 @@ void ScriptEditor::_editor_settings_changed() {
autosave_timer->stop();
}
+ if (current_theme == "") {
+ current_theme = EditorSettings::get_singleton()->get("text_editor/color_theme");
+ } else if (current_theme != EditorSettings::get_singleton()->get("text_editor/color_theme")) {
+ current_theme = EditorSettings::get_singleton()->get("text_editor/color_theme");
+ EditorSettings::get_singleton()->load_text_editor_theme();
+ }
+
for(int i=0;i<tab_container->get_child_count();i++) {
ScriptTextEditor *ste = tab_container->get_child(i)->cast_to<ScriptTextEditor>();
@@ -2118,6 +2260,7 @@ void ScriptEditor::_editor_settings_changed() {
ste->get_text_edit()->set_highlight_all_occurrences(EditorSettings::get_singleton()->get("text_editor/highlight_all_occurrences"));
ste->get_text_edit()->cursor_set_blink_enabled(EditorSettings::get_singleton()->get("text_editor/caret_blink"));
ste->get_text_edit()->cursor_set_blink_speed(EditorSettings::get_singleton()->get("text_editor/caret_blink_speed"));
+ ste->get_text_edit()->set_draw_breakpoint_gutter(EditorSettings::get_singleton()->get("text_editor/show_breakpoint_gutter"));
}
}
@@ -2343,8 +2486,14 @@ void ScriptEditor::set_scene_root_script( Ref<Script> p_script ) {
}
}
+void ScriptEditor::set_live_auto_reload_running_scripts(bool p_enabled) {
+
+ auto_reload_running_scripts=p_enabled;
+}
+
void ScriptEditor::_bind_methods() {
+ ObjectTypeDB::bind_method("_file_dialog_action",&ScriptEditor::_file_dialog_action);
ObjectTypeDB::bind_method("_tab_changed",&ScriptEditor::_tab_changed);
ObjectTypeDB::bind_method("_menu_option",&ScriptEditor::_menu_option);
ObjectTypeDB::bind_method("_close_current_tab",&ScriptEditor::_close_current_tab);
@@ -2372,13 +2521,18 @@ void ScriptEditor::_bind_methods() {
ObjectTypeDB::bind_method("_request_help",&ScriptEditor::_help_class_open);
ObjectTypeDB::bind_method("_history_forward",&ScriptEditor::_history_forward);
ObjectTypeDB::bind_method("_history_back",&ScriptEditor::_history_back);
+ ObjectTypeDB::bind_method("_live_auto_reload_running_scripts",&ScriptEditor::_live_auto_reload_running_scripts);
+
}
ScriptEditor::ScriptEditor(EditorNode *p_editor) {
+ current_theme = "";
+
completion_cache = memnew( EditorScriptCodeCompletionCache );
restoring_layout=false;
waiting_update_names=false;
+ auto_reload_running_scripts=false;
editor=p_editor;
menu_hb = memnew( HBoxContainer );
@@ -2414,6 +2568,11 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
file_menu->get_popup()->add_item(TTR("History Prev"),WINDOW_PREV,KEY_MASK_CTRL|KEY_MASK_ALT|KEY_LEFT);
file_menu->get_popup()->add_item(TTR("History Next"),WINDOW_NEXT,KEY_MASK_CTRL|KEY_MASK_ALT|KEY_RIGHT);
file_menu->get_popup()->add_separator();
+ file_menu->get_popup()->add_item(TTR("Import Theme"), FILE_IMPORT_THEME);
+ file_menu->get_popup()->add_item(TTR("Reload Theme"), FILE_RELOAD_THEME);
+ file_menu->get_popup()->add_item(TTR("Save Theme"), FILE_SAVE_THEME);
+ file_menu->get_popup()->add_item(TTR("Save Theme As"), FILE_SAVE_THEME_AS);
+ file_menu->get_popup()->add_separator();
file_menu->get_popup()->add_item(TTR("Close"),FILE_CLOSE,KEY_MASK_CMD|KEY_W);
file_menu->get_popup()->connect("item_pressed", this,"_menu_option");
@@ -2441,7 +2600,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
#else
edit_menu->get_popup()->add_item(TTR("Complete Symbol"),EDIT_COMPLETE,KEY_MASK_CMD|KEY_SPACE);
#endif
- edit_menu->get_popup()->add_item("Trim Trailing Whitespace", EDIT_TRIM_TRAILING_WHITESAPCE, KEY_MASK_CTRL|KEY_MASK_ALT|KEY_T);
+ edit_menu->get_popup()->add_item(TTR("Trim Trailing Whitespace"), EDIT_TRIM_TRAILING_WHITESAPCE, KEY_MASK_CTRL|KEY_MASK_ALT|KEY_T);
edit_menu->get_popup()->add_item(TTR("Auto Indent"),EDIT_AUTO_INDENT,KEY_MASK_CMD|KEY_I);
edit_menu->get_popup()->connect("item_pressed", this,"_menu_option");
@@ -2451,6 +2610,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
search_menu->set_text(TTR("Search"));
search_menu->get_popup()->add_item(TTR("Find.."),SEARCH_FIND,KEY_MASK_CMD|KEY_F);
search_menu->get_popup()->add_item(TTR("Find Next"),SEARCH_FIND_NEXT,KEY_F3);
+ search_menu->get_popup()->add_item(TTR("Find Previous"),SEARCH_FIND_PREV,KEY_MASK_SHIFT|KEY_F3);
search_menu->get_popup()->add_item(TTR("Replace.."),SEARCH_REPLACE,KEY_MASK_CMD|KEY_R);
search_menu->get_popup()->add_separator();
search_menu->get_popup()->add_item(TTR("Goto Function.."),SEARCH_LOCATE_FUNCTION,KEY_MASK_SHIFT|KEY_MASK_CMD|KEY_F);
@@ -2470,6 +2630,9 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
menu_hb->add_child(debug_menu);
debug_menu->set_text(TTR("Debug"));
debug_menu->get_popup()->add_item(TTR("Toggle Breakpoint"),DEBUG_TOGGLE_BREAKPOINT,KEY_F9);
+ debug_menu->get_popup()->add_item(TTR("Remove All Breakpoints"), DEBUG_REMOVE_ALL_BREAKPOINTS, KEY_MASK_CTRL|KEY_MASK_SHIFT|KEY_F9);
+ debug_menu->get_popup()->add_item(TTR("Goto Next Breakpoint"), DEBUG_GOTO_NEXT_BREAKPOINT, KEY_MASK_CTRL|KEY_PERIOD);
+ debug_menu->get_popup()->add_item(TTR("Goto Previous Breakpoint"), DEBUG_GOTO_PREV_BREAKPOINT, KEY_MASK_CTRL|KEY_COMMA);
debug_menu->get_popup()->add_separator();
debug_menu->get_popup()->add_item(TTR("Step Over"),DEBUG_NEXT,KEY_F10);
debug_menu->get_popup()->add_item(TTR("Step Into"),DEBUG_STEP,KEY_F11);
@@ -2477,7 +2640,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
debug_menu->get_popup()->add_item(TTR("Break"),DEBUG_BREAK);
debug_menu->get_popup()->add_item(TTR("Continue"),DEBUG_CONTINUE);
debug_menu->get_popup()->add_separator();
- //debug_menu->get_popup()->add_check_item(TTR("Show Debugger"),DEBUG_SHOW);
+ //debug_menu->get_popup()->add_check_item("Show Debugger",DEBUG_SHOW);
debug_menu->get_popup()->add_check_item(TTR("Keep Debugger Open"),DEBUG_SHOW_KEEP_OPEN);
debug_menu->get_popup()->connect("item_pressed", this,"_menu_option");
@@ -2523,7 +2686,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
site_search->set_text(TTR("Tutorials"));
site_search->connect("pressed",this,"_menu_option",varray(SEARCH_WEBSITE));
menu_hb->add_child(site_search);
- site_search->set_tooltip(TTR("Open http://www.godotengine.org at tutorials section."));
+ site_search->set_tooltip(TTR("Open https://godotengine.org at tutorials section."));
class_search = memnew( ToolButton );
class_search->set_text(TTR("Classes"));
@@ -2555,9 +2718,6 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
tab_container->connect("tab_changed", this,"_tab_changed");
- find_replace_dialog = memnew(FindReplaceDialog);
- add_child(find_replace_dialog);
-
erase_tab_confirm = memnew( ConfirmationDialog );
add_child(erase_tab_confirm);
erase_tab_confirm->connect("confirmed", this,"_close_current_tab");
@@ -2567,6 +2727,11 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
add_child(script_create_dialog);
script_create_dialog->connect("script_created", this, "_script_created");
+ file_dialog_option = -1;
+ file_dialog = memnew( EditorFileDialog );
+ add_child(file_dialog);
+ file_dialog->connect("file_selected", this,"_file_dialog_action");
+
goto_line_dialog = memnew(GotoLineDialog);
add_child(goto_line_dialog);
@@ -2581,7 +2746,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
disk_changed->set_child_rect(vbc);
Label *dl = memnew( Label );
- dl->set_text("The following files are newer on disk.\nWhat action should be taken?:");
+ dl->set_text(TTR("The following files are newer on disk.\nWhat action should be taken?:"));
vbc->add_child(dl);
disk_changed_list = memnew( Tree );
@@ -2729,6 +2894,8 @@ void ScriptEditorPlugin::edited_scene_changed() {
script_editor->edited_scene_changed();
}
+
+
ScriptEditorPlugin::ScriptEditorPlugin(EditorNode *p_node) {
editor=p_node;
diff --git a/tools/editor/plugins/script_editor_plugin.h b/tools/editor/plugins/script_editor_plugin.h
index 68aef4d39c..4eb3519059 100644
--- a/tools/editor/plugins/script_editor_plugin.h
+++ b/tools/editor/plugins/script_editor_plugin.h
@@ -122,6 +122,10 @@ class ScriptEditor : public VBoxContainer {
FILE_SAVE,
FILE_SAVE_AS,
FILE_SAVE_ALL,
+ FILE_IMPORT_THEME,
+ FILE_RELOAD_THEME,
+ FILE_SAVE_THEME,
+ FILE_SAVE_THEME_AS,
FILE_CLOSE,
EDIT_UNDO,
EDIT_REDO,
@@ -140,6 +144,7 @@ class ScriptEditor : public VBoxContainer {
EDIT_CLONE_DOWN,
SEARCH_FIND,
SEARCH_FIND_NEXT,
+ SEARCH_FIND_PREV,
SEARCH_REPLACE,
SEARCH_LOCATE_FUNCTION,
SEARCH_GOTO_LINE,
@@ -147,6 +152,9 @@ class ScriptEditor : public VBoxContainer {
SEARCH_CLASSES,
SEARCH_WEBSITE,
DEBUG_TOGGLE_BREAKPOINT,
+ DEBUG_REMOVE_ALL_BREAKPOINTS,
+ DEBUG_GOTO_NEXT_BREAKPOINT,
+ DEBUG_GOTO_PREV_BREAKPOINT,
DEBUG_NEXT,
DEBUG_STEP,
DEBUG_BREAK,
@@ -179,13 +187,15 @@ class ScriptEditor : public VBoxContainer {
ItemList *script_list;
HSplitContainer *script_split;
TabContainer *tab_container;
- FindReplaceDialog *find_replace_dialog;
+ EditorFileDialog *file_dialog;
GotoLineDialog *goto_line_dialog;
ConfirmationDialog *erase_tab_confirm;
ScriptCreateDialog *script_create_dialog;
ScriptEditorDebugger* debugger;
ToolButton *scripts_visible;
+ String current_theme;
+
TextureFrame *script_icon;
Label *script_name_label;
@@ -226,6 +236,10 @@ class ScriptEditor : public VBoxContainer {
bool grab_focus_block;
+ bool pending_auto_reload;
+ bool auto_reload_running_scripts;
+ void _live_auto_reload_running_scripts();
+
ScriptEditorQuickOpen *quick_open;
EditorScriptCodeCompletionCache *completion_cache;
@@ -277,6 +291,8 @@ class ScriptEditor : public VBoxContainer {
void _update_script_colors();
void _update_modified_scripts_for_external_editor();
+ int file_dialog_option;
+ void _file_dialog_action(String p_file);
static ScriptEditor *script_editor;
protected:
@@ -310,6 +326,7 @@ public:
virtual void edited_scene_changed();
ScriptEditorDebugger *get_debugger() { return debugger; }
+ void set_live_auto_reload_running_scripts(bool p_enabled);
ScriptEditor(EditorNode *p_editor);
~ScriptEditor();
@@ -345,6 +362,7 @@ public:
virtual void get_breakpoints(List<String> *p_breakpoints);
+
virtual void edited_scene_changed();
ScriptEditorPlugin(EditorNode *p_node);
diff --git a/tools/editor/plugins/shader_editor_plugin.cpp b/tools/editor/plugins/shader_editor_plugin.cpp
index 8a65a3641f..0ca6a069bc 100644
--- a/tools/editor/plugins/shader_editor_plugin.cpp
+++ b/tools/editor/plugins/shader_editor_plugin.cpp
@@ -88,6 +88,10 @@ void ShaderTextEditor::_load_theme_settings() {
get_text_edit()->add_color_override("number_color",EDITOR_DEF("text_editor/number_color",Color(0.9,0.6,0.0,2)));
get_text_edit()->add_color_override("function_color",EDITOR_DEF("text_editor/function_color",Color(0.4,0.6,0.8)));
get_text_edit()->add_color_override("member_variable_color",EDITOR_DEF("text_editor/member_variable_color",Color(0.9,0.3,0.3)));
+ get_text_edit()->add_color_override("mark_color", EDITOR_DEF("text_editor/mark_color", Color(1.0,0.4,0.4,0.4)));
+ get_text_edit()->add_color_override("breakpoint_color", EDITOR_DEF("text_editor/breakpoint_color", Color(0.8,0.8,0.4,0.2)));
+ get_text_edit()->add_color_override("search_result_color",EDITOR_DEF("text_editor/search_result_color",Color(0.05,0.25,0.05,1)));
+ get_text_edit()->add_color_override("search_result_border_color",EDITOR_DEF("text_editor/search_result_border_color",Color(0.1,0.45,0.1,1)));
Color keyword_color= EDITOR_DEF("text_editor/keyword_color",Color(0.5,0.0,0.2));
@@ -210,18 +214,19 @@ void ShaderEditor::_menu_option(int p_option) {
} break;
case SEARCH_FIND: {
- find_replace_dialog->set_text_edit(current->get_text_edit());
- find_replace_dialog->popup_search();
+ current->get_find_replace_bar()->popup_search();
} break;
case SEARCH_FIND_NEXT: {
- find_replace_dialog->set_text_edit(current->get_text_edit());
- find_replace_dialog->search_next();
+ current->get_find_replace_bar()->search_next();
+ } break;
+ case SEARCH_FIND_PREV: {
+
+ current->get_find_replace_bar()->search_prev();
} break;
case SEARCH_REPLACE: {
- find_replace_dialog->set_text_edit(current->get_text_edit());
- find_replace_dialog->popup_replace();
+ current->get_find_replace_bar()->popup_replace();
} break;
// case SEARCH_LOCATE_SYMBOL: {
@@ -505,18 +510,16 @@ ShaderEditor::ShaderEditor() {
search_menu->set_text(TTR("Search"));
search_menu->get_popup()->add_item(TTR("Find.."),SEARCH_FIND,KEY_MASK_CMD|KEY_F);
search_menu->get_popup()->add_item(TTR("Find Next"),SEARCH_FIND_NEXT,KEY_F3);
+ search_menu->get_popup()->add_item(TTR("Find Previous"),SEARCH_FIND_PREV,KEY_MASK_SHIFT|KEY_F3);
search_menu->get_popup()->add_item(TTR("Replace.."),SEARCH_REPLACE,KEY_MASK_CMD|KEY_R);
search_menu->get_popup()->add_separator();
-// search_menu->get_popup()->add_item(TTR("Locate Symbol.."),SEARCH_LOCATE_SYMBOL,KEY_MASK_CMD|KEY_K);
+// search_menu->get_popup()->add_item("Locate Symbol..",SEARCH_LOCATE_SYMBOL,KEY_MASK_CMD|KEY_K);
search_menu->get_popup()->add_item(TTR("Goto Line.."),SEARCH_GOTO_LINE,KEY_MASK_CMD|KEY_G);
search_menu->get_popup()->connect("item_pressed", this,"_menu_option");
tab_container->connect("tab_changed", this,"_tab_changed");
- find_replace_dialog = memnew(FindReplaceDialog);
- add_child(find_replace_dialog);
-
erase_tab_confirm = memnew( ConfirmationDialog );
add_child(erase_tab_confirm);
erase_tab_confirm->connect("confirmed", this,"_close_current_tab");
diff --git a/tools/editor/plugins/shader_editor_plugin.h b/tools/editor/plugins/shader_editor_plugin.h
index e10c10a446..9219a1fbc2 100644
--- a/tools/editor/plugins/shader_editor_plugin.h
+++ b/tools/editor/plugins/shader_editor_plugin.h
@@ -76,6 +76,7 @@ class ShaderEditor : public Control {
EDIT_SELECT_ALL,
SEARCH_FIND,
SEARCH_FIND_NEXT,
+ SEARCH_FIND_PREV,
SEARCH_REPLACE,
//SEARCH_LOCATE_SYMBOL,
SEARCH_GOTO_LINE,
@@ -88,7 +89,6 @@ class ShaderEditor : public Control {
uint64_t idle;
TabContainer *tab_container;
- FindReplaceDialog *find_replace_dialog;
GotoLineDialog *goto_line_dialog;
ConfirmationDialog *erase_tab_confirm;
diff --git a/tools/editor/plugins/shader_graph_editor_plugin.cpp b/tools/editor/plugins/shader_graph_editor_plugin.cpp
index f618f41cf8..d567c8e9b3 100644
--- a/tools/editor/plugins/shader_graph_editor_plugin.cpp
+++ b/tools/editor/plugins/shader_graph_editor_plugin.cpp
@@ -743,7 +743,7 @@ void ShaderGraphView::_vec_op_changed(int p_op, int p_id){
void ShaderGraphView::_vec_scalar_op_changed(int p_op, int p_id){
UndoRedo *ur=EditorNode::get_singleton()->get_undo_redo();
- ur->create_action(TTR("Change VecxScalar Operator"));
+ ur->create_action(TTR("Change Vec Scalar Operator"));
ur->add_do_method(graph.ptr(),"vec_scalar_op_node_set_op",type,p_id,p_op);
ur->add_undo_method(graph.ptr(),"vec_scalar_op_node_set_op",type,p_id,graph->vec_scalar_op_node_get_op(type,p_id));
ur->add_do_method(this,"_update_graph");
@@ -902,7 +902,7 @@ void ShaderGraphView::_variant_edited() {
break;
}
UndoRedo *ur=EditorNode::get_singleton()->get_undo_redo();
- ur->create_action(TTR("Change default value"));
+ ur->create_action(TTR("Change Default Value"));
ur->add_do_method(graph.ptr(),"default_set_value",type,edited_id,edited_def, v);
ur->add_undo_method(graph.ptr(),"default_set_value",type,edited_id,edited_def, v2);
ur->add_do_method(this,"_update_graph");
@@ -1427,7 +1427,7 @@ void ShaderGraphView::_create_node(int p_id) {
} break; // all inputs (case Shader type dependent)
case ShaderGraph::NODE_SCALAR_CONST: {
- gn->set_title(TTR("Scalar"));
+ gn->set_title("Scalar");
SpinBox *sb = memnew( SpinBox );
sb->set_min(-100000);
sb->set_max(100000);
@@ -1440,7 +1440,7 @@ void ShaderGraphView::_create_node(int p_id) {
} break; //scalar constant
case ShaderGraph::NODE_VEC_CONST: {
- gn->set_title(TTR("Vector"));
+ gn->set_title("Vector");
Array v3p(true);
for(int i=0;i<3;i++) {
HBoxContainer *hbc = memnew( HBoxContainer );
@@ -1469,11 +1469,11 @@ void ShaderGraphView::_create_node(int p_id) {
cpb->connect("color_changed",this,"_rgb_const_changed",varray(p_id));
gn->add_child(cpb);
Label *l = memnew( Label );
- l->set_text(TTR("RGB"));
+ l->set_text("RGB");
l->set_align(Label::ALIGN_RIGHT);
gn->add_child(l);
l = memnew( Label );
- l->set_text(TTR("Alpha"));
+ l->set_text("Alpha");
l->set_align(Label::ALIGN_RIGHT);
gn->add_child(l);
@@ -1482,7 +1482,7 @@ void ShaderGraphView::_create_node(int p_id) {
} break; //rgb constant (shows a color picker instead)
case ShaderGraph::NODE_XFORM_CONST: {
- gn->set_title(TTR("XForm"));
+ gn->set_title("XForm");
ToolButton *edit = memnew( ToolButton );
edit->set_text("edit..");
edit->connect("pressed",this,"_xform_const_changed",varray(p_id,edit));
@@ -1492,7 +1492,7 @@ void ShaderGraphView::_create_node(int p_id) {
} break; // 4x4 matrix constant
case ShaderGraph::NODE_TIME: {
- gn->set_title(TTR("Time"));
+ gn->set_title("Time");
Label *l = memnew( Label );
l->set_text("(s)");
l->set_align(Label::ALIGN_RIGHT);
@@ -1502,24 +1502,24 @@ void ShaderGraphView::_create_node(int p_id) {
} break; // time in seconds
case ShaderGraph::NODE_SCREEN_TEX: {
- gn->set_title(TTR("ScreenTex"));
+ gn->set_title("ScreenTex");
HBoxContainer *hbc = memnew( HBoxContainer );
hbc->add_constant_override("separation",0);
if (!graph->is_slot_connected(type,p_id,0)) {
Vector3 v = graph->default_get_value(type, p_id, 0);
- hbc->add_child(make_editor(TTR("UV: ") + v,gn,p_id,0,Variant::VECTOR3));
+ hbc->add_child(make_editor("UV: " + v,gn,p_id,0,Variant::VECTOR3));
} else {
- hbc->add_child(make_label(TTR("UV"),Variant::VECTOR3));
+ hbc->add_child(make_label("UV",Variant::VECTOR3));
}
hbc->add_spacer();
- hbc->add_child( memnew(Label(TTR("RGB"))));
+ hbc->add_child( memnew(Label("RGB")));
gn->add_child(hbc);
gn->set_slot(0,true,ShaderGraph::SLOT_TYPE_VEC,typecol[ShaderGraph::SLOT_TYPE_VEC],true,ShaderGraph::SLOT_TYPE_VEC,typecol[ShaderGraph::SLOT_TYPE_VEC]);
} break; // screen texture sampler (takes UV) (only usable in fragment case Shader)
case ShaderGraph::NODE_SCALAR_OP: {
- gn->set_title(TTR("ScalarOp"));
+ gn->set_title("ScalarOp");
static const char* op_name[ShaderGraph::SCALAR_MAX_OP]={
("Add"),
("Sub"),
@@ -1567,7 +1567,7 @@ void ShaderGraphView::_create_node(int p_id) {
} break; // scalar vs scalar op (mul: { } break; add: { } break; div: { } break; etc)
case ShaderGraph::NODE_VEC_OP: {
- gn->set_title(TTR("VecOp"));
+ gn->set_title("VecOp");
static const char* op_name[ShaderGraph::VEC_MAX_OP]={
("Add"),
("Sub"),
@@ -1615,7 +1615,7 @@ void ShaderGraphView::_create_node(int p_id) {
} break; // vec3 vs vec3 op (mul: { } break;ad: { } break;div: { } break;crossprod: { } break;etc)
case ShaderGraph::NODE_VEC_SCALAR_OP: {
- gn->set_title(TTR("VecScalarOp"));
+ gn->set_title("VecScalarOp");
static const char* op_name[ShaderGraph::VEC_SCALAR_MAX_OP]={
("Mul"),
("Div"),
@@ -1657,7 +1657,7 @@ void ShaderGraphView::_create_node(int p_id) {
} break; // vec3 vs scalar op (mul: { } break; add: { } break; div: { } break; etc)
case ShaderGraph::NODE_RGB_OP: {
- gn->set_title(TTR("RGB Op"));
+ gn->set_title("RGB Op");
static const char* op_name[ShaderGraph::RGB_MAX_OP]={
("Screen"),
("Difference"),
@@ -1702,7 +1702,7 @@ void ShaderGraphView::_create_node(int p_id) {
} break; // vec3 vs vec3 rgb op (with scalar amount): { } break; like brighten: { } break; darken: { } break; burn: { } break; dodge: { } break; multiply: { } break; etc.
case ShaderGraph::NODE_XFORM_MULT: {
- gn->set_title(TTR("XFMult"));
+ gn->set_title("XFMult");
HBoxContainer *hbc = memnew( HBoxContainer );
if (graph->is_slot_connected(type, p_id, 0)) {
hbc->add_child(make_label("a",Variant::TRANSFORM));
@@ -1725,9 +1725,9 @@ void ShaderGraphView::_create_node(int p_id) {
} break; // mat4 x mat4
case ShaderGraph::NODE_XFORM_VEC_MULT: {
- gn->set_title(TTR("XFVecMult"));
+ gn->set_title("XFVecMult");
- CheckBox *button = memnew (CheckBox(TTR("RotOnly")));
+ CheckBox *button = memnew (CheckBox("RotOnly"));
button->set_pressed(graph->xform_vec_mult_node_get_no_translation(type,p_id));
button->connect("toggled",this,"_xform_inv_rev_changed",varray(p_id));
@@ -1758,10 +1758,10 @@ void ShaderGraphView::_create_node(int p_id) {
} break;
case ShaderGraph::NODE_XFORM_VEC_INV_MULT: {
- gn->set_title(TTR("XFVecInvMult"));
+ gn->set_title("XFVecInvMult");
- CheckBox *button = memnew( CheckBox(TTR("RotOnly")));
+ CheckBox *button = memnew( CheckBox("RotOnly"));
button->set_pressed(graph->xform_vec_mult_node_get_no_translation(type,p_id));
button->connect("toggled",this,"_xform_inv_rev_changed",varray(p_id));
@@ -1793,7 +1793,7 @@ void ShaderGraphView::_create_node(int p_id) {
} break; // mat4 x vec3 inverse mult (with no-translation option)
case ShaderGraph::NODE_SCALAR_FUNC: {
- gn->set_title(TTR("ScalarFunc"));
+ gn->set_title("ScalarFunc");
static const char* func_name[ShaderGraph::SCALAR_MAX_FUNC]={
("Sin"),
("Cos"),
@@ -1846,7 +1846,7 @@ void ShaderGraphView::_create_node(int p_id) {
- gn->set_title(TTR("VecFunc"));
+ gn->set_title("VecFunc");
static const char* func_name[ShaderGraph::VEC_MAX_FUNC]={
("Normalize"),
("Saturate"),
@@ -1882,7 +1882,7 @@ void ShaderGraphView::_create_node(int p_id) {
} break; // vector function (normalize: { } break; negate: { } break; reciprocal: { } break; rgb2hsv: { } break; hsv2rgb: { } break; etc: { } break; etc)
case ShaderGraph::NODE_VEC_LEN: {
- gn->set_title(TTR("VecLength"));
+ gn->set_title("VecLength");
HBoxContainer *hbc = memnew( HBoxContainer );
if (graph->is_slot_connected(type, p_id, 0)) {
hbc->add_child(make_label("in", Variant::VECTOR3));
@@ -1899,7 +1899,7 @@ void ShaderGraphView::_create_node(int p_id) {
} break; // vec3 length
case ShaderGraph::NODE_DOT_PROD: {
- gn->set_title(TTR("DotProduct"));
+ gn->set_title("DotProduct");
HBoxContainer *hbc = memnew( HBoxContainer );
hbc->add_constant_override("separation",0);
if (graph->is_slot_connected(type, p_id, 0)) {
@@ -1924,7 +1924,7 @@ void ShaderGraphView::_create_node(int p_id) {
} break; // vec3 . vec3 (dot product -> scalar output)
case ShaderGraph::NODE_VEC_TO_SCALAR: {
- gn->set_title(TTR("Vec2Scalar"));
+ gn->set_title("Vec2Scalar");
HBoxContainer *hbc = memnew( HBoxContainer );
hbc->add_constant_override("separation",0);
if (graph->is_slot_connected(type, p_id, 0)) {
@@ -1955,7 +1955,7 @@ void ShaderGraphView::_create_node(int p_id) {
} break; // 1 vec3 input: { } break; 3 scalar outputs
case ShaderGraph::NODE_SCALAR_TO_VEC: {
- gn->set_title(TTR("Scalar2Vec"));
+ gn->set_title("Scalar2Vec");
HBoxContainer *hbc = memnew( HBoxContainer );
if (graph->is_slot_connected(type, p_id, 0)) {
hbc->add_child(make_label("x", Variant::REAL));
@@ -1986,7 +1986,7 @@ void ShaderGraphView::_create_node(int p_id) {
} break; // 3 scalar input: { } break; 1 vec3 output
case ShaderGraph::NODE_VEC_TO_XFORM: {
- gn->set_title(TTR("Vec2XForm"));
+ gn->set_title("Vec2XForm");
HBoxContainer *hbc = memnew( HBoxContainer );
hbc->add_constant_override("separation",0);
if (graph->is_slot_connected(type, p_id, 0)) {
@@ -2025,7 +2025,7 @@ void ShaderGraphView::_create_node(int p_id) {
} break; // 3 vec input: { } break; 1 xform output
case ShaderGraph::NODE_XFORM_TO_VEC: {
- gn->set_title(TTR("XForm2Vec"));
+ gn->set_title("XForm2Vec");
HBoxContainer *hbc = memnew( HBoxContainer );
hbc->add_constant_override("separation",0);
@@ -2057,7 +2057,7 @@ void ShaderGraphView::_create_node(int p_id) {
} break; // 3 vec input: { } break; 1 xform output
case ShaderGraph::NODE_SCALAR_INTERP: {
- gn->set_title(TTR("ScalarInterp"));
+ gn->set_title("ScalarInterp");
HBoxContainer *hbc = memnew( HBoxContainer );
hbc->add_constant_override("separation",0);
if (graph->is_slot_connected(type, p_id, 0)) {
@@ -2090,7 +2090,7 @@ void ShaderGraphView::_create_node(int p_id) {
} break; // scalar interpolation (with optional curve)
case ShaderGraph::NODE_VEC_INTERP: {
- gn->set_title(TTR("VecInterp"));
+ gn->set_title("VecInterp");
HBoxContainer *hbc = memnew( HBoxContainer );
if (graph->is_slot_connected(type, p_id, 0)) {
hbc->add_child(make_label("a", Variant::VECTOR3));
@@ -2174,7 +2174,7 @@ void ShaderGraphView::_create_node(int p_id) {
} break; // scalar interpolation (with optional curve)
case ShaderGraph::NODE_CURVE_MAP: {
- gn->set_title(TTR("CurveMap"));
+ gn->set_title("CurveMap");
GraphCurveMapEdit * map = memnew( GraphCurveMapEdit );
DVector<Vector2> points = graph->curve_map_node_get_points(type,p_id);
@@ -2221,7 +2221,7 @@ void ShaderGraphView::_create_node(int p_id) {
case ShaderGraph::NODE_SCALAR_INPUT: {
- gn->set_title(TTR("ScalarUniform"));
+ gn->set_title("ScalarUniform");
LineEdit *le = memnew( LineEdit );
gn->add_child(le);
le->set_text(graph->input_node_get_name(type,p_id));
@@ -2238,7 +2238,7 @@ void ShaderGraphView::_create_node(int p_id) {
} break; // scalar uniform (assignable in material)
case ShaderGraph::NODE_VEC_INPUT: {
- gn->set_title(TTR("VectorUniform"));
+ gn->set_title("VectorUniform");
LineEdit *le = memnew( LineEdit );
gn->add_child(le);
le->set_text(graph->input_node_get_name(type,p_id));
@@ -2265,7 +2265,7 @@ void ShaderGraphView::_create_node(int p_id) {
} break; // vec3 uniform (assignable in material)
case ShaderGraph::NODE_RGB_INPUT: {
- gn->set_title(TTR("ColorUniform"));
+ gn->set_title("ColorUniform");
LineEdit *le = memnew( LineEdit );
gn->add_child(le);
le->set_text(graph->input_node_get_name(type,p_id));
@@ -2275,11 +2275,11 @@ void ShaderGraphView::_create_node(int p_id) {
cpb->connect("color_changed",this,"_rgb_input_changed",varray(p_id));
gn->add_child(cpb);
Label *l = memnew( Label );
- l->set_text(TTR("RGB"));
+ l->set_text("RGB");
l->set_align(Label::ALIGN_RIGHT);
gn->add_child(l);
l = memnew( Label );
- l->set_text(TTR("Alpha"));
+ l->set_text("Alpha");
l->set_align(Label::ALIGN_RIGHT);
gn->add_child(l);
@@ -2289,7 +2289,7 @@ void ShaderGraphView::_create_node(int p_id) {
} break; // color uniform (assignable in material)
case ShaderGraph::NODE_XFORM_INPUT: {
- gn->set_title(TTR("XFUniform"));
+ gn->set_title("XFUniform");
LineEdit *le = memnew( LineEdit );
gn->add_child(le);
le->set_text(graph->input_node_get_name(type,p_id));
@@ -2303,7 +2303,7 @@ void ShaderGraphView::_create_node(int p_id) {
} break; // mat4 uniform (assignable in material)
case ShaderGraph::NODE_TEXTURE_INPUT: {
- gn->set_title(TTR("TexUniform"));
+ gn->set_title("TexUniform");
LineEdit *le = memnew( LineEdit );
gn->add_child(le);
le->set_text(graph->input_node_get_name(type,p_id));
@@ -2311,7 +2311,9 @@ void ShaderGraphView::_create_node(int p_id) {
TextureFrame *tex = memnew( TextureFrame );
tex->set_expand(true);
tex->set_custom_minimum_size(Size2(80,80));
+ tex->set_drag_forwarding(this);
gn->add_child(tex);
+ tex->set_ignore_mouse(false);
tex->set_texture(graph->texture_input_node_get_value(type,p_id));
ToolButton *edit = memnew( ToolButton );
edit->set_text("edit..");
@@ -2321,18 +2323,18 @@ void ShaderGraphView::_create_node(int p_id) {
HBoxContainer *hbc = memnew( HBoxContainer );
hbc->add_constant_override("separation",0);
if (graph->is_slot_connected(type, p_id, 0)) {
- hbc->add_child(make_label(TTR("UV"), Variant::VECTOR3));
+ hbc->add_child(make_label("UV", Variant::VECTOR3));
} else {
Vector3 v = graph->default_get_value(type,p_id,0);
- hbc->add_child(make_editor(String(TTR("UV: "))+v,gn,p_id,0,Variant::VECTOR3));
+ hbc->add_child(make_editor(String("UV: ")+v,gn,p_id,0,Variant::VECTOR3));
}
hbc->add_spacer();
- Label *l=memnew(Label(TTR("RGB")));
+ Label *l=memnew(Label("RGB"));
l->set_align(Label::ALIGN_RIGHT);
hbc->add_child(l);
gn->add_child(hbc);
l = memnew( Label );
- l->set_text(TTR("Alpha"));
+ l->set_text("Alpha");
l->set_align(Label::ALIGN_RIGHT);
gn->add_child(l);
@@ -2342,7 +2344,7 @@ void ShaderGraphView::_create_node(int p_id) {
} break; // texture input (assignable in material)
case ShaderGraph::NODE_CUBEMAP_INPUT: {
- gn->set_title(TTR("TexUniform"));
+ gn->set_title("TexUniform");
LineEdit *le = memnew( LineEdit );
gn->add_child(le);
le->set_text(graph->input_node_get_name(type,p_id));
@@ -2357,18 +2359,18 @@ void ShaderGraphView::_create_node(int p_id) {
HBoxContainer *hbc = memnew( HBoxContainer );
hbc->add_constant_override("separation",0);
if (graph->is_slot_connected(type, p_id, 0)) {
- hbc->add_child(make_label(TTR("UV"), Variant::VECTOR3));
+ hbc->add_child(make_label("UV", Variant::VECTOR3));
} else {
Vector3 v = graph->default_get_value(type,p_id,0);
- hbc->add_child(make_editor(String(TTR("UV: "))+v,gn,p_id,0,Variant::VECTOR3));
+ hbc->add_child(make_editor(String("UV: ")+v,gn,p_id,0,Variant::VECTOR3));
}
hbc->add_spacer();
- Label *l=memnew(Label(TTR("RGB")));
+ Label *l=memnew(Label("RGB"));
l->set_align(Label::ALIGN_RIGHT);
hbc->add_child(l);
gn->add_child(hbc);
l = memnew( Label );
- l->set_text(TTR("Alpha"));
+ l->set_text("Alpha");
l->set_align(Label::ALIGN_RIGHT);
gn->add_child(l);
@@ -2378,22 +2380,22 @@ void ShaderGraphView::_create_node(int p_id) {
} break; // cubemap input (assignable in material)
case ShaderGraph::NODE_DEFAULT_TEXTURE: {
- gn->set_title(TTR("CanvasItemTex"));
+ gn->set_title("CanvasItemTex");
HBoxContainer *hbc = memnew( HBoxContainer );
hbc->add_constant_override("separation",0);
if (graph->is_slot_connected(type, p_id, 0)) {
- hbc->add_child(make_label(TTR("UV"), Variant::VECTOR3));
+ hbc->add_child(make_label("UV", Variant::VECTOR3));
} else {
Vector3 v = graph->default_get_value(type,p_id,0);
- hbc->add_child(make_editor(String(TTR("UV: "))+v,gn,p_id,0,Variant::VECTOR3));
+ hbc->add_child(make_editor(String("UV: ")+v,gn,p_id,0,Variant::VECTOR3));
}
hbc->add_spacer();
- Label *l=memnew(Label(TTR("RGB")));
+ Label *l=memnew(Label("RGB"));
l->set_align(Label::ALIGN_RIGHT);
hbc->add_child(l);
gn->add_child(hbc);
l = memnew( Label );
- l->set_text(TTR("Alpha"));
+ l->set_text("Alpha");
l->set_align(Label::ALIGN_RIGHT);
gn->add_child(l);
@@ -2404,7 +2406,7 @@ void ShaderGraphView::_create_node(int p_id) {
} break; // screen texture sampler (takes UV) (only usable in fragment case Shader)
case ShaderGraph::NODE_OUTPUT: {
- gn->set_title(TTR("Output"));
+ gn->set_title("Output");
gn->set_show_close_button(false);
List<ShaderGraph::SlotInfo> si;
@@ -2412,22 +2414,22 @@ void ShaderGraphView::_create_node(int p_id) {
Array colors;
colors.push_back("Color");
- colors.push_back(TTR("LightColor"));
+ colors.push_back("LightColor");
colors.push_back("Light");
- colors.push_back(TTR("Diffuse"));
- colors.push_back(TTR("Specular"));
- colors.push_back(TTR("Emmision"));
+ colors.push_back("Diffuse");
+ colors.push_back("Specular");
+ colors.push_back("Emmision");
Array reals;
- reals.push_back(TTR("Alpha"));
- reals.push_back(TTR("DiffuseAlpha"));
- reals.push_back(TTR("NormalMapDepth"));
- reals.push_back(TTR("SpecExp"));
- reals.push_back(TTR("Glow"));
- reals.push_back(TTR("ShadeParam"));
- reals.push_back(TTR("SpecularExp"));
- reals.push_back(TTR("LightAlpha"));
- reals.push_back(TTR("PointSize"));
- reals.push_back(TTR("Discard"));
+ reals.push_back("Alpha");
+ reals.push_back("DiffuseAlpha");
+ reals.push_back("NormalMapDepth");
+ reals.push_back("SpecExp");
+ reals.push_back("Glow");
+ reals.push_back("ShadeParam");
+ reals.push_back("SpecularExp");
+ reals.push_back("LightAlpha");
+ reals.push_back("PointSize");
+ reals.push_back("Discard");
int idx=0;
for (List<ShaderGraph::SlotInfo>::Element *E=si.front();E;E=E->next()) {
@@ -2448,7 +2450,7 @@ void ShaderGraphView::_create_node(int p_id) {
} break; // output (case Shader type dependent)
case ShaderGraph::NODE_COMMENT: {
- gn->set_title(TTR("Comment"));
+ gn->set_title("Comment");
TextEdit *te = memnew(TextEdit);
te->set_custom_minimum_size(Size2(100,100));
gn->add_child(te);
@@ -2517,6 +2519,105 @@ void ShaderGraphView::_sg_updated() {
}
}
+Variant ShaderGraphView::get_drag_data_fw(const Point2 &p_point, Control *p_from)
+{
+ TextureFrame* frame = p_from->cast_to<TextureFrame>();
+ if (!frame)
+ return Variant();
+
+ if (!frame->get_texture().is_valid())
+ return Variant();
+
+ RES res = frame->get_texture();
+ return EditorNode::get_singleton()->drag_resource(res,p_from);
+
+ return Variant();
+}
+
+bool ShaderGraphView::can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const
+{
+ if (p_data.get_type() != Variant::DICTIONARY)
+ return false;
+
+ Dictionary d = p_data;
+
+ if (d.has("type")){
+ if (d["type"] == "resource" && d.has("resource")) {
+ Variant val = d["resource"];
+
+ if (val.get_type()==Variant::OBJECT) {
+ RES res = val;
+ if (res.is_valid() && res->cast_to<Texture>())
+ return true;
+ }
+ }
+ else if (d["type"] == "files" && d.has("files")) {
+ Vector<String> files = d["files"];
+ if (files.size() != 1)
+ return false;
+ return (ResourceLoader::get_resource_type(files[0]) == "ImageTexture");
+ }
+ }
+
+ return false;
+}
+
+void ShaderGraphView::drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from)
+{
+ if (!can_drop_data_fw(p_point, p_data, p_from))
+ return;
+
+ TextureFrame *frame = p_from->cast_to<TextureFrame>();
+ if (!frame)
+ return;
+
+ Dictionary d = p_data;
+ Ref<Texture> tex;
+
+ if (d.has("type")) {
+ if (d["type"] == "resource" && d.has("resource")){
+ Variant val = d["resource"];
+
+ if (val.get_type()==Variant::OBJECT) {
+ RES res = val;
+ if (res.is_valid())
+ tex = Ref<Texture>(res->cast_to<Texture>());
+ }
+ }
+ else if (d["type"] == "files" && d.has("files")) {
+ Vector<String> files = d["files"];
+ RES res = ResourceLoader::load(files[0]);
+ if (res.is_valid())
+ tex = Ref<Texture>(res->cast_to<Texture>());
+ }
+ }
+
+ if (!tex.is_valid()) return;
+
+ GraphNode *gn = frame->get_parent()->cast_to<GraphNode>();
+ if (!gn) return;
+
+ int id = -1;
+ for(Map<int,GraphNode*>::Element *E = node_map.front();E;E=E->next())
+ if (E->get() == gn) {
+ id = E->key();
+ break;
+ }
+ print_line(String::num(double(id)));
+ if (id < 0) return;
+
+ if (graph->node_get_type(type,id)==ShaderGraph::NODE_TEXTURE_INPUT) {
+
+ UndoRedo *ur=EditorNode::get_singleton()->get_undo_redo();
+ ur->create_action(TTR("Change Texture Uniform"));
+ ur->add_do_method(graph.ptr(),"texture_input_node_set_value",type,id,tex);
+ ur->add_undo_method(graph.ptr(),"texture_input_node_set_value",type,id,graph->texture_input_node_get_value(type,id));
+ ur->add_do_method(this,"_update_graph");
+ ur->add_undo_method(this,"_update_graph");
+ ur->commit_action();
+ }
+}
+
void ShaderGraphView::set_graph(Ref<ShaderGraph> p_graph){
@@ -2623,6 +2724,10 @@ void ShaderGraphView::_bind_methods() {
ObjectTypeDB::bind_method("_color_ramp_changed",&ShaderGraphView::_color_ramp_changed);
ObjectTypeDB::bind_method("_curve_changed",&ShaderGraphView::_curve_changed);
+ ObjectTypeDB::bind_method(_MD("get_drag_data_fw"), &ShaderGraphView::get_drag_data_fw);
+ ObjectTypeDB::bind_method(_MD("can_drop_data_fw"), &ShaderGraphView::can_drop_data_fw);
+ ObjectTypeDB::bind_method(_MD("drop_data_fw"), &ShaderGraphView::drop_data_fw);
+
ObjectTypeDB::bind_method("_sg_updated",&ShaderGraphView::_sg_updated);
}
diff --git a/tools/editor/plugins/shader_graph_editor_plugin.h b/tools/editor/plugins/shader_graph_editor_plugin.h
index 0336696911..8d1d08ee1d 100644
--- a/tools/editor/plugins/shader_graph_editor_plugin.h
+++ b/tools/editor/plugins/shader_graph_editor_plugin.h
@@ -116,9 +116,9 @@ public:
GraphCurveMapEdit();
};
-class ShaderGraphView : public Node {
+class ShaderGraphView : public Control {
- OBJ_TYPE(ShaderGraphView,Node);
+ OBJ_TYPE(ShaderGraphView,Control);
@@ -181,6 +181,10 @@ class ShaderGraphView : public Node {
void _curve_changed(int p_id,Node* p_curve);
void _sg_updated();
Map<int,GraphNode*> node_map;
+
+ Variant get_drag_data_fw(const Point2& p_point,Control* p_from);
+ bool can_drop_data_fw(const Point2& p_point,const Variant& p_data,Control* p_from) const;
+ void drop_data_fw(const Point2& p_point,const Variant& p_data,Control* p_from);
protected:
void _notification(int p_what);
static void _bind_methods();
diff --git a/tools/editor/plugins/spatial_editor_plugin.cpp b/tools/editor/plugins/spatial_editor_plugin.cpp
index fa709eb0cb..e261b48f67 100644
--- a/tools/editor/plugins/spatial_editor_plugin.cpp
+++ b/tools/editor/plugins/spatial_editor_plugin.cpp
@@ -561,7 +561,7 @@ void SpatialEditorViewport::_select_region() {
void SpatialEditorViewport::_update_name() {
- String ortho = orthogonal?TTR("Orthogonal"):"Perspective";
+ String ortho = orthogonal?TTR("Orthogonal"):TTR("Perspective");
if (name!="")
view_menu->set_text("[ "+name+" "+ortho+" ]");
@@ -1229,7 +1229,7 @@ void SpatialEditorViewport::_sinput(const InputEvent &p_event) {
case InputEvent::MOUSE_MOTION: {
const InputEventMouseMotion &m=p_event.mouse_motion;
_edit.mouse_pos=Point2(p_event.mouse_motion.x,p_event.mouse_motion.y);
-
+
if (spatial_editor->get_selected()) {
@@ -1265,7 +1265,7 @@ void SpatialEditorViewport::_sinput(const InputEvent &p_event) {
NavigationScheme nav_scheme = _get_navigation_schema("3d_editor/navigation_scheme");
NavigationMode nav_mode = NAVIGATION_NONE;
-
+
if (_edit.gizmo.is_valid()) {
Plane plane=Plane(_edit.gizmo_initial_pos,_get_camera_normal());
@@ -1353,7 +1353,7 @@ void SpatialEditorViewport::_sinput(const InputEvent &p_event) {
scale = Math::stepify(scale,spatial_editor->get_scale_snap());
}
- set_message(TTR("Scaling to ")+String::num(scale,1)+"%.");
+ set_message(vformat(TTR("Scaling to %s%%."),String::num(scale,1)));
scale/=100.0;
Transform r;
@@ -1431,7 +1431,7 @@ void SpatialEditorViewport::_sinput(const InputEvent &p_event) {
motion.snap(snap);
}
- //set_message(TTR("Translating: ")+motion);
+ //set_message("Translating: "+motion);
List<Node*> &selection = editor_selection->get_selected_node_list();
@@ -1493,13 +1493,13 @@ void SpatialEditorViewport::_sinput(const InputEvent &p_event) {
if (snap) {
angle=Math::rad2deg(angle)+snap*0.5; //else it wont reach +180
angle-=Math::fmod(angle,snap);
- set_message(TTR("Rotating ")+rtos(angle)+" degrees.");
+ set_message(vformat(TTR("Rotating %s degrees."),rtos(angle)));
angle=Math::deg2rad(angle);
} else
- set_message(TTR("Rotating ")+rtos(Math::rad2deg(angle))+" degrees.");
+ set_message(vformat(TTR("Rotating %s degrees."),rtos(Math::rad2deg(angle))));
} else {
- set_message(TTR("Rotating ")+rtos(Math::rad2deg(angle))+" degrees.");
+ set_message(vformat(TTR("Rotating %s degrees."),rtos(Math::rad2deg(angle))));
}
@@ -1591,7 +1591,7 @@ void SpatialEditorViewport::_sinput(const InputEvent &p_event) {
mod=KEY_CONTROL;
if (m.mod.meta)
mod=KEY_META;
-
+
if(mod){
if (mod == _get_key_modifier("3d_editor/pan_modifier"))
nav_mode = NAVIGATION_PAN;
@@ -1815,7 +1815,7 @@ void SpatialEditorViewport::_notification(int p_what) {
if (visible)
_update_camera();
-
+
call_deferred("update_transform_gizmo_view");
}
@@ -1967,7 +1967,7 @@ void SpatialEditorViewport::_draw() {
if (surface->has_focus()) {
Size2 size = surface->get_size();
Rect2 r =Rect2(Point2(),size);
- get_stylebox(TTR("EditorFocus"),"EditorStyles")->draw(surface->get_canvas_item(),r);
+ get_stylebox("EditorFocus","EditorStyles")->draw(surface->get_canvas_item(),r);
}
@@ -2482,7 +2482,7 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed
view_menu->get_popup()->add_check_item(TTR("Orthogonal (Num5)"),VIEW_ORTHOGONAL);
view_menu->get_popup()->set_item_checked(view_menu->get_popup()->get_item_index(VIEW_PERSPECTIVE),true);
view_menu->get_popup()->add_separator();
- view_menu->get_popup()->add_check_item("Environment",VIEW_ENVIRONMENT);
+ view_menu->get_popup()->add_check_item(TTR("Environment"),VIEW_ENVIRONMENT);
view_menu->get_popup()->set_item_checked( view_menu->get_popup()->get_item_index(VIEW_ENVIRONMENT),true);
view_menu->get_popup()->add_separator();
view_menu->get_popup()->add_check_item(TTR("Audio Listener"),VIEW_AUDIO_LISTENER);
@@ -3945,7 +3945,7 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) {
tool_button[TOOL_MODE_LIST_SELECT]->set_flat(true);
button_binds[0]=MENU_TOOL_LIST_SELECT;
tool_button[TOOL_MODE_LIST_SELECT]->connect("pressed", this,"_menu_item_pressed",button_binds);
- tool_button[TOOL_MODE_LIST_SELECT]->set_tooltip("Show a list of all objects at the position clicked\n(same as Alt+RMB in selet mode).");
+ tool_button[TOOL_MODE_LIST_SELECT]->set_tooltip(TTR("Show a list of all objects at the position clicked\n(same as Alt+RMB in select mode)."));
vs = memnew( VSeparator );
hbc_menu->add_child(vs);
@@ -3954,7 +3954,7 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) {
PopupMenu *p;
transform_menu = memnew( MenuButton );
- transform_menu->set_text("Transform");
+ transform_menu->set_text(TTR("Transform"));
hbc_menu->add_child( transform_menu );
p = transform_menu->get_popup();
@@ -3979,12 +3979,12 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) {
p->add_check_item(TTR("Use Default sRGB"),MENU_VIEW_USE_DEFAULT_SRGB);
p->add_separator();
- p->add_check_item("1 Viewport",MENU_VIEW_USE_1_VIEWPORT,KEY_MASK_CMD+KEY_1);
- p->add_check_item("2 Viewports",MENU_VIEW_USE_2_VIEWPORTS,KEY_MASK_CMD+KEY_2);
- p->add_check_item("2 Viewports (Alt)",MENU_VIEW_USE_2_VIEWPORTS_ALT,KEY_MASK_SHIFT+KEY_MASK_CMD+KEY_2);
- p->add_check_item("3 Viewports",MENU_VIEW_USE_3_VIEWPORTS,KEY_MASK_CMD+KEY_3);
- p->add_check_item("3 Viewports (Alt)",MENU_VIEW_USE_3_VIEWPORTS_ALT,KEY_MASK_SHIFT+KEY_MASK_CMD+KEY_3);
- p->add_check_item("4 Viewports",MENU_VIEW_USE_4_VIEWPORTS,KEY_MASK_CMD+KEY_4);
+ p->add_check_item(TTR("1 Viewport"),MENU_VIEW_USE_1_VIEWPORT,KEY_MASK_CMD+KEY_1);
+ p->add_check_item(TTR("2 Viewports"),MENU_VIEW_USE_2_VIEWPORTS,KEY_MASK_CMD+KEY_2);
+ p->add_check_item(TTR("2 Viewports (Alt)"),MENU_VIEW_USE_2_VIEWPORTS_ALT,KEY_MASK_SHIFT+KEY_MASK_CMD+KEY_2);
+ p->add_check_item(TTR("3 Viewports"),MENU_VIEW_USE_3_VIEWPORTS,KEY_MASK_CMD+KEY_3);
+ p->add_check_item(TTR("3 Viewports (Alt)"),MENU_VIEW_USE_3_VIEWPORTS_ALT,KEY_MASK_SHIFT+KEY_MASK_CMD+KEY_3);
+ p->add_check_item(TTR("4 Viewports"),MENU_VIEW_USE_4_VIEWPORTS,KEY_MASK_CMD+KEY_4);
p->add_separator();
p->add_check_item(TTR("Display Normal"),MENU_VIEW_DISPLAY_NORMAL);
diff --git a/tools/editor/plugins/sprite_frames_editor_plugin.cpp b/tools/editor/plugins/sprite_frames_editor_plugin.cpp
index b2f10ccaae..4532e91e1f 100644
--- a/tools/editor/plugins/sprite_frames_editor_plugin.cpp
+++ b/tools/editor/plugins/sprite_frames_editor_plugin.cpp
@@ -78,7 +78,7 @@ void SpriteFramesEditor::_file_load_request(const DVector<String>& p_path,int p_
if (resource.is_null()) {
dialog->set_text(TTR("ERROR: Couldn't load frame resource!"));
dialog->set_title(TTR("Error!"));
- //dialog->get_cancel()->set_text(TTR("Close"));
+ //dialog->get_cancel()->set_text("Close");
dialog->get_ok()->set_text(TTR("Close"));
dialog->popup_centered_minsize();
return; ///beh should show an error i guess
@@ -152,7 +152,7 @@ void SpriteFramesEditor::_item_edited() {
}
RES samp = frames->get_resource(old_name);
- undo_redo->create_action(TTR("Rename Resource"));
+ undo_redo->create_action("Rename Resource");
undo_redo->add_do_method(frames,"remove_resource",old_name);
undo_redo->add_do_method(frames,"add_resource",new_name,samp);
undo_redo->add_undo_method(frames,"remove_resource",new_name);
@@ -198,7 +198,7 @@ void SpriteFramesEditor::_paste_pressed() {
if (!r.is_valid()) {
dialog->set_text(TTR("Resource clipboard is empty or not a texture!"));
dialog->set_title(TTR("Error!"));
- //dialog->get_cancel()->set_text(TTR("Close"));
+ //dialog->get_cancel()->set_text("Close");
dialog->get_ok()->set_text(TTR("Close"));
dialog->popup_centered_minsize();
return; ///beh should show an error i guess
@@ -333,11 +333,11 @@ void SpriteFramesEditor::_delete_pressed() {
_delete_confirm_pressed(); //it has undo.. why bother with a dialog..
/*
- dialog->set_title(TTR("Confirm..."));
- dialog->set_text(TTR("Remove Resource '")+tree->get_selected()->get_text(0)+"' ?");
- //dialog->get_cancel()->set_text(TTR("Cancel"));
+ dialog->set_title("Confirm...");
+ dialog->set_text("Remove Resource '"+tree->get_selected()->get_text(0)+"' ?");
+ //dialog->get_cancel()->set_text("Cancel");
//dialog->get_ok()->show();
- dialog->get_ok()->set_text(TTR("Remove"));
+ dialog->get_ok()->set_text("Remove");
dialog->popup_centered(Size2(300,60));*/
}
@@ -530,7 +530,7 @@ void SpriteFramesEditor::_update_library(bool p_skip_selector) {
if (frames->get_frame(edited_anim,i).is_null()) {
- name=itos(i)+TTR(": (empty)");
+ name=itos(i)+": "+TTR("(empty)");
} else {
name=itos(i)+": "+frames->get_frame(edited_anim,i)->get_name();
diff --git a/tools/editor/plugins/sprite_region_editor_plugin.cpp b/tools/editor/plugins/sprite_region_editor_plugin.cpp
deleted file mode 100644
index 5e7816ffb5..0000000000
--- a/tools/editor/plugins/sprite_region_editor_plugin.cpp
+++ /dev/null
@@ -1,608 +0,0 @@
-/*************************************************************************/
-/* sprite_region_editor_plugin.cpp */
-/*************************************************************************/
-/* This file is part of: */
-/* GODOT ENGINE */
-/* http://www.godotengine.org */
-/*************************************************************************/
-/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */
-/* */
-/* Author: Mariano Suligoy */
-/* */
-/* Permission is hereby granted, free of charge, to any person obtaining */
-/* a copy of this software and associated documentation files (the */
-/* "Software"), to deal in the Software without restriction, including */
-/* without limitation the rights to use, copy, modify, merge, publish, */
-/* distribute, sublicense, and/or sell copies of the Software, and to */
-/* permit persons to whom the Software is furnished to do so, subject to */
-/* the following conditions: */
-/* */
-/* The above copyright notice and this permission notice shall be */
-/* included in all copies or substantial portions of the Software. */
-/* */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
-/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
-/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
-/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
-/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
-/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
-/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
-/*************************************************************************/
-
-#include "sprite_region_editor_plugin.h"
-#include "scene/gui/check_box.h"
-#include "os/input.h"
-#include "os/keyboard.h"
-
-void SpriteRegionEditor::_region_draw()
-{
- Ref<Texture> base_tex = node->get_texture();
- if (base_tex.is_null())
- return;
-
- Matrix32 mtx;
- mtx.elements[2]=-draw_ofs;
- mtx.scale_basis(Vector2(draw_zoom,draw_zoom));
-
- VS::get_singleton()->canvas_item_set_clip(edit_draw->get_canvas_item(),true);
- VS::get_singleton()->canvas_item_add_set_transform(edit_draw->get_canvas_item(),mtx);
- edit_draw->draw_texture(base_tex,Point2());
- VS::get_singleton()->canvas_item_add_set_transform(edit_draw->get_canvas_item(),Matrix32());
-
- if (snap_show_grid) {
- Size2 s = edit_draw->get_size();
- int last_cell;
-
- if (snap_step.x!=0) {
- for(int i=0;i<s.width;i++) {
- int cell = Math::fast_ftoi(Math::floor((mtx.affine_inverse().xform(Vector2(i,0)).x-snap_offset.x)/snap_step.x));
- if (i==0)
- last_cell=cell;
- if (last_cell!=cell)
- edit_draw->draw_line(Point2(i,0),Point2(i,s.height),Color(0.3,0.7,1,0.3));
- last_cell=cell;
- }
- }
-
- if (snap_step.y!=0) {
- for(int i=0;i<s.height;i++) {
- int cell = Math::fast_ftoi(Math::floor((mtx.affine_inverse().xform(Vector2(0,i)).y-snap_offset.y)/snap_step.y));
- if (i==0)
- last_cell=cell;
- if (last_cell!=cell)
- edit_draw->draw_line(Point2(0,i),Point2(s.width,i),Color(0.3,0.7,1,0.3));
- last_cell=cell;
- }
- }
- }
-
- Ref<Texture> select_handle = get_icon("EditorHandle","EditorIcons");
-
- Rect2 scroll_rect(Point2(),mtx.basis_xform(base_tex->get_size()));
- scroll_rect.expand_to(mtx.basis_xform(edit_draw->get_size()));
-
- Vector2 endpoints[4]={
- mtx.basis_xform(rect.pos),
- mtx.basis_xform(rect.pos+Vector2(rect.size.x,0)),
- mtx.basis_xform(rect.pos+rect.size),
- mtx.basis_xform(rect.pos+Vector2(0,rect.size.y))
- };
-
- for(int i=0;i<4;i++) {
-
- int prev = (i+3)%4;
- int next = (i+1)%4;
-
- Vector2 ofs = ((endpoints[i] - endpoints[prev]).normalized() + ((endpoints[i] - endpoints[next]).normalized())).normalized();
- ofs*=1.4144*(select_handle->get_size().width/2);
-
- edit_draw->draw_line(endpoints[i]-draw_ofs, endpoints[next]-draw_ofs, Color(0.9,0.5,0.5), 2);
-
- edit_draw->draw_texture(select_handle,(endpoints[i]+ofs-(select_handle->get_size()/2)).floor()-draw_ofs);
-
- ofs = (endpoints[next]-endpoints[i])/2;
- ofs += (endpoints[next]-endpoints[i]).tangent().normalized()*(select_handle->get_size().width/2);
-
- edit_draw->draw_texture(select_handle,(endpoints[i]+ofs-(select_handle->get_size()/2)).floor()-draw_ofs);
-
- scroll_rect.expand_to(endpoints[i]);
- }
-
- scroll_rect=scroll_rect.grow(200);
- updating_scroll=true;
- hscroll->set_min(scroll_rect.pos.x);
- hscroll->set_max(scroll_rect.pos.x+scroll_rect.size.x);
- hscroll->set_page(edit_draw->get_size().x);
- hscroll->set_val(draw_ofs.x);
- hscroll->set_step(0.001);
-
- vscroll->set_min(scroll_rect.pos.y);
- vscroll->set_max(scroll_rect.pos.y+scroll_rect.size.y);
- vscroll->set_page(edit_draw->get_size().y);
- vscroll->set_val(draw_ofs.y);
- vscroll->set_step(0.001);
- updating_scroll=false;
-}
-
-void SpriteRegionEditor::_region_input(const InputEvent& p_input)
-{
- Matrix32 mtx;
- mtx.elements[2]=-draw_ofs;
- mtx.scale_basis(Vector2(draw_zoom,draw_zoom));
-
- Vector2 endpoints[8]={
- mtx.xform(rect.pos)+Vector2(-4,-4),
- mtx.xform(rect.pos+Vector2(rect.size.x/2,0))+Vector2(0,-4),
- mtx.xform(rect.pos+Vector2(rect.size.x,0))+Vector2(4,-4),
- mtx.xform(rect.pos+Vector2(rect.size.x,rect.size.y/2))+Vector2(4,0),
- mtx.xform(rect.pos+rect.size)+Vector2(4,4),
- mtx.xform(rect.pos+Vector2(rect.size.x/2,rect.size.y))+Vector2(0,4),
- mtx.xform(rect.pos+Vector2(0,rect.size.y))+Vector2(-4,4),
- mtx.xform(rect.pos+Vector2(0,rect.size.y/2))+Vector2(-4,0)
- };
-
- if (p_input.type==InputEvent::MOUSE_BUTTON) {
-
-
- const InputEventMouseButton &mb=p_input.mouse_button;
-
- if (mb.button_index==BUTTON_LEFT) {
-
-
- if (mb.pressed) {
-
- drag_from=mtx.affine_inverse().xform(Vector2(mb.x,mb.y));
- drag_from=snap_point(drag_from);
- drag=true;
- rect_prev=node->get_region_rect();
-
- drag_index=-1;
- for(int i=0;i<8;i++) {
-
- Vector2 tuv=endpoints[i];
- if (tuv.distance_to(Vector2(mb.x,mb.y))<8) {
- drag_index=i;
- creating = false;
- }
- }
-
- if (drag_index==-1) {
- creating = true;
- rect = Rect2(drag_from,Size2());
- }
-
- } else if (drag) {
-
- undo_redo->create_action(TTR("Set region_rect"));
- undo_redo->add_do_method(node,"set_region_rect",node->get_region_rect());
- undo_redo->add_undo_method(node,"set_region_rect",rect_prev);
- undo_redo->add_do_method(edit_draw,"update");
- undo_redo->add_undo_method(edit_draw,"update");
- undo_redo->commit_action();
-
- drag=false;
- }
-
- } else if (mb.button_index==BUTTON_RIGHT && mb.pressed) {
-
- if (drag) {
- drag=false;
- node->set_region_rect(rect_prev);
- rect=rect_prev;
- edit_draw->update();
- }
-
- } else if (mb.button_index==BUTTON_WHEEL_UP && mb.pressed) {
-
- zoom->set_val( zoom->get_val()/0.9 );
- } else if (mb.button_index==BUTTON_WHEEL_DOWN && mb.pressed) {
-
- zoom->set_val( zoom->get_val()*0.9);
- }
-
- } else if (p_input.type==InputEvent::MOUSE_MOTION) {
-
- const InputEventMouseMotion &mm=p_input.mouse_motion;
-
- if (mm.button_mask&BUTTON_MASK_MIDDLE || Input::get_singleton()->is_key_pressed(KEY_SPACE)) {
-
- Vector2 draged(mm.relative_x,mm.relative_y);
- hscroll->set_val( hscroll->get_val()-draged.x );
- vscroll->set_val( vscroll->get_val()-draged.y );
-
- } else if (drag) {
-
- Vector2 new_pos = mtx.affine_inverse().xform(Vector2(mm.x,mm.y));
- new_pos = snap_point(new_pos);
-
- if (creating) {
- rect = Rect2(drag_from,Size2());
- rect.expand_to(new_pos);
- node->set_region_rect(rect);
- edit_draw->update();
- return;
- }
-
- switch(drag_index) {
- case 0: {
- Vector2 p=rect_prev.pos+rect_prev.size;
- rect = Rect2(p,Size2());
- rect.expand_to(new_pos);
- node->set_region_rect(rect);
- } break;
- case 1: {
- Vector2 p=rect_prev.pos+Vector2(0,rect_prev.size.y);
- rect = Rect2(p,Size2(rect_prev.size.x,0));
- rect.expand_to(new_pos);
- node->set_region_rect(rect);
- } break;
- case 2: {
- Vector2 p=rect_prev.pos+Vector2(0,rect_prev.size.y);
- rect = Rect2(p,Size2());
- rect.expand_to(new_pos);
- node->set_region_rect(rect);
- } break;
- case 3: {
- Vector2 p=rect_prev.pos;
- rect = Rect2(p,Size2(0,rect_prev.size.y));
- rect.expand_to(new_pos);
- node->set_region_rect(rect);
- } break;
- case 4: {
- Vector2 p=rect_prev.pos;
- rect = Rect2(p,Size2());
- rect.expand_to(new_pos);
- node->set_region_rect(rect);
- } break;
- case 5: {
- Vector2 p=rect_prev.pos;
- rect = Rect2(p,Size2(rect_prev.size.x,0));
- rect.expand_to(new_pos);
- node->set_region_rect(rect);
- } break;
- case 6: {
- Vector2 p=rect_prev.pos+Vector2(rect_prev.size.x,0);
- rect = Rect2(p,Size2());
- rect.expand_to(new_pos);
- node->set_region_rect(rect);
- } break;
- case 7: {
- Vector2 p=rect_prev.pos+Vector2(rect_prev.size.x,0);
- rect = Rect2(p,Size2(0,rect_prev.size.y));
- rect.expand_to(new_pos);
- node->set_region_rect(rect);
- } break;
-
- }
- edit_draw->update();
- }
-
- }
-}
-
-void SpriteRegionEditor::_scroll_changed(float)
-{
- if (updating_scroll)
- return;
-
- draw_ofs.x=hscroll->get_val();
- draw_ofs.y=vscroll->get_val();
- draw_zoom=zoom->get_val();
- print_line("_scroll_changed");
- edit_draw->update();
-}
-
-void SpriteRegionEditor::_set_use_snap(bool p_use)
-{
- use_snap=p_use;
-}
-
-void SpriteRegionEditor::_set_show_grid(bool p_show)
-{
- snap_show_grid=p_show;
- edit_draw->update();
-}
-
-void SpriteRegionEditor::_set_snap_off_x(float p_val)
-{
- snap_offset.x=p_val;
- edit_draw->update();
-}
-
-void SpriteRegionEditor::_set_snap_off_y(float p_val)
-{
- snap_offset.y=p_val;
- edit_draw->update();
-}
-
-void SpriteRegionEditor::_set_snap_step_x(float p_val)
-{
- snap_step.x=p_val;
- edit_draw->update();
-}
-
-void SpriteRegionEditor::_set_snap_step_y(float p_val)
-{
- snap_step.y=p_val;
- edit_draw->update();
-}
-
-void SpriteRegionEditor::_notification(int p_what)
-{
- switch(p_what) {
-
- case NOTIFICATION_READY: {
- edit_node->set_icon( get_icon("RegionEdit","EditorIcons"));
- b_snap_grid->set_icon( get_icon("Grid", "EditorIcons"));
- b_snap_enable->set_icon( get_icon("Snap", "EditorIcons"));
- icon_zoom->set_texture( get_icon("Zoom", "EditorIcons"));
- } break;
- }
-}
-
-void SpriteRegionEditor::_node_removed(Node *p_node)
-{
- if(p_node==node) {
- node=NULL;
- hide();
- }
-}
-
-void SpriteRegionEditor::_bind_methods()
-{
- ObjectTypeDB::bind_method(_MD("_edit_node"),&SpriteRegionEditor::_edit_node);
- ObjectTypeDB::bind_method(_MD("_region_draw"),&SpriteRegionEditor::_region_draw);
- ObjectTypeDB::bind_method(_MD("_region_input"),&SpriteRegionEditor::_region_input);
- ObjectTypeDB::bind_method(_MD("_scroll_changed"),&SpriteRegionEditor::_scroll_changed);
- ObjectTypeDB::bind_method(_MD("_node_removed"),&SpriteRegionEditor::_node_removed);
- ObjectTypeDB::bind_method(_MD("_set_use_snap"),&SpriteRegionEditor::_set_use_snap);
- ObjectTypeDB::bind_method(_MD("_set_show_grid"),&SpriteRegionEditor::_set_show_grid);
- ObjectTypeDB::bind_method(_MD("_set_snap_off_x"),&SpriteRegionEditor::_set_snap_off_x);
- ObjectTypeDB::bind_method(_MD("_set_snap_off_y"),&SpriteRegionEditor::_set_snap_off_y);
- ObjectTypeDB::bind_method(_MD("_set_snap_step_x"),&SpriteRegionEditor::_set_snap_step_x);
- ObjectTypeDB::bind_method(_MD("_set_snap_step_y"),&SpriteRegionEditor::_set_snap_step_y);
-}
-
-void SpriteRegionEditor::edit(Node *p_sprite)
-{
- if (p_sprite) {
- node=p_sprite->cast_to<Sprite>();
- node->connect("exit_tree",this,"_node_removed",varray(p_sprite),CONNECT_ONESHOT);
- } else {
- if (node)
- node->disconnect("exit_tree",this,"_node_removed");
- node=NULL;
- }
-
-}
-void SpriteRegionEditor::_edit_node()
-{
- if (node->get_texture().is_null()) {
-
- error->set_text("No texture in this sprite.\nSet a texture to be able to edit Region.");
- error->popup_centered_minsize();
- return;
- }
-
- rect=node->get_region_rect();
- dlg_editor->popup_centered_ratio(0.85);
-}
-
-inline float _snap_scalar(float p_offset, float p_step, float p_target) {
- return p_step != 0 ? Math::stepify(p_target - p_offset, p_step) + p_offset : p_target;
-}
-
-Vector2 SpriteRegionEditor::snap_point(Vector2 p_target) const {
- if (use_snap) {
- p_target.x = _snap_scalar(snap_offset.x, snap_step.x, p_target.x);
- p_target.y = _snap_scalar(snap_offset.y, snap_step.y, p_target.y);
- }
- p_target = p_target.snapped(Size2(1, 1));
-
- return p_target;
-}
-
-SpriteRegionEditor::SpriteRegionEditor(EditorNode* p_editor)
-{
- node=NULL;
- editor=p_editor;
- undo_redo = editor->get_undo_redo();
-
- snap_step=Vector2(10,10);
- use_snap=false;
- snap_show_grid=false;
- drag=false;
-
- add_child( memnew( VSeparator ));
- edit_node = memnew( ToolButton );
- add_child(edit_node);
- edit_node->connect("pressed",this,"_edit_node");
-
- dlg_editor = memnew( AcceptDialog );
- add_child(dlg_editor);
- dlg_editor->set_title(TTR("Sprite Region Editor"));
- dlg_editor->set_self_opacity(0.9);
-
- VBoxContainer *main_vb = memnew( VBoxContainer );
- dlg_editor->add_child(main_vb);
- dlg_editor->set_child_rect(main_vb);
- HBoxContainer *hb_tools = memnew( HBoxContainer );
- main_vb->add_child(hb_tools);
-
- b_snap_enable = memnew( ToolButton );
- hb_tools->add_child(b_snap_enable);
- b_snap_enable->set_text(TTR("Snap"));
- b_snap_enable->set_focus_mode(FOCUS_NONE);
- b_snap_enable->set_toggle_mode(true);
- b_snap_enable->set_pressed(use_snap);
- b_snap_enable->set_tooltip(TTR("Enable Snap"));
- b_snap_enable->connect("toggled",this,"_set_use_snap");
-
- b_snap_grid = memnew( ToolButton );
- hb_tools->add_child(b_snap_grid);
- b_snap_grid->set_text(TTR("Grid"));
- b_snap_grid->set_focus_mode(FOCUS_NONE);
- b_snap_grid->set_toggle_mode(true);
- b_snap_grid->set_pressed(snap_show_grid);
- b_snap_grid->set_tooltip(TTR("Show Grid"));
- b_snap_grid->connect("toggled",this,"_set_show_grid");
-
- hb_tools->add_child( memnew( VSeparator ));
- hb_tools->add_child( memnew( Label(TTR("Grid Offset:")) ) );
-
- sb_off_x = memnew( SpinBox );
- sb_off_x->set_min(-256);
- sb_off_x->set_max(256);
- sb_off_x->set_step(1);
- sb_off_x->set_val(snap_offset.x);
- sb_off_x->set_suffix("px");
- sb_off_x->connect("value_changed", this, "_set_snap_off_x");
- hb_tools->add_child(sb_off_x);
-
- sb_off_y = memnew( SpinBox );
- sb_off_y->set_min(-256);
- sb_off_y->set_max(256);
- sb_off_y->set_step(1);
- sb_off_y->set_val(snap_offset.y);
- sb_off_y->set_suffix("px");
- sb_off_y->connect("value_changed", this, "_set_snap_off_y");
- hb_tools->add_child(sb_off_y);
-
- hb_tools->add_child( memnew( VSeparator ));
- hb_tools->add_child( memnew( Label(TTR("Grid Step:")) ) );
-
- sb_step_x = memnew( SpinBox );
- sb_step_x->set_min(-256);
- sb_step_x->set_max(256);
- sb_step_x->set_step(1);
- sb_step_x->set_val(snap_step.x);
- sb_step_x->set_suffix("px");
- sb_step_x->connect("value_changed", this, "_set_snap_step_x");
- hb_tools->add_child(sb_step_x);
-
- sb_step_y = memnew( SpinBox );
- sb_step_y->set_min(-256);
- sb_step_y->set_max(256);
- sb_step_y->set_step(1);
- sb_step_y->set_val(snap_step.y);
- sb_step_y->set_suffix("px");
- sb_step_y->connect("value_changed", this, "_set_snap_step_y");
- hb_tools->add_child(sb_step_y);
-
- HBoxContainer *main_hb = memnew( HBoxContainer );
- main_vb->add_child(main_hb);
- edit_draw = memnew( Control );
- main_hb->add_child(edit_draw);
- main_hb->set_v_size_flags(SIZE_EXPAND_FILL);
- edit_draw->set_h_size_flags(SIZE_EXPAND_FILL);
-
-
- hb_tools->add_child( memnew( VSeparator ));
- icon_zoom = memnew( TextureFrame );
- hb_tools->add_child(icon_zoom);
-
- zoom = memnew( HSlider );
- zoom->set_min(0.01);
- zoom->set_max(4);
- zoom->set_val(1);
- zoom->set_step(0.01);
- hb_tools->add_child(zoom);
- zoom->set_custom_minimum_size(Size2(200,0));
- zoom_value = memnew( SpinBox );
- zoom->share(zoom_value);
- zoom_value->set_custom_minimum_size(Size2(50,0));
- hb_tools->add_child(zoom_value);
- zoom->connect("value_changed",this,"_scroll_changed");
-
-
-
- vscroll = memnew( VScrollBar);
- main_hb->add_child(vscroll);
- vscroll->connect("value_changed",this,"_scroll_changed");
- hscroll = memnew( HScrollBar );
- main_vb->add_child(hscroll);
- hscroll->connect("value_changed",this,"_scroll_changed");
-
- edit_draw->connect("draw",this,"_region_draw");
- edit_draw->connect("input_event",this,"_region_input");
- draw_zoom=1.0;
- updating_scroll=false;
-
- error = memnew( AcceptDialog);
- add_child(error);
-
-}
-
-void SpriteRegionEditorPlugin::edit(Object *p_node)
-{
- region_editor->edit(p_node->cast_to<Node>());
-}
-
-bool SpriteRegionEditorPlugin::handles(Object *p_node) const
-{
- return p_node->is_type("Sprite");
-}
-
-void SpriteRegionEditorPlugin::make_visible(bool p_visible)
-{
- if (p_visible) {
- region_editor->show();
- } else {
- region_editor->hide();
- region_editor->edit(NULL);
- }
-}
-
-
-Dictionary SpriteRegionEditorPlugin::get_state() const {
-
- Dictionary state;
- state["zoom"]=region_editor->zoom->get_val();
- state["snap_offset"]=region_editor->snap_offset;
- state["snap_step"]=region_editor->snap_step;
- state["use_snap"]=region_editor->use_snap;
- state["snap_show_grid"]=region_editor->snap_show_grid;
- return state;
-}
-
-void SpriteRegionEditorPlugin::set_state(const Dictionary& p_state){
-
- Dictionary state=p_state;
- if (state.has("zoom")) {
- region_editor->zoom->set_val(p_state["zoom"]);
- }
-
- if (state.has("snap_step")) {
- Vector2 s = state["snap_step"];
- region_editor->sb_step_x->set_val(s.x);
- region_editor->sb_step_y->set_val(s.y);
- region_editor->snap_step = s;
- }
-
- if (state.has("snap_offset")) {
- Vector2 ofs = state["snap_offset"];
- region_editor->sb_off_x->set_val(ofs.x);
- region_editor->sb_off_y->set_val(ofs.y);
- region_editor->snap_offset = ofs;
- }
-
- if (state.has("use_snap")) {
- region_editor->use_snap=state["use_snap"];
- region_editor->b_snap_enable->set_pressed(state["use_snap"]);
- }
-
- if (state.has("snap_show_grid")) {
- region_editor->snap_show_grid=state["snap_show_grid"];
- region_editor->b_snap_grid->set_pressed(state["snap_show_grid"]);
- }
-}
-
-SpriteRegionEditorPlugin::SpriteRegionEditorPlugin(EditorNode *p_node)
-{
- editor = p_node;
- region_editor= memnew ( SpriteRegionEditor(p_node) );
- CanvasItemEditor::get_singleton()->add_control_to_menu_panel(region_editor);
-
- region_editor->hide();
-}
-
diff --git a/tools/editor/plugins/sprite_region_editor_plugin.h b/tools/editor/plugins/sprite_region_editor_plugin.h
deleted file mode 100644
index 6fe235c2ea..0000000000
--- a/tools/editor/plugins/sprite_region_editor_plugin.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/*************************************************************************/
-/* sprite_region_editor_plugin.h */
-/*************************************************************************/
-/* This file is part of: */
-/* GODOT ENGINE */
-/* http://www.godotengine.org */
-/*************************************************************************/
-/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */
-/* */
-/* Author: Mariano Suligoy */
-/* */
-/* Permission is hereby granted, free of charge, to any person obtaining */
-/* a copy of this software and associated documentation files (the */
-/* "Software"), to deal in the Software without restriction, including */
-/* without limitation the rights to use, copy, modify, merge, publish, */
-/* distribute, sublicense, and/or sell copies of the Software, and to */
-/* permit persons to whom the Software is furnished to do so, subject to */
-/* the following conditions: */
-/* */
-/* The above copyright notice and this permission notice shall be */
-/* included in all copies or substantial portions of the Software. */
-/* */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
-/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
-/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
-/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
-/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
-/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
-/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
-/*************************************************************************/
-
-#ifndef SPRITE_REGION_EDITOR_PLUGIN_H
-#define SPRITE_REGION_EDITOR_PLUGIN_H
-
-#include "canvas_item_editor_plugin.h"
-#include "tools/editor/editor_plugin.h"
-#include "tools/editor/editor_node.h"
-#include "scene/2d/sprite.h"
-
-class SpriteRegionEditor : public HBoxContainer {
-
- OBJ_TYPE(SpriteRegionEditor, HBoxContainer );
-
- friend class SpriteRegionEditorPlugin;
-
- ToolButton *edit_node;
-// Button *use_region;
- ToolButton *b_snap_enable;
- ToolButton *b_snap_grid;
- TextureFrame *icon_zoom;
- HSlider *zoom;
- SpinBox *zoom_value;
- SpinBox *sb_step_y;
- SpinBox *sb_step_x;
- SpinBox *sb_off_y;
- SpinBox *sb_off_x;
- Control *edit_draw;
-
- VScrollBar *vscroll;
- HScrollBar *hscroll;
-
- Sprite *node;
- EditorNode *editor;
- AcceptDialog *dlg_editor;
- UndoRedo* undo_redo;
-
- Vector2 draw_ofs;
- float draw_zoom;
- bool updating_scroll;
-
- bool use_snap;
- bool snap_show_grid;
- Vector2 snap_offset;
- Vector2 snap_step;
-
- Rect2 rect;
- Rect2 rect_prev;
- bool drag;
- bool creating;
- Vector2 drag_from;
- int drag_index;
-
- AcceptDialog *error;
-
- void _set_use_snap(bool p_use);
- void _set_show_grid(bool p_show);
- void _set_snap_off_x(float p_val);
- void _set_snap_off_y(float p_val);
- void _set_snap_step_x(float p_val);
- void _set_snap_step_y(float p_val);
-
-protected:
-
- void _notification(int p_what);
- void _node_removed(Node *p_node);
- static void _bind_methods();
-
- Vector2 snap_point(Vector2 p_target) const;
-
-public:
-
- void edit();
- void _edit_node();
- void _region_draw();
- void _region_input(const InputEvent &p_input);
- void _scroll_changed(float);
-
- void edit(Node *p_sprite);
- SpriteRegionEditor(EditorNode* p_editor);
-
-};
-
-class SpriteRegionEditorPlugin : public EditorPlugin
-{
-
- OBJ_TYPE( SpriteRegionEditorPlugin, EditorPlugin );
-
- SpriteRegionEditor *region_editor;
- EditorNode *editor;
-public:
-
- virtual String get_name() const { return TTR("SpriteRegion"); }
- bool has_main_screen() const { return false; }
- virtual void edit(Object *p_node);
- virtual bool handles(Object *p_node) const;
- virtual void make_visible(bool p_visible);
- void set_state(const Dictionary &p_state);
- Dictionary get_state() const;
-
- SpriteRegionEditorPlugin(EditorNode *p_node);
-};
-
-#endif // SPRITE_REGION_EDITOR_PLUGIN_H
diff --git a/tools/editor/plugins/stream_editor_plugin.h b/tools/editor/plugins/stream_editor_plugin.h
index 90046a5fdf..5730612d61 100644
--- a/tools/editor/plugins/stream_editor_plugin.h
+++ b/tools/editor/plugins/stream_editor_plugin.h
@@ -69,7 +69,7 @@ class StreamEditorPlugin : public EditorPlugin {
public:
- virtual String get_name() const { return TTR("Stream"); }
+ virtual String get_name() const { return "Stream"; }
bool has_main_screen() const { return false; }
virtual void edit(Object *p_node);
virtual bool handles(Object *p_node) const;
diff --git a/tools/editor/plugins/texture_editor_plugin.cpp b/tools/editor/plugins/texture_editor_plugin.cpp
new file mode 100644
index 0000000000..1305e91105
--- /dev/null
+++ b/tools/editor/plugins/texture_editor_plugin.cpp
@@ -0,0 +1,141 @@
+#include "texture_editor_plugin.h"
+
+#include "io/resource_loader.h"
+#include "globals.h"
+#include "tools/editor/editor_settings.h"
+
+void TextureEditor::_input_event(InputEvent p_event) {
+
+
+}
+
+void TextureEditor::_notification(int p_what) {
+
+ if (p_what==NOTIFICATION_FIXED_PROCESS) {
+
+ }
+
+
+ if (p_what==NOTIFICATION_READY) {
+
+ //get_scene()->connect("node_removed",this,"_node_removed");
+
+ }
+
+ if (p_what==NOTIFICATION_DRAW) {
+
+
+ Ref<Texture> checkerboard = get_icon("Checkerboard","EditorIcons");
+ Size2 size = get_size();
+
+ draw_texture_rect(checkerboard,Rect2(Point2(),size),true);
+
+ int tex_width = texture->get_width() * size.height / texture ->get_height();
+ int tex_height = size.height;
+
+ if (tex_width>size.width) {
+ tex_width=size.width;
+ tex_height=texture->get_height() * tex_width / texture->get_width();
+ }
+
+ int ofs_x = (size.width - tex_width)/2;
+ int ofs_y = (size.height - tex_height)/2;
+
+ draw_texture_rect(texture,Rect2(ofs_x,ofs_y,tex_width,tex_height));
+
+ Ref<Font> font = get_font("font","Label");
+
+ String format;
+ if (texture->cast_to<ImageTexture>()) {
+ format = Image::get_format_name(texture->cast_to<ImageTexture>()->get_format());
+ } else {
+ format=texture->get_type();
+ }
+ String text = itos(texture->get_width())+"x"+itos(texture->get_height())+" "+format;
+
+ Size2 rect = font->get_string_size(text);
+
+ Vector2 draw_from = size-rect+Size2(-2,font->get_ascent()-2);
+ if (draw_from.x<0)
+ draw_from.x=0;
+
+ draw_string(font,draw_from+Vector2(2,2),text,Color(0,0,0,0.5),size.width);
+ draw_string(font,draw_from-Vector2(2,2),text,Color(0,0,0,0.5),size.width);
+ draw_string(font,draw_from,text,Color(1,1,1,1),size.width);
+ }
+}
+
+
+
+void TextureEditor::edit(Ref<Texture> p_texture) {
+
+ texture=p_texture;
+
+ if (!texture.is_null())
+ update();
+ else {
+
+ hide();
+ }
+
+}
+
+
+
+void TextureEditor::_bind_methods() {
+
+ ObjectTypeDB::bind_method(_MD("_input_event"),&TextureEditor::_input_event);
+
+}
+
+TextureEditor::TextureEditor() {
+
+ set_custom_minimum_size(Size2(1,150));
+
+}
+
+
+void TextureEditorPlugin::edit(Object *p_object) {
+
+ Texture * s = p_object->cast_to<Texture>();
+ if (!s)
+ return;
+
+ texture_editor->edit(Ref<Texture>(s));
+}
+
+bool TextureEditorPlugin::handles(Object *p_object) const {
+
+ return p_object->is_type("Texture");
+}
+
+void TextureEditorPlugin::make_visible(bool p_visible) {
+
+ if (p_visible) {
+ texture_editor->show();
+// texture_editor->set_process(true);
+ } else {
+
+ texture_editor->hide();
+// texture_editor->set_process(false);
+ }
+
+}
+
+TextureEditorPlugin::TextureEditorPlugin(EditorNode *p_node) {
+
+ editor=p_node;
+ texture_editor = memnew( TextureEditor );
+ add_control_to_container(CONTAINER_PROPERTY_EDITOR_BOTTOM,texture_editor);
+ texture_editor->hide();
+
+
+
+}
+
+
+TextureEditorPlugin::~TextureEditorPlugin()
+{
+}
+
+
diff --git a/tools/editor/plugins/texture_editor_plugin.h b/tools/editor/plugins/texture_editor_plugin.h
new file mode 100644
index 0000000000..5f58f4fcdb
--- /dev/null
+++ b/tools/editor/plugins/texture_editor_plugin.h
@@ -0,0 +1,49 @@
+#ifndef TEXTURE_EDITOR_PLUGIN_H
+#define TEXTURE_EDITOR_PLUGIN_H
+
+
+
+#include "tools/editor/editor_plugin.h"
+#include "tools/editor/editor_node.h"
+#include "scene/resources/texture.h"
+
+
+class TextureEditor : public Control {
+
+ OBJ_TYPE(TextureEditor, Control);
+
+
+ Ref<Texture> texture;
+
+protected:
+ void _notification(int p_what);
+ void _input_event(InputEvent p_event);
+ static void _bind_methods();
+public:
+
+ void edit(Ref<Texture> p_texture);
+ TextureEditor();
+};
+
+
+class TextureEditorPlugin : public EditorPlugin {
+
+ OBJ_TYPE( TextureEditorPlugin, EditorPlugin );
+
+ TextureEditor *texture_editor;
+ EditorNode *editor;
+
+public:
+
+ virtual String get_name() const { return "Texture"; }
+ bool has_main_screen() const { return false; }
+ virtual void edit(Object *p_node);
+ virtual bool handles(Object *p_node) const;
+ virtual void make_visible(bool p_visible);
+
+ TextureEditorPlugin(EditorNode *p_node);
+ ~TextureEditorPlugin();
+
+};
+
+#endif // TEXTURE_EDITOR_PLUGIN_H
diff --git a/tools/editor/plugins/texture_region_editor_plugin.cpp b/tools/editor/plugins/texture_region_editor_plugin.cpp
new file mode 100644
index 0000000000..b69b0d7a9b
--- /dev/null
+++ b/tools/editor/plugins/texture_region_editor_plugin.cpp
@@ -0,0 +1,728 @@
+/*************************************************************************/
+/* texture_region_editor_plugin.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* http://www.godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */
+/* */
+/* Author: Mariano Suligoy */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#include "texture_region_editor_plugin.h"
+#include "scene/gui/check_box.h"
+#include "os/input.h"
+#include "os/keyboard.h"
+
+void TextureRegionEditor::_region_draw()
+{
+ Ref<Texture> base_tex = NULL;
+ if(node_type == "Sprite" && node_sprite)
+ base_tex = node_sprite->get_texture();
+ else if(node_type == "Patch9Frame" && node_patch9)
+ base_tex = node_patch9->get_texture();
+ else if(node_type == "StyleBoxTexture" && obj_styleBox)
+ base_tex = obj_styleBox->get_texture();
+ if (base_tex.is_null())
+ return;
+
+ Matrix32 mtx;
+ mtx.elements[2]=-draw_ofs;
+ mtx.scale_basis(Vector2(draw_zoom,draw_zoom));
+
+ VS::get_singleton()->canvas_item_set_clip(edit_draw->get_canvas_item(),true);
+ VS::get_singleton()->canvas_item_add_set_transform(edit_draw->get_canvas_item(),mtx);
+ edit_draw->draw_texture(base_tex,Point2());
+ VS::get_singleton()->canvas_item_add_set_transform(edit_draw->get_canvas_item(),Matrix32());
+
+ if (snap_show_grid) {
+ Size2 s = edit_draw->get_size();
+ int last_cell;
+
+ if (snap_step.x!=0) {
+ for(int i=0;i<s.width;i++) {
+ int cell = Math::fast_ftoi(Math::floor((mtx.affine_inverse().xform(Vector2(i,0)).x-snap_offset.x)/snap_step.x));
+ if (i==0)
+ last_cell=cell;
+ if (last_cell!=cell)
+ edit_draw->draw_line(Point2(i,0),Point2(i,s.height),Color(0.3,0.7,1,0.3));
+ last_cell=cell;
+ }
+ }
+
+ if (snap_step.y!=0) {
+ for(int i=0;i<s.height;i++) {
+ int cell = Math::fast_ftoi(Math::floor((mtx.affine_inverse().xform(Vector2(0,i)).y-snap_offset.y)/snap_step.y));
+ if (i==0)
+ last_cell=cell;
+ if (last_cell!=cell)
+ edit_draw->draw_line(Point2(0,i),Point2(s.width,i),Color(0.3,0.7,1,0.3));
+ last_cell=cell;
+ }
+ }
+ }
+
+ Ref<Texture> select_handle = get_icon("EditorHandle","EditorIcons");
+
+ Rect2 scroll_rect(Point2(),mtx.basis_xform(base_tex->get_size()));
+ scroll_rect.expand_to(mtx.basis_xform(edit_draw->get_size()));
+
+ Vector2 endpoints[4]={
+ mtx.basis_xform(rect.pos),
+ mtx.basis_xform(rect.pos+Vector2(rect.size.x,0)),
+ mtx.basis_xform(rect.pos+rect.size),
+ mtx.basis_xform(rect.pos+Vector2(0,rect.size.y))
+ };
+ Color color(0.9,0.5,0.5);
+ if(this->editing_region == REGION_PATCH_MARGIN)
+ color = Color(0.21, 0.79, 0.31);
+ for(int i=0;i<4;i++) {
+
+ int prev = (i+3)%4;
+ int next = (i+1)%4;
+
+ Vector2 ofs = ((endpoints[i] - endpoints[prev]).normalized() + ((endpoints[i] - endpoints[next]).normalized())).normalized();
+ ofs*=1.4144*(select_handle->get_size().width/2);
+
+ edit_draw->draw_line(endpoints[i]-draw_ofs, endpoints[next]-draw_ofs, color , 2);
+
+ edit_draw->draw_texture(select_handle,(endpoints[i]+ofs-(select_handle->get_size()/2)).floor()-draw_ofs);
+
+ ofs = (endpoints[next]-endpoints[i])/2;
+ ofs += (endpoints[next]-endpoints[i]).tangent().normalized()*(select_handle->get_size().width/2);
+
+ edit_draw->draw_texture(select_handle,(endpoints[i]+ofs-(select_handle->get_size()/2)).floor()-draw_ofs);
+
+ scroll_rect.expand_to(endpoints[i]);
+ }
+
+ scroll_rect=scroll_rect.grow(200);
+ updating_scroll=true;
+ hscroll->set_min(scroll_rect.pos.x);
+ hscroll->set_max(scroll_rect.pos.x+scroll_rect.size.x);
+ hscroll->set_page(edit_draw->get_size().x);
+ hscroll->set_val(draw_ofs.x);
+ hscroll->set_step(0.001);
+
+ vscroll->set_min(scroll_rect.pos.y);
+ vscroll->set_max(scroll_rect.pos.y+scroll_rect.size.y);
+ vscroll->set_page(edit_draw->get_size().y);
+ vscroll->set_val(draw_ofs.y);
+ vscroll->set_step(0.001);
+ updating_scroll=false;
+}
+
+void TextureRegionEditor::_region_input(const InputEvent& p_input)
+{
+ Matrix32 mtx;
+ mtx.elements[2]=-draw_ofs;
+ mtx.scale_basis(Vector2(draw_zoom,draw_zoom));
+
+ Vector2 endpoints[8]={
+ mtx.xform(rect.pos)+Vector2(-4,-4),
+ mtx.xform(rect.pos+Vector2(rect.size.x/2,0))+Vector2(0,-4),
+ mtx.xform(rect.pos+Vector2(rect.size.x,0))+Vector2(4,-4),
+ mtx.xform(rect.pos+Vector2(rect.size.x,rect.size.y/2))+Vector2(4,0),
+ mtx.xform(rect.pos+rect.size)+Vector2(4,4),
+ mtx.xform(rect.pos+Vector2(rect.size.x/2,rect.size.y))+Vector2(0,4),
+ mtx.xform(rect.pos+Vector2(0,rect.size.y))+Vector2(-4,4),
+ mtx.xform(rect.pos+Vector2(0,rect.size.y/2))+Vector2(-4,0)
+ };
+
+ if (p_input.type==InputEvent::MOUSE_BUTTON) {
+
+
+ const InputEventMouseButton &mb=p_input.mouse_button;
+
+ if (mb.button_index==BUTTON_LEFT) {
+
+
+ if (mb.pressed) {
+
+ drag_from=mtx.affine_inverse().xform(Vector2(mb.x,mb.y));
+ drag_from=snap_point(drag_from);
+ drag=true;
+ if(node_type == "Sprite" && node_sprite )
+ rect_prev=node_sprite->get_region_rect();
+ else if(node_type == "Patch9Frame" && node_patch9)
+ rect_prev=node_patch9->get_region_rect();
+ else if(node_type == "StyleBoxTexture" && obj_styleBox)
+ rect_prev=obj_styleBox->get_region_rect();
+
+ drag_index=-1;
+ for(int i=0;i<8;i++) {
+
+ Vector2 tuv=endpoints[i];
+ if (tuv.distance_to(Vector2(mb.x,mb.y))<8) {
+ drag_index=i;
+ creating = false;
+ }
+ }
+
+ if (drag_index==-1) {
+ creating = true;
+ rect = Rect2(drag_from,Size2());
+ }
+
+ } else if (drag) {
+ if(editing_region == REGION_TEXTURE_REGION) {
+ undo_redo->create_action("Set region_rect");
+ if(node_type == "Sprite" && node_sprite ){
+ undo_redo->add_do_method(node_sprite ,"set_region_rect",node_sprite->get_region_rect());
+ undo_redo->add_undo_method(node_sprite,"set_region_rect",rect_prev);
+ }
+ else if(node_type == "Patch9Frame" && node_patch9){
+ undo_redo->add_do_method(node_patch9 ,"set_region_rect",node_patch9->get_region_rect());
+ undo_redo->add_undo_method(node_patch9,"set_region_rect",rect_prev);
+ }
+ undo_redo->add_do_method(edit_draw,"update");
+ undo_redo->add_undo_method(edit_draw,"update");
+ undo_redo->commit_action();
+ }
+ drag=false;
+ }
+
+ } else if (mb.button_index==BUTTON_RIGHT && mb.pressed) {
+
+ if (drag) {
+ drag=false;
+ apply_rect(rect_prev);
+ rect=rect_prev;
+ edit_draw->update();
+ }
+
+ } else if (mb.button_index==BUTTON_WHEEL_UP && mb.pressed) {
+
+ zoom->set_val( zoom->get_val()/0.9 );
+ } else if (mb.button_index==BUTTON_WHEEL_DOWN && mb.pressed) {
+
+ zoom->set_val( zoom->get_val()*0.9);
+ }
+
+ } else if (p_input.type==InputEvent::MOUSE_MOTION) {
+
+ const InputEventMouseMotion &mm=p_input.mouse_motion;
+
+ if (mm.button_mask&BUTTON_MASK_MIDDLE || Input::get_singleton()->is_key_pressed(KEY_SPACE)) {
+
+ Vector2 draged(mm.relative_x,mm.relative_y);
+ hscroll->set_val( hscroll->get_val()-draged.x );
+ vscroll->set_val( vscroll->get_val()-draged.y );
+
+ } else if (drag) {
+
+ Vector2 new_pos = mtx.affine_inverse().xform(Vector2(mm.x,mm.y));
+ new_pos = snap_point(new_pos);
+
+ if (creating) {
+ rect = Rect2(drag_from,Size2());
+ rect.expand_to(new_pos);
+ apply_rect(rect);
+ edit_draw->update();
+ return;
+ }
+
+ switch(drag_index) {
+ case 0: {
+ Vector2 p=rect_prev.pos+rect_prev.size;
+ rect = Rect2(p,Size2());
+ rect.expand_to(new_pos);
+ apply_rect(rect);
+ } break;
+ case 1: {
+ Vector2 p=rect_prev.pos+Vector2(0,rect_prev.size.y);
+ rect = Rect2(p,Size2(rect_prev.size.x,0));
+ rect.expand_to(new_pos);
+ apply_rect(rect);
+ } break;
+ case 2: {
+ Vector2 p=rect_prev.pos+Vector2(0,rect_prev.size.y);
+ rect = Rect2(p,Size2());
+ rect.expand_to(new_pos);
+ apply_rect(rect);
+ } break;
+ case 3: {
+ Vector2 p=rect_prev.pos;
+ rect = Rect2(p,Size2(0,rect_prev.size.y));
+ rect.expand_to(new_pos);
+ apply_rect(rect);
+ } break;
+ case 4: {
+ Vector2 p=rect_prev.pos;
+ rect = Rect2(p,Size2());
+ rect.expand_to(new_pos);
+ apply_rect(rect);
+ } break;
+ case 5: {
+ Vector2 p=rect_prev.pos;
+ rect = Rect2(p,Size2(rect_prev.size.x,0));
+ rect.expand_to(new_pos);
+ apply_rect(rect);
+ } break;
+ case 6: {
+ Vector2 p=rect_prev.pos+Vector2(rect_prev.size.x,0);
+ rect = Rect2(p,Size2());
+ rect.expand_to(new_pos);
+ apply_rect(rect);
+ } break;
+ case 7: {
+ Vector2 p=rect_prev.pos+Vector2(rect_prev.size.x,0);
+ rect = Rect2(p,Size2(0,rect_prev.size.y));
+ rect.expand_to(new_pos);
+ apply_rect(rect);
+ } break;
+
+ }
+ edit_draw->update();
+ }
+
+ }
+}
+
+void TextureRegionEditor::_scroll_changed(float)
+{
+ if (updating_scroll)
+ return;
+
+ draw_ofs.x=hscroll->get_val();
+ draw_ofs.y=vscroll->get_val();
+ draw_zoom=zoom->get_val();
+ print_line("_scroll_changed");
+ edit_draw->update();
+}
+
+void TextureRegionEditor::_set_use_snap(bool p_use)
+{
+ use_snap=p_use;
+}
+
+void TextureRegionEditor::_set_show_grid(bool p_show)
+{
+ snap_show_grid=p_show;
+ edit_draw->update();
+}
+
+void TextureRegionEditor::_set_snap_off_x(float p_val)
+{
+ snap_offset.x=p_val;
+ edit_draw->update();
+}
+
+void TextureRegionEditor::_set_snap_off_y(float p_val)
+{
+ snap_offset.y=p_val;
+ edit_draw->update();
+}
+
+void TextureRegionEditor::_set_snap_step_x(float p_val)
+{
+ snap_step.x=p_val;
+ edit_draw->update();
+}
+
+void TextureRegionEditor::_set_snap_step_y(float p_val)
+{
+ snap_step.y=p_val;
+ edit_draw->update();
+}
+
+void TextureRegionEditor::apply_rect(const Rect2& rect){
+
+ if(this->editing_region == REGION_TEXTURE_REGION) {
+ if(node_sprite)
+ node_sprite->set_region_rect(rect);
+ else if(node_patch9)
+ node_patch9->set_region_rect(rect);
+ else if(obj_styleBox)
+ obj_styleBox->set_region_rect(rect);
+ }
+ else if(this->editing_region == REGION_PATCH_MARGIN) {
+ if(node_patch9) {
+ node_patch9->set_patch_margin(MARGIN_LEFT, rect.pos.x - tex_region.pos.x);
+ node_patch9->set_patch_margin(MARGIN_RIGHT, tex_region.pos.x+tex_region.size.width-(rect.pos.x+rect.size.width));
+ node_patch9->set_patch_margin(MARGIN_TOP, rect.pos.y - tex_region.pos.y);
+ node_patch9->set_patch_margin(MARGIN_BOTTOM, tex_region.pos.y+tex_region.size.height-(rect.pos.y+rect.size.height));
+ }
+ else if(obj_styleBox) {
+ obj_styleBox->set_margin_size(MARGIN_LEFT, rect.pos.x - tex_region.pos.x);
+ obj_styleBox->set_margin_size(MARGIN_RIGHT, tex_region.pos.x+tex_region.size.width-(rect.pos.x+rect.size.width));
+ obj_styleBox->set_margin_size(MARGIN_TOP, rect.pos.y - tex_region.pos.y);
+ obj_styleBox->set_margin_size(MARGIN_BOTTOM, tex_region.pos.y+tex_region.size.height-(rect.pos.y+rect.size.height));
+ }
+ }
+}
+
+void TextureRegionEditor::_notification(int p_what)
+{
+ switch(p_what) {
+ case NOTIFICATION_READY: {
+ region_button->set_icon( get_icon("RegionEdit","EditorIcons"));
+ margin_button->set_icon( get_icon("Patch9Frame", "EditorIcons"));
+ b_snap_grid->set_icon( get_icon("Grid", "EditorIcons"));
+ b_snap_enable->set_icon( get_icon("Snap", "EditorIcons"));
+ icon_zoom->set_texture( get_icon("Zoom", "EditorIcons"));
+ } break;
+ }
+}
+
+void TextureRegionEditor::_node_removed(Object *p_obj)
+{
+ if(p_obj == node_sprite || p_obj == node_patch9 || p_obj == obj_styleBox) {
+ node_patch9 = NULL;
+ node_sprite = NULL;
+ obj_styleBox = NULL;
+ hide();
+ }
+}
+
+void TextureRegionEditor::_bind_methods()
+{
+ ObjectTypeDB::bind_method(_MD("_edit_node"),&TextureRegionEditor::_edit_node);
+ ObjectTypeDB::bind_method(_MD("_edit_region"),&TextureRegionEditor::_edit_region);
+ ObjectTypeDB::bind_method(_MD("_edit_margin"),&TextureRegionEditor::_edit_margin);
+ ObjectTypeDB::bind_method(_MD("_region_draw"),&TextureRegionEditor::_region_draw);
+ ObjectTypeDB::bind_method(_MD("_region_input"),&TextureRegionEditor::_region_input);
+ ObjectTypeDB::bind_method(_MD("_scroll_changed"),&TextureRegionEditor::_scroll_changed);
+ ObjectTypeDB::bind_method(_MD("_node_removed"),&TextureRegionEditor::_node_removed);
+ ObjectTypeDB::bind_method(_MD("_set_use_snap"),&TextureRegionEditor::_set_use_snap);
+ ObjectTypeDB::bind_method(_MD("_set_show_grid"),&TextureRegionEditor::_set_show_grid);
+ ObjectTypeDB::bind_method(_MD("_set_snap_off_x"),&TextureRegionEditor::_set_snap_off_x);
+ ObjectTypeDB::bind_method(_MD("_set_snap_off_y"),&TextureRegionEditor::_set_snap_off_y);
+ ObjectTypeDB::bind_method(_MD("_set_snap_step_x"),&TextureRegionEditor::_set_snap_step_x);
+ ObjectTypeDB::bind_method(_MD("_set_snap_step_y"),&TextureRegionEditor::_set_snap_step_y);
+}
+
+void TextureRegionEditor::edit(Object *p_obj)
+{
+ if (p_obj) {
+ margin_button->hide();
+ node_type = p_obj->get_type();
+ if(node_type == "Sprite"){
+ node_sprite = p_obj->cast_to<Sprite>();
+ node_patch9 = NULL;
+ obj_styleBox = NULL;
+ }
+ else if(node_type == "Patch9Frame") {
+ node_patch9 = p_obj->cast_to<Patch9Frame>();
+ node_sprite = NULL;
+ obj_styleBox = NULL;
+ margin_button->show();
+ }
+ else if(node_type == "StyleBoxTexture") {
+ obj_styleBox = p_obj->cast_to<StyleBoxTexture>();
+ node_sprite = NULL;
+ node_patch9 = NULL;
+ margin_button->show();
+ }
+ p_obj->connect("exit_tree",this,"_node_removed",varray(p_obj),CONNECT_ONESHOT);
+ } else {
+ if(node_sprite)
+ node_sprite->disconnect("exit_tree",this,"_node_removed");
+ else if(node_patch9)
+ node_patch9->disconnect("exit_tree",this,"_node_removed");
+ else if(obj_styleBox)
+ obj_styleBox->disconnect("exit_tree",this,"_node_removed");
+ node_sprite = NULL;
+ node_patch9 = NULL;
+ obj_styleBox = NULL;
+ }
+}
+
+void TextureRegionEditor::_edit_region()
+{
+ this->_edit_node(REGION_TEXTURE_REGION);
+ dlg_editor->set_title(TTR("Texture Region Editor"));
+}
+
+void TextureRegionEditor::_edit_margin()
+{
+ this->_edit_node(REGION_PATCH_MARGIN);
+ dlg_editor->set_title(TTR("Scale Region Editor"));
+}
+
+void TextureRegionEditor::_edit_node(int region)
+{
+ Ref<Texture> texture = NULL;
+ if(node_type == "Sprite" && node_sprite )
+ texture = node_sprite->get_texture();
+ else if(node_type == "Patch9Frame" && node_patch9 )
+ texture = node_patch9->get_texture();
+ else if(node_type == "StyleBoxTexture" && obj_styleBox)
+ texture = obj_styleBox->get_texture();
+
+ if (texture.is_null()) {
+ error->set_text(TTR("No texture in this node.\nSet a texture to be able to edit region."));
+ error->popup_centered_minsize();
+ return;
+ }
+
+ if(node_type == "Sprite" && node_sprite )
+ tex_region = node_sprite->get_region_rect();
+ else if(node_type == "Patch9Frame" && node_patch9 )
+ tex_region = node_patch9->get_region_rect();
+ else if(node_type == "StyleBoxTexture" && obj_styleBox)
+ tex_region = obj_styleBox->get_region_rect();
+ rect = tex_region;
+
+ if(region == REGION_PATCH_MARGIN) {
+ if(node_patch9){
+ Patch9Frame *node = node_patch9;
+ rect.pos += Point2(node->get_patch_margin(MARGIN_LEFT),node->get_patch_margin(MARGIN_TOP));
+ rect.size -= Size2(node->get_patch_margin(MARGIN_RIGHT)+node->get_patch_margin(MARGIN_LEFT), node->get_patch_margin(MARGIN_BOTTOM)+node->get_patch_margin(MARGIN_TOP));
+ }
+ else if(obj_styleBox) {
+ StyleBoxTexture * node = obj_styleBox;
+ rect.pos += Point2(node->get_margin_size(MARGIN_LEFT),node->get_margin_size(MARGIN_TOP));
+ rect.size -= Size2(node->get_margin_size(MARGIN_RIGHT)+node->get_margin_size(MARGIN_LEFT), node->get_margin_size(MARGIN_BOTTOM)+node->get_margin_size(MARGIN_TOP));
+ }
+ }
+
+ dlg_editor->popup_centered_ratio(0.85);
+ dlg_editor->get_ok()->release_focus();
+
+ editing_region = region;
+}
+
+inline float _snap_scalar(float p_offset, float p_step, float p_target) {
+ return p_step != 0 ? Math::stepify(p_target - p_offset, p_step) + p_offset : p_target;
+}
+
+Vector2 TextureRegionEditor::snap_point(Vector2 p_target) const {
+ if (use_snap) {
+ p_target.x = _snap_scalar(snap_offset.x, snap_step.x, p_target.x);
+ p_target.y = _snap_scalar(snap_offset.y, snap_step.y, p_target.y);
+ }
+ p_target = p_target.snapped(Size2(1, 1));
+
+ return p_target;
+}
+
+TextureRegionEditor::TextureRegionEditor(EditorNode* p_editor)
+{
+ node_sprite = NULL;
+ node_patch9 = NULL;
+ editor=p_editor;
+ undo_redo = editor->get_undo_redo();
+
+ snap_step=Vector2(10,10);
+ use_snap=false;
+ snap_show_grid=false;
+ drag=false;
+
+ add_child( memnew( VSeparator ));
+ region_button = memnew( ToolButton );
+ add_child(region_button);
+ region_button->set_tooltip(TTR("Texture Region Editor"));
+ region_button->connect("pressed",this,"_edit_region");
+
+ margin_button = memnew( ToolButton );
+ add_child(margin_button);
+ margin_button->set_tooltip(TTR("Scale Region Editor"));
+ margin_button->connect("pressed",this,"_edit_margin");
+
+ dlg_editor = memnew( AcceptDialog );
+ add_child(dlg_editor);
+ dlg_editor->set_self_opacity(0.9);
+
+ VBoxContainer *main_vb = memnew( VBoxContainer );
+ dlg_editor->add_child(main_vb);
+ dlg_editor->set_child_rect(main_vb);
+ HBoxContainer *hb_tools = memnew( HBoxContainer );
+ main_vb->add_child(hb_tools);
+
+ b_snap_enable = memnew( ToolButton );
+ hb_tools->add_child(b_snap_enable);
+ b_snap_enable->set_text(TTR("Snap"));
+ b_snap_enable->set_focus_mode(FOCUS_NONE);
+ b_snap_enable->set_toggle_mode(true);
+ b_snap_enable->set_pressed(use_snap);
+ b_snap_enable->set_tooltip(TTR("Enable Snap"));
+ b_snap_enable->connect("toggled",this,"_set_use_snap");
+
+ b_snap_grid = memnew( ToolButton );
+ hb_tools->add_child(b_snap_grid);
+ b_snap_grid->set_text(TTR("Grid"));
+ b_snap_grid->set_focus_mode(FOCUS_NONE);
+ b_snap_grid->set_toggle_mode(true);
+ b_snap_grid->set_pressed(snap_show_grid);
+ b_snap_grid->set_tooltip(TTR("Show Grid"));
+ b_snap_grid->connect("toggled",this,"_set_show_grid");
+
+ hb_tools->add_child( memnew( VSeparator ));
+ hb_tools->add_child( memnew( Label(TTR("Grid Offset:")) ) );
+
+ sb_off_x = memnew( SpinBox );
+ sb_off_x->set_min(-256);
+ sb_off_x->set_max(256);
+ sb_off_x->set_step(1);
+ sb_off_x->set_val(snap_offset.x);
+ sb_off_x->set_suffix("px");
+ sb_off_x->connect("value_changed", this, "_set_snap_off_x");
+ hb_tools->add_child(sb_off_x);
+
+ sb_off_y = memnew( SpinBox );
+ sb_off_y->set_min(-256);
+ sb_off_y->set_max(256);
+ sb_off_y->set_step(1);
+ sb_off_y->set_val(snap_offset.y);
+ sb_off_y->set_suffix("px");
+ sb_off_y->connect("value_changed", this, "_set_snap_off_y");
+ hb_tools->add_child(sb_off_y);
+
+ hb_tools->add_child( memnew( VSeparator ));
+ hb_tools->add_child( memnew( Label(TTR("Grid Step:")) ) );
+
+ sb_step_x = memnew( SpinBox );
+ sb_step_x->set_min(-256);
+ sb_step_x->set_max(256);
+ sb_step_x->set_step(1);
+ sb_step_x->set_val(snap_step.x);
+ sb_step_x->set_suffix("px");
+ sb_step_x->connect("value_changed", this, "_set_snap_step_x");
+ hb_tools->add_child(sb_step_x);
+
+ sb_step_y = memnew( SpinBox );
+ sb_step_y->set_min(-256);
+ sb_step_y->set_max(256);
+ sb_step_y->set_step(1);
+ sb_step_y->set_val(snap_step.y);
+ sb_step_y->set_suffix("px");
+ sb_step_y->connect("value_changed", this, "_set_snap_step_y");
+ hb_tools->add_child(sb_step_y);
+
+ HBoxContainer *main_hb = memnew( HBoxContainer );
+ main_vb->add_child(main_hb);
+ edit_draw = memnew( Control );
+ main_hb->add_child(edit_draw);
+ main_hb->set_v_size_flags(SIZE_EXPAND_FILL);
+ edit_draw->set_h_size_flags(SIZE_EXPAND_FILL);
+
+
+ hb_tools->add_child( memnew( VSeparator ));
+ icon_zoom = memnew( TextureFrame );
+ hb_tools->add_child(icon_zoom);
+
+ zoom = memnew( HSlider );
+ zoom->set_min(0.01);
+ zoom->set_max(4);
+ zoom->set_val(1);
+ zoom->set_step(0.01);
+ hb_tools->add_child(zoom);
+ zoom->set_custom_minimum_size(Size2(200,0));
+ zoom_value = memnew( SpinBox );
+ zoom->share(zoom_value);
+ zoom_value->set_custom_minimum_size(Size2(50,0));
+ hb_tools->add_child(zoom_value);
+ zoom->connect("value_changed",this,"_scroll_changed");
+
+
+
+ vscroll = memnew( VScrollBar);
+ main_hb->add_child(vscroll);
+ vscroll->connect("value_changed",this,"_scroll_changed");
+ hscroll = memnew( HScrollBar );
+ main_vb->add_child(hscroll);
+ hscroll->connect("value_changed",this,"_scroll_changed");
+
+ edit_draw->connect("draw",this,"_region_draw");
+ edit_draw->connect("input_event",this,"_region_input");
+ draw_zoom=1.0;
+ updating_scroll=false;
+
+ error = memnew( AcceptDialog);
+ add_child(error);
+
+}
+
+void TextureRegionEditorPlugin::edit(Object *p_node)
+{
+ region_editor->edit(p_node);
+}
+
+bool TextureRegionEditorPlugin::handles(Object *p_obj) const
+{
+ return p_obj->is_type("Sprite") || p_obj->is_type("Patch9Frame") || p_obj->is_type("StyleBoxTexture");
+}
+
+void TextureRegionEditorPlugin::make_visible(bool p_visible)
+{
+ if (p_visible) {
+ region_editor->show();
+ } else {
+ region_editor->hide();
+ region_editor->edit(NULL);
+ }
+}
+
+
+Dictionary TextureRegionEditorPlugin::get_state() const {
+
+ Dictionary state;
+ state["zoom"]=region_editor->zoom->get_val();
+ state["snap_offset"]=region_editor->snap_offset;
+ state["snap_step"]=region_editor->snap_step;
+ state["use_snap"]=region_editor->use_snap;
+ state["snap_show_grid"]=region_editor->snap_show_grid;
+ return state;
+}
+
+void TextureRegionEditorPlugin::set_state(const Dictionary& p_state){
+
+ Dictionary state=p_state;
+ if (state.has("zoom")) {
+ region_editor->zoom->set_val(p_state["zoom"]);
+ }
+
+ if (state.has("snap_step")) {
+ Vector2 s = state["snap_step"];
+ region_editor->sb_step_x->set_val(s.x);
+ region_editor->sb_step_y->set_val(s.y);
+ region_editor->snap_step = s;
+ }
+
+ if (state.has("snap_offset")) {
+ Vector2 ofs = state["snap_offset"];
+ region_editor->sb_off_x->set_val(ofs.x);
+ region_editor->sb_off_y->set_val(ofs.y);
+ region_editor->snap_offset = ofs;
+ }
+
+ if (state.has("use_snap")) {
+ region_editor->use_snap=state["use_snap"];
+ region_editor->b_snap_enable->set_pressed(state["use_snap"]);
+ }
+
+ if (state.has("snap_show_grid")) {
+ region_editor->snap_show_grid=state["snap_show_grid"];
+ region_editor->b_snap_grid->set_pressed(state["snap_show_grid"]);
+ }
+}
+
+TextureRegionEditorPlugin::TextureRegionEditorPlugin(EditorNode *p_node)
+{
+ editor = p_node;
+ region_editor= memnew ( TextureRegionEditor(p_node) );
+ CanvasItemEditor::get_singleton()->add_control_to_menu_panel(region_editor);
+
+ region_editor->hide();
+}
diff --git a/tools/editor/plugins/texture_region_editor_plugin.h b/tools/editor/plugins/texture_region_editor_plugin.h
new file mode 100644
index 0000000000..951b11e1e6
--- /dev/null
+++ b/tools/editor/plugins/texture_region_editor_plugin.h
@@ -0,0 +1,146 @@
+/*************************************************************************/
+/* texture_region_editor_plugin.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* http://www.godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */
+/* */
+/* Author: Mariano Suligoy */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#ifndef TEXTURE_REGION_EDITOR_PLUGIN_H
+#define TEXTURE_REGION_EDITOR_PLUGIN_H
+
+#include "canvas_item_editor_plugin.h"
+#include "tools/editor/editor_plugin.h"
+#include "tools/editor/editor_node.h"
+#include "scene/2d/sprite.h"
+#include "scene/gui/patch_9_frame.h"
+#include "scene/resources/style_box.h"
+
+class TextureRegionEditor : public HBoxContainer {
+
+ OBJ_TYPE(TextureRegionEditor, HBoxContainer );
+ enum RegionType {
+ REGION_TEXTURE_REGION,
+ REGION_PATCH_MARGIN
+ };
+
+ friend class TextureRegionEditorPlugin;
+ ToolButton *region_button;
+ ToolButton *margin_button;
+ ToolButton *b_snap_enable;
+ ToolButton *b_snap_grid;
+ TextureFrame *icon_zoom;
+ HSlider *zoom;
+ SpinBox *zoom_value;
+ SpinBox *sb_step_y;
+ SpinBox *sb_step_x;
+ SpinBox *sb_off_y;
+ SpinBox *sb_off_x;
+ Control *edit_draw;
+
+ VScrollBar *vscroll;
+ HScrollBar *hscroll;
+
+ EditorNode *editor;
+ AcceptDialog *dlg_editor;
+ UndoRedo* undo_redo;
+
+ Vector2 draw_ofs;
+ float draw_zoom;
+ bool updating_scroll;
+
+ bool use_snap;
+ bool snap_show_grid;
+ Vector2 snap_offset;
+ Vector2 snap_step;
+
+
+ String node_type;
+ Patch9Frame *node_patch9;
+ Sprite *node_sprite;
+ StyleBoxTexture *obj_styleBox;
+
+ int editing_region;
+ Rect2 rect;
+ Rect2 rect_prev;
+ Rect2 tex_region;
+
+ bool drag;
+ bool creating;
+ Vector2 drag_from;
+ int drag_index;
+
+ AcceptDialog *error;
+
+ void _set_use_snap(bool p_use);
+ void _set_show_grid(bool p_show);
+ void _set_snap_off_x(float p_val);
+ void _set_snap_off_y(float p_val);
+ void _set_snap_step_x(float p_val);
+ void _set_snap_step_y(float p_val);
+ void apply_rect(const Rect2& rect);
+protected:
+
+ void _notification(int p_what);
+ void _node_removed(Object *p_obj);
+ static void _bind_methods();
+
+ Vector2 snap_point(Vector2 p_target) const;
+
+public:
+
+ void _edit_node(int tex_region);
+ void _edit_region();
+ void _edit_margin();
+ void _region_draw();
+ void _region_input(const InputEvent &p_input);
+ void _scroll_changed(float);
+
+ void edit(Object *p_obj);
+ TextureRegionEditor(EditorNode* p_editor);
+
+};
+
+class TextureRegionEditorPlugin : public EditorPlugin
+{
+ OBJ_TYPE( TextureRegionEditorPlugin, EditorPlugin );
+
+ TextureRegionEditor *region_editor;
+ EditorNode *editor;
+public:
+
+ virtual String get_name() const { return "SpriteRegion"; }
+ bool has_main_screen() const { return false; }
+ virtual void edit(Object *p_node);
+ virtual bool handles(Object *p_node) const;
+ virtual void make_visible(bool p_visible);
+ void set_state(const Dictionary &p_state);
+ Dictionary get_state() const;
+
+ TextureRegionEditorPlugin(EditorNode *p_node);
+};
+
+#endif // TEXTURE_REGION_EDITOR_PLUGIN_H
diff --git a/tools/editor/plugins/theme_editor_plugin.cpp b/tools/editor/plugins/theme_editor_plugin.cpp
index 3c394ab6ac..37cb0398e7 100644
--- a/tools/editor/plugins/theme_editor_plugin.cpp
+++ b/tools/editor/plugins/theme_editor_plugin.cpp
@@ -199,7 +199,7 @@ void ThemeEditor::_save_template_cbk(String fname) {
if (!file) {
- ERR_EXPLAIN(TTR("Can't save theme to file: ")+filename);
+ ERR_EXPLAIN(TTR("Can't save theme to file:")+" "+filename);
return;
}
file->store_line("; ******************* ");
@@ -398,7 +398,7 @@ void ThemeEditor::_dialog_cbk() {
}
- } break;
+ } break;
case POPUP_CLASS_REMOVE: {
StringName fromtype = type_edit->get_text();
List<StringName> names;
@@ -599,7 +599,7 @@ ThemeEditor::ThemeEditor() {
theme_menu->get_popup()->add_item(TTR("Add Item"),POPUP_ADD);
theme_menu->get_popup()->add_item(TTR("Add Class Items"),POPUP_CLASS_ADD);
theme_menu->get_popup()->add_item(TTR("Remove Item"),POPUP_REMOVE);
- theme_menu->get_popup()->add_item("Remove Class Items",POPUP_CLASS_REMOVE);
+ theme_menu->get_popup()->add_item(TTR("Remove Class Items"),POPUP_CLASS_REMOVE);
theme_menu->get_popup()->add_separator();
theme_menu->get_popup()->add_item(TTR("Create Template"),POPUP_CREATE_TEMPLATE);
hb_menu->add_child(theme_menu);
@@ -757,7 +757,7 @@ ThemeEditor::ThemeEditor() {
line_edit = memnew( LineEdit );
line_edit->set_pos( Point2( 25, 275 ) );
line_edit->set_size( Point2( 150, 5 ) );
- line_edit->set_text(TTR("Line Edit"));
+ line_edit->set_text("Line Edit");
panel->add_child(line_edit);
test_v_scroll = memnew( VScrollBar );
@@ -786,12 +786,12 @@ ThemeEditor::ThemeEditor() {
item = test_tree->create_item( test_tree->get_root() );
item->set_cell_mode(0, TreeItem::CELL_MODE_RANGE);
item->set_editable(0,true);
- item->set_text(0,TTR("Have,Many,Several,Options!"));
+ item->set_text(0,"Have,Many,Several,Options!"));
item->set_range(0,2);
Button *fd_button= memnew( Button );
fd_button->set_pos(Point2(300,275));
- fd_button->set_text(TTR("Open File Dialog"));
+ fd_button->set_text("Open File Dialog");
panel->add_child(fd_button);
test_file_dialog = memnew( EditorFileDialog );
@@ -852,8 +852,8 @@ ThemeEditor::ThemeEditor() {
type_select = memnew( OptionButton );
type_select->add_item(TTR("Icon"));
type_select->add_item(TTR("Style"));
- type_select->add_item("Font");
- type_select->add_item("Color");
+ type_select->add_item(TTR("Font"));
+ type_select->add_item(TTR("Color"));
type_select->add_item(TTR("Constant"));
type_select->set_pos( Point2( 400,25 ) );
type_select->set_size( Point2( 80,5 ) );
diff --git a/tools/editor/plugins/tile_map_editor_plugin.cpp b/tools/editor/plugins/tile_map_editor_plugin.cpp
index 843fc35d8b..6d5f2a519c 100644
--- a/tools/editor/plugins/tile_map_editor_plugin.cpp
+++ b/tools/editor/plugins/tile_map_editor_plugin.cpp
@@ -205,7 +205,9 @@ void TileMapEditor::_update_palette() {
if (tiles.empty())
return;
+
palette->set_max_columns(0);
+ palette->add_constant_override("hseparation", 6);
palette->set_icon_mode(ItemList::ICON_MODE_TOP);
palette->set_max_text_lines(2);
@@ -239,6 +241,8 @@ void TileMapEditor::_update_palette() {
palette->set_item_metadata(palette->get_item_count()-1, E->get());
}
+
+ palette->set_same_column_width(true);
if (selected != -1)
set_selected_tile(selected);
@@ -1208,6 +1212,13 @@ void TileMapEditor::_tileset_settings_changed() {
canvas_item_editor->update();
}
+void TileMapEditor::_icon_size_changed(float p_value) {
+ if (node) {
+ palette->set_icon_scale(p_value);
+ _update_palette();
+ }
+}
+
void TileMapEditor::_bind_methods() {
ObjectTypeDB::bind_method(_MD("_text_entered"),&TileMapEditor::_text_entered);
@@ -1222,6 +1233,8 @@ void TileMapEditor::_bind_methods() {
ObjectTypeDB::bind_method(_MD("_fill_points"),&TileMapEditor::_fill_points);
ObjectTypeDB::bind_method(_MD("_erase_points"),&TileMapEditor::_erase_points);
+
+ ObjectTypeDB::bind_method(_MD("_icon_size_changed"), &TileMapEditor::_icon_size_changed);
}
TileMapEditor::CellOp TileMapEditor::_get_op_from_cell(const Point2i& p_pos)
@@ -1297,6 +1310,15 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) {
search_box->connect("input_event", this, "_sbox_input");
add_child(search_box);
+ size_slider = memnew( HSlider );
+ size_slider->set_h_size_flags(SIZE_EXPAND_FILL);
+ size_slider->set_min(0.1f);
+ size_slider->set_max(4.0f);
+ size_slider->set_step(0.1f);
+ size_slider->set_val(1.0f);
+ size_slider->connect("value_changed", this, "_icon_size_changed");
+ add_child(size_slider);
+
int mw = EDITOR_DEF("tile_map/palette_min_width", 80);
// Add tile palette
@@ -1318,13 +1340,13 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) {
PopupMenu *p = options->get_popup();
- p->add_item("Bucket", OPTION_BUCKET);
+ p->add_item(TTR("Bucket"), OPTION_BUCKET);
p->add_separator();
- p->add_item("Pick Tile", OPTION_PICK_TILE, KEY_CONTROL);
+ p->add_item(TTR("Pick Tile"), OPTION_PICK_TILE, KEY_CONTROL);
p->add_separator();
- p->add_item("Select", OPTION_SELECT, KEY_MASK_CMD+KEY_B);
+ p->add_item(TTR("Select"), OPTION_SELECT, KEY_MASK_CMD+KEY_B);
p->add_item(TTR("Duplicate Selection"), OPTION_DUPLICATE, KEY_MASK_CMD+KEY_D);
- p->add_item("Erase Selection", OPTION_ERASE_SELECTION, KEY_DELETE);
+ p->add_item(TTR("Erase Selection"), OPTION_ERASE_SELECTION, KEY_DELETE);
p->connect("item_pressed", this, "_menu_option");
diff --git a/tools/editor/plugins/tile_map_editor_plugin.h b/tools/editor/plugins/tile_map_editor_plugin.h
index b1da1bc48e..f586c5bf13 100644
--- a/tools/editor/plugins/tile_map_editor_plugin.h
+++ b/tools/editor/plugins/tile_map_editor_plugin.h
@@ -76,6 +76,7 @@ class TileMapEditor : public VBoxContainer {
Control *canvas_item_editor;
LineEdit *search_box;
+ HSlider *size_slider;
ItemList *palette;
HBoxContainer *toolbar;
@@ -130,7 +131,7 @@ class TileMapEditor : public VBoxContainer {
void _fill_points(const DVector<Vector2> p_points, const Dictionary& p_op);
void _erase_points(const DVector<Vector2> p_points);
-
+
void _select(const Point2i& p_from, const Point2i& p_to);
void _draw_cell(int p_cell, const Point2i& p_point, bool p_flip_h, bool p_flip_v, bool p_transpose, const Matrix32& p_xform);
@@ -151,6 +152,7 @@ class TileMapEditor : public VBoxContainer {
void _canvas_mouse_enter();
void _canvas_mouse_exit();
void _tileset_settings_changed();
+ void _icon_size_changed(float p_value);
protected:
diff --git a/tools/editor/plugins/tile_set_editor_plugin.cpp b/tools/editor/plugins/tile_set_editor_plugin.cpp
index b77d3fb5b3..a2c7147bf3 100644
--- a/tools/editor/plugins/tile_set_editor_plugin.cpp
+++ b/tools/editor/plugins/tile_set_editor_plugin.cpp
@@ -175,7 +175,7 @@ void TileSetEditor::_name_dialog_confirm(const String& name) {
if (tileset->has_tile(id)) {
tileset->remove_tile(id);
} else {
- err_dialog->set_text(TTR("Could not find tile: ") + name);
+ err_dialog->set_text(TTR("Could not find tile:")+" " + name);
err_dialog->popup_centered(Size2(300, 60));
}
} break;
diff --git a/tools/editor/progress_dialog.cpp b/tools/editor/progress_dialog.cpp
index 2814101a27..a950f7acfc 100644
--- a/tools/editor/progress_dialog.cpp
+++ b/tools/editor/progress_dialog.cpp
@@ -30,7 +30,7 @@
#include "main/main.h"
#include "message_queue.h"
#include "os/os.h"
-
+#include "editor_scale.h"
void BackgroundProgress::_add_task(const String& p_task,const String& p_label, int p_steps) {
_THREAD_SAFE_METHOD_
@@ -48,7 +48,7 @@ void BackgroundProgress::_add_task(const String& p_task,const String& p_label, i
ec->set_v_size_flags(SIZE_EXPAND_FILL);
t.progress->set_area_as_parent_rect();
ec->add_child(t.progress);
- ec->set_custom_minimum_size(Size2(80,5));
+ ec->set_custom_minimum_size(Size2(80,5)*EDSCALE);
t.hb->add_child(ec);
add_child(t.hb);
@@ -160,7 +160,7 @@ void ProgressDialog::_notification(int p_what) {
void ProgressDialog::_popup() {
Size2 ms = main->get_combined_minimum_size();
- ms.width = MAX(500,ms.width);
+ ms.width = MAX(500*EDSCALE,ms.width);
Ref<StyleBox> style = get_stylebox("panel","PopupMenu");
diff --git a/tools/editor/project_export.cpp b/tools/editor/project_export.cpp
index adb15c1f00..3b02c73189 100644
--- a/tools/editor/project_export.cpp
+++ b/tools/editor/project_export.cpp
@@ -470,7 +470,7 @@ void ProjectExportDialog::_export_action(const String& p_file) {
/* Checked if the export location is outside the project directory,
* now will check if a file name has been entered */
if (p_file.ends_with("/")) {
-
+
error->set_text("Please enter a file name!");
error->popup_centered_minsize();
return;
@@ -505,7 +505,7 @@ void ProjectExportDialog::_export_action_pck(const String& p_file) {
if (p_file.ends_with(".pck")) {
FileAccess *f = FileAccess::open(p_file,FileAccess::WRITE);
if (!f) {
- error->set_text(TTR("Error exporting project PCK! Can't write"));
+ error->set_text(TTR("Error writing the project PCK!"));
error->popup_centered_minsize();
}
ERR_FAIL_COND(!f);
@@ -586,7 +586,7 @@ void ProjectExportDialog::custom_action(const String&) {
Ref<EditorExportPlatform> exporter = EditorImportExport::get_singleton()->get_export_platform(platform);
if (exporter.is_null()) {
- error->set_text(TTR("No exporter for platform '")+platform+"' yet.");
+ error->set_text(vformat(TTR("No exporter for platform '%s' yet."),platform));
error->popup_centered_minsize();
return;
}
@@ -858,17 +858,17 @@ void ProjectExportDialog::_group_add() {
if (name=="") {
group_new_name_error->show();
- group_new_name_error->set_text(TTR("Group Name Can't be Empty!"));
+ group_new_name_error->set_text(TTR("Group name can't be empty!"));
return;
}
if (name.find("/")!=-1 || name.find(":")!=-1 || name.find(",")!=-1 || name.find("-")!=-1) {
- group_new_name_error->set_text(TTR("Invalid Character in Group Name!"));
+ group_new_name_error->set_text(TTR("Invalid character in group name!"));
group_new_name_error->show();
return;
}
if (EditorImportExport::get_singleton()->image_export_has_group(name)) {
- group_new_name_error->set_text(TTR("Group Name Already Exists!"));
+ group_new_name_error->set_text(TTR("Group name already exists!"));
group_new_name_error->show();
return;
}
@@ -1057,17 +1057,17 @@ void ProjectExportDialog::_group_atlas_preview() {
imd->set_option("atlas",true);
imd->set_option("crop",true);
- Ref<EditorTextureImportPlugin> plugin = EditorImportExport::get_singleton()->get_import_plugin_by_name("texture_atlas");
+ Ref<EditorTextureImportPlugin> plugin = EditorImportExport::get_singleton()->get_import_plugin_by_name("texture");
Error err = plugin->import2(dst_file,imd,EditorExportPlatform::IMAGE_COMPRESSION_NONE,true);
if (err) {
- EditorNode::add_io_error(TTR("Error saving atlas! ")+dst_file.get_file());
+ EditorNode::add_io_error(TTR("Error saving atlas:")+" "+dst_file.get_file());
return;
}
Ref<Texture> tex = ResourceLoader::load(dst_file);
atlas_preview_frame->set_texture(tex); //clear previous
- atlas_preview_dialog->set_title(TTR("Atlas Preview (")+itos(tex->get_width())+"x"+itos(tex->get_height())+")");
+ atlas_preview_dialog->set_title(TTR("Atlas Preview")+" ("+itos(tex->get_width())+"x"+itos(tex->get_height())+")");
atlas_preview_dialog->popup_centered_ratio(0.9);
}
@@ -1211,14 +1211,14 @@ ProjectExportDialog::ProjectExportDialog(EditorNode *p_editor) {
tree->set_column_min_width(1,90);
filters = memnew( LineEdit );
- vb->add_margin_child(TTR("Filters to export non-resource files (Comma Separated, eg: *.json, *.txt):"),filters);
+ vb->add_margin_child(TTR("Filters to export non-resource files (comma-separated, e.g.: *.json, *.txt):"),filters);
filters->connect("text_changed",this,"_filters_edited");
filters_exclude = memnew( LineEdit );
- vb->add_margin_child(TTR("Filters to exclude from export (Comma Separated, eg: *.json, *.txt):"),filters_exclude);
+ vb->add_margin_child(TTR("Filters to exclude from export (comma-separated, e.g.: *.json, *.txt):"),filters_exclude);
filters_exclude->connect("text_changed",this,"_filters_exclude_edited");
convert_text_scenes = memnew( CheckButton );
- convert_text_scenes->set_text(TTR("Convert text scenes to binary on export"));
+ convert_text_scenes->set_text(TTR("Convert text scenes to binary on export."));
vb->add_child(convert_text_scenes);
convert_text_scenes->connect("toggled",this,"_export_mode_changed");
@@ -1260,7 +1260,7 @@ ProjectExportDialog::ProjectExportDialog(EditorNode *p_editor) {
fmt->set_editable(0,true);
formats.push_back(fmt);
}
- image_vb->add_margin_child(TTR("Compress Formats: "),image_formats,true);
+ image_vb->add_margin_child(TTR("Compress Formats:")+" ",image_formats,true);
/// groups
HBoxContainer *group_hb = memnew( HBoxContainer );
@@ -1384,7 +1384,7 @@ ProjectExportDialog::ProjectExportDialog(EditorNode *p_editor) {
group_images->set_column_expand(1,false);
group_images->set_column_min_width(1,100);
group_images->set_column_titles_visible(true);
- group_images->set_column_title(0,"Image");
+ group_images->set_column_title(0,TTR("Images"));
group_images->set_column_title(1,TTR("Group"));
group_images->connect("item_edited",this,"_group_item_edited",varray(),CONNECT_DEFERRED);
@@ -1421,13 +1421,13 @@ ProjectExportDialog::ProjectExportDialog(EditorNode *p_editor) {
sample_max_hz = memnew( SpinBox );
sample_max_hz->set_max(192000);
sample_max_hz->set_min(8000);
- sample_vbox->add_margin_child(TTR("Sampling Rate Limit: (hz)"),sample_max_hz);
+ sample_vbox->add_margin_child(TTR("Sampling Rate Limit (Hz):"),sample_max_hz);
sample_trim = memnew( CheckButton );
sample_trim->set_text(TTR("Trim"));
sample_vbox->add_margin_child(TTR("Trailing Silence:"),sample_trim);
script_vbox = memnew( VBoxContainer );
- script_vbox->set_name("Script");
+ script_vbox->set_name(TTR("Script"));
sections->add_child(script_vbox);
script_mode = memnew( OptionButton );
script_vbox->add_margin_child(TTR("Script Export Mode:"),script_mode);
@@ -1529,7 +1529,7 @@ Error ProjectExport::export_project(const String& p_preset) {
String preset_path=Globals::get_singleton()->get("export_presets_path/"+selected);
if (preset_path=="") {
- error->set_text(TTR("Export path empty, see export options"));
+ error->set_text("Export path empty, see export options");
error->popup_centered_minsize(Size2(300,100));
ERR_FAIL_V(ERR_INVALID_DATA);
}
@@ -1551,9 +1551,9 @@ Error ProjectExport::export_project(const String& p_preset) {
}
if (pc%3 != 0 ) {
memdelete(d);
- error->set_text(TTR("Corrupted export data.."));
+ error->set_text("Corrupted export data..");
error->popup_centered_minsize(Size2(300,100));
- ERR_EXPLAIN(TTR("Corrupted export data..."));
+ ERR_EXPLAIN("Corrupted export data...");
ERR_FAIL_V(ERR_INVALID_DATA);
}
@@ -1706,7 +1706,7 @@ Error ProjectExport::export_project(const String& p_preset) {
if (err!=OK) {
memdelete(da);
memdelete(d);
- ERR_EXPLAIN(TTR("Cannot make dir: ")+cwd+"/"+p);
+ ERR_EXPLAIN("Cannot make dir: "+cwd+"/"+p);
ERR_FAIL_V(ERR_CANT_CREATE);
}
@@ -1714,7 +1714,7 @@ Error ProjectExport::export_project(const String& p_preset) {
memdelete(da);
memdelete(d);
- ERR_EXPLAIN(TTR("Cannot change to dir: ")+cwd+"/"+p);
+ ERR_EXPLAIN("Cannot change to dir: "+cwd+"/"+p);
ERR_FAIL_V(ERR_CANT_CREATE);
}
@@ -1742,7 +1742,7 @@ Error ProjectExport::export_project(const String& p_preset) {
if (!Globals::get_singleton()->has("optimizer_presets/"+preset)) {
memdelete(d);
- ERR_EXPLAIN(TTR("Unknown optimizer preset: ")+preset);
+ ERR_EXPLAIN("Unknown optimizer preset: "+preset);
ERR_FAIL_V(ERR_INVALID_DATA);
}
@@ -1763,7 +1763,7 @@ Error ProjectExport::export_project(const String& p_preset) {
if (saver.is_null()) {
memdelete(d);
- ERR_EXPLAIN(TTR("Preset '")+preset+"' references nonexistent saver: "+type);
+ ERR_EXPLAIN("Preset '"+preset+"' references nonexistent saver: "+type);
ERR_FAIL_COND_V(saver.is_null(),ERR_INVALID_DATA);
}
@@ -1807,7 +1807,7 @@ Error ProjectExport::export_project(const String& p_preset) {
if (res.is_null()) {
memdelete(d);
- ERR_EXPLAIN(TTR("Errr loading resource to optimize: ")+path);
+ ERR_EXPLAIN("Error loading resource to optimize: "+path);
ERR_FAIL_V(ERR_INVALID_DATA);
}
@@ -1830,7 +1830,7 @@ Error ProjectExport::export_project(const String& p_preset) {
Error err = ResourceSaver::save(write_file,res,flags,saver);
if (err) {
memdelete(d);
- ERR_EXPLAIN(TTR("Errr saving optimized resource: ")+write_file);
+ ERR_EXPLAIN("Error saving optimized resource: "+write_file);
ERR_FAIL_COND_V(err,ERR_CANT_OPEN);
}
source_file=write_file;
@@ -1853,7 +1853,7 @@ Error ProjectExport::export_project(const String& p_preset) {
if (err) {
- ERR_EXPLAIN(TTR("Error copying from: ")+source_file+" to "+dst_file+".");
+ ERR_EXPLAIN("Error copying from: "+source_file+" to "+dst_file+".");
ERR_FAIL_COND_V(err,err);
}
diff --git a/tools/editor/project_manager.cpp b/tools/editor/project_manager.cpp
index abc64cd9cb..84d6a87688 100644
--- a/tools/editor/project_manager.cpp
+++ b/tools/editor/project_manager.cpp
@@ -45,8 +45,9 @@
#include "io/resource_saver.h"
#include "editor_icons.h"
+#include "editor_fonts.h"
-
+#include "editor_scale.h"
class NewProjectDialog : public ConfirmationDialog {
@@ -66,7 +67,7 @@ class NewProjectDialog : public ConfirmationDialog {
get_ok()->set_disabled(true);
DirAccess *d = DirAccess::create(DirAccess::ACCESS_FILESYSTEM);
if (project_path->get_text() != "" && d->change_dir(project_path->get_text())!=OK) {
- error->set_text(TTR("Invalid Path for Project, Path Must Exist!"));
+ error->set_text(TTR("Invalid project path, the path must exist!"));
memdelete(d);
return false;
}
@@ -75,7 +76,7 @@ class NewProjectDialog : public ConfirmationDialog {
if (d->file_exists("engine.cfg")) {
- error->set_text(TTR("Invalid Project Path (engine.cfg must not exist)."));
+ error->set_text(TTR("Invalid project path, engine.cfg must not exist."));
memdelete(d);
return false;
}
@@ -84,7 +85,7 @@ class NewProjectDialog : public ConfirmationDialog {
if (project_path->get_text() != "" && !d->file_exists("engine.cfg")) {
- error->set_text(TTR("Invalid Project Path (engine.cfg must exist)."));
+ error->set_text(TTR("Invalid project path, engine.cfg must exist."));
memdelete(d);
return false;
}
@@ -170,7 +171,7 @@ class NewProjectDialog : public ConfirmationDialog {
DirAccess *d = DirAccess::create(DirAccess::ACCESS_FILESYSTEM);
if (d->change_dir(project_path->get_text())!=OK) {
- error->set_text(TTR("Invalid Path for Project (changed anything?)"));
+ error->set_text(TTR("Invalid project path (changed anything?)."));
memdelete(d);
return;
}
@@ -180,7 +181,7 @@ class NewProjectDialog : public ConfirmationDialog {
FileAccess *f = FileAccess::open(dir.plus_file("/engine.cfg"),FileAccess::WRITE);
if (!f) {
- error->set_text(TTR("Couldn't create engine.cfg in project path"));
+ error->set_text(TTR("Couldn't create engine.cfg in project path."));
} else {
f->store_line("; Engine configuration file.");
@@ -247,7 +248,7 @@ public:
if (import_mode) {
set_title(TTR("Import Existing Project"));
get_ok()->set_text(TTR("Import"));
- pp->set_text(TTR("Project Path: (Must exist)"));
+ pp->set_text(TTR("Project Path (Must Exist):"));
pn->set_text(TTR("Project Name:"));
pn->hide();
project_name->hide();
@@ -788,7 +789,7 @@ void ProjectManager::_erase_project() {
return;
- erase_ask->set_text(TTR("Remove project from list?? (Folder contents will not be modified)"));
+ erase_ask->set_text(TTR("Remove project from the list? (Folder contents will not be modified)"));
erase_ask->popup_centered_minsize();
}
@@ -822,13 +823,24 @@ void ProjectManager::_bind_methods() {
ProjectManager::ProjectManager() {
- int margin = get_constant("margin",TTR("Dialogs"));
- int button_margin = get_constant("button_margin",TTR("Dialogs"));
+ int margin = get_constant("margin","Dialogs");
+ int button_margin = get_constant("button_margin","Dialogs");
// load settings
if (!EditorSettings::get_singleton())
EditorSettings::create();
+ {
+ int dpi_mode = EditorSettings::get_singleton()->get("global/hidpi_mode");
+ if (dpi_mode==0) {
+ editor_set_hidpi( OS::get_singleton()->get_screen_dpi(0) > 150 );
+ } else if (dpi_mode==2) {
+ editor_set_hidpi(true);
+ } else {
+ editor_set_hidpi(false);
+ }
+ }
+
FileDialog::set_default_show_hidden_files(EditorSettings::get_singleton()->get("file_dialog/show_hidden_files"));
set_area_as_parent_rect();
@@ -836,6 +848,7 @@ ProjectManager::ProjectManager() {
Ref<Theme> theme = Ref<Theme>( memnew( Theme ) );
set_theme(theme);
editor_register_icons(theme);
+ editor_register_fonts(theme);
String global_font = EditorSettings::get_singleton()->get("global/font");
if (global_font!="") {
@@ -999,8 +1012,8 @@ ProjectManager::ProjectManager() {
_scan_begin( EditorSettings::get_singleton()->get("global/autoscan_project_path") );
}
- //get_ok()->set_text(TTR("Open"));
- //get_ok()->set_text(TTR("Exit"));
+ //get_ok()->set_text("Open");
+ //get_ok()->set_text("Exit");
last_clicked = "";
}
@@ -1016,7 +1029,7 @@ void ProjectListFilter::_setup_filters() {
filter_option->clear();
filter_option->add_item(TTR("Name"));
- filter_option->add_item("Path");
+ filter_option->add_item(TTR("Path"));
}
void ProjectListFilter::_command(int p_command) {
diff --git a/tools/editor/project_settings.cpp b/tools/editor/project_settings.cpp
index d69d565795..6822e50b73 100644
--- a/tools/editor/project_settings.cpp
+++ b/tools/editor/project_settings.cpp
@@ -81,10 +81,10 @@ void ProjectSettings::_notification(int p_what) {
translation_list->connect("button_pressed",this,"_translation_delete");
_update_actions();
- popup_add->add_icon_item(get_icon("Keyboard","EditorIcons"),"Key",InputEvent::KEY);
- popup_add->add_icon_item(get_icon("JoyButton","EditorIcons"),"Joy Button",InputEvent::JOYSTICK_BUTTON);
- popup_add->add_icon_item(get_icon("JoyAxis","EditorIcons"),"Joy Axis",InputEvent::JOYSTICK_MOTION);
- popup_add->add_icon_item(get_icon("Mouse","EditorIcons"),"Mouse Button",InputEvent::MOUSE_BUTTON);
+ popup_add->add_icon_item(get_icon("Keyboard","EditorIcons"),TTR("Key "),InputEvent::KEY);//"Key " - because the word 'key' has already been used as a key animation
+ popup_add->add_icon_item(get_icon("JoyButton","EditorIcons"),TTR("Joy Button"),InputEvent::JOYSTICK_BUTTON);
+ popup_add->add_icon_item(get_icon("JoyAxis","EditorIcons"),TTR("Joy Axis"),InputEvent::JOYSTICK_MOTION);
+ popup_add->add_icon_item(get_icon("Mouse","EditorIcons"),TTR("Mouse Button"),InputEvent::MOUSE_BUTTON);
List<String> tfn;
ResourceLoader::get_recognized_extensions_for_type("Translation",&tfn);
@@ -139,7 +139,7 @@ void ProjectSettings::_action_edited() {
ti->set_text(0,old_name);
add_at="input/"+old_name;
- message->set_text(TTR("Invalid Action (Anything goes but / or :)."));
+ message->set_text(TTR("Invalid action (anything goes but '/' or ':')."));
message->popup_centered(Size2(300,100));
return;
}
@@ -151,7 +151,7 @@ void ProjectSettings::_action_edited() {
ti->set_text(0,old_name);
add_at="input/"+old_name;
- message->set_text(TTR("Action '")+new_name+"' already exists!.");
+ message->set_text(vformat(TTR("Action '%s' already exists!"),new_name));
message->popup_centered(Size2(300,100));
return;
}
@@ -330,7 +330,7 @@ void ProjectSettings::_add_item(int p_item){
press_a_key_label->set_text(TTR("Press a Key.."));
last_wait_for_key=InputEvent();
- press_a_key->popup_centered(Size2(250,80));
+ press_a_key->popup_centered(Size2(250,80)*EDSCALE);
press_a_key->grab_focus();
} break;
case InputEvent::MOUSE_BUTTON: {
@@ -357,7 +357,7 @@ void ProjectSettings::_add_item(int p_item){
for(int i=0;i<JOY_AXIS_MAX*2;i++) {
String desc = _axis_names[i];
- device_index->add_item(TTR("Axis ")+itos(i/2)+" "+(i&1?"+":"-")+desc);
+ device_index->add_item(TTR("Axis")+" "+itos(i/2)+" "+(i&1?"+":"-")+desc);
}
device_input->popup_centered(Size2(350,95));
@@ -517,7 +517,7 @@ void ProjectSettings::_update_actions() {
} break;
case InputEvent::JOYSTICK_BUTTON: {
- String str = TTR("Device ")+itos(ie.device)+", Button "+itos(ie.joy_button.button_index);
+ String str = TTR("Device")+" "+itos(ie.device)+", "+TTR("Button")+" "+itos(ie.joy_button.button_index);
if (ie.joy_button.button_index>=0 && ie.joy_button.button_index<JOY_BUTTON_MAX)
str+=String()+" ("+_button_names[ie.joy_button.button_index]+").";
else
@@ -528,14 +528,14 @@ void ProjectSettings::_update_actions() {
} break;
case InputEvent::MOUSE_BUTTON: {
- String str = TTR("Device ")+itos(ie.device)+", ";
+ String str = TTR("Device")+" "+itos(ie.device)+", ";
switch (ie.mouse_button.button_index) {
case BUTTON_LEFT: str+=TTR("Left Button."); break;
case BUTTON_RIGHT: str+=TTR("Right Button."); break;
case BUTTON_MIDDLE: str+=TTR("Middle Button."); break;
case BUTTON_WHEEL_UP: str+=TTR("Wheel Up."); break;
case BUTTON_WHEEL_DOWN: str+=TTR("Wheel Down."); break;
- default: str+=TTR("Button ")+itos(ie.mouse_button.button_index)+".";
+ default: str+=TTR("Button")+" "+itos(ie.mouse_button.button_index)+".";
}
action->set_text(0,str);
@@ -546,7 +546,7 @@ void ProjectSettings::_update_actions() {
int ax = ie.joy_motion.axis;
int n = 2*ax + (ie.joy_motion.axis_value<0 ? 0:1);
String desc = _axis_names[n];
- String str = TTR("Device ")+itos(ie.device)+", Axis "+itos(ax)+" "+(ie.joy_motion.axis_value<0?"-":"+")+desc +".";
+ String str = TTR("Device")+" "+itos(ie.device)+", "+TTR("Axis")+" "+itos(ax)+" "+(ie.joy_motion.axis_value<0?"-":"+")+desc +".";
action->set_text(0,str);
action->set_icon(0,get_icon("JoyAxis","EditorIcons"));
} break;
@@ -650,13 +650,13 @@ void ProjectSettings::_action_add() {
String action = action_name->get_text();
if (action.find("/")!=-1 || action.find(":")!=-1 || action=="") {
- message->set_text(TTR("Invalid Action (Anything goes but / or :)."));
+ message->set_text(TTR("Invalid action (anything goes but '/' or ':')."));
message->popup_centered(Size2(300,100));
return;
}
if (Globals::get_singleton()->has("input/"+action)) {
- message->set_text(TTR("Action '")+action+"' already exists!.");
+ message->set_text(vformat(TTR("Action '%s' already exists!"),action));
message->popup_centered(Size2(300,100));
return;
}
@@ -710,7 +710,7 @@ void ProjectSettings::_item_checked(const String& p_item, bool p_check) {
void ProjectSettings::_save() {
Error err = Globals::get_singleton()->save();
- message->set_text(err!=OK?TTR("Error saving settings."):"Settings Saved OK.");
+ message->set_text(err!=OK?TTR("Error saving settings."):TTR("Settings saved OK."));
message->popup_centered(Size2(300,100));
}
@@ -834,42 +834,111 @@ void ProjectSettings::_autoload_edited() {
return;
TreeItem *ti = autoload_list->get_edited();
- if (!ti || autoload_list->get_edited_column()!=2)
+ int column = autoload_list->get_edited_column();
+
+ if (!ti || (column != 0 && column != 2))
return;
- updating_autoload=true;
- bool checked=ti->is_checked(2);
+ if (column == 0) {
+ String name = ti->get_text(0);
+ String old_name = selected_autoload.substr(selected_autoload.find("/")+1,selected_autoload.length());
- String base="autoload/"+ti->get_text(0);
+ if (!name.is_valid_identifier()) {
+ ti->set_text(0,old_name);
+ message->set_text(TTR("Invalid name.")+"\n"+TTR("Valid characters:")+" a-z, A-Z, 0-9 or _");
+ message->popup_centered(Size2(300,100));
+ return;
+ }
- String path = Globals::get_singleton()->get(base);
- int order = Globals::get_singleton()->get_order(base);
+ if (ObjectTypeDB::type_exists(name)) {
+ ti->set_text(0,old_name);
+ message->set_text(TTR("Invalid name. Must not collide with an existing engine class name."));
+ message->popup_centered(Size2(400,100));
+ return;
+ }
- if (path.begins_with("*"))
- path=path.substr(1,path.length());
+ for(int i=0;i<Variant::VARIANT_MAX;i++) {
+ if (Variant::get_type_name(Variant::Type(i))==name) {
+ ti->set_text(0,old_name);
+ message->set_text(TTR("Invalid name. Must not collide with an existing buit-in type name."));
+ message->popup_centered(Size2(400,100));
+ return;
+ }
+ }
- if (checked)
- path="*"+path;
+ for(int i=0;i<GlobalConstants::get_global_constant_count();i++) {
+ if (GlobalConstants::get_global_constant_name(i)==name) {
+ ti->set_text(0,old_name);
+ message->set_text(TTR("Invalid name. Must not collide with an existing global constant name."));
+ message->popup_centered(Size2(400,100));
+ return;
+ }
+ }
- undo_redo->create_action(TTR("Toggle Autoload GlobalVar"));
- undo_redo->add_do_property(Globals::get_singleton(),base,path);
- undo_redo->add_undo_property(Globals::get_singleton(),base,Globals::get_singleton()->get(base));
- undo_redo->add_do_method(Globals::get_singleton(),"set_order",base,order); // keep order, as config order matters for these
- undo_redo->add_undo_method(Globals::get_singleton(),"set_order",base,order);
- undo_redo->add_do_method(this,"_update_autoload");
- undo_redo->add_undo_method(this,"_update_autoload");
- undo_redo->add_do_method(this,"_settings_changed");
- undo_redo->add_undo_method(this,"_settings_changed");
- undo_redo->commit_action();
- updating_autoload=false;
+ if (Globals::get_singleton()->has("autoload/"+name)) {
+ ti->set_text(0,old_name);
+ message->set_text(vformat(TTR("Autoload '%s' already exists!"),name));
+ message->popup_centered(Size2(300,100));
+ return;
+ }
+
+ updating_autoload = true;
+
+ name = "autoload/"+name;
+ String path = Globals::get_singleton()->get(selected_autoload);
+ bool is_persisting = Globals::get_singleton()->is_persisting(selected_autoload);
+ int order = Globals::get_singleton()->get_order(selected_autoload);
+
+ undo_redo->create_action(TTR("Rename Autoload"));
+ undo_redo->add_do_property(Globals::get_singleton(),name,path);
+ undo_redo->add_do_method(Globals::get_singleton(),"set_persisting",name,is_persisting);
+ undo_redo->add_do_method(Globals::get_singleton(),"set_order",name,order);
+ undo_redo->add_do_method(Globals::get_singleton(),"clear",selected_autoload);
+ undo_redo->add_undo_property(Globals::get_singleton(),selected_autoload,path);
+ undo_redo->add_undo_method(Globals::get_singleton(),"set_persisting",selected_autoload,is_persisting);
+ undo_redo->add_undo_method(Globals::get_singleton(),"set_order",selected_autoload,order);
+ undo_redo->add_undo_method(Globals::get_singleton(),"clear",name);
+ undo_redo->add_do_method(this,"_update_autoload");
+ undo_redo->add_undo_method(this,"_update_autoload");
+ undo_redo->add_do_method(this,"_settings_changed");
+ undo_redo->add_undo_method(this,"_settings_changed");
+ undo_redo->commit_action();
+
+ selected_autoload = name;
+ } else if (column == 2) {
+ updating_autoload = true;
+ bool checked = ti->is_checked(2);
+ String base = "autoload/"+ti->get_text(0);
+ String path = Globals::get_singleton()->get(base);
+ int order = Globals::get_singleton()->get_order(base);
+
+ if (path.begins_with("*"))
+ path = path.substr(1,path.length());
+
+ if (checked)
+ path = "*" + path;
+
+ undo_redo->create_action(TTR("Toggle AutoLoad Globals"));
+ undo_redo->add_do_property(Globals::get_singleton(),base,path);
+ undo_redo->add_undo_property(Globals::get_singleton(),base,Globals::get_singleton()->get(base));
+ undo_redo->add_do_method(Globals::get_singleton(),"set_order",base,order); // keep order, as config order matters for these
+ undo_redo->add_undo_method(Globals::get_singleton(),"set_order",base,order);
+ undo_redo->add_do_method(this,"_update_autoload");
+ undo_redo->add_undo_method(this,"_update_autoload");
+ undo_redo->add_do_method(this,"_settings_changed");
+ undo_redo->add_undo_method(this,"_settings_changed");
+ undo_redo->commit_action();
+ }
+
+ updating_autoload = false;
}
void ProjectSettings::_autoload_add() {
String name = autoload_add_name->get_text();
if (!name.is_valid_identifier()) {
- message->set_text("Invalid Name.\nValid characters: a-z,A-Z,0-9 or _");
+ message->set_text(TTR("Invalid name.")+"\n"+TTR("Valid characters:")+" a-z, A-Z, 0-9 or _");
message->popup_centered(Size2(300,100));
return;
@@ -877,7 +946,7 @@ void ProjectSettings::_autoload_add() {
if (ObjectTypeDB::type_exists(name)) {
- message->set_text(TTR("Invalid Name.Must not collide with an existing engine class name."));
+ message->set_text(TTR("Invalid name. Must not collide with an existing engine class name."));
message->popup_centered(Size2(300,100));
return;
@@ -886,7 +955,7 @@ void ProjectSettings::_autoload_add() {
for(int i=0;i<Variant::VARIANT_MAX;i++) {
if (Variant::get_type_name(Variant::Type(i))==name) {
- message->set_text(TTR("Invalid Name.Must not collide with an existing buit-in type name."));
+ message->set_text(TTR("Invalid name. Must not collide with an existing buit-in type name."));
message->popup_centered(Size2(300,100));
return;
@@ -897,7 +966,7 @@ void ProjectSettings::_autoload_add() {
if (GlobalConstants::get_global_constant_name(i)==name) {
- message->set_text(TTR("Invalid Name.Must not collide with an existing global constant name."));
+ message->set_text(TTR("Invalid name. Must not collide with an existing global constant name."));
message->popup_centered(Size2(300,100));
return;
}
@@ -990,6 +1059,14 @@ void ProjectSettings::_autoload_delete(Object *p_item,int p_column, int p_button
}
+void ProjectSettings::_autoload_selected() {
+ TreeItem *ti = autoload_list->get_selected();
+
+ if (!ti)
+ return;
+
+ selected_autoload = "autoload/"+ti->get_text(0);
+}
void ProjectSettings::_translation_delete(Object *p_item,int p_column, int p_button) {
@@ -1348,6 +1425,7 @@ void ProjectSettings::_update_autoload() {
}
TreeItem *t = autoload_list->create_item(root);
t->set_text(0,name);
+ t->set_editable(0,true);
t->set_text(1,path);
t->set_cell_mode(2,TreeItem::CELL_MODE_CHECK);
t->set_editable(2,true);
@@ -1436,6 +1514,7 @@ void ProjectSettings::_bind_methods() {
ObjectTypeDB::bind_method(_MD("_update_autoload"),&ProjectSettings::_update_autoload);
ObjectTypeDB::bind_method(_MD("_autoload_delete"),&ProjectSettings::_autoload_delete);
ObjectTypeDB::bind_method(_MD("_autoload_edited"),&ProjectSettings::_autoload_edited);
+ ObjectTypeDB::bind_method(_MD("_autoload_selected"),&ProjectSettings::_autoload_selected);
ObjectTypeDB::bind_method(_MD("_clear_search_box"),&ProjectSettings::_clear_search_box);
ObjectTypeDB::bind_method(_MD("_toggle_search_bar"),&ProjectSettings::_toggle_search_bar);
@@ -1556,7 +1635,7 @@ ProjectSettings::ProjectSettings(EditorData *p_data) {
save->set_anchor(MARGIN_BOTTOM,ANCHOR_END);
save->set_begin( Point2(80,28) );
save->set_end( Point2(10,20) );
- save->set_text(TTR("Save"));
+ save->set_text("Save");
save->connect("pressed",this,"_save");
*/
@@ -1684,7 +1763,7 @@ ProjectSettings::ProjectSettings(EditorData *p_data) {
save->set_anchor(MARGIN_BOTTOM,ANCHOR_END);
save->set_begin( Point2(80,28) );
save->set_end( Point2(10,20) );
- save->set_text(TTR("Save"));
+ save->set_text("Save");
save->connect("pressed",this,"_save");
*/
setting=false;
@@ -1761,7 +1840,7 @@ ProjectSettings::ProjectSettings(EditorData *p_data) {
tmc->add_child(translation_remap_options);
translation_remap_options->set_columns(2);
- translation_remap_options->set_column_title(0,"Path");
+ translation_remap_options->set_column_title(0,TTR("Path"));
translation_remap_options->set_column_title(1,TTR("Locale"));
translation_remap_options->set_column_titles_visible(true);
translation_remap_options->set_column_expand(0,true);
@@ -1827,7 +1906,7 @@ ProjectSettings::ProjectSettings(EditorData *p_data) {
autoload_list->set_column_title(0,TTR("Name"));
autoload_list->set_column_expand(0,true);
autoload_list->set_column_min_width(0,100);
- autoload_list->set_column_title(1,"Path");
+ autoload_list->set_column_title(1,TTR("Path"));
autoload_list->set_column_expand(1,true);
autoload_list->set_column_min_width(1,100);
autoload_list->set_column_title(2,TTR("Singleton"));
@@ -1838,6 +1917,7 @@ ProjectSettings::ProjectSettings(EditorData *p_data) {
autoload_list->connect("button_pressed",this,"_autoload_delete");
autoload_list->connect("item_edited",this,"_autoload_edited");
+ autoload_list->connect("cell_selected", this, "_autoload_selected");
updating_autoload=false;
@@ -1861,7 +1941,7 @@ ProjectSettings::ProjectSettings(EditorData *p_data) {
/*
Control * es = memnew( Control );
- es->set_name(TTR("Export"));
+ es->set_name("Export");
tab_container->add_child(es);
export_settings = memnew( ProjectExportSettings );
es->add_child(export_settings);
diff --git a/tools/editor/project_settings.h b/tools/editor/project_settings.h
index 113cc49b7c..5108378ff7 100644
--- a/tools/editor/project_settings.h
+++ b/tools/editor/project_settings.h
@@ -91,6 +91,7 @@ class ProjectSettings : public AcceptDialog {
Tree *autoload_list;
+ String selected_autoload;
EditorFileDialog *autoload_file_open;
LineEdit *autoload_add_name;
LineEdit *autoload_add_path;
@@ -104,6 +105,7 @@ class ProjectSettings : public AcceptDialog {
void _autoload_edited();
void _autoload_file_open();
void _autoload_delete(Object *p_item,int p_column, int p_button);
+ void _autoload_selected();
bool updating_autoload;
diff --git a/tools/editor/property_editor.cpp b/tools/editor/property_editor.cpp
index c4f54e04cb..3258bc6d74 100644
--- a/tools/editor/property_editor.cpp
+++ b/tools/editor/property_editor.cpp
@@ -306,14 +306,14 @@ bool CustomPropertyEditor::edit(Object* p_owner,const String& p_name,Variant::Ty
slider->set_step((type==Variant::REAL) ? step : 1);
slider->set_val(v);
slider->show();
- set_size(Size2(110,30));
+ set_size(Size2(110,30)*EDSCALE);
} else {
spinbox->set_min(min);
spinbox->set_max(max);
spinbox->set_step((type==Variant::REAL) ? step : 1);
spinbox->set_val(v);
spinbox->show();
- set_size(Size2(70,35));
+ set_size(Size2(70,35)*EDSCALE);
}
@@ -339,7 +339,7 @@ bool CustomPropertyEditor::edit(Object* p_owner,const String& p_name,Variant::Ty
}
- set_size(checks20[19]->get_pos()+Size2(20,25));
+ set_size(checks20[19]->get_pos()+Size2(20,25)*EDSCALE);
} else if (hint==PROPERTY_HINT_EXP_EASING) {
@@ -365,7 +365,7 @@ bool CustomPropertyEditor::edit(Object* p_owner,const String& p_name,Variant::Ty
type_button->show();
easing_draw->show();
- set_size(Size2(200,150));
+ set_size(Size2(200,150)*EDSCALE);
} else if (hint==PROPERTY_HINT_FLAGS) {
menu->clear();
Vector<String> flags = hint_text.split(",");
@@ -419,8 +419,8 @@ bool CustomPropertyEditor::edit(Object* p_owner,const String& p_name,Variant::Ty
//action_buttons[0];
- int button_margin = get_constant("button_margin",TTR("Dialogs"));
- int margin = get_constant("margin",TTR("Dialogs"));
+ int button_margin = get_constant("button_margin","Dialogs");
+ int margin = get_constant("margin","Dialogs");
action_buttons[0]->set_anchor( MARGIN_LEFT, ANCHOR_END );
action_buttons[0]->set_anchor( MARGIN_TOP, ANCHOR_END );
@@ -600,7 +600,7 @@ bool CustomPropertyEditor::edit(Object* p_owner,const String& p_name,Variant::Ty
color_picker->show();
color_picker->set_edit_alpha(hint!=PROPERTY_HINT_COLOR_NO_ALPHA);
color_picker->set_color(v);
- set_size( Size2(300, color_picker->get_combined_minimum_size().height+10));
+ set_size( Size2(300*EDSCALE, color_picker->get_combined_minimum_size().height+10*EDSCALE));
/*
int ofs=80;
int m=10;
@@ -691,10 +691,10 @@ bool CustomPropertyEditor::edit(Object* p_owner,const String& p_name,Variant::Ty
int id = TYPE_BASE_ID+idx;
if (has_icon(t,"EditorIcons")) {
- menu->add_icon_item(get_icon(t,"EditorIcons"),"New "+t,id);
+ menu->add_icon_item(get_icon(t,"EditorIcons"),TTR("New")+" "+t,id);
} else {
- menu->add_item(TTR("New ")+t,id);
+ menu->add_item(TTR("New")+" "+t,id);
}
idx++;
@@ -936,7 +936,7 @@ void CustomPropertyEditor::_node_path_selected(NodePath p_path) {
if (owner->is_type("Node"))
node = owner->cast_to<Node>();
- else if (owner->is_type(TTR("ArrayPropertyEdit")))
+ else if (owner->is_type("ArrayPropertyEdit"))
node = owner->cast_to<ArrayPropertyEdit>()->get_node();
if (!node) {
@@ -1673,6 +1673,7 @@ void CustomPropertyEditor::config_value_editors(int p_amount, int p_columns,int
}
+
void CustomPropertyEditor::_bind_methods() {
ObjectTypeDB::bind_method("_focus_enter", &CustomPropertyEditor::_focus_enter);
@@ -1691,6 +1692,7 @@ void CustomPropertyEditor::_bind_methods() {
ObjectTypeDB::bind_method( "_menu_option",&CustomPropertyEditor::_menu_option);
+
ADD_SIGNAL( MethodInfo("variant_changed") );
ADD_SIGNAL( MethodInfo("resource_edit_request") );
}
@@ -1732,7 +1734,7 @@ CustomPropertyEditor::CustomPropertyEditor() {
add_child(checks20[i]);
checks20[i]->hide();
checks20[i]->connect("pressed",this,"_action_pressed",make_binds(i));
- checks20[i]->set_tooltip(TTR("Bit ")+itos(i)+", val "+itos(1<<i)+".");
+ checks20[i]->set_tooltip(vformat(TTR("Bit %d, val %d."), i, 1<<i));
}
text_edit = memnew( TextEdit );
@@ -2180,6 +2182,11 @@ void PropertyEditor::set_item_text(TreeItem *p_item, int p_type, const String& p
}
}
+ if (!res->is_type("Texture")) {
+ //texture already previews via itself
+ EditorResourcePreview::get_singleton()->queue_edited_resource_preview(res,this,"_resource_preview_done",p_item->get_instance_ID());
+ }
+
}
@@ -2658,11 +2665,11 @@ void PropertyEditor::update_tree() {
TreeItem *title = tree->create_item(root);
title->set_custom_bg_color(0,get_color("prop_section","Editor"));
- title->set_text(0,TTR("Property")); // todo, fetch name if ID exists in database
+ title->set_text(0,"Property"); // todo, fetch name if ID exists in database
title->set_editable(0,false);
title->set_selectable(0,false);
title->set_custom_bg_color(1,get_color("prop_section","Editor"));
- title->set_text(1,TTR("Value")); // todo, fetch name if ID exists in database
+ title->set_text(1,"Value"); // todo, fetch name if ID exists in database
title->set_editable(1,false);
title->set_selectable(1,false);
*/
@@ -2671,7 +2678,7 @@ void PropertyEditor::update_tree() {
if (obj->cast_to<Node>() || obj->cast_to<Resource>()) {
TreeItem *type = tree->create_item(root);
- type->set_text(0,TTR("Type")); // todo, fetch name if ID exists in database
+ type->set_text(0,"Type"); // todo, fetch name if ID exists in database
type->set_text(1,obj->get_type()); // todo, fetch name if ID exists in database
if (has_icon(obj->get_type(),"EditorIcons"))
type->set_icon(1,get_icon(obj->get_type(),"EditorIcons") );
@@ -2684,7 +2691,7 @@ void PropertyEditor::update_tree() {
TreeItem *name = tree->create_item(root);
- name->set_text(0,TTR("Name")); // todo, fetch name if ID exists in database
+ name->set_text(0,"Name"); // todo, fetch name if ID exists in database
if (obj->is_type("Resource"))
name->set_text(1,obj->cast_to<Resource>()->get_name());
else if (obj->is_type("Node"))
@@ -2767,7 +2774,7 @@ void PropertyEditor::update_tree() {
}
- sep->set_tooltip(0,TTR("Class: ")+p.name+":\n\n"+class_descr_cache[type]);
+ sep->set_tooltip(0,TTR("Class:")+" "+p.name+":\n\n"+class_descr_cache[type]);
}
//sep->set_custom_color(0,Color(1,1,1));
@@ -2864,7 +2871,7 @@ void PropertyEditor::update_tree() {
descr_cache[type][setter]=descr;
}
- item->set_tooltip(0, TTR("Property: ")+p.name+"\n\n"+descr);
+ item->set_tooltip(0, TTR("Property:")+" "+p.name+"\n\n"+descr);
}
}
//EditorHelp::get_doc_data();
@@ -2989,6 +2996,32 @@ void PropertyEditor::update_tree() {
item->set_range(1, obj->get( p.name ) );
item->set_editable(1,!read_only);
break;
+ } else if (p.hint==PROPERTY_HINT_OBJECT_ID) {
+
+// int c = p.hint_string.get_slice_count(",");
+ item->set_cell_mode(1,TreeItem::CELL_MODE_CUSTOM);
+
+ String type=p.hint_string;
+ if (type=="")
+ type="Object";
+
+ ObjectID id = obj->get( p.name );
+ if (id!=0) {
+ item->set_text(1,type+" ID: "+itos(id));
+ item->add_button(1,get_icon("EditResource","EditorIcons"));
+ } else {
+ item->set_text(1,"[Empty]");
+ }
+
+ if (has_icon(p.hint_string,"EditorIcons")) {
+ type=p.hint_string;
+ } else {
+ type="Object";
+ }
+
+ item->set_icon(0,get_icon(type,"EditorIcons"));
+
+ break;
} else {
if (p.type == Variant::REAL) {
@@ -3331,6 +3364,10 @@ void PropertyEditor::update_tree() {
} else if (res.is_valid()) {
item->set_tooltip(1,res->get_name()+" ("+res->get_type()+")");
}
+ if (!res->is_type("Texture")) {
+ //texture already previews via itself
+ EditorResourcePreview::get_singleton()->queue_edited_resource_preview(res,this,"_resource_preview_done",item->get_instance_ID());
+ }
}
@@ -3433,7 +3470,7 @@ void PropertyEditor::_edit_set(const String& p_name, const Variant& p_value) {
} else {
- undo_redo->create_action(TTR("Set ")+p_name,true);
+ undo_redo->create_action(TTR("Set")+" "+p_name,true);
undo_redo->add_do_property(obj,p_name,p_value);
undo_redo->add_undo_property(obj,p_name,obj->get(p_name));
undo_redo->add_do_method(this,"_changed_callback",obj,p_name);
@@ -3758,6 +3795,11 @@ void PropertyEditor::_edit_button(Object *p_item, int p_column, int p_button) {
emit_signal("resource_selected",r,n);
}
+ } else if (t==Variant::INT && h==PROPERTY_HINT_OBJECT_ID) {
+
+ emit_signal("object_id_selected",obj->get(n));
+ print_line("OBJ ID SELECTED");
+
} else if (t==Variant::ARRAY || t==Variant::INT_ARRAY || t==Variant::REAL_ARRAY || t==Variant::STRING_ARRAY || t==Variant::VECTOR2_ARRAY || t==Variant::VECTOR3_ARRAY || t==Variant::COLOR_ARRAY || t==Variant::RAW_ARRAY) {
Variant v = obj->get(n);
@@ -3839,6 +3881,29 @@ void PropertyEditor::_filter_changed(const String& p_text) {
update_tree();
}
+
+
+void PropertyEditor::_resource_preview_done(const String& p_path,const Ref<Texture>& p_preview,Variant p_ud) {
+
+ if (p_preview.is_null())
+ return; //don't bother with empty preview
+
+ ObjectID id = p_ud;
+ Object *obj = ObjectDB::get_instance(id);
+
+ if (!obj)
+ return;
+
+ TreeItem *ti = obj->cast_to<TreeItem>();
+
+ ERR_FAIL_COND(!ti);
+
+ int tw = EditorSettings::get_singleton()->get("property_editor/texture_preview_width");
+
+ ti->set_icon(1,p_preview); //should be scaled I think?
+ ti->set_icon_max_width(1,tw);
+ ti->set_text(1,"");
+}
void PropertyEditor::_bind_methods() {
ObjectTypeDB::bind_method( "_item_edited",&PropertyEditor::_item_edited);
@@ -3853,6 +3918,7 @@ void PropertyEditor::_bind_methods() {
ObjectTypeDB::bind_method( "_set_range_def",&PropertyEditor::_set_range_def);
ObjectTypeDB::bind_method( "_filter_changed",&PropertyEditor::_filter_changed);
ObjectTypeDB::bind_method( "update_tree",&PropertyEditor::update_tree);
+ ObjectTypeDB::bind_method( "_resource_preview_done",&PropertyEditor::_resource_preview_done);
ObjectTypeDB::bind_method(_MD("get_drag_data_fw"), &PropertyEditor::get_drag_data_fw);
ObjectTypeDB::bind_method(_MD("can_drop_data_fw"), &PropertyEditor::can_drop_data_fw);
@@ -3860,6 +3926,7 @@ void PropertyEditor::_bind_methods() {
ADD_SIGNAL( MethodInfo("property_toggled",PropertyInfo( Variant::STRING, "property"),PropertyInfo( Variant::BOOL, "value")));
ADD_SIGNAL( MethodInfo("resource_selected", PropertyInfo( Variant::OBJECT, "res"),PropertyInfo( Variant::STRING, "prop") ) );
+ ADD_SIGNAL( MethodInfo("object_id_selected", PropertyInfo( Variant::INT, "id")) );
ADD_SIGNAL( MethodInfo("property_keyed",PropertyInfo( Variant::STRING, "property")));
ADD_SIGNAL( MethodInfo("property_edited",PropertyInfo( Variant::STRING, "property")));
}
@@ -4219,7 +4286,7 @@ PropertyEditor *SectionedPropertyEditor::get_property_editor() {
SectionedPropertyEditor::SectionedPropertyEditor() {
VBoxContainer *left_vb = memnew( VBoxContainer);
- left_vb->set_custom_minimum_size(Size2(160,0));
+ left_vb->set_custom_minimum_size(Size2(160,0)*EDSCALE);
add_child(left_vb);
sections = memnew( ItemList );
diff --git a/tools/editor/property_editor.h b/tools/editor/property_editor.h
index ac58011d43..a909b5ccd3 100644
--- a/tools/editor/property_editor.h
+++ b/tools/editor/property_editor.h
@@ -131,6 +131,7 @@ class CustomPropertyEditor : public Popup {
void config_value_editors(int p_amount, int p_columns,int p_label_w,const List<String>& p_strings);
void config_action_buttons(const List<String>& p_strings);
+
protected:
void _notification(int p_what);
@@ -231,6 +232,7 @@ class PropertyEditor : public Control {
bool can_drop_data_fw(const Point2& p_point,const Variant& p_data,Control* p_from) const;
void drop_data_fw(const Point2& p_point,const Variant& p_data,Control* p_from);
+ void _resource_preview_done(const String& p_path,const Ref<Texture>& p_preview,Variant p_ud);
UndoRedo *undo_redo;
protected:
diff --git a/tools/editor/pvrtc_compress.cpp b/tools/editor/pvrtc_compress.cpp
index fcb3c7abc8..75b5c69bc2 100644
--- a/tools/editor/pvrtc_compress.cpp
+++ b/tools/editor/pvrtc_compress.cpp
@@ -82,7 +82,7 @@ static void _compress_image(Image::CompressMode p_mode,Image *p_image) {
}
- if (EditorSettings::get_singleton()->get(TTR("PVRTC/fast_conversion")).operator bool()) {
+ if (EditorSettings::get_singleton()->get("PVRTC/fast_conversion").operator bool()) {
args.push_back("-pvrtcfast");
}
if (p_image->get_mipmaps()>0)
@@ -93,13 +93,13 @@ static void _compress_image(Image::CompressMode p_mode,Image *p_image) {
ResourceSaver::save(src_img,t);
Error err = OS::get_singleton()->execute(ttpath,args,true);
- ERR_EXPLAIN(TTR("Could not execute PVRTC Tool: ")+ttpath);
+ ERR_EXPLAIN(TTR("Could not execute PVRTC tool:")+" "+ttpath);
ERR_FAIL_COND(err!=OK);
t=ResourceLoader::load(dst_img,"Texture");
- ERR_EXPLAIN(TTR("Can't load back converted image using PVRTC Tool: ")+dst_img);
+ ERR_EXPLAIN(TTR("Can't load back converted image using PVRTC tool:")+" "+dst_img);
ERR_FAIL_COND(t.is_null());
*p_image=t->get_data();
diff --git a/tools/editor/register_exporters.h b/tools/editor/register_exporters.h
index 364ad5efc9..dccaa0641f 100644
--- a/tools/editor/register_exporters.h
+++ b/tools/editor/register_exporters.h
@@ -32,4 +32,4 @@
void register_exporters();
-#endif \ No newline at end of file
+#endif
diff --git a/tools/editor/reparent_dialog.cpp b/tools/editor/reparent_dialog.cpp
index 7803208c89..38b0372232 100644
--- a/tools/editor/reparent_dialog.cpp
+++ b/tools/editor/reparent_dialog.cpp
@@ -99,7 +99,7 @@ ReparentDialog::ReparentDialog() {
//Label *label = memnew( Label );
//label->set_pos( Point2( 15,8) );
- //label->set_text(TTR("Reparent Location (Select new Parent):"));
+ //label->set_text("Reparent Location (Select new Parent):");
keep_transform = memnew( CheckBox );
keep_transform->set_text(TTR("Keep Global Transform"));
@@ -107,7 +107,7 @@ ReparentDialog::ReparentDialog() {
vbc->add_child(keep_transform);
- //vbc->add_margin_child(TTR("Options:"),node_only);;
+ //vbc->add_margin_child("Options:",node_only);;
//cancel->connect("pressed", this,"_cancel");
diff --git a/tools/editor/run_settings_dialog.cpp b/tools/editor/run_settings_dialog.cpp
index fd2e9f9759..abcfe125f3 100644
--- a/tools/editor/run_settings_dialog.cpp
+++ b/tools/editor/run_settings_dialog.cpp
@@ -88,7 +88,7 @@ RunSettingsDialog::RunSettingsDialog() {
arguments->set_editable(false);
get_ok()->set_text(TTR("Close"));
- //get_cancel()->set_text(TTR("Close"));
+ //get_cancel()->set_text("Close");
arguments->set_text("-l $scene");
diff --git a/tools/editor/scene_tree_dock.cpp b/tools/editor/scene_tree_dock.cpp
index d0569920bd..9612305a0f 100644
--- a/tools/editor/scene_tree_dock.cpp
+++ b/tools/editor/scene_tree_dock.cpp
@@ -66,7 +66,7 @@ void SceneTreeDock::instance(const String& p_file) {
current_option=-1;
//accept->get_cancel()->hide();
- accept->get_ok()->set_text(TTR("Ok :( "));
+ accept->get_ok()->set_text(TTR("OK :("));
accept->set_text(TTR("No parent to instance a child at."));
accept->popup_centered_minsize();
return;
@@ -98,7 +98,7 @@ void SceneTreeDock::instance_scenes(const Vector<String>& p_files,Node* parent,i
current_option=-1;
//accept->get_cancel()->hide();
accept->get_ok()->set_text(TTR("Ugh"));
- accept->set_text(String(TTR("Error loading scene from "))+p_files[i]);
+ accept->set_text(vformat(TTR("Error loading scene from %s"),p_files[i]));
accept->popup_centered_minsize();
error=true;
break;
@@ -110,7 +110,7 @@ void SceneTreeDock::instance_scenes(const Vector<String>& p_files,Node* parent,i
current_option=-1;
//accept->get_cancel()->hide();
accept->get_ok()->set_text(TTR("Ugh"));
- accept->set_text(String(TTR("Error instancing scene from "))+p_files[i]);
+ accept->set_text(vformat(TTR("Error instancing scene from %s"),p_files[i]));
accept->popup_centered_minsize();
error=true;
break;
@@ -122,7 +122,7 @@ void SceneTreeDock::instance_scenes(const Vector<String>& p_files,Node* parent,i
if (_cyclical_dependency_exists(edited_scene->get_filename(), instanced_scene)) {
accept->get_ok()->set_text(TTR("Ok"));
- accept->set_text(String(TTR("Cannot instance the scene '"))+p_files[i]+String(TTR("' because the current scene exists within one of its' nodes.")));
+ accept->set_text(vformat(TTR("Cannot instance the scene '%s' because the current scene exists within one of its nodes."),p_files[i]));
accept->popup_centered_minsize();
error=true;
break;
@@ -225,7 +225,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
/* should be legal now
current_option=-1;
//confirmation->get_cancel()->hide();
- accept->get_ok()->set_text(TTR("I see.."));
+ accept->get_ok()->set_text("I see..");
accept->set_text("This operation can't be done without a tree root.");
accept->popup_centered_minsize();
*/
@@ -260,8 +260,8 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
//if (!_validate_no_foreign())
// break;
- connect_dialog->popup_centered_ratio();
- connect_dialog->set_node(current);
+ //connect_dialog->popup_centered_ratio();
+ //connect_dialog->set_node(current);
} break;
case TOOL_GROUP: {
@@ -271,8 +271,8 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
break;
//if (!_validate_no_foreign())
// break;
- groups_editor->set_current(current);
- groups_editor->popup_centered_ratio();
+ //groups_editor->set_current(current);
+ //groups_editor->popup_centered_ratio();
} break;
case TOOL_SCRIPT: {
@@ -308,7 +308,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
current_option=-1;
//accept->get_cancel()->hide();
accept->get_ok()->set_text(TTR("I see.."));
- accept->set_text("This operation can't be done on the tree root.");
+ accept->set_text(TTR("This operation can't be done on the tree root."));
accept->popup_centered_minsize();
break;
}
@@ -376,7 +376,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
current_option=-1;
//accept->get_cancel()->hide();
accept->get_ok()->set_text(TTR("I see.."));
- accept->set_text("This operation can't be done on the tree root.");
+ accept->set_text(TTR("This operation can't be done on the tree root."));
accept->popup_centered_minsize();
break;
}
@@ -488,7 +488,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
current_option=-1;
//confirmation->get_cancel()->hide();
accept->get_ok()->set_text(TTR("I see.."));
- accept->set_text("This operation can't be done on the tree root.");
+ accept->set_text(TTR("This operation can't be done on the tree root."));
accept->popup_centered_minsize();
break;
}
@@ -542,13 +542,17 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
}
} break;
+ case TOOL_MERGE_FROM_SCENE: {
+
+ EditorNode::get_singleton()->merge_from_scene();
+ } break;
case TOOL_NEW_SCENE_FROM: {
Node *scene = editor_data->get_edited_scene_root();
if (!scene) {
accept->get_ok()->set_text(TTR("I see.."));
- accept->set_text("This operation can't be done without a scene.");
+ accept->set_text(TTR("This operation can't be done without a scene."));
accept->popup_centered_minsize();
break;
}
@@ -566,7 +570,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
if (tocopy!=editor_data->get_edited_scene_root() && tocopy->get_filename()!="") {
accept->get_ok()->set_text(TTR("I see.."));
- accept->set_text("This operation can't be done on instanced scenes.");
+ accept->set_text(TTR("This operation can't be done on instanced scenes."));
accept->popup_centered_minsize();
break;
}
@@ -583,7 +587,8 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
String existing;
if (extensions.size()) {
- existing="new_scene."+extensions.front()->get().to_lower();
+ String root_name(tocopy->get_name());
+ existing=root_name+"."+extensions.front()->get().to_lower();
}
new_scene_from_dialog->set_current_path(existing);
@@ -1241,7 +1246,7 @@ void SceneTreeDock::_selection_changed() {
//automatically turn on multi-edit
_tool_selected(TOOL_MULTI_EDIT);
}
-
+
//tool_buttons[TOOL_MULTI_EDIT]->set_disabled(EditorNode::get_singleton()->get_editor_selection()->get_selection().size()<2);
}
@@ -1411,7 +1416,7 @@ void SceneTreeDock::_import_subscene() {
/*
- editor_data->get_undo_redo().create_action(TTR("Import Subscene"));
+ editor_data->get_undo_redo().create_action("Import Subscene");
editor_data->get_undo_redo().add_do_method(parent,"add_child",ss);
//editor_data->get_undo_redo().add_do_method(editor_selection,"clear");
//editor_data->get_undo_redo().add_do_method(editor_selection,"add_node",child);
@@ -1658,8 +1663,8 @@ void SceneTreeDock::_tree_rmb(const Vector2& p_menu_pos) {
if (!EditorNode::get_singleton()->get_edited_scene()) {
menu->clear();
- menu->add_item(TTR("New Scene Root"),TOOL_NEW,KEY_MASK_CMD|KEY_A);
- menu->add_item(TTR("Inherit Scene"),TOOL_INSTANCE);
+ menu->add_icon_item(get_icon("Add","EditorIcons"),TTR("New Scene Root"),TOOL_NEW,KEY_MASK_CMD|KEY_A);
+ menu->add_icon_item(get_icon("Instance","EditorIcons"),TTR("Inherit Scene"),TOOL_INSTANCE);
menu->set_size(Size2(1,1));
menu->set_pos(p_menu_pos);
@@ -1676,30 +1681,31 @@ void SceneTreeDock::_tree_rmb(const Vector2& p_menu_pos) {
if (selection.size()==1) {
- menu->add_item(TTR("Add Child Node"),TOOL_NEW,KEY_MASK_CMD|KEY_A);
- menu->add_item(TTR("Instance Child Scene"),TOOL_INSTANCE);
- menu->add_separator();
- menu->add_item(TTR("Change Type"),TOOL_REPLACE);
+ menu->add_icon_item(get_icon("Add","EditorIcons"),TTR("Add Child Node"),TOOL_NEW,KEY_MASK_CMD|KEY_A);
+ menu->add_icon_item(get_icon("Instance","EditorIcons"),TTR("Instance Child Scene"),TOOL_INSTANCE);
menu->add_separator();
- menu->add_item(TTR("Edit Groups"),TOOL_GROUP);
- menu->add_item(TTR("Edit Connections"),TOOL_CONNECT);
+ menu->add_icon_item(get_icon("Reload","EditorIcons"),TTR("Change Type"),TOOL_REPLACE);
+ //menu->add_separator(); moved to their own dock
+ //menu->add_icon_item(get_icon("Groups","EditorIcons"),TTR("Edit Groups"),TOOL_GROUP);
+ //menu->add_icon_item(get_icon("Connect","EditorIcons"),TTR("Edit Connections"),TOOL_CONNECT);
menu->add_separator();
- menu->add_item(TTR("Add Script"),TOOL_SCRIPT);
+ menu->add_icon_item(get_icon("Script","EditorIcons"),TTR("Add Script"),TOOL_SCRIPT);
menu->add_separator();
}
- menu->add_item(TTR("Move Up"),TOOL_MOVE_UP,KEY_MASK_CMD|KEY_UP);
- menu->add_item(TTR("Move Down"),TOOL_MOVE_DOWN,KEY_MASK_CMD|KEY_DOWN);
- menu->add_item(TTR("Duplicate"),TOOL_DUPLICATE,KEY_MASK_CMD|KEY_D);
- menu->add_item(TTR("Reparent"),TOOL_REPARENT);
+ menu->add_icon_item(get_icon("Up","EditorIcons"),TTR("Move Up"),TOOL_MOVE_UP,KEY_MASK_CMD|KEY_UP);
+ menu->add_icon_item(get_icon("Down","EditorIcons"),TTR("Move Down"),TOOL_MOVE_DOWN,KEY_MASK_CMD|KEY_DOWN);
+ menu->add_icon_item(get_icon("Duplicate","EditorIcons"),TTR("Duplicate"),TOOL_DUPLICATE,KEY_MASK_CMD|KEY_D);
+ menu->add_icon_item(get_icon("Reparent","EditorIcons"),TTR("Reparent"),TOOL_REPARENT);
if (selection.size()==1) {
menu->add_separator();
- menu->add_item(TTR("Save Branch as Scene"),TOOL_NEW_SCENE_FROM);
+ menu->add_icon_item(get_icon("Blend","EditorIcons"),TTR("Merge From Scene"),TOOL_MERGE_FROM_SCENE);
+ menu->add_icon_item(get_icon("Save","EditorIcons"),TTR("Save Branch as Scene"),TOOL_NEW_SCENE_FROM);
}
menu->add_separator();
- menu->add_item(TTR("Delete Node(s)"),TOOL_ERASE,KEY_DELETE);
+ menu->add_icon_item(get_icon("Remove","EditorIcons"),TTR("Delete Node(s)"),TOOL_ERASE,KEY_DELETE);
menu->set_size(Size2(1,1));
menu->set_pos(p_menu_pos);
@@ -1768,7 +1774,7 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor,Node *p_scene_root,EditorSelec
tb = memnew( ToolButton );
tb->connect("pressed",this,"_tool_selected",make_binds(TOOL_NEW, false));
- tb->set_tooltip("Add/Create a New Node\n("+keycode_get_string(KEY_MASK_CMD|KEY_A)+")");
+ tb->set_tooltip(TTR("Add/Create a New Node")+"\n("+keycode_get_string(KEY_MASK_CMD|KEY_A)+")");
filter_hbc->add_child(tb);
button_add=tb;
@@ -1786,6 +1792,7 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor,Node *p_scene_root,EditorSelec
filter_hbc->add_child(filter);
filter_icon = memnew( TextureFrame );
filter_hbc->add_child(filter_icon);
+ filter_icon->set_stretch_mode(TextureFrame::STRETCH_KEEP_CENTERED);
filter->connect("text_changed",this,"_filter_changed");
@@ -1813,13 +1820,13 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor,Node *p_scene_root,EditorSelec
add_child(create_dialog);
create_dialog->connect("create",this,"_create");
- groups_editor = memnew( GroupsEditor );
- add_child(groups_editor);
- groups_editor->set_undo_redo(&editor_data->get_undo_redo());
+ //groups_editor = memnew( GroupsEditor );
+ //add_child(groups_editor);
+ //groups_editor->set_undo_redo(&editor_data->get_undo_redo());
- connect_dialog = memnew( ConnectionsDialog(p_editor) );
- add_child(connect_dialog);
- connect_dialog->set_undoredo(&editor_data->get_undo_redo());
+ //connect_dialog = memnew( ConnectionsDialog(p_editor) );
+ //add_child(connect_dialog);
+ //connect_dialog->set_undoredo(&editor_data->get_undo_redo());
script_create_dialog = memnew( ScriptCreateDialog );
add_child(script_create_dialog);
diff --git a/tools/editor/scene_tree_dock.h b/tools/editor/scene_tree_dock.h
index 0894dc8ffa..60bec9b4f4 100644
--- a/tools/editor/scene_tree_dock.h
+++ b/tools/editor/scene_tree_dock.h
@@ -64,6 +64,7 @@ class SceneTreeDock : public VBoxContainer {
TOOL_DUPLICATE,
TOOL_REPARENT,
TOOL_NEW_SCENE_FROM,
+ TOOL_MERGE_FROM_SCENE,
TOOL_MULTI_EDIT,
TOOL_ERASE,
TOOL_BUTTON_MAX
@@ -85,8 +86,8 @@ class SceneTreeDock : public VBoxContainer {
EditorData *editor_data;
EditorSelection *editor_selection;
- GroupsEditor *groups_editor;
- ConnectionsDialog *connect_dialog;
+ //GroupsEditor *groups_editor;
+ //ConnectionsDialog *connect_dialog;
ScriptCreateDialog *script_create_dialog;
AcceptDialog *accept;
ConfirmationDialog *delete_dialog;
@@ -165,6 +166,7 @@ public:
void perform_node_renames(Node* p_base,List<Pair<NodePath,NodePath> > *p_renames, Map<Ref<Animation>, Set<int> > *r_rem_anims=NULL);
SceneTreeEditor *get_tree_editor() { return scene_tree; }
+
SceneTreeDock(EditorNode *p_editor,Node *p_scene_root,EditorSelection *p_editor_selection,EditorData &p_editor_data);
};
diff --git a/tools/editor/scene_tree_editor.cpp b/tools/editor/scene_tree_editor.cpp
index 7332bbb8b0..bc12ff23e5 100644
--- a/tools/editor/scene_tree_editor.cpp
+++ b/tools/editor/scene_tree_editor.cpp
@@ -216,6 +216,17 @@ void SceneTreeEditor::_cell_button_pressed(Object *p_item,int p_column,int p_id)
warning->set_text(config_err);
warning->popup_centered_minsize();
+ } else if (p_id==BUTTON_SIGNALS) {
+
+ item->select(0);
+ NodeDock::singleton->get_parent()->call("set_current_tab",NodeDock::singleton->get_index());
+ NodeDock::singleton->show_connections();
+
+ } else if (p_id==BUTTON_GROUPS) {
+
+ item->select(0);
+ NodeDock::singleton->get_parent()->call("set_current_tab",NodeDock::singleton->get_index());
+ NodeDock::singleton->show_groups();
}
}
@@ -285,21 +296,36 @@ bool SceneTreeEditor::_add_nodes(Node *p_node,TreeItem *p_parent) {
}
}
- String warning = p_node->get_configuration_warning();
- if (warning!=String()) {
- item->add_button(0,get_icon("NodeWarning","EditorIcons"),BUTTON_WARNING);
+
+ if (can_rename) { //should be can edit..
+
+ String warning = p_node->get_configuration_warning();
+ if (warning!=String()) {
+ item->add_button(0,get_icon("NodeWarning","EditorIcons"),BUTTON_WARNING);
+ }
+
+ bool has_connections = p_node->has_persistent_signal_connections();
+ bool has_groups = p_node->has_persistent_groups();
+
+ if (has_connections && has_groups) {
+ item->add_button(0,get_icon("ConnectionAndGroups","EditorIcons"),BUTTON_SIGNALS);
+ } else if (has_connections) {
+ item->add_button(0,get_icon("Connect","EditorIcons"),BUTTON_SIGNALS);
+ } else if (has_groups) {
+ item->add_button(0,get_icon("Groups","EditorIcons"),BUTTON_GROUPS);
+ }
}
if (p_node==get_scene_node() && p_node->get_scene_inherited_state().is_valid()) {
item->add_button(0,get_icon("InstanceOptions","EditorIcons"),BUTTON_SUBSCENE);
- item->set_tooltip(0,TTR("Inherits: ")+p_node->get_scene_inherited_state()->get_path()+"\nType: "+p_node->get_type());
+ item->set_tooltip(0,TTR("Inherits:")+" "+p_node->get_scene_inherited_state()->get_path()+"\n"+TTR("Type:")+" "+p_node->get_type());
} else if (p_node!=get_scene_node() && p_node->get_filename()!="" && can_open_instance) {
item->add_button(0,get_icon("InstanceOptions","EditorIcons"),BUTTON_SUBSCENE);
- item->set_tooltip(0,TTR("Instance: ")+p_node->get_filename()+"\nType: "+p_node->get_type());
+ item->set_tooltip(0,TTR("Instance:")+" "+p_node->get_filename()+"\n"+TTR("Type:")+" "+p_node->get_type());
} else {
- item->set_tooltip(0,String(p_node->get_name())+"\nType: "+p_node->get_type());
+ item->set_tooltip(0,String(p_node->get_name())+"\n"+TTR("Type:")+" "+p_node->get_type());
}
if (can_open_instance) {
@@ -684,7 +710,7 @@ void SceneTreeEditor::_renamed() {
String new_name=which->get_text(0);
if (new_name.find(".") != -1 || new_name.find("/") != -1) {
- error->set_text(TTR("Invalid node name, the following characters are not allowed:\n \".\", \"/\""));
+ error->set_text(TTR("Invalid node name, the following characters are not allowed:")+"\n \".\", \"/\"");
error->popup_centered_minsize();
new_name=n->get_name();
}
@@ -999,6 +1025,7 @@ void SceneTreeEditor::_bind_methods() {
ObjectTypeDB::bind_method(_MD("can_drop_data_fw"), &SceneTreeEditor::can_drop_data_fw);
ObjectTypeDB::bind_method(_MD("drop_data_fw"), &SceneTreeEditor::drop_data_fw);
+ ObjectTypeDB::bind_method(_MD("update_tree"), &SceneTreeEditor::update_tree);
ADD_SIGNAL( MethodInfo("node_selected") );
ADD_SIGNAL( MethodInfo("node_renamed") );
diff --git a/tools/editor/scene_tree_editor.h b/tools/editor/scene_tree_editor.h
index 94be75ea8e..ae0afa32ec 100644
--- a/tools/editor/scene_tree_editor.h
+++ b/tools/editor/scene_tree_editor.h
@@ -49,7 +49,9 @@ class SceneTreeEditor : public Control {
BUTTON_SCRIPT=2,
BUTTON_LOCK=3,
BUTTON_GROUP=4,
- BUTTON_WARNING=5
+ BUTTON_WARNING=5,
+ BUTTON_SIGNALS=6,
+ BUTTON_GROUPS=7,
};
enum {
diff --git a/tools/editor/scenes_dock.cpp b/tools/editor/scenes_dock.cpp
index e00f470bc4..2ac439491d 100644
--- a/tools/editor/scenes_dock.cpp
+++ b/tools/editor/scenes_dock.cpp
@@ -190,8 +190,6 @@ void ScenesDock::_notification(int p_what) {
button_reload->set_icon( get_icon("Reload","EditorIcons"));
button_favorite->set_icon( get_icon("Favorites","EditorIcons"));
- button_fav_up->set_icon( get_icon("MoveUp","EditorIcons"));
- button_fav_down->set_icon( get_icon("MoveDown","EditorIcons"));
//button_instance->set_icon( get_icon("Add","EditorIcons"));
//button_open->set_icon( get_icon("Folder","EditorIcons"));
button_back->set_icon( get_icon("Filesystem","EditorIcons"));
@@ -201,7 +199,7 @@ void ScenesDock::_notification(int p_what) {
files->connect("item_activated",this,"_select_file");
button_hist_next->connect("pressed",this,"_fw_history");
button_hist_prev->connect("pressed",this,"_bw_history");
- search_button->set_icon( get_icon("Zoom","EditorIcons"));
+ search_icon->set_texture( get_icon("Zoom","EditorIcons"));
button_hist_next->set_icon( get_icon("Forward","EditorIcons"));
button_hist_prev->set_icon( get_icon("Back","EditorIcons"));
@@ -228,10 +226,16 @@ void ScenesDock::_notification(int p_what) {
case NOTIFICATION_DRAG_BEGIN: {
Dictionary dd = get_viewport()->gui_get_drag_data();
- if (tree->is_visible() && dd.has("type") && (
- (String(dd["type"])=="files") || (String(dd["type"])=="files_and_dirs") || (String(dd["type"])=="resource"))) {
- tree->set_drop_mode_flags(Tree::DROP_MODE_ON_ITEM);
+ if (tree->is_visible() && dd.has("type") ) {
+ if ( (String(dd["type"])=="files") || (String(dd["type"])=="files_and_dirs") || (String(dd["type"])=="resource")) {
+ tree->set_drop_mode_flags(Tree::DROP_MODE_ON_ITEM);
+ }
+ if ( (String(dd["type"])=="favorite") ) {
+ tree->set_drop_mode_flags(Tree::DROP_MODE_INBETWEEN);
+ }
}
+
+
} break;
case NOTIFICATION_DRAG_END: {
@@ -272,11 +276,7 @@ void ScenesDock::_dir_selected() {
if (ti->get_parent() && ti->get_parent()->get_parent()==tree->get_root() && !ti->get_parent()->get_prev()) {
//a favorite!!!
- button_fav_up->set_disabled(!ti->get_prev());
- button_fav_down->set_disabled(!ti->get_next());
} else {
- button_fav_up->set_disabled(true);
- button_fav_down->set_disabled(true);
}
@@ -287,83 +287,6 @@ void ScenesDock::_dir_selected() {
}
-void ScenesDock::_fav_up_pressed() {
-
- TreeItem *sel = tree->get_selected();
- if (!sel)
- return ;
-
- if (!sel->get_prev())
- return;
-
- String sw = sel->get_prev()->get_metadata(0);
- String txt = sel->get_metadata(0);
-
- Vector<String> favorited = EditorSettings::get_singleton()->get_favorite_dirs();
-
- int a_idx=favorited.find(sw);
- int b_idx=favorited.find(txt);
-
- if (a_idx==-1 || b_idx==-1)
- return;
- SWAP(favorited[a_idx],favorited[b_idx]);
-
- EditorSettings::get_singleton()->set_favorite_dirs(favorited);
-
- _update_tree();
-
- if (!tree->get_root() || !tree->get_root()->get_children() || !tree->get_root()->get_children()->get_children())
- return;
- sel = tree->get_root()->get_children()->get_children();
- while(sel) {
-
- String t = sel->get_metadata(0);
- if (t==txt) {
- sel->select(0);
- return;
- }
- sel=sel->get_next();
- }
-}
-
-void ScenesDock::_fav_down_pressed() {
-
- TreeItem *sel = tree->get_selected();
- if (!sel)
- return ;
-
- if (!sel->get_next())
- return;
-
- String sw = sel->get_next()->get_metadata(0);
- String txt = sel->get_metadata(0);
-
- Vector<String> favorited = EditorSettings::get_singleton()->get_favorite_dirs();
-
- int a_idx=favorited.find(sw);
- int b_idx=favorited.find(txt);
-
- if (a_idx==-1 || b_idx==-1)
- return;
- SWAP(favorited[a_idx],favorited[b_idx]);
-
- EditorSettings::get_singleton()->set_favorite_dirs(favorited);
-
- _update_tree();
-
- if (!tree->get_root() || !tree->get_root()->get_children() || !tree->get_root()->get_children()->get_children())
- return;
- sel = tree->get_root()->get_children()->get_children();
- while(sel) {
-
- String t = sel->get_metadata(0);
- if (t==txt) {
- sel->select(0);
- return;
- }
- sel=sel->get_next();
- }
-}
void ScenesDock::_favorites_pressed() {
@@ -403,6 +326,10 @@ String ScenesDock::get_selected_path() const {
return "res://"+path;
}
+String ScenesDock::get_current_path() const {
+
+ return path;
+}
void ScenesDock::_thumbnail_done(const String& p_path,const Ref<Texture>& p_preview, const Variant& p_udata) {
@@ -465,6 +392,25 @@ void ScenesDock::_search(EditorFileSystemDirectory *p_path,List<FileInfo>* match
fi.name=file;
fi.type=p_path->get_file_type(i);
fi.path=p_path->get_file_path(i);
+ if (p_path->get_file_meta(i)) {
+ if (p_path->is_missing_sources(i)) {
+ fi.import_status=3;
+ } else if (p_path->have_sources_changed(i)) {
+ fi.import_status=2;
+ } else {
+ fi.import_status=1;
+ }
+ } else {
+ fi.import_status=0;
+ }
+ for(int j=0;j<p_path->get_source_count(i);j++) {
+ String s = EditorImportPlugin::expand_source_path(p_path->get_source_file(i,j));
+ if (p_path->is_source_file_missing(i,j)) {
+ s+=" (Missing)";
+ }
+ fi.sources.push_back(s);
+ }
+
matches->push_back(fi);
if (matches->size()>p_max_items)
return;
@@ -495,11 +441,12 @@ void ScenesDock::_update_files(bool p_keep_selection) {
return;
int thumbnail_size = EditorSettings::get_singleton()->get("file_dialog/thumbnail_size");
+ thumbnail_size*=EDSCALE;
Ref<Texture> folder_thumbnail;
Ref<Texture> file_thumbnail;
bool use_thumbnails=!display_mode->is_pressed();
- bool use_folders = !search_box->is_visible() && split_mode;
+ bool use_folders = search_box->get_text().length()==0 && split_mode;
if (use_thumbnails) { //thumbnails
@@ -508,6 +455,7 @@ void ScenesDock::_update_files(bool p_keep_selection) {
files->set_fixed_column_width(thumbnail_size*3/2);
files->set_max_text_lines(2);
files->set_min_icon_size(Size2(thumbnail_size,thumbnail_size));
+ files->set_max_icon_size(Size2(thumbnail_size,thumbnail_size));
if (!has_icon("ResizedFolder","EditorIcons")) {
Ref<ImageTexture> folder = get_icon("FolderBig","EditorIcons");
@@ -579,7 +527,7 @@ void ScenesDock::_update_files(bool p_keep_selection) {
List<FileInfo> filelist;
- if (search_box->is_visible()) {
+ if (search_box->get_text().length()) {
if (search_box->get_text().length()>1) {
_search(EditorFileSystem::get_singleton()->get_filesystem(),&filelist,128);
@@ -594,6 +542,27 @@ void ScenesDock::_update_files(bool p_keep_selection) {
fi.name=efd->get_file(i);
fi.path=path.plus_file(fi.name);
fi.type=efd->get_file_type(i);
+ if (efd->get_file_meta(i)) {
+ if (efd->is_missing_sources(i)) {
+ fi.import_status=3;
+ } else if (efd->have_sources_changed(i)) {
+ fi.import_status=2;
+ } else {
+ fi.import_status=1;
+ }
+
+ for(int j=0;j<efd->get_source_count(i);j++) {
+ String s = EditorImportPlugin::expand_source_path(efd->get_source_file(i,j));
+ if (efd->is_source_file_missing(i,j)) {
+ s+=" (Missing)";
+ }
+ fi.sources.push_back(s);
+ }
+ } else {
+ fi.import_status=0;
+ }
+
+
filelist.push_back(fi);
}
@@ -610,12 +579,33 @@ void ScenesDock::_update_files(bool p_keep_selection) {
Ref<Texture> type_icon;
- if (has_icon(type,ei)) {
- type_icon=get_icon(type,ei);
- } else {
- type_icon=get_icon(oi,ei);
+ String tooltip=fname;
+
+ if (E->get().import_status==0) {
+
+ if (has_icon(type,ei)) {
+ type_icon=get_icon(type,ei);
+ } else {
+ type_icon=get_icon(oi,ei);
+ }
+ } else if (E->get().import_status==1) {
+ type_icon=get_icon("DependencyOk","EditorIcons");
+ } else if (E->get().import_status==2) {
+ type_icon=get_icon("DependencyChanged","EditorIcons");
+ tooltip+"\nStatus: Needs Re-Import";
+ } else if (E->get().import_status==3) {
+ type_icon=get_icon("ImportFail","EditorIcons");
+ tooltip+"\nStatus: Missing Dependencies";
}
+ if (E->get().sources.size()) {
+ for(int i=0;i<E->get().sources.size();i++) {
+ tooltip+="\nSource: "+E->get().sources[i];
+ }
+ }
+
+
+
if (use_thumbnails) {
files->add_item(fname,file_thumbnail,true);
files->set_item_metadata(files->get_item_count()-1,fp);
@@ -634,6 +624,9 @@ void ScenesDock::_update_files(bool p_keep_selection) {
if (cselection.has(fname))
files->select(files->get_item_count()-1,false);
+ files->set_item_tooltip(files->get_item_count()-1,tooltip);
+
+
}
@@ -653,8 +646,6 @@ void ScenesDock::_go_to_tree() {
tree->grab_focus();
tree->ensure_cursor_is_visible();
button_favorite->show();
- button_fav_up->show();
- button_fav_down->show();
//button_open->hide();
//file_options->hide();
}
@@ -680,8 +671,6 @@ void ScenesDock::_fs_changed() {
if (!tree->is_hidden()) {
button_favorite->show();
- button_fav_up->show();
- button_fav_down->show();
_update_tree();
}
@@ -859,7 +848,7 @@ void ScenesDock::_move_operation(const String& p_to_path) {
for(int i=0;i<move_dirs.size();i++) {
if (p_to_path.begins_with(move_dirs[i])) {
- EditorNode::get_singleton()->show_warning(TTR("Can't move directories to within themselves"));
+ EditorNode::get_singleton()->show_warning(TTR("Can't move directories to within themselves."));
return;
}
@@ -944,6 +933,7 @@ void ScenesDock::_file_option(int p_option) {
switch(p_option) {
+ case FILE_SHOW_IN_EXPLORER:
case FILE_OPEN: {
int idx=-1;
for(int i=0;i<files->get_item_count();i++) {
@@ -959,6 +949,12 @@ void ScenesDock::_file_option(int p_option) {
String path = files->get_item_metadata(idx);
+ if (p_option == FILE_SHOW_IN_EXPLORER) {
+ String dir = Globals::get_singleton()->globalize_path(path);
+ dir = dir.substr(0, dir.find_last("/"));
+ OS::get_singleton()->shell_open(String("file://")+dir);
+ return;
+ }
if (path.ends_with("/")) {
if (path!="res://") {
@@ -1036,7 +1032,7 @@ void ScenesDock::_file_option(int p_option) {
rename_dialog->set_mode(EditorFileDialog::MODE_SAVE_FILE);
rename_dialog->set_current_path(move_files[0]);
rename_dialog->popup_centered_ratio();
- rename_dialog->set_title(TTR("Pick New Name and Location For: ")+move_files[0].get_file());
+ rename_dialog->set_title(TTR("Pick New Name and Location For:")+" "+move_files[0].get_file());
} else {
@@ -1071,6 +1067,40 @@ void ScenesDock::_file_option(int p_option) {
case FILE_INFO: {
} break;
+ case FILE_REIMPORT: {
+
+
+ Vector<String> reimport;
+ for(int i=0;i<files->get_item_count();i++) {
+
+ if (!files->is_selected(i))
+ continue;
+
+ String path = files->get_item_metadata(i);
+ reimport.push_back(path);
+ }
+
+ ERR_FAIL_COND(reimport.size()==0);
+
+ Ref<ResourceImportMetadata> rimd = ResourceLoader::load_import_metadata(reimport[0]);
+ ERR_FAIL_COND(!rimd.is_valid());
+ String editor=rimd->get_editor();
+
+ if (editor.begins_with("texture_")) { //compatibility fix for old texture format
+ editor="texture";
+ }
+
+ Ref<EditorImportPlugin> rimp = EditorImportExport::get_singleton()->get_import_plugin_by_name(editor);
+ ERR_FAIL_COND(!rimp.is_valid());
+
+ if (reimport.size()==1) {
+ rimp->import_dialog(reimport[0]);
+ } else {
+ rimp->reimport_multiple_files(reimport);
+
+ }
+
+ } break;
}
}
@@ -1093,8 +1123,6 @@ void ScenesDock::_open_pressed(){
tree->hide();
file_list_vb->show();
button_favorite->hide();
- button_fav_up->hide();
- button_fav_down->hide();
}
//file_options->show();
@@ -1107,26 +1135,6 @@ void ScenesDock::_open_pressed(){
}
-void ScenesDock::_search_toggled(){
-
- if (search_button->is_pressed()) {
- //search_box->clear();
- search_box->select_all();
- search_box->show();
- current_path->hide();
- search_box->grab_focus();
-
- _update_files(false);
- } else {
-
- //search_box->clear();
- search_box->hide();
- current_path->show();
-
- _update_files(false);
-
- }
-}
void ScenesDock::_search_changed(const String& p_text) {
@@ -1173,7 +1181,14 @@ Variant ScenesDock::get_drag_data_fw(const Point2& p_point,Control* p_from) {
path=path+"/";
Vector<String> paths;
paths.push_back(path);
- return EditorNode::get_singleton()->drag_files(paths,p_from);
+ Dictionary d = EditorNode::get_singleton()->drag_files(paths,p_from);
+
+ if (selected->get_parent() && tree->get_root()->get_children()==selected->get_parent()) {
+ //a favorite.. treat as such
+ d["type"]="favorite";
+ }
+
+ return d;
}
@@ -1232,6 +1247,30 @@ bool ScenesDock::can_drop_data_fw(const Point2& p_point,const Variant& p_data,Co
Dictionary drag_data = p_data;
+ if (drag_data.has("type") && String(drag_data["type"])=="favorite") {
+
+ //moving favorite around
+ TreeItem *ti = tree->get_item_at_pos(p_point);
+ if (!ti)
+ return false;
+
+ int what = tree->get_drop_section_at_pos(p_point);
+
+ if (ti==tree->get_root()->get_children()) {
+ return (what==1); //the parent, first fav
+ }
+ if (ti->get_parent() && tree->get_root()->get_children()==ti->get_parent()) {
+ return true; // a favorite
+ }
+
+ if (ti==tree->get_root()->get_children()->get_next()) {
+ return (what==-1); //the tree, last fav
+ }
+
+ return false;
+
+ }
+
if (drag_data.has("type") && String(drag_data["type"])=="resource") {
return true;
@@ -1276,6 +1315,69 @@ void ScenesDock::drop_data_fw(const Point2& p_point,const Variant& p_data,Contro
return;
Dictionary drag_data = p_data;
+ if (drag_data.has("type") && String(drag_data["type"])=="favorite") {
+
+ //moving favorite around
+ TreeItem *ti = tree->get_item_at_pos(p_point);
+ if (!ti)
+ return;
+
+ Vector<String> files = drag_data["files"];
+
+ ERR_FAIL_COND(files.size()!=1);
+
+ String swap = files[0];
+ if (swap!="res://" && swap.ends_with("/")) {
+ swap=swap.substr(0,swap.length()-1);
+ }
+
+ int what = tree->get_drop_section_at_pos(p_point);
+
+ TreeItem *swap_item=NULL;
+
+ if (ti==tree->get_root()->get_children()) {
+ swap_item=tree->get_root()->get_children()->get_children();
+
+ } else if (ti->get_parent() && tree->get_root()->get_children()==ti->get_parent()) {
+ if (what==-1) {
+ swap_item=ti;
+ } else {
+ swap_item=ti->get_next();
+ }
+ }
+
+ String swap_with;
+
+ if (swap_item) {
+ swap_with=swap_item->get_metadata(0);
+ if (swap_with!="res://" && swap_with.ends_with("/")) {
+ swap_with=swap_with.substr(0,swap_with.length()-1);
+ }
+ }
+
+ if (swap==swap_with)
+ return;
+
+ Vector<String> dirs = EditorSettings::get_singleton()->get_favorite_dirs();
+
+ ERR_FAIL_COND(dirs.find(swap)==-1);
+ ERR_FAIL_COND(swap_with!=String() && dirs.find(swap_with)==-1);
+
+ dirs.erase(swap);
+
+ if (swap_with==String()) {
+ dirs.push_back(swap);
+ } else {
+ int idx = dirs.find(swap_with);
+ dirs.insert(idx,swap);
+ }
+
+ EditorSettings::get_singleton()->set_favorite_dirs(dirs);
+ _update_tree();
+ return;
+
+ }
+
if (drag_data.has("type") && String(drag_data["type"])=="resource") {
Ref<Resource> res = drag_data["resource"];
@@ -1328,7 +1430,7 @@ void ScenesDock::drop_data_fw(const Point2& p_point,const Variant& p_data,Contro
int at_pos = files->get_item_at_pos(p_point);
ERR_FAIL_COND(at_pos==-1);
- String to_dir = files->get_item_metadata(at_pos);
+ to_dir = files->get_item_metadata(at_pos);
} else {
TreeItem *ti = tree->get_item_at_pos(p_point);
if (!ti)
@@ -1364,6 +1466,8 @@ void ScenesDock::_files_list_rmb_select(int p_item,const Vector2& p_pos) {
Vector<String> filenames;
bool all_scenes=true;
+ bool all_can_reimport=true;
+ Set<String> types;
for(int i=0;i<files->get_item_count();i++) {
@@ -1383,6 +1487,38 @@ void ScenesDock::_files_list_rmb_select(int p_item,const Vector2& p_pos) {
}
+ EditorFileSystemDirectory *efsd=NULL;
+ int pos;
+
+ efsd = EditorFileSystem::get_singleton()->find_file(path,&pos);
+
+ if (efsd) {
+
+
+ if (!efsd->get_file_meta(pos)) {
+ all_can_reimport=false;
+
+
+ } else {
+ Ref<ResourceImportMetadata> rimd = ResourceLoader::load_import_metadata(path);
+ if (rimd.is_valid()) {
+
+ String editor=rimd->get_editor();
+ if (editor.begins_with("texture_")) { //compatibility fix for old texture format
+ editor="texture";
+ }
+ types.insert(editor);
+
+ } else {
+ all_can_reimport=false;
+
+ }
+ }
+ } else {
+ all_can_reimport=false;
+
+ }
+
filenames.push_back(path);
if (EditorFileSystem::get_singleton()->get_file_type(path)!="PackedScene")
all_scenes=false;
@@ -1414,8 +1550,34 @@ void ScenesDock::_files_list_rmb_select(int p_item,const Vector2& p_pos) {
file_options->add_item(TTR("Move To.."),FILE_MOVE);
}
+
file_options->add_item(TTR("Delete"),FILE_REMOVE);
+
//file_options->add_item(TTR("Info"),FILE_INFO);
+
+ file_options->add_separator();
+ file_options->add_item(TTR("Show In File Manager"),FILE_SHOW_IN_EXPLORER);
+
+ if (all_can_reimport && types.size()==1) { //all can reimport and are of the same type
+
+
+ bool valid=true;
+ Ref<EditorImportPlugin> rimp = EditorImportExport::get_singleton()->get_import_plugin_by_name(types.front()->get());
+ if (rimp.is_valid()) {
+
+ if (filenames.size()>1 && !rimp->can_reimport_multiple_files()) {
+ valid=false;
+ }
+ } else {
+ valid=false;
+ }
+
+ if (valid) {
+ file_options->add_separator();
+ file_options->add_item(TTR("Re-Import.."),FILE_REIMPORT);
+ }
+ }
+
file_options->set_pos(files->get_global_pos() + p_pos);
file_options->popup();
@@ -1438,12 +1600,10 @@ void ScenesDock::_bind_methods() {
ObjectTypeDB::bind_method(_MD("_bw_history"), &ScenesDock::_bw_history);
ObjectTypeDB::bind_method(_MD("_fs_changed"), &ScenesDock::_fs_changed);
ObjectTypeDB::bind_method(_MD("_dir_selected"), &ScenesDock::_dir_selected);
- ObjectTypeDB::bind_method(_MD("_fav_up_pressed"), &ScenesDock::_fav_up_pressed);
- ObjectTypeDB::bind_method(_MD("_fav_down_pressed"), &ScenesDock::_fav_down_pressed);
ObjectTypeDB::bind_method(_MD("_file_option"), &ScenesDock::_file_option);
ObjectTypeDB::bind_method(_MD("_move_operation"), &ScenesDock::_move_operation);
ObjectTypeDB::bind_method(_MD("_rename_operation"), &ScenesDock::_rename_operation);
- ObjectTypeDB::bind_method(_MD("_search_toggled"), &ScenesDock::_search_toggled);
+
ObjectTypeDB::bind_method(_MD("_search_changed"), &ScenesDock::_search_changed);
ObjectTypeDB::bind_method(_MD("get_drag_data_fw"), &ScenesDock::get_drag_data_fw);
@@ -1476,28 +1636,21 @@ ScenesDock::ScenesDock(EditorNode *p_editor) {
button_hist_next->set_focus_mode(FOCUS_NONE);
button_hist_next->set_tooltip(TTR("Next Directory"));
+ current_path=memnew( LineEdit );
+ current_path->set_h_size_flags(SIZE_EXPAND_FILL);
+ toolbar_hbc->add_child(current_path);
+
+
button_reload = memnew( Button );
button_reload->set_flat(true);
button_reload->connect("pressed",this,"_rescan");
toolbar_hbc->add_child(button_reload);
button_reload->set_focus_mode(FOCUS_NONE);
button_reload->set_tooltip(TTR("Re-Scan Filesystem"));
+ button_reload->hide();
- toolbar_hbc->add_spacer();
-
- button_fav_up = memnew( ToolButton );
- button_fav_up->set_flat(true);
- toolbar_hbc->add_child(button_fav_up);
- button_fav_up->set_disabled(true);
- button_fav_up->connect("pressed",this,"_fav_up_pressed");
- button_fav_up->set_tooltip(TTR("Move Favorite Up"));
+ //toolbar_hbc->add_spacer();
- button_fav_down = memnew( ToolButton );
- button_fav_down->set_flat(true);
- toolbar_hbc->add_child(button_fav_down);
- button_fav_down->set_disabled(true);
- button_fav_down->connect("pressed",this,"_fav_down_pressed");
- button_fav_down->set_tooltip(TTR("Move Favorite Down"));
button_favorite = memnew( Button );
button_favorite->set_flat(true);
@@ -1507,8 +1660,10 @@ ScenesDock::ScenesDock(EditorNode *p_editor) {
button_favorite->set_tooltip(TTR("Toggle folder status as Favorite"));
button_favorite->set_focus_mode(FOCUS_NONE);
- button_fav_up->set_focus_mode(FOCUS_NONE);
- button_fav_down->set_focus_mode(FOCUS_NONE);
+
+ Control *spacer = memnew( Control);
+
+
/*
button_open = memnew( Button );
@@ -1540,7 +1695,7 @@ ScenesDock::ScenesDock(EditorNode *p_editor) {
tree->set_hide_root(true);
split_box->add_child(tree);
- tree->set_custom_minimum_size(Size2(0,200));
+ tree->set_custom_minimum_size(Size2(0,200)*EDSCALE);
tree->set_drag_forwarding(this);
@@ -1566,20 +1721,15 @@ ScenesDock::ScenesDock(EditorNode *p_editor) {
button_back = memnew( ToolButton );
path_hb->add_child(button_back);
button_back->hide();
- current_path=memnew( LineEdit );
- current_path->set_h_size_flags(SIZE_EXPAND_FILL);
- path_hb->add_child(current_path);
search_box = memnew( LineEdit );
search_box->set_h_size_flags(SIZE_EXPAND_FILL);
path_hb->add_child(search_box);
- search_box->hide();
search_box->connect("text_changed",this,"_search_changed");
- search_button = memnew( ToolButton );
- path_hb->add_child(search_button);
- search_button->set_toggle_mode(true );
- search_button->connect("pressed",this,"_search_toggled");
+ search_icon = memnew( TextureFrame );
+ search_icon->set_stretch_mode(TextureFrame::STRETCH_KEEP_CENTERED);
+ path_hb->add_child(search_icon);
display_mode = memnew( ToolButton );
path_hb->add_child(display_mode);
@@ -1630,9 +1780,9 @@ ScenesDock::ScenesDock(EditorNode *p_editor) {
path="res://";
+ add_constant_override("separation",3);
}
ScenesDock::~ScenesDock() {
}
-
diff --git a/tools/editor/scenes_dock.h b/tools/editor/scenes_dock.h
index 327e5a25f0..9a0d6c87cf 100644
--- a/tools/editor/scenes_dock.h
+++ b/tools/editor/scenes_dock.h
@@ -62,7 +62,8 @@ class ScenesDock : public VBoxContainer {
FILE_MOVE,
FILE_REMOVE,
FILE_REIMPORT,
- FILE_INFO
+ FILE_INFO,
+ FILE_SHOW_IN_EXPLORER
};
@@ -76,15 +77,13 @@ class ScenesDock : public VBoxContainer {
Button *button_reload;
Button *button_favorite;
- Button *button_fav_up;
- Button *button_fav_down;
Button *button_back;
Button *display_mode;
Button *button_hist_next;
Button *button_hist_prev;
LineEdit *current_path;
LineEdit *search_box;
- Button *search_button;
+ TextureFrame *search_icon;
HBoxContainer *path_hb;
bool split_mode;
@@ -136,8 +135,6 @@ class ScenesDock : public VBoxContainer {
void _push_to_history();
- void _fav_up_pressed();
- void _fav_down_pressed();
void _dir_selected();
void _update_tree();
void _rescan();
@@ -146,7 +143,6 @@ class ScenesDock : public VBoxContainer {
void _favorites_pressed();
void _open_pressed();
- void _search_toggled();
void _search_changed(const String& p_text);
@@ -157,6 +153,8 @@ class ScenesDock : public VBoxContainer {
String name;
String path;
StringName type;
+ int import_status; //0 not imported, 1 - ok, 2- must reimport, 3- broken
+ Vector<String> sources;
bool operator<(const FileInfo& fi) const {
return name < fi.name;
@@ -175,6 +173,8 @@ protected:
public:
String get_selected_path() const;
+
+ String get_current_path() const;
void focus_on_filter();
void fix_dependencies(const String& p_for_file);
diff --git a/tools/editor/script_create_dialog.cpp b/tools/editor/script_create_dialog.cpp
index 8d410f6fa3..e88d603b30 100644
--- a/tools/editor/script_create_dialog.cpp
+++ b/tools/editor/script_create_dialog.cpp
@@ -74,17 +74,17 @@ bool ScriptCreateDialog::_validate(const String& p_string) {
void ScriptCreateDialog::_class_name_changed(const String& p_name) {
if (!_validate(parent_name->get_text())) {
- error_label->set_text(TTR("Invaild parent class name"));
+ error_label->set_text(TTR("Invalid parent class name"));
error_label->add_color_override("font_color",Color(1,0.4,0.0,0.8));
} else if (class_name->is_editable()) {
if (class_name->get_text()=="") {
- error_label->set_text(TTR("Valid Chars: a-z A-Z 0-9 _"));
+ error_label->set_text(TTR("Valid chars:")+" a-z A-Z 0-9 _");
error_label->add_color_override("font_color",Color(1,1,1,0.6));
} else if (!_validate(class_name->get_text())) {
error_label->set_text(TTR("Invalid class name"));
error_label->add_color_override("font_color",Color(1,0.2,0.2,0.8));
} else {
- error_label->set_text(TTR("Valid Name"));
+ error_label->set_text(TTR("Valid name"));
error_label->add_color_override("font_color",Color(0,1.0,0.8,0.8));
}
} else {
@@ -98,12 +98,12 @@ void ScriptCreateDialog::ok_pressed() {
if (class_name->is_editable() && !_validate(class_name->get_text())) {
- alert->set_text(TTR("Class Name is Invalid!"));
+ alert->set_text(TTR("Class name is invalid!"));
alert->popup_centered_minsize();
return;
}
if (!_validate(parent_name->get_text())) {
- alert->set_text(TTR("Parent Class Name is Invalid!"));
+ alert->set_text(TTR("Parent class name is invalid!"));
alert->popup_centered_minsize();
return;
@@ -133,7 +133,7 @@ void ScriptCreateDialog::ok_pressed() {
script->set_path(lpath);
if (!path_valid) {
- alert->set_text(TTR("Path is Invalid!"));
+ alert->set_text(TTR("Invalid path!"));
alert->popup_centered_minsize();
return;
@@ -141,7 +141,7 @@ void ScriptCreateDialog::ok_pressed() {
Error err = ResourceSaver::save(lpath,scr,ResourceSaver::FLAG_CHANGE_PATH);
if (err!=OK) {
- alert->set_text(TTR("Could not create script in filesystem: ")+String(""));
+ alert->set_text(TTR("Could not create script in filesystem."));
alert->popup_centered_minsize();
return;
}
@@ -215,7 +215,7 @@ void ScriptCreateDialog::_path_changed(const String& p_path) {
if (p=="") {
- path_error_label->set_text(TTR("Path is Empty"));
+ path_error_label->set_text(TTR("Path is empty"));
path_error_label->add_color_override("font_color",Color(1,0.4,0.0,0.8));
return;
@@ -234,7 +234,7 @@ void ScriptCreateDialog::_path_changed(const String& p_path) {
if (d->change_dir(p.get_base_dir())!=OK) {
- path_error_label->set_text(TTR("Base Path Invalid"));
+ path_error_label->set_text(TTR("Invalid base path"));
path_error_label->add_color_override("font_color",Color(1,0.4,0.0,0.8));
memdelete(d);
return;
@@ -249,7 +249,7 @@ void ScriptCreateDialog::_path_changed(const String& p_path) {
if (f->file_exists(p)) {
- path_error_label->set_text(TTR("File Exists"));
+ path_error_label->set_text(TTR("File exists"));
path_error_label->add_color_override("font_color",Color(1,0.4,0.0,0.8));
memdelete(f);
return;
@@ -273,13 +273,13 @@ void ScriptCreateDialog::_path_changed(const String& p_path) {
if (!found) {
- path_error_label->set_text(TTR("Invalid Extension"));
+ path_error_label->set_text(TTR("Invalid extension"));
path_error_label->add_color_override("font_color",Color(1,0.4,0.0,0.8));
return;
}
- path_error_label->set_text(TTR("Path is Valid"));
+ path_error_label->set_text(TTR("Valid path"));
path_error_label->add_color_override("font_color",Color(0,1.0,0.8,0.8));
path_valid=true;
@@ -363,7 +363,7 @@ ScriptCreateDialog::ScriptCreateDialog() {
set_size(Size2(200,150));
set_hide_on_ok(false);
- set_title(TTR("Create Script for Node"));
+ set_title(TTR("Create Node Script"));
file_browse = memnew( EditorFileDialog );
file_browse->connect("file_selected",this,"_file_selected");
diff --git a/tools/editor/script_editor_debugger.cpp b/tools/editor/script_editor_debugger.cpp
index 325eadc1e5..37a90ba7be 100644
--- a/tools/editor/script_editor_debugger.cpp
+++ b/tools/editor/script_editor_debugger.cpp
@@ -41,6 +41,8 @@
#include "globals.h"
#include "editor_node.h"
#include "main/performance.h"
+#include "editor_profiler.h"
+#include "editor_settings.h"
class ScriptEditorDebuggerVariables : public Object {
@@ -109,6 +111,68 @@ public:
}
};
+
+class ScriptEditorDebuggerInspectedObject : public Object {
+
+ OBJ_TYPE( ScriptEditorDebuggerInspectedObject, Object);
+
+
+
+
+protected:
+
+ bool _set(const StringName& p_name, const Variant& p_value) {
+
+ if (!prop_values.has(p_name))
+ return false;
+
+ emit_signal("value_edited",p_name,p_value);
+ prop_values[p_name]=p_value;
+ return true;
+ }
+
+ bool _get(const StringName& p_name,Variant &r_ret) const {
+
+ if (!prop_values.has(p_name))
+ return false;
+
+ r_ret=prop_values[p_name];
+ return true;
+
+ }
+ void _get_property_list( List<PropertyInfo> *p_list) const {
+
+ p_list->clear(); //sorry, no want category
+ for (const List<PropertyInfo>::Element *E=prop_list.front();E;E=E->next()) {
+ p_list->push_back(E->get());
+ }
+ }
+
+
+ static void _bind_methods() {
+
+ ADD_SIGNAL(MethodInfo("value_edited"));
+ }
+
+public:
+
+ ObjectID last_edited_id;
+ List<PropertyInfo> prop_list;
+ Map<StringName,Variant> prop_values;
+
+ void update() {
+ _change_notify();
+ }
+
+ void update_single(const char* p_prop) {
+ _change_notify(p_prop);
+ }
+
+ ScriptEditorDebuggerInspectedObject() { last_edited_id=0; }
+
+
+};
+
void ScriptEditorDebugger::debug_next() {
ERR_FAIL_COND(!breaked);
@@ -158,6 +222,72 @@ void ScriptEditorDebugger::debug_continue() {
}
+void ScriptEditorDebugger::_scene_tree_folded(Object* obj) {
+
+
+ if (updating_scene_tree) {
+
+ return;
+ }
+ TreeItem *item=obj->cast_to<TreeItem>();
+
+ if (!item)
+ return;
+
+ ObjectID id = item->get_metadata(0);
+ if (item->is_collapsed()) {
+ unfold_cache.erase(id);
+ } else {
+ unfold_cache.insert(id);
+ }
+
+
+}
+
+void ScriptEditorDebugger::_scene_tree_selected() {
+
+
+ if (updating_scene_tree) {
+
+ return;
+ }
+ TreeItem *item = inspect_scene_tree->get_selected();
+ if (!item) {
+
+ return;
+ }
+
+ inspected_object_id = item->get_metadata(0);
+
+ Array msg;
+ msg.push_back("inspect_object");
+ msg.push_back(inspected_object_id);
+ ppeer->put_var(msg);
+
+}
+
+void ScriptEditorDebugger::_scene_tree_property_value_edited(const String& p_prop,const Variant& p_value) {
+
+
+ Array msg;
+ msg.push_back("set_object_property");
+ msg.push_back(inspected_object_id);
+ msg.push_back(p_prop);
+ msg.push_back(p_value);
+ ppeer->put_var(msg);
+ inspect_edited_object_timeout=0.7; //avoid annoyance, don't request soon after editing
+}
+
+void ScriptEditorDebugger::_scene_tree_property_select_object(ObjectID p_object) {
+
+ inspected_object_id=p_object;
+ Array msg;
+ msg.push_back("inspect_object");
+ msg.push_back(inspected_object_id);
+ ppeer->put_var(msg);
+
+}
+
void ScriptEditorDebugger::_scene_tree_request() {
ERR_FAIL_COND(connection.is_null());
@@ -208,7 +338,13 @@ void ScriptEditorDebugger::_parse_message(const String& p_msg,const Array& p_dat
docontinue->set_disabled(false);
emit_signal("breaked",true,can_continue);
OS::get_singleton()->move_window_to_foreground();
- tabs->set_current_tab(0);
+ if (!profiler->is_seeking())
+ tabs->set_current_tab(0);
+
+ profiler->set_enabled(false);
+
+ EditorNode::get_singleton()->get_pause_button()->set_pressed(true);
+
EditorNode::get_singleton()->make_bottom_panel_item_visible(this);
@@ -225,6 +361,11 @@ void ScriptEditorDebugger::_parse_message(const String& p_msg,const Array& p_dat
docontinue->set_disabled(true);
emit_signal("breaked",false,false);
//tabs->set_current_tab(0);
+ profiler->set_enabled(true);
+ profiler->disable_seeking();
+
+ EditorNode::get_singleton()->get_pause_button()->set_pressed(false);
+
} else if (p_msg=="message:click_ctrl") {
@@ -233,10 +374,12 @@ void ScriptEditorDebugger::_parse_message(const String& p_msg,const Array& p_dat
} else if (p_msg=="message:scene_tree") {
- scene_tree->clear();
+ inspect_scene_tree->clear();
Map<int,TreeItem*> lv;
- for(int i=0;i<p_data.size();i+=3) {
+ updating_scene_tree=true;
+
+ for(int i=0;i<p_data.size();i+=4) {
TreeItem *p;
int level = p_data[i];
@@ -247,15 +390,90 @@ void ScriptEditorDebugger::_parse_message(const String& p_msg,const Array& p_dat
p=lv[level-1];
}
- TreeItem *it = scene_tree->create_item(p);
+
+ TreeItem *it = inspect_scene_tree->create_item(p);
+
+ ObjectID id = ObjectID(p_data[i+3]);
+
it->set_text(0,p_data[i+1]);
if (has_icon(p_data[i+2],"EditorIcons"))
it->set_icon(0,get_icon(p_data[i+2],"EditorIcons"));
+ it->set_metadata(0,id);
+ if (id==inspected_object_id) {
+ it->select(0);
+ }
+
+ if (p) {
+ if (!unfold_cache.has(id)) {
+ it->set_collapsed(true);
+ }
+ } else {
+ if (unfold_cache.has(id)) { //reverse for root
+ it->set_collapsed(true);
+ }
+ }
lv[level]=it;
}
+ updating_scene_tree=false;
le_clear->set_disabled(false);
le_set->set_disabled(false);
+ } else if (p_msg=="message:inspect_object") {
+
+
+ ObjectID id = p_data[0];
+ String type = p_data[1];
+ Variant path = p_data[2]; //what to do yet, i don't know
+ int prop_count=p_data[3];
+
+ int idx=4;
+
+
+ if (inspected_object->last_edited_id!=id) {
+ inspected_object->prop_list.clear();
+ inspected_object->prop_values.clear();
+ }
+
+ for(int i=0;i<prop_count;i++) {
+
+ PropertyInfo pinfo;
+ pinfo.name=p_data[idx++];
+ pinfo.type=Variant::Type(int(p_data[idx++]));
+ pinfo.hint=PropertyHint(int(p_data[idx++]));
+ pinfo.hint_string=p_data[idx++];
+ if (pinfo.name.begins_with("*")) {
+ pinfo.name=pinfo.name.substr(1,pinfo.name.length());
+ pinfo.usage=PROPERTY_USAGE_CATEGORY;
+ } else {
+ pinfo.usage=PROPERTY_USAGE_EDITOR;
+ }
+
+ if (inspected_object->last_edited_id!=id) {
+ //don't update.. it's the same, instead refresh
+ inspected_object->prop_list.push_back(pinfo);
+ }
+
+
+ inspected_object->prop_values[pinfo.name]=p_data[idx++];
+
+ if (inspected_object->last_edited_id==id) {
+ //same, just update value, don't rebuild
+ inspected_object->update_single(pinfo.name.ascii().get_data());
+ }
+
+ }
+
+
+
+ if (inspected_object->last_edited_id!=id) {
+ //only if different
+ inspected_object->update();
+ }
+
+ inspected_object->last_edited_id=id;
+
+
+ inspect_properties->edit(inspected_object);
} else if (p_msg=="message:video_mem") {
@@ -279,7 +497,7 @@ void ScriptEditorDebugger::_parse_message(const String& p_msg,const Array& p_dat
it->set_icon(0,get_icon(type,"EditorIcons"));
}
- vmem_total->set_tooltip(TTR("Bytes: ")+itos(total));
+ vmem_total->set_tooltip(TTR("Bytes:")+" "+itos(total));
vmem_total->set_text(String::humanize_size(total));
} else if (p_msg=="stack_dump") {
@@ -397,14 +615,14 @@ void ScriptEditorDebugger::_parse_message(const String& p_msg,const Array& p_dat
bool warning = err[9];
bool e;
String time = String("%d:%02d:%02d:%04d").sprintf(vals,&e);
- String txt=time+" - "+String(err[8]);
+ String txt=time+" - "+(err[8].is_zero()?String(err[7]):String(err[8]));
- String tooltip=TTR("Type:")+String(warning?"Warning":"Error");
- tooltip+="\nDescription: "+String(err[8]);
- tooltip+="\nTime: "+time;
- tooltip+="\nC Error: "+String(err[7]);
- tooltip+="\nC Source: "+String(err[5])+":"+String(err[6]);
- tooltip+="\nC Function: "+String(err[4]);
+ String tooltip=TTR("Type:")+String(warning?TTR("Warning"):TTR("Error"));
+ tooltip+="\n"+TTR("Description:")+" "+String(err[8]);
+ tooltip+="\n"+TTR("Time:")+" "+time;
+ tooltip+="\nC "+TTR("Error:")+" "+String(err[7]);
+ tooltip+="\nC "+TTR("Source:")+" "+String(err[5])+":"+String(err[6]);
+ tooltip+="\nC "+TTR("Function:")+" "+String(err[4]);
@@ -441,6 +659,137 @@ void ScriptEditorDebugger::_parse_message(const String& p_msg,const Array& p_dat
packet_peer_stream->put_var(oe.warning);
packet_peer_stream->put_var(oe.callstack);
*/
+
+ } else if (p_msg=="profile_sig") {
+ //cache a signature
+ print_line("SIG: "+String(Variant(p_data)));
+ profiler_signature[p_data[1]]=p_data[0];
+
+ } else if (p_msg=="profile_frame" || p_msg=="profile_total") {
+
+ EditorProfiler::Metric metric;
+ metric.valid=true;
+ metric.frame_number=p_data[0];
+ metric.frame_time=p_data[1];
+ metric.idle_time=p_data[2];
+ metric.fixed_time=p_data[3];
+ metric.fixed_frame_time=p_data[4];
+ int frame_data_amount = p_data[6];
+ int frame_function_amount = p_data[7];
+
+
+ if (frame_data_amount) {
+ EditorProfiler::Metric::Category frame_time;
+ frame_time.signature="category_frame_time";
+ frame_time.name="Frame Time";
+ frame_time.total_time=metric.frame_time;
+
+ EditorProfiler::Metric::Category::Item item;
+ item.calls=1;
+ item.line=0;
+ item.name="Fixed Time";
+ item.total=metric.fixed_time;
+ item.self=item.total;
+ item.signature="fixed_time";
+
+
+ frame_time.items.push_back(item);
+
+ item.name="Idle Time";
+ item.total=metric.idle_time;
+ item.self=item.total;
+ item.signature="idle_time";
+
+ frame_time.items.push_back(item);
+
+ item.name="Fixed Frame Time";
+ item.total=metric.fixed_frame_time;
+ item.self=item.total;
+ item.signature="fixed_frame_time";
+
+ frame_time.items.push_back(item);
+
+ metric.categories.push_back(frame_time);
+
+ }
+
+
+
+ int idx=8;
+ for(int i=0;i<frame_data_amount;i++) {
+
+ EditorProfiler::Metric::Category c;
+ String name=p_data[idx++];
+ Array values=p_data[idx++];
+ c.name=name.capitalize();
+ c.items.resize(values.size()/2);
+ c.total_time=0;
+ c.signature="categ::"+name;
+ for(int i=0;i<values.size();i+=2) {
+
+ EditorProfiler::Metric::Category::Item item;
+ item.name=values[i];
+ item.calls=1;
+ item.self=values[i+1];
+ item.total=item.self;
+ item.signature="categ::"+name+"::"+item.name;
+ item.name=item.name.capitalize();
+ c.total_time+=item.total;
+ c.items[i/2]=item;
+
+
+ }
+ metric.categories.push_back(c);
+ }
+
+ EditorProfiler::Metric::Category funcs;
+ funcs.total_time=p_data[5]; //script time
+ funcs.items.resize(frame_function_amount);
+ funcs.name="Script Functions";
+ funcs.signature="script_functions";
+ for(int i=0;i<frame_function_amount;i++) {
+
+ int signature = p_data[idx++];
+ int calls = p_data[idx++];
+ float total = p_data[idx++];
+ float self = p_data[idx++];
+
+
+
+ EditorProfiler::Metric::Category::Item item;
+ if (profiler_signature.has(signature)) {
+
+ item.signature=profiler_signature[signature];
+
+ String name = profiler_signature[signature];
+ Vector<String> strings = name.split("::");
+ if (strings.size()==3) {
+ item.name=strings[2];
+ item.script=strings[0];
+ item.line=strings[1].to_int();
+ }
+
+ } else {
+ item.name="SigErr "+itos(signature);
+ }
+
+
+
+
+ item.calls=calls;
+ item.self=self;
+ item.total=total;
+ funcs.items[i]=item;
+
+ }
+
+ metric.categories.push_back(funcs);
+
+ if (p_msg=="profile_frame")
+ profiler->add_frame_metric(metric,false);
+ else
+ profiler->add_frame_metric(metric,true);
+
} else if (p_msg=="kill_me") {
editor->call_deferred("stop_child_process");
@@ -540,7 +889,7 @@ void ScriptEditorDebugger::_notification(int p_what) {
forward->set_icon( get_icon("Forward","EditorIcons"));
dobreak->set_icon( get_icon("Pause","EditorIcons"));
docontinue->set_icon( get_icon("DebugContinue","EditorIcons"));
- scene_tree_refresh->set_icon( get_icon("Reload","EditorIcons"));
+ //scene_tree_refresh->set_icon( get_icon("Reload","EditorIcons"));
le_set->connect("pressed",this,"_live_edit_set");
le_clear->connect("pressed",this,"_live_edit_clear");
error_list->connect("item_selected",this,"_error_selected");
@@ -550,6 +899,36 @@ void ScriptEditorDebugger::_notification(int p_what) {
} break;
case NOTIFICATION_PROCESS: {
+ if (connection.is_valid()) {
+ inspect_scene_tree_timeout-=get_process_delta_time();
+ if (inspect_scene_tree_timeout<0) {
+ inspect_scene_tree_timeout=EditorSettings::get_singleton()->get("debugger/scene_tree_refresh_interval");
+ if (inspect_scene_tree->is_visible()) {
+ _scene_tree_request();
+
+ if (inspected_object_id!=0) {
+ //take the chance and re-inspect selected object
+ Array msg;
+ msg.push_back("inspect_object");
+ msg.push_back(inspected_object_id);
+ ppeer->put_var(msg);
+ }
+ }
+ }
+
+ inspect_edited_object_timeout-=get_process_delta_time();
+ if (inspect_edited_object_timeout<0) {
+ inspect_edited_object_timeout=EditorSettings::get_singleton()->get("debugger/remote_inspect_refresh_interval");
+ if (inspect_scene_tree->is_visible() && inspected_object_id) {
+ //take the chance and re-inspect selected object
+ Array msg;
+ msg.push_back("inspect_object");
+ msg.push_back(inspected_object_id);
+ ppeer->put_var(msg);
+ }
+ }
+ }
+
if (error_count!=last_error_count) {
if (error_count==0) {
@@ -558,13 +937,14 @@ void ScriptEditorDebugger::_notification(int p_what) {
debugger_button->set_icon(Ref<Texture>());
tabs->set_tab_icon(error_split->get_index(),Ref<Texture>());
} else {
- error_split->set_name(TTR("Errors (")+itos(error_count)+")");
- debugger_button->set_text(TTR("Debugger (")+itos(error_count)+")");
+ error_split->set_name(TTR("Errors")+" ("+itos(error_count)+")");
+ debugger_button->set_text(TTR("Debugger")+" ("+itos(error_count)+")");
debugger_button->set_icon(get_icon("Error","EditorIcons"));
tabs->set_tab_icon(error_split->get_index(),get_icon("Error","EditorIcons"));
}
last_error_count=error_count;
}
+
if (connection.is_null()) {
if (server->is_connection_available()) {
@@ -586,15 +966,25 @@ void ScriptEditorDebugger::_notification(int p_what) {
reason->set_text(TTR("Child Process Connected"));
reason->set_tooltip(TTR("Child Process Connected"));
- scene_tree->clear();
+ profiler->clear();
+
+ inspect_scene_tree->clear();
le_set->set_disabled(true);
le_clear->set_disabled(false);
error_list->clear();
error_stack->clear();
error_count=0;
+ profiler_signature.clear();
//live_edit_root->set_text("/root");
+ EditorNode::get_singleton()->get_pause_button()->set_pressed(false);
+ EditorNode::get_singleton()->get_pause_button()->set_disabled(false);
+
update_live_edit_root();
+ if (profiler->is_profiling()) {
+ _profiler_activate(true);
+ }
+
} else {
@@ -656,6 +1046,7 @@ void ScriptEditorDebugger::_notification(int p_what) {
}
message_type=cmd;
+ //print_line("GOT: "+message_type);
ret = ppeer->get_var(cmd);
if (ret!=OK) {
@@ -744,8 +1135,17 @@ void ScriptEditorDebugger::stop(){
node_path_cache.clear();
res_path_cache.clear();
+ profiler_signature.clear();
le_clear->set_disabled(false);
le_set->set_disabled(true);
+ profiler->set_enabled(true);
+
+ inspect_properties->edit(NULL);
+ inspect_scene_tree->clear();
+
+ EditorNode::get_singleton()->get_pause_button()->set_pressed(false);
+ EditorNode::get_singleton()->get_pause_button()->set_disabled(true);
+
if (hide_on_stop) {
@@ -756,6 +1156,44 @@ void ScriptEditorDebugger::stop(){
}
+void ScriptEditorDebugger::_profiler_activate(bool p_enable) {
+
+ if (!connection.is_valid())
+ return;
+
+
+ if (p_enable) {
+ profiler_signature.clear();
+ Array msg;
+ msg.push_back("start_profiling");
+ int max_funcs = EditorSettings::get_singleton()->get("debugger/profiler_frame_max_functions");
+ max_funcs = CLAMP(max_funcs,16,512);
+ msg.push_back(max_funcs);
+ ppeer->put_var(msg);
+
+ print_line("BEGIN PROFILING!");
+
+ } else {
+ Array msg;
+ msg.push_back("stop_profiling");
+ ppeer->put_var(msg);
+
+ print_line("END PROFILING!");
+
+ }
+
+}
+
+void ScriptEditorDebugger::_profiler_seeked() {
+
+ if (!connection.is_valid() || !connection->is_connected())
+ return;
+
+ if (breaked)
+ return;
+ debug_break();;
+}
+
void ScriptEditorDebugger::_stack_dump_frame_selected() {
@@ -992,7 +1430,7 @@ void ScriptEditorDebugger::_live_edit_set() {
if (!connection.is_valid())
return;
- TreeItem* ti = scene_tree->get_selected();
+ TreeItem* ti = inspect_scene_tree->get_selected();
if (!ti)
return;
String path;
@@ -1135,6 +1573,16 @@ void ScriptEditorDebugger::set_breakpoint(const String& p_path,int p_line,bool p
}
+void ScriptEditorDebugger::reload_scripts() {
+
+ if (connection.is_valid()) {
+ Array msg;
+ msg.push_back("reload_scripts");
+ ppeer->put_var(msg);
+ }
+}
+
+
void ScriptEditorDebugger::_error_selected(int p_idx) {
error_stack->clear();
@@ -1151,7 +1599,7 @@ void ScriptEditorDebugger::_error_selected(int p_idx) {
error_stack->add_item(str);
error_stack->set_item_metadata(error_stack->get_item_count()-1,md);
- error_stack->set_item_tooltip(error_stack->get_item_count()-1,TTR("File: ")+String(st[i])+"\nLine: "+itos(line));
+ error_stack->set_item_tooltip(error_stack->get_item_count()-1,TTR("File:")+" "+String(st[i])+"\n"+TTR("Line:")+" "+itos(line));
}
}
@@ -1172,6 +1620,21 @@ void ScriptEditorDebugger::set_hide_on_stop(bool p_hide) {
hide_on_stop=p_hide;
}
+void ScriptEditorDebugger::_paused() {
+
+ ERR_FAIL_COND(connection.is_null());
+ ERR_FAIL_COND(!connection->is_connected());
+
+ if (!breaked && EditorNode::get_singleton()->get_pause_button()->is_pressed()) {
+ debug_break();
+ }
+
+ if (breaked && !EditorNode::get_singleton()->get_pause_button()->is_pressed()) {
+ debug_continue();
+ }
+
+}
+
void ScriptEditorDebugger::_bind_methods() {
ObjectTypeDB::bind_method(_MD("_stack_dump_frame_selected"),&ScriptEditorDebugger::_stack_dump_frame_selected);
@@ -1189,6 +1652,14 @@ void ScriptEditorDebugger::_bind_methods() {
ObjectTypeDB::bind_method(_MD("_error_selected"),&ScriptEditorDebugger::_error_selected);
ObjectTypeDB::bind_method(_MD("_error_stack_selected"),&ScriptEditorDebugger::_error_stack_selected);
+ ObjectTypeDB::bind_method(_MD("_profiler_activate"),&ScriptEditorDebugger::_profiler_activate);
+ ObjectTypeDB::bind_method(_MD("_profiler_seeked"),&ScriptEditorDebugger::_profiler_seeked);
+
+ ObjectTypeDB::bind_method(_MD("_paused"),&ScriptEditorDebugger::_paused);
+
+ ObjectTypeDB::bind_method(_MD("_scene_tree_selected"),&ScriptEditorDebugger::_scene_tree_selected);
+ ObjectTypeDB::bind_method(_MD("_scene_tree_folded"),&ScriptEditorDebugger::_scene_tree_folded);
+
ObjectTypeDB::bind_method(_MD("live_debug_create_node"),&ScriptEditorDebugger::live_debug_create_node);
ObjectTypeDB::bind_method(_MD("live_debug_instance_node"),&ScriptEditorDebugger::live_debug_instance_node);
@@ -1197,6 +1668,8 @@ void ScriptEditorDebugger::_bind_methods() {
ObjectTypeDB::bind_method(_MD("live_debug_restore_node"),&ScriptEditorDebugger::live_debug_restore_node);
ObjectTypeDB::bind_method(_MD("live_debug_duplicate_node"),&ScriptEditorDebugger::live_debug_duplicate_node);
ObjectTypeDB::bind_method(_MD("live_debug_reparent_node"),&ScriptEditorDebugger::live_debug_reparent_node);
+ ObjectTypeDB::bind_method(_MD("_scene_tree_property_select_object"),&ScriptEditorDebugger::_scene_tree_property_select_object);
+ ObjectTypeDB::bind_method(_MD("_scene_tree_property_value_edited"),&ScriptEditorDebugger::_scene_tree_property_value_edited);
ADD_SIGNAL(MethodInfo("goto_script_line"));
ADD_SIGNAL(MethodInfo("breaked",PropertyInfo(Variant::BOOL,"reallydid"),PropertyInfo(Variant::BOOL,"can_debug")));
@@ -1216,243 +1689,284 @@ ScriptEditorDebugger::ScriptEditorDebugger(EditorNode *p_editor){
add_child(tabs);
- VBoxContainer *vbc = memnew( VBoxContainer );
- vbc->set_name(TTR("Debugger"));
- //tabs->add_child(vbc);
- Control *dbg=vbc;
+ { //debugger
+ VBoxContainer *vbc = memnew( VBoxContainer );
+ vbc->set_name(TTR("Debugger"));
+ //tabs->add_child(vbc);
+ Control *dbg=vbc;
+
+ HBoxContainer *hbc = memnew( HBoxContainer );
+ vbc->add_child(hbc);
- HBoxContainer *hbc = memnew( HBoxContainer );
- vbc->add_child(hbc);
+ reason = memnew( LineEdit );
+ reason->set_text("");
+ reason->set_editable(false);
+ hbc->add_child(reason);
+ reason->add_color_override("font_color",Color(1,0.4,0.0,0.8));
+ reason->set_h_size_flags(SIZE_EXPAND_FILL);
+ //reason->set_clip_text(true);
- reason = memnew( LineEdit );
- reason->set_text("");
- reason->set_editable(false);
- hbc->add_child(reason);
- reason->add_color_override("font_color",Color(1,0.4,0.0,0.8));
- reason->set_h_size_flags(SIZE_EXPAND_FILL);
- //reason->set_clip_text(true);
+ hbc->add_child( memnew( VSeparator) );
- hbc->add_child( memnew( VSeparator) );
+ step = memnew( Button );
+ hbc->add_child(step);
+ step->set_tooltip(TTR("Step Into"));
+ step->connect("pressed",this,"debug_step");
- step = memnew( Button );
- hbc->add_child(step);
- step->set_tooltip(TTR("Step Into"));
- step->connect("pressed",this,"debug_step");
+ next = memnew( Button );
+ hbc->add_child(next);
+ next->set_tooltip(TTR("Step Over"));
+ next->connect("pressed",this,"debug_next");
- next = memnew( Button );
- hbc->add_child(next);
- next->set_tooltip(TTR("Step Over"));
- next->connect("pressed",this,"debug_next");
+ hbc->add_child( memnew( VSeparator) );
- hbc->add_child( memnew( VSeparator) );
+ dobreak = memnew( Button );
+ hbc->add_child(dobreak);
+ dobreak->set_tooltip(TTR("Break"));
+ dobreak->connect("pressed",this,"debug_break");
- dobreak = memnew( Button );
- hbc->add_child(dobreak);
- dobreak->set_tooltip(TTR("Break"));
- dobreak->connect("pressed",this,"debug_break");
+ docontinue = memnew( Button );
+ hbc->add_child(docontinue);
+ docontinue->set_tooltip(TTR("Continue"));
+ docontinue->connect("pressed",this,"debug_continue");
- docontinue = memnew( Button );
- hbc->add_child(docontinue);
- docontinue->set_tooltip(TTR("Continue"));
- docontinue->connect("pressed",this,"debug_continue");
+ hbc->add_child( memnew( VSeparator) );
- hbc->add_child( memnew( VSeparator) );
+ back = memnew( Button );
+ hbc->add_child(back);
+ back->set_tooltip(TTR("Inspect Previous Instance"));
- back = memnew( Button );
- hbc->add_child(back);
- back->set_tooltip(TTR("Inspect Previous Instance"));
+ forward = memnew( Button );
+ hbc->add_child(forward);
+ forward->set_tooltip(TTR("Inspect Next Instance"));
- forward = memnew( Button );
- hbc->add_child(forward);
- back->set_tooltip(TTR("Inspect Next Instance"));
+ HSplitContainer *sc = memnew( HSplitContainer );
+ vbc->add_child(sc);
+ sc->set_v_size_flags(SIZE_EXPAND_FILL);
- HSplitContainer *sc = memnew( HSplitContainer );
- vbc->add_child(sc);
- sc->set_v_size_flags(SIZE_EXPAND_FILL);
+ stack_dump = memnew( Tree );
+ stack_dump->set_columns(1);
+ stack_dump->set_column_titles_visible(true);
+ stack_dump->set_column_title(0,TTR("Stack Frames"));
+ stack_dump->set_h_size_flags(SIZE_EXPAND_FILL);
+ stack_dump->set_hide_root(true);
+ stack_dump->connect("cell_selected",this,"_stack_dump_frame_selected");
+ sc->add_child(stack_dump);
- stack_dump = memnew( Tree );
- stack_dump->set_columns(1);
- stack_dump->set_column_titles_visible(true);
- stack_dump->set_column_title(0,TTR("Stack Frames"));
- stack_dump->set_h_size_flags(SIZE_EXPAND_FILL);
- stack_dump->set_hide_root(true);
- stack_dump->connect("cell_selected",this,"_stack_dump_frame_selected");
- sc->add_child(stack_dump);
+ inspector = memnew( PropertyEditor );
+ inspector->set_h_size_flags(SIZE_EXPAND_FILL);
+ inspector->hide_top_label();
+ inspector->get_scene_tree()->set_column_title(0,TTR("Variable"));
+ inspector->set_capitalize_paths(false);
+ inspector->set_read_only(true);
+ sc->add_child(inspector);
- inspector = memnew( PropertyEditor );
- inspector->set_h_size_flags(SIZE_EXPAND_FILL);
- inspector->hide_top_label();
- inspector->get_scene_tree()->set_column_title(0,TTR("Variable"));
- inspector->set_capitalize_paths(false);
- inspector->set_read_only(true);
- sc->add_child(inspector);
+ server = TCP_Server::create_ref();
- server = TCP_Server::create_ref();
+ pending_in_queue=0;
- pending_in_queue=0;
+ variables = memnew( ScriptEditorDebuggerVariables );
+
+ breaked=false;
- variables = memnew( ScriptEditorDebuggerVariables );
+ tabs->add_child(dbg);
+ //tabs->move_child(vbc,0);
- breaked=false;
+ hbc = memnew( HBoxContainer );
+ vbc->add_child(hbc);
- tabs->add_child(dbg);
- //tabs->move_child(vbc,0);
+ }
- hbc = memnew( HBoxContainer );
- vbc->add_child(hbc);
+ { //errors
- error_split = memnew( HSplitContainer );
- VBoxContainer *errvb = memnew( VBoxContainer );
- errvb->set_h_size_flags(SIZE_EXPAND_FILL);
- error_list = memnew( ItemList );
- errvb->add_margin_child(TTR("Errors:"),error_list,true);
- error_split->add_child(errvb);
+ error_split = memnew( HSplitContainer );
+ VBoxContainer *errvb = memnew( VBoxContainer );
+ errvb->set_h_size_flags(SIZE_EXPAND_FILL);
+ error_list = memnew( ItemList );
+ errvb->add_margin_child(TTR("Errors:"),error_list,true);
+ error_split->add_child(errvb);
- errvb = memnew( VBoxContainer );
- errvb->set_h_size_flags(SIZE_EXPAND_FILL);
- error_stack = memnew( ItemList );
- errvb->add_margin_child(TTR("Stack Trace (if applies):"),error_stack,true);
- error_split->add_child(errvb);
+ errvb = memnew( VBoxContainer );
+ errvb->set_h_size_flags(SIZE_EXPAND_FILL);
+ error_stack = memnew( ItemList );
+ errvb->add_margin_child(TTR("Stack Trace (if applicable):"),error_stack,true);
+ error_split->add_child(errvb);
- error_split->set_name(TTR("Errors"));
- tabs->add_child(error_split);
+ error_split->set_name(TTR("Errors"));
+ tabs->add_child(error_split);
+ }
- HSplitContainer *hsp = memnew( HSplitContainer );
+ { // inquire
- perf_monitors = memnew(Tree);
- perf_monitors->set_columns(2);
- perf_monitors->set_column_title(0,TTR("Monitor"));
- perf_monitors->set_column_title(1,TTR("Value"));
- perf_monitors->set_column_titles_visible(true);
- hsp->add_child(perf_monitors);
- perf_monitors->set_select_mode(Tree::SELECT_MULTI);
- perf_monitors->connect("multi_selected",this,"_performance_select");
- perf_draw = memnew( Control );
- perf_draw->connect("draw",this,"_performance_draw");
- hsp->add_child(perf_draw);
- hsp->set_name("Performance");
- hsp->set_split_offset(300);
- tabs->add_child(hsp);
- perf_max.resize(Performance::MONITOR_MAX);
- Map<String,TreeItem*> bases;
- TreeItem *root=perf_monitors->create_item();
- perf_monitors->set_hide_root(true);
- for(int i=0;i<Performance::MONITOR_MAX;i++) {
+ inspect_info = memnew( HSplitContainer );
+ inspect_info->set_name(TTR("Remote Inspector"));
+ tabs->add_child(inspect_info);
- String n = Performance::get_singleton()->get_monitor_name(Performance::Monitor(i));
- String base = n.get_slice("/",0);
- String name = n.get_slice("/",1);
- if (!bases.has(base)) {
- TreeItem *b = perf_monitors->create_item(root);
- b->set_text(0,base.capitalize());
- b->set_editable(0,false);
- b->set_selectable(0,false);
- bases[base]=b;
- }
+ VBoxContainer *info_left = memnew(VBoxContainer);
+ info_left->set_h_size_flags(SIZE_EXPAND_FILL);
+ inspect_info->add_child(info_left);
- TreeItem *it = perf_monitors->create_item(bases[base]);
- it->set_editable(0,false);
- it->set_selectable(0,true);
- it->set_text(0,name.capitalize());
- perf_items.push_back(it);
- perf_max[i]=0;
+ inspect_scene_tree = memnew( Tree );
+ info_left->add_margin_child(TTR("Live Scene Tree:"),inspect_scene_tree,true);
+ inspect_scene_tree->connect("cell_selected",this,"_scene_tree_selected");
+ inspect_scene_tree->connect("item_collapsed",this,"_scene_tree_folded");
+
+ //
+
+ VBoxContainer *info_right = memnew(VBoxContainer);
+ info_right->set_h_size_flags(SIZE_EXPAND_FILL);
+ inspect_info->add_child(info_right);
+
+ inspect_properties = memnew( PropertyEditor );
+ inspect_properties->hide_top_label();
+ inspect_properties->set_show_categories(true);
+ inspect_properties->connect("object_id_selected",this,"_scene_tree_property_select_object");
+ info_right->add_margin_child(TTR("Remote Object Properties: "),inspect_properties,true);
+
+ inspect_scene_tree_timeout=EDITOR_DEF("debugger/scene_tree_refresh_interval",1.0);
+ inspect_edited_object_timeout=EDITOR_DEF("debugger/remote_inspect_refresh_interval",0.2);
+ inspected_object_id=0;
+ updating_scene_tree=false;
+
+ inspected_object = memnew( ScriptEditorDebuggerInspectedObject );
+ inspected_object->connect("value_edited",this,"_scene_tree_property_value_edited");
+ }
+
+ { //profiler
+ profiler = memnew( EditorProfiler );
+ profiler->set_name(TTR("Profiler"));
+ tabs->add_child(profiler);
+ profiler->connect("enable_profiling",this,"_profiler_activate");
+ profiler->connect("break_request",this,"_profiler_seeked");
+ }
+
+
+ { //monitors
+
+ HSplitContainer *hsp = memnew( HSplitContainer );
+
+ perf_monitors = memnew(Tree);
+ perf_monitors->set_columns(2);
+ perf_monitors->set_column_title(0,TTR("Monitor"));
+ perf_monitors->set_column_title(1,TTR("Value"));
+ perf_monitors->set_column_titles_visible(true);
+ hsp->add_child(perf_monitors);
+ perf_monitors->set_select_mode(Tree::SELECT_MULTI);
+ perf_monitors->connect("multi_selected",this,"_performance_select");
+ perf_draw = memnew( Control );
+ perf_draw->connect("draw",this,"_performance_draw");
+ hsp->add_child(perf_draw);
+ hsp->set_name(TTR("Monitors"));
+ hsp->set_split_offset(300);
+ tabs->add_child(hsp);
+ perf_max.resize(Performance::MONITOR_MAX);
+
+ Map<String,TreeItem*> bases;
+ TreeItem *root=perf_monitors->create_item();
+ perf_monitors->set_hide_root(true);
+ for(int i=0;i<Performance::MONITOR_MAX;i++) {
+
+ String n = Performance::get_singleton()->get_monitor_name(Performance::Monitor(i));
+ String base = n.get_slice("/",0);
+ String name = n.get_slice("/",1);
+ if (!bases.has(base)) {
+ TreeItem *b = perf_monitors->create_item(root);
+ b->set_text(0,base.capitalize());
+ b->set_editable(0,false);
+ b->set_selectable(0,false);
+ bases[base]=b;
+ }
+
+ TreeItem *it = perf_monitors->create_item(bases[base]);
+ it->set_editable(0,false);
+ it->set_selectable(0,true);
+ it->set_text(0,name.capitalize());
+ perf_items.push_back(it);
+ perf_max[i]=0;
+
+ }
+ }
+
+ { //vmem inspect
+ VBoxContainer *vmem_vb = memnew( VBoxContainer );
+ HBoxContainer *vmem_hb = memnew( HBoxContainer );
+ Label *vmlb = memnew(Label(TTR("List of Video Memory Usage by Resource:")+" ") );
+ vmlb->set_h_size_flags(SIZE_EXPAND_FILL);
+ vmem_hb->add_child( vmlb );
+ vmem_hb->add_child( memnew(Label(TTR("Total:")+" ")) );
+ vmem_total = memnew( LineEdit );
+ vmem_total->set_editable(false);
+ vmem_total->set_custom_minimum_size(Size2(100,1)*EDSCALE);
+ vmem_hb->add_child(vmem_total);
+ vmem_refresh = memnew( Button );
+ vmem_hb->add_child(vmem_refresh);
+ vmem_vb->add_child(vmem_hb);
+ vmem_refresh->connect("pressed",this,"_video_mem_request");
+
+ MarginContainer *vmmc = memnew( MarginContainer );
+ vmem_tree = memnew( Tree );
+ vmem_tree->set_v_size_flags(SIZE_EXPAND_FILL);
+ vmem_tree->set_h_size_flags(SIZE_EXPAND_FILL);
+ vmmc->add_child(vmem_tree);
+ vmmc->set_v_size_flags(SIZE_EXPAND_FILL);
+ vmem_vb->add_child(vmmc);
+
+ vmem_vb->set_name(TTR("Video Mem"));
+ vmem_tree->set_columns(4);
+ vmem_tree->set_column_titles_visible(true);
+ vmem_tree->set_column_title(0,TTR("Resource Path"));
+ vmem_tree->set_column_expand(0,true);
+ vmem_tree->set_column_expand(1,false);
+ vmem_tree->set_column_title(1,TTR("Type"));
+ vmem_tree->set_column_min_width(1,100);
+ vmem_tree->set_column_expand(2,false);
+ vmem_tree->set_column_title(2,TTR("Format"));
+ vmem_tree->set_column_min_width(2,150);
+ vmem_tree->set_column_expand(3,false);
+ vmem_tree->set_column_title(3,TTR("Usage"));
+ vmem_tree->set_column_min_width(3,80);
+ vmem_tree->set_hide_root(true);
+
+ tabs->add_child(vmem_vb);
}
- VBoxContainer *vmem_vb = memnew( VBoxContainer );
- HBoxContainer *vmem_hb = memnew( HBoxContainer );
- Label *vmlb = memnew(Label(TTR("List of Video Memory Usage by Resource: ")) );
- vmlb->set_h_size_flags(SIZE_EXPAND_FILL);
- vmem_hb->add_child( vmlb );
- vmem_hb->add_child( memnew(Label(TTR("Total: "))) );
- vmem_total = memnew( LineEdit );
- vmem_total->set_editable(false);
- vmem_total->set_custom_minimum_size(Size2(100,1));
- vmem_hb->add_child(vmem_total);
- vmem_refresh = memnew( Button );
- vmem_hb->add_child(vmem_refresh);
- vmem_vb->add_child(vmem_hb);
- vmem_refresh->connect("pressed",this,"_video_mem_request");
-
- MarginContainer *vmmc = memnew( MarginContainer );
- vmem_tree = memnew( Tree );
- vmem_tree->set_v_size_flags(SIZE_EXPAND_FILL);
- vmem_tree->set_h_size_flags(SIZE_EXPAND_FILL);
- vmmc->add_child(vmem_tree);
- vmmc->set_v_size_flags(SIZE_EXPAND_FILL);
- vmem_vb->add_child(vmmc);
-
- vmem_vb->set_name(TTR("Video Mem"));
- vmem_tree->set_columns(4);
- vmem_tree->set_column_titles_visible(true);
- vmem_tree->set_column_title(0,TTR("Resource Path"));
- vmem_tree->set_column_expand(0,true);
- vmem_tree->set_column_expand(1,false);
- vmem_tree->set_column_title(1,TTR("Type"));
- vmem_tree->set_column_min_width(1,100);
- vmem_tree->set_column_expand(2,false);
- vmem_tree->set_column_title(2,TTR("Format"));
- vmem_tree->set_column_min_width(2,150);
- vmem_tree->set_column_expand(3,false);
- vmem_tree->set_column_title(3,TTR("Usage"));
- vmem_tree->set_column_min_width(3,80);
- vmem_tree->set_hide_root(true);
-
- tabs->add_child(vmem_vb);
-
- info = memnew( HSplitContainer );
- info->set_name(TTR("Info"));
- tabs->add_child(info);
-
- VBoxContainer *info_left = memnew( VBoxContainer );
- info_left->set_h_size_flags(SIZE_EXPAND_FILL);
- info->add_child(info_left);
- clicked_ctrl = memnew( LineEdit );
- info_left->add_margin_child(TTR("Clicked Control:"),clicked_ctrl);
- clicked_ctrl_type = memnew( LineEdit );
- info_left->add_margin_child(TTR("Clicked Control Type:"),clicked_ctrl_type);
-
- live_edit_root = memnew( LineEdit );
-
- {
- HBoxContainer *lehb = memnew( HBoxContainer );
- Label *l = memnew( Label(TTR("Live Edit Root:")) );
- lehb->add_child(l);
- l->set_h_size_flags(SIZE_EXPAND_FILL);
- le_set = memnew( Button(TTR("Set From Tree")) );
- lehb->add_child(le_set);
- le_clear = memnew( Button(TTR("Clear")) );
- lehb->add_child(le_clear);
- info_left->add_child(lehb);
- MarginContainer *mc = memnew( MarginContainer );
- mc->add_child(live_edit_root);
- info_left->add_child(mc);
- le_set->set_disabled(true);
- le_clear->set_disabled(true);
+ { // misc
+ VBoxContainer *info_left = memnew( VBoxContainer );
+ info_left->set_h_size_flags(SIZE_EXPAND_FILL);
+ info_left->set_name(TTR("Misc"));
+ tabs->add_child(info_left);
+ clicked_ctrl = memnew( LineEdit );
+ info_left->add_margin_child(TTR("Clicked Control:"),clicked_ctrl);
+ clicked_ctrl_type = memnew( LineEdit );
+ info_left->add_margin_child(TTR("Clicked Control Type:"),clicked_ctrl_type);
+
+ live_edit_root = memnew( LineEdit );
+
+ {
+ HBoxContainer *lehb = memnew( HBoxContainer );
+ Label *l = memnew( Label(TTR("Live Edit Root:")) );
+ lehb->add_child(l);
+ l->set_h_size_flags(SIZE_EXPAND_FILL);
+ le_set = memnew( Button(TTR("Set From Tree")) );
+ lehb->add_child(le_set);
+ le_clear = memnew( Button(TTR("Clear")) );
+ lehb->add_child(le_clear);
+ info_left->add_child(lehb);
+ MarginContainer *mc = memnew( MarginContainer );
+ mc->add_child(live_edit_root);
+ info_left->add_child(mc);
+ le_set->set_disabled(true);
+ le_clear->set_disabled(true);
+ }
+
}
- VBoxContainer *info_right = memnew(VBoxContainer);
- info_right->set_h_size_flags(SIZE_EXPAND_FILL);
- info->add_child(info_right);
- HBoxContainer *inforhb = memnew( HBoxContainer );
- info_right->add_child(inforhb);
- Label *l2 = memnew( Label(TTR("Scene Tree:") ) );
- l2->set_h_size_flags(SIZE_EXPAND_FILL);
- inforhb->add_child( l2 );
- Button *refresh = memnew( Button );
- inforhb->add_child(refresh);
- refresh->connect("pressed",this,"_scene_tree_request");
- scene_tree_refresh=refresh;
- MarginContainer *infomc = memnew( MarginContainer );
- info_right->add_child(infomc);
- infomc->set_v_size_flags(SIZE_EXPAND_FILL);
- scene_tree = memnew( Tree );
- infomc->add_child(scene_tree);
msgdialog = memnew( AcceptDialog );
@@ -1468,6 +1982,8 @@ ScriptEditorDebugger::ScriptEditorDebugger(EditorNode *p_editor){
hide_on_stop=true;
last_error_count=0;
+ EditorNode::get_singleton()->get_pause_button()->connect("pressed",this,"_paused");
+
}
@@ -1479,5 +1995,6 @@ ScriptEditorDebugger::~ScriptEditorDebugger() {
ppeer->set_stream_peer(Ref<StreamPeer>());
server->stop();
+ memdelete(inspected_object);
}
diff --git a/tools/editor/script_editor_debugger.h b/tools/editor/script_editor_debugger.h
index ecd0494955..c4a7cea1b7 100644
--- a/tools/editor/script_editor_debugger.h
+++ b/tools/editor/script_editor_debugger.h
@@ -33,6 +33,7 @@
#include "scene/gui/button.h"
#include "core/io/tcp_server.h"
#include "core/io/packet_peer.h"
+#include "property_editor.h"
class Tree;
class PropertyEditor;
@@ -46,6 +47,11 @@ class AcceptDialog;
class TreeItem;
class HSplitContainer;
class ItemList;
+class EditorProfiler;
+
+
+
+class ScriptEditorDebuggerInspectedObject;
class ScriptEditorDebugger : public Control {
@@ -59,12 +65,23 @@ class ScriptEditorDebugger : public Control {
LineEdit *clicked_ctrl;
LineEdit *clicked_ctrl_type;
LineEdit *live_edit_root;
- Tree *scene_tree;
- HSplitContainer *info;
- Button *scene_tree_refresh;
Button *le_set;
Button *le_clear;
+
+
+ Tree *inspect_scene_tree;
+ HSplitContainer *inspect_info;
+ PropertyEditor *inspect_properties;
+ float inspect_scene_tree_timeout;
+ float inspect_edited_object_timeout;
+ ObjectID inspected_object_id;
+ ScriptEditorDebuggerInspectedObject *inspected_object;
+ bool updating_scene_tree;
+ Set<ObjectID> unfold_cache;
+
+
+
HSplitContainer *error_split;
ItemList *error_list;
ItemList *error_stack;
@@ -93,6 +110,8 @@ class ScriptEditorDebugger : public Control {
Vector<float> perf_max;
Vector<TreeItem*> perf_items;
+ Map<int,String> profiler_signature;
+
Tree *perf_monitors;
Control *perf_draw;
@@ -115,6 +134,7 @@ class ScriptEditorDebugger : public Control {
int last_path_id;
Map<String,int> res_path_cache;
+ EditorProfiler *profiler;
EditorNode *editor;
@@ -127,8 +147,13 @@ class ScriptEditorDebugger : public Control {
void _stack_dump_frame_selected();
void _output_clear();
+
+ void _scene_tree_folded(Object* obj);
+ void _scene_tree_selected();
void _scene_tree_request();
void _parse_message(const String& p_msg,const Array& p_data);
+ void _scene_tree_property_select_object(ObjectID p_object);
+ void _scene_tree_property_value_edited(const String& p_prop,const Variant& p_value);
void _video_mem_request();
@@ -148,6 +173,13 @@ class ScriptEditorDebugger : public Control {
void _error_selected(int p_idx);
void _error_stack_selected(int p_idx);
+ void _profiler_activate(bool p_enable);
+ void _profiler_seeked();
+
+
+
+ void _paused();
+
protected:
void _notification(int p_what);
@@ -185,6 +217,8 @@ public:
void set_tool_button(Button *p_tb) { debugger_button=p_tb; }
+ void reload_scripts();
+
virtual Size2 get_minimum_size() const;
ScriptEditorDebugger(EditorNode *p_editor=NULL);
~ScriptEditorDebugger();
diff --git a/tools/editor/settings_config_dialog.cpp b/tools/editor/settings_config_dialog.cpp
index 2a871efb18..e1a2ea162e 100644
--- a/tools/editor/settings_config_dialog.cpp
+++ b/tools/editor/settings_config_dialog.cpp
@@ -31,6 +31,9 @@
#include "scene/gui/margin_container.h"
#include "globals.h"
#include "editor_file_system.h"
+#include "editor_node.h"
+#include "os/keyboard.h"
+
void EditorSettingsDialog::ok_pressed() {
if (!EditorSettings::get_singleton())
@@ -45,6 +48,7 @@ void EditorSettingsDialog::_settings_changed() {
timer->start();
+ property_editor->get_property_editor()->update_tree(); // else color's won't update when theme is selected.
}
void EditorSettingsDialog::_settings_save() {
@@ -70,12 +74,15 @@ void EditorSettingsDialog::popup_edit_settings() {
if (!EditorSettings::get_singleton())
return;
+ EditorSettings::get_singleton()->list_text_editor_themes(); // make sure we have an up to date list of themes
+
property_editor->edit(EditorSettings::get_singleton());
property_editor->get_property_editor()->update_tree();
search_box->select_all();
search_box->grab_focus();
+ _update_shortcuts();
popup_centered_ratio(0.7);
}
@@ -98,11 +105,171 @@ void EditorSettingsDialog::_notification(int p_what) {
}
}
+
+void EditorSettingsDialog::_update_shortcuts() {
+
+ shortcuts->clear();
+
+ List<String> slist;
+ EditorSettings::get_singleton()->get_shortcut_list(&slist);
+ TreeItem *root = shortcuts->create_item();
+
+ Map<String,TreeItem*> sections;
+
+ for(List<String>::Element *E=slist.front();E;E=E->next()) {
+
+ Ref<ShortCut> sc = EditorSettings::get_singleton()->get_shortcut(E->get());
+ if (!sc->has_meta("original"))
+ continue;
+
+ InputEvent original = sc->get_meta("original");
+
+ String section_name = E->get().get_slice("/",0);
+
+ TreeItem *section;
+
+ if (sections.has(section_name)) {
+ section=sections[section_name];
+ } else {
+ section = shortcuts->create_item(root);
+ section->set_text(0,section_name.capitalize());
+
+ sections[section_name]=section;
+ section->set_custom_bg_color(0,get_color("prop_subsection","Editor"));
+ section->set_custom_bg_color(1,get_color("prop_subsection","Editor"));
+
+ }
+
+ TreeItem *item = shortcuts->create_item(section);
+
+
+ item->set_text(0,sc->get_name());
+ item->set_text(1,sc->get_as_text());
+ if (!sc->is_shortcut(original) && !(sc->get_shortcut().type==InputEvent::NONE && original.type==InputEvent::NONE)) {
+ item->add_button(1,get_icon("Reload","EditorIcons"),2);
+ }
+ item->add_button(1,get_icon("Edit","EditorIcons"),0);
+ item->add_button(1,get_icon("Close","EditorIcons"),1);
+ item->set_tooltip(0,E->get());
+ item->set_metadata(0,E->get());
+ }
+
+
+
+
+}
+
+void EditorSettingsDialog::_shortcut_button_pressed(Object* p_item,int p_column,int p_idx) {
+
+ TreeItem *ti=p_item->cast_to<TreeItem>();
+ ERR_FAIL_COND(!ti);
+
+ String item = ti->get_metadata(0);
+ Ref<ShortCut> sc = EditorSettings::get_singleton()->get_shortcut(item);
+
+ if (p_idx==0) {
+ press_a_key_label->set_text(TTR("Press a Key.."));
+ last_wait_for_key=InputEvent();
+ press_a_key->popup_centered(Size2(250,80)*EDSCALE);
+ press_a_key->grab_focus();
+ press_a_key->get_ok()->set_focus_mode(FOCUS_NONE);
+ press_a_key->get_cancel()->set_focus_mode(FOCUS_NONE);
+ shortcut_configured=item;
+
+ } else if (p_idx==1) {//erase
+ if (!sc.is_valid())
+ return; //pointless, there is nothing
+
+ UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
+ ur->create_action("Erase Shortcut");
+ ur->add_do_method(sc.ptr(),"set_shortcut",InputEvent());
+ ur->add_undo_method(sc.ptr(),"set_shortcut",sc->get_shortcut());
+ ur->add_do_method(this,"_update_shortcuts");
+ ur->add_undo_method(this,"_update_shortcuts");
+ ur->add_do_method(this,"_settings_changed");
+ ur->add_undo_method(this,"_settings_changed");
+ ur->commit_action();
+ } else if (p_idx==2) {//revert to original
+ if (!sc.is_valid())
+ return; //pointless, there is nothing
+
+ InputEvent original = sc->get_meta("original");
+
+ UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
+ ur->create_action("Restore Shortcut");
+ ur->add_do_method(sc.ptr(),"set_shortcut",original);
+ ur->add_undo_method(sc.ptr(),"set_shortcut",sc->get_shortcut());
+ ur->add_do_method(this,"_update_shortcuts");
+ ur->add_undo_method(this,"_update_shortcuts");
+ ur->add_do_method(this,"_settings_changed");
+ ur->add_undo_method(this,"_settings_changed");
+ ur->commit_action();
+ }
+}
+
+
+void EditorSettingsDialog::_wait_for_key(const InputEvent& p_event) {
+
+
+ if (p_event.type==InputEvent::KEY && p_event.key.pressed && p_event.key.scancode!=0) {
+
+ last_wait_for_key=p_event;
+ String str=keycode_get_string(p_event.key.scancode).capitalize();
+ if (p_event.key.mod.meta)
+ str=TTR("Meta+")+str;
+ if (p_event.key.mod.shift)
+ str=TTR("Shift+")+str;
+ if (p_event.key.mod.alt)
+ str=TTR("Alt+")+str;
+ if (p_event.key.mod.control)
+ str=TTR("Control+")+str;
+
+
+ press_a_key_label->set_text(str);
+ press_a_key->accept_event();
+
+ }
+}
+
+
+
+
+void EditorSettingsDialog::_press_a_key_confirm() {
+
+ if (last_wait_for_key.type!=InputEvent::KEY)
+ return;
+
+ InputEvent ie;
+ ie.type=InputEvent::KEY;
+ ie.key.scancode=last_wait_for_key.key.scancode;
+ ie.key.mod=last_wait_for_key.key.mod;
+
+ Ref<ShortCut> sc = EditorSettings::get_singleton()->get_shortcut(shortcut_configured);
+
+ UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
+ ur->create_action("Change Shortcut '"+shortcut_configured+"'");
+ ur->add_do_method(sc.ptr(),"set_shortcut",ie);
+ ur->add_undo_method(sc.ptr(),"set_shortcut",sc->get_shortcut());
+ ur->add_do_method(this,"_update_shortcuts");
+ ur->add_undo_method(this,"_update_shortcuts");
+ ur->add_do_method(this,"_settings_changed");
+ ur->add_undo_method(this,"_settings_changed");
+ ur->commit_action();
+
+
+
+}
+
void EditorSettingsDialog::_bind_methods() {
ObjectTypeDB::bind_method(_MD("_settings_save"),&EditorSettingsDialog::_settings_save);
ObjectTypeDB::bind_method(_MD("_settings_changed"),&EditorSettingsDialog::_settings_changed);
ObjectTypeDB::bind_method(_MD("_clear_search_box"),&EditorSettingsDialog::_clear_search_box);
+ ObjectTypeDB::bind_method(_MD("_shortcut_button_pressed"),&EditorSettingsDialog::_shortcut_button_pressed);
+ ObjectTypeDB::bind_method(_MD("_update_shortcuts"),&EditorSettingsDialog::_update_shortcuts);
+ ObjectTypeDB::bind_method(_MD("_press_a_key_confirm"),&EditorSettingsDialog::_press_a_key_confirm);
+ ObjectTypeDB::bind_method(_MD("_wait_for_key"),&EditorSettingsDialog::_wait_for_key);
+
}
EditorSettingsDialog::EditorSettingsDialog() {
@@ -122,7 +289,7 @@ EditorSettingsDialog::EditorSettingsDialog() {
vbc->add_child(hbc);
Label *l = memnew( Label );
- l->set_text(TTR("Search: "));
+ l->set_text(TTR("Search:")+" ");
hbc->add_child(l);
search_box = memnew( LineEdit );
@@ -142,20 +309,41 @@ EditorSettingsDialog::EditorSettingsDialog() {
vbc = memnew( VBoxContainer );
tabs->add_child(vbc);
- vbc->set_name(TTR("Plugins"));
-
- hbc = memnew( HBoxContainer );
- vbc->add_child(hbc);
- hbc->add_child( memnew( Label(TTR("Plugin List: "))));
- hbc->add_spacer();
+ vbc->set_name(TTR("Shortcuts"));
+
+ shortcuts = memnew( Tree );
+ vbc->add_margin_child("Shortcut List:",shortcuts,true);
+ shortcuts->set_columns(2);
+ shortcuts->set_hide_root(true);
+ //shortcuts->set_hide_folding(true);
+ shortcuts->set_column_titles_visible(true);
+ shortcuts->set_column_title(0,"Name");
+ shortcuts->set_column_title(1,"Binding");
+ shortcuts->connect("button_pressed",this,"_shortcut_button_pressed");
+
+ press_a_key = memnew( ConfirmationDialog );
+ press_a_key->set_focus_mode(FOCUS_ALL);
+ add_child(press_a_key);
+
+ l = memnew( Label );
+ l->set_text(TTR("Press a Key.."));
+ l->set_area_as_parent_rect();
+ l->set_align(Label::ALIGN_CENTER);
+ l->set_margin(MARGIN_TOP,20);
+ l->set_anchor_and_margin(MARGIN_BOTTOM,ANCHOR_BEGIN,30);
+ press_a_key_label=l;
+ press_a_key->add_child(l);
+ press_a_key->connect("input_event",this,"_wait_for_key");
+ press_a_key->connect("confirmed",this,"_press_a_key_confirm");
//Button *load = memnew( Button );
- //load->set_text(TTR("Load.."));
+
+ //load->set_text("Load..");
//hbc->add_child(load);
- //get_ok()->set_text(TTR("Apply"));
+ //get_ok()->set_text("Apply");
set_hide_on_ok(true);
- //get_cancel()->set_text(TTR("Close"));
+ //get_cancel()->set_text("Close");
timer = memnew( Timer );
timer->set_wait_time(1.5);
diff --git a/tools/editor/settings_config_dialog.h b/tools/editor/settings_config_dialog.h
index 5085132108..c930de6a77 100644
--- a/tools/editor/settings_config_dialog.h
+++ b/tools/editor/settings_config_dialog.h
@@ -50,6 +50,13 @@ class EditorSettingsDialog : public AcceptDialog {
Timer *timer;
+ Tree *shortcuts;
+
+ ConfirmationDialog *press_a_key;
+ Label *press_a_key_label;
+ InputEvent last_wait_for_key;
+ String shortcut_configured;
+
virtual void cancel_pressed();
virtual void ok_pressed();
@@ -59,8 +66,14 @@ class EditorSettingsDialog : public AcceptDialog {
void _notification(int p_what);
+ void _press_a_key_confirm();
+ void _wait_for_key(const InputEvent& p_event);
+
void _clear_search_box();
+ void _update_shortcuts();
+ void _shortcut_button_pressed(Object* p_item,int p_column,int p_idx);
+
protected:
static void _bind_methods();
diff --git a/tools/editor/spatial_editor_gizmos.cpp b/tools/editor/spatial_editor_gizmos.cpp
index b7fc722113..1ca62d3a63 100644
--- a/tools/editor/spatial_editor_gizmos.cpp
+++ b/tools/editor/spatial_editor_gizmos.cpp
@@ -731,9 +731,9 @@ Vector3 EditorSpatialGizmo::get_handle_pos(int p_idx) const {
String LightSpatialGizmo::get_handle_name(int p_idx) const {
if (p_idx==0)
- return TTR("Radius");
+ return "Radius";
else
- return TTR("Aperture");
+ return "Aperture";
}
@@ -1024,15 +1024,37 @@ LightSpatialGizmo::LightSpatialGizmo(Light* p_light){
set_spatial_node(p_light);
}
+//////
+
+void ListenerSpatialGizmo::redraw() {
+
+ clear();
+
+ add_unscaled_billboard(SpatialEditorGizmos::singleton->listener_icon, 0.05);
+
+ add_mesh(SpatialEditorGizmos::singleton->listener_line_mesh);
+ Vector<Vector3> cursor_points;
+ cursor_points.push_back(Vector3(0, 0, 0));
+ cursor_points.push_back(Vector3(0, 0, -1.0));
+ add_collision_segments(cursor_points);
+
+}
+
+ListenerSpatialGizmo::ListenerSpatialGizmo(Listener* p_listener){
+
+ set_spatial_node(p_listener);
+ listener = p_listener;
+}
+
//////
String CameraSpatialGizmo::get_handle_name(int p_idx) const {
if (camera->get_projection()==Camera::PROJECTION_PERSPECTIVE) {
- return TTR("FOV");
+ return "FOV";
} else {
- return TTR("Size");
+ return "Size";
}
}
Variant CameraSpatialGizmo::get_handle_value(int p_idx) const{
@@ -1695,22 +1717,22 @@ String CollisionShapeSpatialGizmo::get_handle_name(int p_idx) const {
if (s->cast_to<SphereShape>()) {
- return TTR("Radius");
+ return "Radius";
}
if (s->cast_to<BoxShape>()) {
- return TTR("Extents");
+ return "Extents";
}
if (s->cast_to<CapsuleShape>()) {
- return p_idx==0?TTR("Radius"):"Height";
+ return p_idx==0?"Radius":"Height";
}
if (s->cast_to<RayShape>()) {
- return TTR("Length");
+ return "Length";
}
return "";
@@ -2907,6 +2929,12 @@ Ref<SpatialEditorGizmo> SpatialEditorGizmos::get_gizmo(Spatial *p_spatial) {
return lsg;
}
+ if (p_spatial->cast_to<Listener>()) {
+
+ Ref<ListenerSpatialGizmo> misg = memnew(ListenerSpatialGizmo(p_spatial->cast_to<Listener>()));
+ return misg;
+ }
+
if (p_spatial->cast_to<Camera>()) {
Ref<CameraSpatialGizmo> lsg = memnew( CameraSpatialGizmo(p_spatial->cast_to<Camera>()) );
@@ -3141,6 +3169,29 @@ SpatialEditorGizmos::SpatialEditorGizmos() {
pos3d_mesh->surface_set_material(0,mat);
}
+ listener_line_mesh = Ref<Mesh>(memnew(Mesh));
+ {
+
+ DVector<Vector3> cursor_points;
+ DVector<Color> cursor_colors;
+ cursor_points.push_back(Vector3(0, 0, 0));
+ cursor_points.push_back(Vector3(0, 0, -1.0));
+ cursor_colors.push_back(Color(0.5, 0.5, 0.5, 0.7));
+ cursor_colors.push_back(Color(0.5, 0.5, 0.5, 0.7));
+
+ Ref<FixedMaterial> mat = memnew(FixedMaterial);
+ mat->set_flag(Material::FLAG_UNSHADED, true);
+ mat->set_fixed_flag(FixedMaterial::FLAG_USE_COLOR_ARRAY, true);
+ mat->set_fixed_flag(FixedMaterial::FLAG_USE_ALPHA, true);
+ mat->set_line_width(3);
+ Array d;
+ d.resize(VS::ARRAY_MAX);
+ d[Mesh::ARRAY_VERTEX] = cursor_points;
+ d[Mesh::ARRAY_COLOR] = cursor_colors;
+ listener_line_mesh->add_surface(Mesh::PRIMITIVE_LINES, d);
+ listener_line_mesh->surface_set_material(0, mat);
+ }
+
sample_player_icon = Ref<FixedMaterial>( memnew( FixedMaterial ));
sample_player_icon->set_flag(Material::FLAG_UNSHADED, true);
@@ -3173,6 +3224,14 @@ SpatialEditorGizmos::SpatialEditorGizmos() {
visibility_notifier_icon->set_parameter(FixedMaterial::PARAM_DIFFUSE,Color(1,1,1,0.9));
visibility_notifier_icon->set_texture(FixedMaterial::PARAM_DIFFUSE,SpatialEditor::get_singleton()->get_icon("Visible","EditorIcons"));
+ listener_icon = Ref<FixedMaterial>(memnew(FixedMaterial));
+ listener_icon->set_flag(Material::FLAG_UNSHADED, true);
+ listener_icon->set_flag(Material::FLAG_DOUBLE_SIDED, true);
+ listener_icon->set_depth_draw_mode(Material::DEPTH_DRAW_NEVER);
+ listener_icon->set_fixed_flag(FixedMaterial::FLAG_USE_ALPHA, true);
+ listener_icon->set_parameter(FixedMaterial::PARAM_DIFFUSE, Color(1, 1, 1, 0.9));
+ listener_icon->set_texture(FixedMaterial::PARAM_DIFFUSE, SpatialEditor::get_singleton()->get_icon("GizmoListener", "EditorIcons"));
+
{
DVector<Vector3> vertices;
diff --git a/tools/editor/spatial_editor_gizmos.h b/tools/editor/spatial_editor_gizmos.h
index 0162bcbf79..3d7272f522 100644
--- a/tools/editor/spatial_editor_gizmos.h
+++ b/tools/editor/spatial_editor_gizmos.h
@@ -32,6 +32,7 @@
#include "tools/editor/plugins/spatial_editor_plugin.h"
#include "scene/3d/light.h"
+#include "scene/3d/listener.h"
#include "scene/3d/camera.h"
#include "scene/3d/position_3d.h"
#include "scene/3d/spatial_sample_player.h"
@@ -143,6 +144,19 @@ public:
};
+class ListenerSpatialGizmo : public EditorSpatialGizmo {
+
+ OBJ_TYPE(ListenerSpatialGizmo, EditorSpatialGizmo);
+
+ Listener* listener;
+
+public:
+
+ void redraw();
+ ListenerSpatialGizmo(Listener* p_listener = NULL);
+
+};
+
class CameraSpatialGizmo : public EditorSpatialGizmo {
OBJ_TYPE(CameraSpatialGizmo,EditorSpatialGizmo);
@@ -471,6 +485,7 @@ public:
Ref<FixedMaterial> navmesh_edge_material_disabled;
Ref<FixedMaterial> navmesh_solid_material_disabled;
+ Ref<FixedMaterial> listener_icon;
Ref<FixedMaterial> sample_player_icon;
Ref<FixedMaterial> stream_player_icon;
@@ -480,6 +495,7 @@ public:
Ref<Texture> handle_t;
Ref<Mesh> pos3d_mesh;
+ Ref<Mesh> listener_line_mesh;
static SpatialEditorGizmos *singleton;
Ref<TriangleMesh> test_cube_tm;
diff --git a/tools/editor_fonts/DroidSans.ttf b/tools/editor_fonts/DroidSans.ttf
new file mode 100644
index 0000000000..767c63ad00
--- /dev/null
+++ b/tools/editor_fonts/DroidSans.ttf
Binary files differ
diff --git a/tools/editor_fonts/DroidSansArabic.ttf b/tools/editor_fonts/DroidSansArabic.ttf
new file mode 100644
index 0000000000..660e2a9916
--- /dev/null
+++ b/tools/editor_fonts/DroidSansArabic.ttf
Binary files differ
diff --git a/tools/editor_fonts/DroidSansFallback.ttf b/tools/editor_fonts/DroidSansFallback.ttf
new file mode 100644
index 0000000000..206621fc6c
--- /dev/null
+++ b/tools/editor_fonts/DroidSansFallback.ttf
Binary files differ
diff --git a/tools/editor_fonts/DroidSansHebrew.ttf b/tools/editor_fonts/DroidSansHebrew.ttf
new file mode 100644
index 0000000000..8d77e3e4cf
--- /dev/null
+++ b/tools/editor_fonts/DroidSansHebrew.ttf
Binary files differ
diff --git a/tools/editor_fonts/DroidSansJapanese.ttf b/tools/editor_fonts/DroidSansJapanese.ttf
new file mode 100644
index 0000000000..412fa3de05
--- /dev/null
+++ b/tools/editor_fonts/DroidSansJapanese.ttf
Binary files differ
diff --git a/tools/editor_fonts/DroidSansThai.ttf b/tools/editor_fonts/DroidSansThai.ttf
new file mode 100644
index 0000000000..f849baeff9
--- /dev/null
+++ b/tools/editor_fonts/DroidSansThai.ttf
Binary files differ
diff --git a/tools/editor_fonts/source_code_pro.otf b/tools/editor_fonts/source_code_pro.otf
new file mode 100644
index 0000000000..4e3b9d0bcd
--- /dev/null
+++ b/tools/editor_fonts/source_code_pro.otf
Binary files differ
diff --git a/tools/freetype/SCsub b/tools/freetype/SCsub
deleted file mode 100644
index 65b4827f9c..0000000000
--- a/tools/freetype/SCsub
+++ /dev/null
@@ -1,69 +0,0 @@
-Import('env')
-
-ft_sources=[\
-"freetype/src/pfr/pfr.c",\
-"freetype/src/psaux/psaux.c",\
-"freetype/src/pcf/pcf.c",\
-"freetype/src/otvalid/otvalid.c",\
-"freetype/src/raster/raster.c",\
-"freetype/src/type1/type1.c",\
-"freetype/src/pshinter/pshinter.c",\
-"freetype/src/cff/cff.c",\
-"freetype/src/truetype/truetype.c",\
-"freetype/src/bdf/bdf.c",\
-"freetype/src/cache/ftcache.c",\
-"freetype/src/sfnt/sfnt.c",\
-"freetype/src/winfonts/winfnt.c",\
-"freetype/src/psnames/psnames.c",\
-"freetype/src/cid/type1cid.c",\
-"freetype/src/autofit/autofit.c",\
-"freetype/src/gxvalid/gxvalid.c",\
-"freetype/src/smooth/smooth.c",\
-"freetype/src/type42/type42.c",\
-"freetype/src/base/ftapi.c",\
-"freetype/src/base/ftbase.c",\
-"freetype/src/base/ftbbox.c",\
-"freetype/src/base/ftbdf.c",\
-"freetype/src/base/ftbitmap.c",\
-"freetype/src/base/ftcid.c",\
-"freetype/src/base/ftdebug.c",\
-"freetype/src/base/ftfstype.c",\
-"freetype/src/base/ftgasp.c",\
-"freetype/src/base/ftglyph.c",\
-"freetype/src/base/ftgxval.c",\
-"freetype/src/base/ftinit.c",\
-"freetype/src/base/ftlcdfil.c",\
-"freetype/src/base/ftmm.c",\
-"freetype/src/base/ftotval.c",\
-"freetype/src/base/ftpatent.c",\
-"freetype/src/base/ftpfr.c",\
-"freetype/src/base/ftpic.c",\
-"freetype/src/base/ftstroke.c",\
-"freetype/src/base/ftsynth.c",\
-"freetype/src/base/ftsystem.c",\
-"freetype/src/base/fttype1.c",\
-"freetype/src/base/ftwinfnt.c",\
-"freetype/src/base/ftxf86.c",\
-
-]
-
-
-if (env["freetype"]=="builtin"):
-#fix for windows command line i too long, split in two libraries
- half1=[]
- half2=[]
- for x in ft_sources:
- if (x.find("freetype/src/base")==0):
- half2.append(x)
- else:
- half1.append(x)
-
- lib = env.Library("freetype_builtin1",half1)
- env.Prepend(LIBS=[lib])
- lib = env.Library("freetype_builtin2",half2)
- env.Prepend(LIBS=[lib])
-
-# lib = env.Library("freetype_builtin",ft_sources)
-# env.Prepend(LIBS=[lib])
-
-Export('env')
diff --git a/tools/osx_template.app/Contents/Resources/icon.icns b/tools/osx_template.app/Contents/Resources/icon.icns
index 4a3dc0415a..375f61437d 100644
--- a/tools/osx_template.app/Contents/Resources/icon.icns
+++ b/tools/osx_template.app/Contents/Resources/icon.icns
Binary files differ
diff --git a/tools/translations/Makefile b/tools/translations/Makefile
new file mode 100644
index 0000000000..8f336694e8
--- /dev/null
+++ b/tools/translations/Makefile
@@ -0,0 +1,20 @@
+# Makefile providing various facilities to manage translations
+
+TEMPLATE = tools.pot
+POFILES = $(wildcard *.po)
+LANGS = $(POFILES:%.po=%)
+
+all: update merge
+
+update:
+ @cd ../..; python2 tools/translations/extract.py
+
+merge:
+ @for po in $(POFILES); do \
+ echo -e "\nMerging $$po..."; \
+ msgmerge -w 80 -C $$po $$po $(TEMPLATE) > "$$po".new; \
+ mv -f "$$po".new $$po; \
+ done
+
+check:
+ @for po in $(POFILES); do msgfmt -c $$po -o /dev/null; done
diff --git a/tools/translations/de.po b/tools/translations/de.po
new file mode 100644
index 0000000000..e24db1942b
--- /dev/null
+++ b/tools/translations/de.po
@@ -0,0 +1,5878 @@
+# LANGUAGE translation of the Godot Engine editor
+# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community
+# This file is distributed under the same license as the Godot source code.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Godot Engine editor\n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: \n"
+"Last-Translator: Sebastian Thewes <minzky@minzky.com>\n"
+"Language-Team: \n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: scene/2d/animated_sprite.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the 'Frames' property in "
+"order for AnimatedSprite to display frames."
+msgstr ""
+
+#: scene/2d/canvas_modulate.cpp
+msgid ""
+"Only one visible CanvasModulate is allowed per scene (or set of instanced "
+"scenes). The first created one will work, while the rest will be ignored."
+msgstr ""
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid ""
+"CollisionPolygon2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid "An empty CollisionPolygon2D has no effect on collision."
+msgstr ""
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"CollisionShape2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"A shape must be provided for CollisionShape2D to function. Please create a "
+"shape resource for it!"
+msgstr ""
+"Damit CollisionShape funktionieren kann, muss eine Form angegeben werden. "
+"Bitte erzeuge eine shape Ressource dafür."
+
+#: scene/2d/light_2d.cpp
+msgid ""
+"A texture with the shape of the light must be supplied to the 'texture' "
+"property."
+msgstr ""
+
+#: scene/2d/light_occluder_2d.cpp
+msgid ""
+"An occluder polygon must be set (or drawn) for this occluder to take effect."
+msgstr ""
+"Damit CollisionShape funktionieren kann, muss eine Form angegeben werden. "
+"Bitte erzeuge eine shape Ressource dafür."
+
+#: scene/2d/light_occluder_2d.cpp
+msgid "The occluder polygon for this occluder is empty. Please draw a polygon!"
+msgstr ""
+"Damit CollisionShape funktionieren kann, muss eine Form angegeben werden. "
+"Bitte erzeuge eine shape Ressource dafür."
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"A NavigationPolygon resource must be set or created for this node to work. "
+"Please set a property or draw a polygon."
+msgstr ""
+"Damit CollisionShape funktionieren kann, muss eine Form angegeben werden. "
+"Bitte erzeuge eine shape Ressource dafür."
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
+"node. It only provides navigation data."
+msgstr ""
+"NavigationPolygonInstance muss ein Unterobjekt oder Unterunterobjekt einer "
+"Navigation2D Node sein. Es liefert nur Navigations Daten."
+
+#: scene/2d/parallax_layer.cpp
+msgid ""
+"ParallaxLayer node only works when set as child of a ParallaxBackground node."
+msgstr ""
+"Die ParallaxLayer Node funktioniert nur als Kind von einer ParallaxBackground "
+"Node."
+
+#: scene/2d/particles_2d.cpp
+msgid "Path property must point to a valid Particles2D node to work."
+msgstr "Pfad Eigenschaft muss auf eine gültige Particles2D Node verweisen."
+
+#: scene/2d/path_2d.cpp
+msgid "PathFollow2D only works when set as a child of a Path2D node."
+msgstr ""
+
+#: scene/2d/remote_transform_2d.cpp
+msgid "Path property must point to a valid Node2D node to work."
+msgstr ""
+
+#: scene/2d/sample_player_2d.cpp scene/audio/sample_player.cpp
+msgid ""
+"A SampleLibrary resource must be created or set in the 'samples' property in "
+"order for SamplePlayer to play sound."
+msgstr ""
+"Eine SampleLibrary Ressource muss in der 'samples' Eigenschaft erzeugt oder "
+"definiert werden damit SpatialSamplePlayer einen Sound abspielen kann."
+
+#: scene/2d/sprite.cpp
+msgid ""
+"Path property must point to a valid Viewport node to work. Such Viewport must "
+"be set to 'render target' mode."
+msgstr ""
+"Die Pfad Eigenschaft muss auf eine gültige Viewport Node verweisen um zu "
+"funktionieren. Dieser Viewport muss in 'render target' Modus gesetzt werden."
+
+#: scene/2d/sprite.cpp
+msgid ""
+"The Viewport set in the path property must be set as 'render target' in order "
+"for this sprite to work."
+msgstr ""
+"Der Viewport der in der Pfad Eigenschaft gesetzt wurde, muss als 'render "
+"target' definiert werden damit das Sprite funktioniert."
+
+#: scene/2d/visibility_notifier_2d.cpp
+msgid ""
+"VisibilityEnable2D works best when used with the edited scene root directly "
+"as parent."
+msgstr ""
+"VisibilityEnable2D funktioniert am besten wenn es ein Unterobjekt der "
+"bearbeiteten Hauptszene ist."
+
+#: scene/3d/body_shape.cpp
+msgid ""
+"CollisionShape only serves to provide a collision shape to a CollisionObject "
+"derived node. Please only use it as a child of Area, StaticBody, RigidBody, "
+"KinematicBody, etc. to give them a shape."
+msgstr ""
+"CollisionShape dient nur dazu einer dem CollisionObject abgeleiteten Node "
+"eine Kollisionsform bereit zu stellen. Bitte nutze es nur als eine "
+"Unterobjekt von Area, StaticBody, RigidBody, KinematicBody, usw. um diesen "
+"eine Form zu geben."
+
+#: scene/3d/body_shape.cpp
+msgid ""
+"A shape must be provided for CollisionShape to function. Please create a "
+"shape resource for it!"
+msgstr ""
+"Damit CollisionShape funktionieren kann, muss eine Form angegeben werden. "
+"Bitte erzeuge eine shape Ressource dafür."
+
+#: scene/3d/collision_polygon.cpp
+msgid ""
+"CollisionPolygon only serves to provide a collision shape to a "
+"CollisionObject derived node. Please only use it as a child of Area, "
+"StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
+msgstr ""
+"CollisionPolygon liefert nur eine Kollisionsform für eine vom CollisionObject "
+"abgeleitete Node. Bitte nutze es nur als eine Unterobjekt von Area, "
+"StaticBody, RigidBody, KinematicBody, usw. um diesen eine Form zu geben."
+
+#: scene/3d/collision_polygon.cpp
+msgid "An empty CollisionPolygon has no effect on collision."
+msgstr ""
+
+#: scene/3d/navigation_mesh.cpp
+msgid "A NavigationMesh resource must be set or created for this node to work."
+msgstr ""
+"Damit diese Node funktionieren kann, muss eine NavigationMesh Ressource "
+"erzeugt oder definiert werden."
+
+#: scene/3d/navigation_mesh.cpp
+msgid ""
+"NavigationMeshInstance must be a child or grandchild to a Navigation node. It "
+"only provides navigation data."
+msgstr ""
+"NavigationMeshinstance muss ein Unterobjekt oder Unterunterobjekt von einer "
+"Navigations Node sein. Es liefert nur navigationsdaten."
+
+#: scene/3d/scenario_fx.cpp
+msgid ""
+"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)."
+msgstr ""
+"Nur ein WorldEnvironment pro Szene oder (instanzierter Szene) ist erlaubt."
+
+#: scene/3d/spatial_sample_player.cpp
+msgid ""
+"A SampleLibrary resource must be created or set in the 'samples' property in "
+"order for SpatialSamplePlayer to play sound."
+msgstr ""
+"Eine SampleLibrary Ressource muss in der 'samples' Eigenschaft erzeugt oder "
+"definiert werden damit SpatialSamplePlayer einen Sound abspielen kann."
+
+#: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#: scene/gui/dialogs.cpp
+msgid "OK"
+msgstr "OK"
+
+#: scene/gui/dialogs.cpp
+msgid "Alert!"
+msgstr ""
+
+#: scene/gui/dialogs.cpp
+msgid "Please Confirm..."
+msgstr "Bitte bestätigen..."
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Cut"
+msgstr "Ausschneiden"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp
+msgid "Copy"
+msgstr "Kopieren"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp
+msgid "Paste"
+msgstr "Einfügen"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/project_export.cpp
+msgid "Select All"
+msgstr "Alles auswählen"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_log.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/rich_text_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/script_editor_debugger.cpp
+msgid "Clear"
+msgstr ""
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Undo"
+msgstr "Rückgängig machen"
+
+#: scene/gui/popup.cpp
+msgid ""
+"Popups will hide by default unless you call popup() or any of the popup*() "
+"functions. Making them visible for editing is fine though, but they will hide "
+"upon running."
+msgstr ""
+
+#: scene/main/viewport.cpp
+msgid ""
+"This viewport is not set as render target. If you intend for it to display "
+"its contents directly to the screen, make it a child of a Control so it can "
+"obtain a size. Otherwise, make it a RenderTarget and assign its internal "
+"texture to some node for display."
+msgstr ""
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Error initializing FreeType."
+msgstr ""
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Unknown font format."
+msgstr "Unbekanntes Schriftformat."
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Error loading font."
+msgstr "Fehler beim Laden der Schriftart."
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Invalid font size."
+msgstr "Ungültige Schriftgröße."
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/call_dialog.cpp
+#: tools/editor/connections_dialog.cpp tools/editor/groups_editor.cpp
+#: tools/editor/import_settings.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp
+#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp
+msgid "Close"
+msgstr "Schließen"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/create_dialog.cpp
+#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/settings_config_dialog.cpp
+msgid "Search:"
+msgstr "Suche:"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/code_editor.cpp
+#: tools/editor/editor_help.cpp tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/project_settings.cpp
+msgid "Search"
+msgstr "Suche"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/editor_node.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Import"
+msgstr ""
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/project_settings.cpp
+#: tools/editor/settings_config_dialog.cpp
+msgid "Plugins"
+msgstr "Erweiterungen"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Sort:"
+msgstr ""
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Reverse"
+msgstr ""
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/project_settings.cpp
+msgid "Category:"
+msgstr "Kategorie:"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "All"
+msgstr ""
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Site:"
+msgstr ""
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Assets ZIP File"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Disabled"
+msgstr "Deaktiviert"
+
+#: tools/editor/animation_editor.cpp
+msgid "All Selection"
+msgstr "Alle auswählen"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Add Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Transition"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Transform"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Value"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Call"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Track"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Anim Track Up"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Anim Track Down"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove Anim Track"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Duplicate Keys"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Set Transitions to:"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Rename"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Change Interpolation"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Change Value Mode"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Edit Node Curve"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Edit Selection Curve"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Delete Keys"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Move Keys"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale Selection"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale From Cursor"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Duplicate Selection"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Duplicate Transposed"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Goto Next Step"
+msgstr "Gehe zum nächsten Schritt"
+
+#: tools/editor/animation_editor.cpp
+msgid "Goto Prev Step"
+msgstr "Gehe zum vorherigen Schritt"
+
+#: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp
+msgid "Linear"
+msgstr "Linear"
+
+#: tools/editor/animation_editor.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Constant"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "In"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Out"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "In-Out"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Out-In"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Transitions"
+msgstr "Übergänge"
+
+#: tools/editor/animation_editor.cpp
+msgid "Optimize Animation"
+msgstr "Animation optimieren"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up Animation"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Create NEW track for %s and insert key?"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Create %d NEW tracks and insert keys?"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/particles_editor_plugin.cpp
+#: tools/editor/project_manager.cpp tools/editor/script_create_dialog.cpp
+msgid "Create"
+msgstr "Erstellen"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Create & Insert"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert Track & Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Change Anim Len"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Change Anim Loop"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Create Typed Value Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Scale Keys"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Call Track"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Animation zoom."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Length (s):"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Animation length (in seconds)."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Step (s):"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Cursor step snap (in seconds)."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Enable/Disable looping in animation."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Add new tracks."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Move current track up."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Move current track down."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove selected track."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Track tools"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Enable editing of individual keys by clicking them."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim. Optimizer"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Max. Linear Error:"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Max. Angular Error:"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Max Optimizable Angle:"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Optimize"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Transition"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale Ratio:"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Call Functions in Which Node?"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove invalid keys"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove unresolved and empty tracks"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-up all animations"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up Animation(s) (NO UNDO!)"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up"
+msgstr ""
+
+#: tools/editor/array_property_edit.cpp
+msgid "Resize Array"
+msgstr ""
+
+#: tools/editor/array_property_edit.cpp
+msgid "Change Array Value Type"
+msgstr ""
+
+#: tools/editor/array_property_edit.cpp
+msgid "Change Array Value"
+msgstr ""
+
+#: tools/editor/call_dialog.cpp
+msgid "Method List For '%s':"
+msgstr ""
+
+#: tools/editor/call_dialog.cpp
+msgid "Call"
+msgstr ""
+
+#: tools/editor/call_dialog.cpp
+msgid "Method List:"
+msgstr ""
+
+#: tools/editor/call_dialog.cpp
+msgid "Arguments:"
+msgstr ""
+
+#: tools/editor/call_dialog.cpp
+msgid "Return:"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Go to Line"
+msgstr "Gehe zu Zeile"
+
+#: tools/editor/code_editor.cpp
+msgid "Line Number:"
+msgstr "Zeilennummer:"
+
+#: tools/editor/code_editor.cpp
+msgid "No Matches"
+msgstr "Keine Übereinstimmung"
+
+#: tools/editor/code_editor.cpp
+msgid "Replaced %d Ocurrence(s)."
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Replace"
+msgstr "Ersetzen"
+
+#: tools/editor/code_editor.cpp
+msgid "Replace All"
+msgstr "Alles ersetzen"
+
+#: tools/editor/code_editor.cpp
+msgid "Match Case"
+msgstr "Groß-/Kleinschreibung berücksichtigen"
+
+#: tools/editor/code_editor.cpp
+msgid "Whole Words"
+msgstr "Gesamte Wörter"
+
+#: tools/editor/code_editor.cpp
+msgid "Selection Only"
+msgstr ""
+
+#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp
+msgid "Find"
+msgstr "Finde"
+
+#: tools/editor/code_editor.cpp
+msgid "Next"
+msgstr "Nächste"
+
+#: tools/editor/code_editor.cpp
+msgid "Replaced %d ocurrence(s)."
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Not found!"
+msgstr "Nicht gefunden!"
+
+#: tools/editor/code_editor.cpp
+msgid "Replace By"
+msgstr "Ersetzen durch"
+
+#: tools/editor/code_editor.cpp
+msgid "Case Sensitive"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Backwards"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Prompt On Replace"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Skip"
+msgstr "Überspringen"
+
+#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp
+msgid "Line:"
+msgstr "Zeile:"
+
+#: tools/editor/code_editor.cpp
+msgid "Col:"
+msgstr "Spalte:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Method in target Node must be specified!"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect To Node:"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Binds (Extra Params):"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp tools/editor/groups_editor.cpp
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/project_settings.cpp
+msgid "Add"
+msgstr "Hinzufügen"
+
+#: tools/editor/connections_dialog.cpp tools/editor/dependency_editor.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Remove"
+msgstr "Entferne"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Path To Node:"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Method In Node:"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Make Function"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Deferred"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Oneshot"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect"
+msgstr "Verbinden"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect '%s' to '%s'"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Create Subscription"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect.."
+msgstr "Verbinde.."
+
+#: tools/editor/connections_dialog.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Disconnect"
+msgstr "Trennen"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Edit Connections.."
+msgstr "Bearbeite Verbindungen.."
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connections:"
+msgstr "Verbindungen:"
+
+#: tools/editor/create_dialog.cpp
+msgid "Create New"
+msgstr ""
+
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+msgid "Matches:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Search Replacement For:"
+msgstr "Suche Ersatz für:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies For:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"Scene '%s' is currently being edited.\n"
+"Changes will not take effect unless reloaded."
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"Resource '%s' is in use.\n"
+"Changes will take effect when reloaded."
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies"
+msgstr "Abhängigkeiten"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Resource"
+msgstr "Ressource"
+
+#: tools/editor/dependency_editor.cpp tools/editor/project_manager.cpp
+#: tools/editor/project_settings.cpp
+msgid "Path"
+msgstr "Pfad"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies:"
+msgstr "Abhängigkeiten:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Fix Broken"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependency Editor"
+msgstr "Abhängigkeiten-Editor"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Search Replacement Resource:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Owners Of:"
+msgstr "Besitzer von:"
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"The files being removed are required by other resources in order for them to "
+"work.\n"
+"Remove them anyway? (no undo)"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Remove selected files from the project? (no undo)"
+msgstr "Lösche ausgewählte Dateien aus dem Projekt? (nicht umkehrbar)"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Error loading:"
+msgstr "Ladefehler:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Scene failed to load due to missing dependencies:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Open Anyway"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Which action should be taken?"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Fix Dependencies"
+msgstr "Abhängigkeiten reparieren"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Errors loading!"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Permanently delete %d item(s)? (No undo!)"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Owns"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Resources Without Explicit Ownership:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
+msgid "Orphan Resource Explorer"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Delete selected files?"
+msgstr "Ausgewählten Dateien löschen?"
+
+#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+#: tools/editor/scenes_dock.cpp
+msgid "Delete"
+msgstr "Löschen"
+
+#: tools/editor/editor_data.cpp
+msgid "Updating Scene"
+msgstr ""
+
+#: tools/editor/editor_data.cpp
+msgid "Storing local changes.."
+msgstr ""
+
+#: tools/editor/editor_data.cpp
+msgid "Updating scene.."
+msgstr ""
+
+#: tools/editor/editor_dir_dialog.cpp
+msgid "Choose a Directory"
+msgstr "Wähle ein Verzeichnis"
+
+#: tools/editor/editor_dir_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Create Folder"
+msgstr "Ordner erstellen"
+
+#: tools/editor/editor_dir_dialog.cpp tools/editor/editor_file_dialog.cpp
+#: tools/editor/editor_plugin_settings.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Name:"
+msgstr "Name:"
+
+#: tools/editor/editor_dir_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Could not create folder."
+msgstr "Ordner konnte nicht erstellt werden."
+
+#: tools/editor/editor_dir_dialog.cpp
+msgid "Choose"
+msgstr "Wählen"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "File Exists, Overwrite?"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "All Recognized"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "All Files (*)"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/quick_open.cpp tools/editor/scenes_dock.cpp
+msgid "Open"
+msgstr "Öffnen"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save"
+msgstr "Speichern"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Save a File"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/script_create_dialog.cpp
+msgid "Path:"
+msgstr "Pfad:"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/scenes_dock.cpp
+msgid "Favorites:"
+msgstr "Favoriten:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Recent:"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Directories & Files:"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Preview:"
+msgstr "Vorschau:"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/script_editor_debugger.cpp
+msgid "File:"
+msgstr "Datei:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Filter:"
+msgstr "Filter:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Must use a valid extension."
+msgstr ""
+
+#: tools/editor/editor_file_system.cpp
+msgid "Cannot go into subdir:"
+msgstr ""
+
+#: tools/editor/editor_file_system.cpp
+msgid "ScanSources"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Search Classes"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Class List:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp tools/editor/property_editor.cpp
+msgid "Class:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp tools/editor/scene_tree_editor.cpp
+#: tools/editor/script_create_dialog.cpp
+msgid "Inherits:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Inherited by:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Brief Description:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Public Methods:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Members:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "GUI Theme Items:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Signals:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Constants:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "Beschreibung:"
+
+#: tools/editor/editor_help.cpp
+msgid "Method Description:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Search Text"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp
+msgid "Added:"
+msgstr "Hinzugefügt:"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Removed:"
+msgstr "Entfernt:"
+
+#: tools/editor/editor_import_export.cpp tools/editor/project_export.cpp
+msgid "Error saving atlas:"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp
+msgid "Could not save atlas subtexture:"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp
+msgid "Storing File:"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp
+msgid "Packing"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp
+msgid "Exporting for %s"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp
+msgid "Setting Up.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
+msgid "Re-Importing"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Importing:"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Node From Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/scenes_dock.cpp
+msgid "Re-Import.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/resources_dock.cpp
+msgid "Error saving resource!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/resources_dock.cpp
+msgid "Save Resource As.."
+msgstr "Speichere Ressource als.."
+
+#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
+msgid "I see.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Can't open file for writing:"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Requested file format unknown:"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Error while saving."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Saving Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Analyzing"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Creating Thumbnail"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Failed to load resource."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Can't load MeshLibrary for merging!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Error saving MeshLibrary!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Can't load TileSet for merging!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Error saving TileSet!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Can't open export templates zip."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Loading Export Templates"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Error trying to save layout!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Default editor layout overridden."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Layout name not found!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Restored default layout to base settings."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Copy Params"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Set Params"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Paste Resource"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Copy Resource"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Make Built-In"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Make Sub-Resources Unique"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "There is no defined scene to run."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Current scene was never saved, please save it prior to running."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Could not start subprocess!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Open Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Open Base Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Open Scene.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Open Script.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Yes"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Close scene? (Unsaved changes will be lost)"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Save Scene As.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "This scene has never been saved. Save before running?"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Please save the scene first."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Save Translatable Strings"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Export Mesh Library"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Export Tile Set"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Quit"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Exit the editor?"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Current scene not saved. Open anyway?"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Can't reload a scene that was never saved."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Revert"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "This action cannot be undone. Revert anyway?"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Run Scene.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Open Project Manager? \n"
+"(Unsaved changes will be lost)"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
+msgid "Ugh"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Error loading scene, it must be inside the project path. Use 'Import' to open "
+"the scene, then save it inside the project path."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Error loading scene."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Scene '%s' has broken dependencies:"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Save Layout"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Delete Layout"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Default"
+msgstr "Standard"
+
+#: tools/editor/editor_node.cpp
+msgid "Switch Scene Tab"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "%d more file(s)"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "%d more file(s) or folder(s)"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Go to previously opened scene."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Operations with scene files."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "New Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "New Inherited Scene.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Open Scene.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Save Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Close Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Close Goto Prev. Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Open Recent"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Search File.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Convert To.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Translatable Strings.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "MeshLibrary.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "TileSet.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Redo"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Run Script"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Project Settings"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Revert Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Quit to Project List"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Import assets to the project."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Miscellaneous project or scene-wide tools."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Tools"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Export the project to many platforms."
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Export"
+msgstr "Exportieren"
+
+#: tools/editor/editor_node.cpp
+msgid "Play the project (F5)."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Pause the scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Stop the scene (F8)."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Play the edited scene (F6)."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Play custom scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Debug options"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Live Editing"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "File Server"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Deploy Remote Debug"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Deploy File Server Clients"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Visible Collision Shapes"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Visible Navigation"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Settings"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/settings_config_dialog.cpp
+msgid "Editor Settings"
+msgstr "Editor-Einstellungen"
+
+#: tools/editor/editor_node.cpp
+msgid "Editor Layout"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Install Export Templates"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "About"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Alerts when an external resource has changed."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Spins when the editor window repaints!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Update Always"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Update Changes"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Inspector"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Create a new resource in memory and edit it."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Load an existing resource from disk and edit it."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Save the currently edited resource."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save As.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Go to the previous edited object in history."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Go to the next edited object in history."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "History of recently edited objects."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Object properties."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "FileSystem"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Output"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
+#: tools/editor/import_settings.cpp
+msgid "Re-Import"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/editor_plugin_settings.cpp
+msgid "Update"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Thanks from the Godot community!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Thanks!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Import Templates From ZIP File"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Export Project"
+msgstr "Projekt exportieren"
+
+#: tools/editor/editor_node.cpp
+msgid "Export Library"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Merge With Existing"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Password:"
+msgstr "Passwort:"
+
+#: tools/editor/editor_node.cpp
+msgid "Open & Run a Script"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Load Errors"
+msgstr ""
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Installed Plugins:"
+msgstr "Installierte Plugins:"
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr "Version:"
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Author:"
+msgstr "Autor:"
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Status:"
+msgstr "Status:"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Stop Profiling"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Start Profiling"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Measure:"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame Time (sec)"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Average Time (sec)"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame %"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Fixed Frame %"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp tools/editor/script_editor_debugger.cpp
+msgid "Time:"
+msgstr "Zeit:"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Inclusive"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Self"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame #:"
+msgstr ""
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Please wait for scan to complete."
+msgstr ""
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Current scene must be saved to re-import."
+msgstr ""
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Save & Re-Import"
+msgstr "Speichern & erneut importieren"
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Re-Import Changed Resources"
+msgstr ""
+
+#: tools/editor/editor_run_script.cpp
+msgid "Write your logic in the _run() method."
+msgstr ""
+
+#: tools/editor/editor_run_script.cpp
+msgid "There is an edited scene already."
+msgstr ""
+
+#: tools/editor/editor_run_script.cpp
+msgid "Couldn't instance script:"
+msgstr ""
+
+#: tools/editor/editor_run_script.cpp
+msgid "Did you forget the 'tool' keyword?"
+msgstr ""
+
+#: tools/editor/editor_run_script.cpp
+msgid "Couldn't run script:"
+msgstr ""
+
+#: tools/editor/editor_run_script.cpp
+msgid "Did you forget the '_run' method?"
+msgstr ""
+
+#: tools/editor/editor_settings.cpp
+msgid "Default (Same as Editor)"
+msgstr ""
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Select Node(s) to Import"
+msgstr ""
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Scene Path:"
+msgstr ""
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Import From Node:"
+msgstr ""
+
+#: tools/editor/file_type_cache.cpp
+msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
+msgstr ""
+
+#: tools/editor/groups_editor.cpp
+msgid "Add to Group"
+msgstr ""
+
+#: tools/editor/groups_editor.cpp
+msgid "Remove from Group"
+msgstr ""
+
+#: tools/editor/groups_editor.cpp
+msgid "Group Editor"
+msgstr ""
+
+#: tools/editor/groups_editor.cpp tools/editor/project_export.cpp
+msgid "Group"
+msgstr "Gruppe"
+
+#: tools/editor/groups_editor.cpp
+msgid "Node Group(s)"
+msgstr ""
+
+#: tools/editor/import_settings.cpp
+msgid "Imported Resources"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "No source font file!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "No target font resource!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Can't load/process source font."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Couldn't save font."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Source Font:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Source Font Size:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Dest Resource:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "The quick brown fox jumps over the lazy dog."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Test:"
+msgstr "Test:"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Options:"
+msgstr "Optionen:"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Font Import"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Accept"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid ""
+"This file is already a Godot font file, please supply a BMFont type file "
+"instead."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Failed opening as BMFont file."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Invalid font custom source."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Font"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "No meshes to import!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Save path is empty!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Single Mesh Import"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Source Mesh(es):"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Target Path:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Mesh"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Surface %d"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "No samples to import!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path is empty."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path must be a complete resource path."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path must exist."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Import Audio Samples"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Source Sample(s):"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Audio Sample"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "New Clip"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Animation Options"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Flags"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Bake FPS:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Optimizer"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Linear Error"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Angular Error"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Angle"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Clips"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/project_manager.cpp tools/editor/project_settings.cpp
+msgid "Name"
+msgstr "Name"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Start(s)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "End(s)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Loop"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Filters"
+msgstr "Filter"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Source path is empty."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't load post-import script."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Invalid/broken script for post-import."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Error importing scene."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import 3D Scene"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Source Scene:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Same as Target Scene"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Shared"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Target Texture Folder:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Post-Process Script:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Custom Root Node Type:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Auto"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "The Following Files are Missing:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import Anyway"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import & Open"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Edited scene has not been saved, open imported scene anyway?"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import Scene"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Importing Scene.."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Running Custom Script.."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't load post-import script:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Invalid/broken script for post-import:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Error running post-import script:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import Image:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Can't import a file over itself:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't localize path: %s (already local)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Saving.."
+msgstr "Speichere.."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "3D Scene Animation"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Uncompressed"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress Lossless (PNG)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress Lossy (WebP)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress (VRAM)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Format"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Compression Quality (WebP):"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Options"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Please specify some files!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "At least one file needed for Atlas."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Error importing:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Only one file is required for large texture."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Max Texture Size:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for Atlas (2D)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Cell Size:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Large Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Large Textures (2D)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Base Atlas Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture(s)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for 2D"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for 3D"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "2D Texture"
+msgstr "2D-Textur"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "3D Texture"
+msgstr "3D-Textur"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Atlas Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid ""
+"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to "
+"the project."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture(s):"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Crop empty space."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Large Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Load Source Image"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Slicing"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Inserting"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Saving"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save large texture:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Build Atlas For:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Loading Image:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't load image:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Converting Images"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Cropping Images"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Blitting Images"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save atlas image:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save converted texture:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Invalid source!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Invalid translation source!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Column"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#: tools/editor/script_create_dialog.cpp
+msgid "Language"
+msgstr "Sprache"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "No items to import!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "No target path!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Translations"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Couldn't import!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Translation"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Source CSV:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Ignore First Row"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Compress"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Add to Project (engine.cfg)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Languages:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Translation"
+msgstr ""
+
+#: tools/editor/multi_node_edit.cpp
+msgid "MultiNode Set"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Toggle Autoplay"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Animation Name:"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Anim"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Animation Name:"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Remove Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Invalid animation name!"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Animation name already exists!"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Next Changed"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Blend Time"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to copy!"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation resource on clipboard!"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Pasted Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Paste Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to edit!"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from current pos. (A)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from end. (Shift+A)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Stop animation playback. (S)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from start. (Shift+D)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from current pos. (D)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation position (in seconds)."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Scale animation playback globally for the node."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create new animation in player."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load an animation from disk."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save the current animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Display list of animations in player."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Autoplay on Load"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Edit Target Blend Times"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Tools"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Copy Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Name:"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/script_create_dialog.cpp
+msgid "Error!"
+msgstr "Fehler!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Times:"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Next (Auto Queue):"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Cross-Animation Blend Times"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "New name:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Scale:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade In (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade Out (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Auto Restart:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Restart (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Random Restart (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Start!"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Amount:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 0:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 1:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "X-Fade Time (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Current:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Add Input"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Clear Auto-Advance"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Set Auto-Advance"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Delete Input"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Rename"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is valid."
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is invalid."
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "OneShot Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend2 Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend3 Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend4 Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeScale Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeSeek Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Transition Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Import Animations.."
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Edit Node Filters"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Filters.."
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Parsing %d Triangles:"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Triangle #"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Light Baker Setup:"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Parsing Geometry"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Fixing Lights"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Making BVH"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Creating Light Octree"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Creating Octree Texture"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Transfer to Lightmaps:"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Allocating Texture #"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Baking Triangle #"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Post-Processing Texture #"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "BakedLightInstance does not contain a BakedLight resource."
+msgstr ""
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "Bake!"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "Reset the lightmap octree baking process (start over)."
+msgstr ""
+
+#: tools/editor/plugins/camera_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Preview"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Configure Snap"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid Offset:"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid Step:"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Offset:"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Step:"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Pivot"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Action"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit IK Chain"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit CanvasItem"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom (%):"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Paste Pose"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Select Mode (Q)"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Drag: Rotate"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+Drag: Move"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+RMB: Depth list selection"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Move Mode (W)"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Mode (E)"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid ""
+"Show a list of all objects at the position clicked\n"
+"(same as Alt+RMB in select mode)."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Click to change object's rotation pivot."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Pan Mode"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Lock the selected object in place (can't be moved)."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Unlock the selected object (can be moved)."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Makes sure the object's children are not selectable."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Restores the object's children's ability to be selected."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Edit"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Snap"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Show Grid"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Rotation Snap"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap Relative"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Configure Snap.."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Pixel Snap"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Expand to Parent"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Skeleton.."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make Bones"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Bones"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make IK Chain"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear IK Chain"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom In"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Out"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Reset"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Set.."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center Selection"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Frame Selection"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Anchor"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Keys (Ins)"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key (Existing Tracks)"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Copy Pose"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Pose"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Set a Value"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap (Pixels):"
+msgstr ""
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create Poly"
+msgstr ""
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Edit Poly"
+msgstr ""
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Edit Poly (Remove Point)"
+msgstr ""
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+msgid "Create Poly3D"
+msgstr ""
+
+#: tools/editor/plugins/collision_shape_2d_editor_plugin.cpp
+msgid "Set Handle"
+msgstr ""
+
+#: tools/editor/plugins/color_ramp_editor_plugin.cpp
+msgid "Add/Remove Color Ramp Point"
+msgstr ""
+
+#: tools/editor/plugins/color_ramp_editor_plugin.cpp
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Color Ramp"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Creating Mesh Library"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Thumbnail.."
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove item %d?"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Add Item"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove Selected Item"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import from Scene"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Update from Scene"
+msgstr ""
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Item %d"
+msgstr ""
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Items"
+msgstr ""
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Item List Editor"
+msgstr ""
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Occluder Polygon"
+msgstr ""
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Edit existing polygon:"
+msgstr ""
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "LMB: Move Point."
+msgstr ""
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Ctrl+LMB: Split Segment."
+msgstr ""
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "RMB: Erase Point."
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh is empty!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Trimesh Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Convex Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "This doesn't work on scene root!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Shape"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Shape"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Navigation Mesh"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "MeshInstance lacks a Mesh!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Could not create outline!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Static Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Static Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Collision Sibling"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Collision Sibling"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh.."
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Outline Size:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and no MultiMesh set in node)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and MultiMesh contains no Mesh)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (invalid path)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (not a MeshInstance)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (contains no Mesh resource)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No surface source specified."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (invalid path)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no geometry)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no faces)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Parent has no solid faces to populate."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Couldn't map area."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Source Mesh:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Target Surface:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate Surface"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate MultiMesh"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Target Surface:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Source Mesh:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "X-Axis"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Y-Axis"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Z-Axis"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh Up Axis:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Rotation:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Tilt:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Scale:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate"
+msgstr ""
+
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create Navigation Polygon"
+msgstr ""
+
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Remove Poly And Point"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Error loading image:"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "No pixels with transparency > 128 in image.."
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Set Emission Mask"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Clear Emission Mask"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Load Emission Mask"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generated Point Count:"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry."
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry (faces)."
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Faces contain no area!"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "No faces!"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Generate AABB"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter From Mesh"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter From Node"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Clear Emitter"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Positions:"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Fill:"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Surface"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Volume"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Point from Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Add Point to Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Point in Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move In-Control in Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Out-Control in Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Select Control Points (Shift+Drag)"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Split Segment (in curve)"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Close Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Curve Point #"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Point Pos"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve In Pos"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Out Pos"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Split Path"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Remove Path Point"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create UV Map"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Transform UV Map"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon 2D UV Editor"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Point"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Ctrl: Rotate"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift: Move All"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift+Ctrl: Scale"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Polygon"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Rotate Polygon"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Scale Polygon"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon->UV"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "UV->Polygon"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Clear UV"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Snap"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Enable Snap"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid"
+msgstr ""
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "ERROR: Couldn't load resource!"
+msgstr ""
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Add Resource"
+msgstr ""
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Rename Resource"
+msgstr ""
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Delete Resource"
+msgstr ""
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Resource clipboard is empty!"
+msgstr ""
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Load Resource"
+msgstr ""
+
+#: tools/editor/plugins/rich_text_editor_plugin.cpp
+msgid "Parse BBCode"
+msgstr ""
+
+#: tools/editor/plugins/sample_editor_plugin.cpp
+msgid "Length:"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Open Sample File(s)"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "ERROR: Couldn't load sample!"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Add Sample"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Stop"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Play"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Rename Sample"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Delete Sample"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "16 Bits"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "8 Bits"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Stereo"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Mono"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Format"
+msgstr "Format"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Pitch"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error while saving theme"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error saving"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error importing theme"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error importing"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Import Theme"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As.."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/project_export.cpp
+msgid "File"
+msgstr "Datei"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_editor.cpp
+msgid "New"
+msgstr "Neu"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save All"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "History Prev"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "History Next"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Reload Theme"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Indent Left"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Indent Right"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Toggle Comment"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Clone Down"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Complete Symbol"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Trim Trailing Whitespace"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Auto Indent"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find.."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find Next"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find Previous"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Replace.."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Goto Function.."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Goto Line.."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Debug"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Toggle Breakpoint"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Remove All Breakpoints"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Goto Next Breakpoint"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Goto Previous Breakpoint"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Step Over"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Step Into"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Break"
+msgstr "Unterbrechung"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Continue"
+msgstr "Fortfahren"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Keep Debugger Open"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Window"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Left"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Right"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Help"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Contextual"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Tutorials"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Open https://godotengine.org at tutorials section."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Classes"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search the class hierarchy."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search Help"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search the reference documentation."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Go to previous edited document."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Go to next edited document."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Create Script"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid ""
+"The following files are newer on disk.\n"
+"What action should be taken?:"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Reload"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Resave"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Debugger"
+msgstr "Debugger"
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Vertex"
+msgstr ""
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Fragment"
+msgstr ""
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Lighting"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Constant"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Constant"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Constant"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Operator"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Operator"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Scalar Operator"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Operator"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Toggle Rot Only"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Function"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Function"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Default Value"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change XForm Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Texture Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Cubemap Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Comment"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Color Ramp"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Curve Map"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Curve Map"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Input Name"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Connect Graph Nodes"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Disconnect Graph Nodes"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Remove Shader Graph Node"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Move Shader Graph Node"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Duplicate Graph Node(s)"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Delete Shader Graph Node(s)"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Cyclic Connection Link"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Missing Input Connections"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add Shader Graph Node"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Aborted."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Plane Transform."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "X-Axis Transform."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Y-Axis Transform."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Z-Axis Transform."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling to %s%%."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotating %s degrees."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Keying is disabled (no key inserted)."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Animation Key Inserted."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Align with view"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top (Num7)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom (Shift+Num7)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left (Num3)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right (Shift+Num3)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front (Num1)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear (Shift+Num1)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective (Num5)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal (Num5)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Environment"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Audio Listener"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Gizmos"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Selection (F)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Align with view (Ctrl+Shift+F)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "XForm Dialog"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "No scene selected to instance!"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Instance at Cursor"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Could not instance scene!"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Mode (R)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Transform"
+msgstr "Übergänge"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Local Coords"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Dialog.."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Default Light"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Default sRGB"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "1 Viewport"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports (Alt)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports (Alt)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "4 Viewports"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Normal"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Wireframe"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Overdraw"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Shadeless"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Origin"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Grid"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap Settings"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate Snap:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Snap (deg.):"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Snap (%):"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Viewport Settings"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Default Light Normal:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Ambient Light Color:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective FOV (deg.):"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Near:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Far:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Change"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate (deg.):"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale (ratio):"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Type"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Pre"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Post"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "ERROR: Couldn't load frame resource!"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Frame"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Resource clipboard is empty or not a texture!"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Paste Frame"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Empty"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation Loop"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation FPS"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "(empty)"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animations"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Speed (FPS):"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animation Frames"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (Before)"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (After)"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Up"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Down"
+msgstr ""
+
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Set region_rect"
+msgstr ""
+
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Sprite Region Editor"
+msgstr ""
+
+#: tools/editor/plugins/style_box_editor_plugin.cpp
+msgid "StyleBox Preview:"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Can't save theme to file:"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add All Items"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add All"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove Item"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add Class Items"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Remove Class Items"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Create Template"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio1"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio2"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Item"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Check Item"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Checked Item"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Has"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Many"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp tools/editor/project_export.cpp
+msgid "Options"
+msgstr "Optionen"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Have,Many,Several,Options!"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 1"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 2"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 3"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/scene_tree_editor.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Type:"
+msgstr "Typ:"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Data Type:"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Icon"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Style"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Color"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint TileMap"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Duplicate"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase TileMap"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Bucket"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Pick Tile"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Select"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase Selection"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Transpose"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror X (A)"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror Y (S)"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 0 degrees"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 90 degrees"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 180 degrees"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 270 degrees"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Could not find tile:"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Item name or ID:"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from scene?"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from scene?"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from Scene"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from Scene"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Error"
+msgstr "Fehler"
+
+#: tools/editor/project_export.cpp
+msgid "Edit Script Options"
+msgstr "Skriptoptionen bearbeiten"
+
+#: tools/editor/project_export.cpp
+msgid "Please export outside the project folder!"
+msgstr "Bitte außerhalb des Projektordners exportieren!"
+
+#: tools/editor/project_export.cpp
+msgid "Error exporting project!"
+msgstr "Fehler beim Exportieren des Projekts!"
+
+#: tools/editor/project_export.cpp
+msgid "Error writing the project PCK!"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "No exporter for platform '%s' yet."
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Include"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Change Image Group"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Group name can't be empty!"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Invalid character in group name!"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Group name already exists!"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Add Image Group"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Delete Image Group"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Atlas Preview"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Project Export Settings"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Target"
+msgstr "Ziel"
+
+#: tools/editor/project_export.cpp
+msgid "Export to Platform"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Resources"
+msgstr "Ressourcen"
+
+#: tools/editor/project_export.cpp
+msgid "Export selected resources (including dependencies)."
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export all resources in the project."
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export all files in the project directory."
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export Mode:"
+msgstr "Export-Modus:"
+
+#: tools/editor/project_export.cpp
+msgid "Resources to Export:"
+msgstr "Zu exportierende Ressourcen:"
+
+#: tools/editor/project_export.cpp
+msgid "Action"
+msgstr "Aktion"
+
+#: tools/editor/project_export.cpp
+msgid ""
+"Filters to export non-resource files (comma-separated, e.g.: *.json, *.txt):"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Filters to exclude from export (comma-separated, e.g.: *.json, *.txt):"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Convert text scenes to binary on export."
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Images"
+msgstr "Bilder"
+
+#: tools/editor/project_export.cpp
+msgid "Keep Original"
+msgstr "Original behalten"
+
+#: tools/editor/project_export.cpp
+msgid "Compress for Disk (Lossy, WebP)"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress for RAM (BC/PVRTC/ETC)"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Convert Images (*.png):"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress for Disk (Lossy) Quality:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Shrink All Images:"
+msgstr "Alle Bilder verkleinern:"
+
+#: tools/editor/project_export.cpp
+msgid "Compress Formats:"
+msgstr "Komprimierungsformate:"
+
+#: tools/editor/project_export.cpp
+msgid "Image Groups"
+msgstr "Bildergruppen"
+
+#: tools/editor/project_export.cpp
+msgid "Groups:"
+msgstr "Gruppen:"
+
+#: tools/editor/project_export.cpp
+msgid "Compress Disk"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress RAM"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress Mode:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Lossy Quality:"
+msgstr "Verlustbehaftete-Qualität:"
+
+#: tools/editor/project_export.cpp
+msgid "Atlas:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Shrink By:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Preview Atlas"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Image Filter:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Images:"
+msgstr "Bilder:"
+
+#: tools/editor/project_export.cpp
+msgid "Select None"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Samples"
+msgstr "Beispiele"
+
+#: tools/editor/project_export.cpp
+msgid "Sample Conversion Mode: (.wav files):"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Keep"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress (RAM - IMA-ADPCM)"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Sampling Rate Limit (Hz):"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Trim"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Trailing Silence:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Script"
+msgstr "Skript"
+
+#: tools/editor/project_export.cpp
+msgid "Script Export Mode:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Text"
+msgstr "Text"
+
+#: tools/editor/project_export.cpp
+msgid "Compiled"
+msgstr "Kompiliert"
+
+#: tools/editor/project_export.cpp
+msgid "Encrypted (Provide Key Below)"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Script Encryption Key (256-bits as hex):"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export PCK/Zip"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export Project PCK"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export.."
+msgstr "Exportieren.."
+
+#: tools/editor/project_export.cpp
+msgid "Project Export"
+msgstr "Projekt exportieren"
+
+#: tools/editor/project_export.cpp
+msgid "Export Preset:"
+msgstr "Exportvorlage"
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, the path must exist!"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, engine.cfg must not exist."
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, engine.cfg must exist."
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Imported Project"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path (changed anything?)."
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Couldn't create engine.cfg in project path."
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Import Existing Project"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Project Path (Must Exist):"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Project Name:"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Create New Project"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Project Path:"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Browse"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "New Game Project"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "That's a BINGO!"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Unnamed Project"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Are you sure to open more than one projects?"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Are you sure to run more than one projects?"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Remove project from the list? (Folder contents will not be modified)"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Recent Projects:"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Run"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Scan"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "New Project"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Exit"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Key "
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+#, fuzzy
+msgid "Joy Button"
+msgstr "Schaltfläche"
+
+#: tools/editor/project_settings.cpp
+msgid "Joy Axis"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+#, fuzzy
+msgid "Mouse Button"
+msgstr "Mittlere Taste"
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid action (anything goes but '/' or ':')."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Action '%s' already exists!"
+msgstr "Aktion '%s' existiert bereits!"
+
+#: tools/editor/project_settings.cpp
+msgid "Rename Input Action Event"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Add Input Action Event"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Meta+"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Shift+"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Alt+"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Control+"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Press a Key.."
+msgstr "Drücke eine Taste"
+
+#: tools/editor/project_settings.cpp
+msgid "Mouse Button Index:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Left Button"
+msgstr "Linke Taste"
+
+#: tools/editor/project_settings.cpp
+msgid "Right Button"
+msgstr "Rechte Taste"
+
+#: tools/editor/project_settings.cpp
+msgid "Middle Button"
+msgstr "Mittlere Taste"
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Up Button"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Down Button"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Button 6"
+msgstr "Taste 6"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 7"
+msgstr "Taste 7"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 8"
+msgstr "Taste 8"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 9"
+msgstr "Taste 9"
+
+#: tools/editor/project_settings.cpp
+msgid "Joystick Axis Index:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Axis"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Joystick Button Index:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Add Input Action"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Erase Input Action Event"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Device"
+msgstr "Gerät"
+
+#: tools/editor/project_settings.cpp
+msgid "Button"
+msgstr "Schaltfläche"
+
+#: tools/editor/project_settings.cpp
+msgid "Left Button."
+msgstr "Linke Taste."
+
+#: tools/editor/project_settings.cpp
+msgid "Right Button."
+msgstr "Rechte Taste."
+
+#: tools/editor/project_settings.cpp
+msgid "Middle Button."
+msgstr "Mittlere Taste."
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Up."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Down."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Toggle Persisting"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Error saving settings."
+msgstr "Fehler beim Speichern der Einstellungen."
+
+#: tools/editor/project_settings.cpp
+msgid "Settings saved OK."
+msgstr "Einstellungen gespeichert OK."
+
+#: tools/editor/project_settings.cpp
+msgid "Add Translation"
+msgstr "Übersetzung hinzufügen"
+
+#: tools/editor/project_settings.cpp
+msgid "Toggle AutoLoad Globals"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name."
+msgstr "Ungültiger Name."
+
+#: tools/editor/project_settings.cpp
+msgid "Valid characters:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing engine class name."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing buit-in type name."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing global constant name."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Add Autoload"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Autoload"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Move Autoload"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Translation"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Add Remapped Path"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Resource Remap Add Remap"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Change Resource Remap Language"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Resource Remap"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Resource Remap Option"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Enable"
+msgstr "Aktivieren"
+
+#: tools/editor/project_settings.cpp
+msgid "Project Settings (engine.cfg)"
+msgstr "Projekteinstellungen (engine.cfg)"
+
+#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp
+msgid "General"
+msgstr "Allgemein"
+
+#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp
+msgid "Property:"
+msgstr "Eigenschaft:"
+
+#: tools/editor/project_settings.cpp
+msgid "Del"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Copy To Platform.."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Input Map"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Action:"
+msgstr "Aktion:"
+
+#: tools/editor/project_settings.cpp
+msgid "Device:"
+msgstr "Gerät:"
+
+#: tools/editor/project_settings.cpp
+msgid "Index:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Localization"
+msgstr "Lokalisierung"
+
+#: tools/editor/project_settings.cpp
+msgid "Translations"
+msgstr "Übersetzungen"
+
+#: tools/editor/project_settings.cpp
+msgid "Translations:"
+msgstr "Übersetzungen:"
+
+#: tools/editor/project_settings.cpp
+msgid "Add.."
+msgstr "Hinzufügen.."
+
+#: tools/editor/project_settings.cpp
+msgid "Remaps"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Resources:"
+msgstr "Ressourcen:"
+
+#: tools/editor/project_settings.cpp
+msgid "Remaps by Locale:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Locale"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "AutoLoad"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Node Name:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "List:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Singleton"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Preset.."
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Ease In"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Ease Out"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Zero"
+msgstr "Null"
+
+#: tools/editor/property_editor.cpp
+msgid "Easing In-Out"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Easing Out-In"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "File.."
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Dir.."
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Load"
+msgstr "Lade"
+
+#: tools/editor/property_editor.cpp
+msgid "Assign"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Error loading file: Not a resource!"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Couldn't load image"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Bit %d, val %d."
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "On"
+msgstr "An"
+
+#: tools/editor/property_editor.cpp
+msgid "Set"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Properties:"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Global"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Sections:"
+msgstr ""
+
+#: tools/editor/pvrtc_compress.cpp
+msgid "Could not execute PVRTC tool:"
+msgstr ""
+
+#: tools/editor/pvrtc_compress.cpp
+msgid "Can't load back converted image using PVRTC tool:"
+msgstr ""
+
+#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp
+msgid "Reparent Node"
+msgstr ""
+
+#: tools/editor/reparent_dialog.cpp
+msgid "Reparent Location (Select new Parent):"
+msgstr ""
+
+#: tools/editor/reparent_dialog.cpp
+msgid "Keep Global Transform"
+msgstr ""
+
+#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp
+msgid "Reparent"
+msgstr ""
+
+#: tools/editor/resources_dock.cpp
+msgid "Create New Resource"
+msgstr ""
+
+#: tools/editor/resources_dock.cpp
+msgid "Open Resource"
+msgstr "Ressource öffnen"
+
+#: tools/editor/resources_dock.cpp
+msgid "Save Resource"
+msgstr "Ressource speichern"
+
+#: tools/editor/resources_dock.cpp
+msgid "Resource Tools"
+msgstr ""
+
+#: tools/editor/resources_dock.cpp
+msgid "Make Local"
+msgstr ""
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Run Mode:"
+msgstr ""
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Current Scene"
+msgstr ""
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Main Scene"
+msgstr "Hauptszene"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Main Scene Arguments:"
+msgstr "Hauptszenen Parameter:"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Scene Run Settings"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "OK :("
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "No parent to instance a child at."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error loading scene from %s"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error instancing scene from %s"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Ok"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Cannot instance the scene '%s' because the current scene exists within one of "
+"its nodes."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Instance Scene(s)"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done on the tree root."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Node In Parent"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Nodes In Parent"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Duplicate Node(s)"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete Node(s)?"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done without a scene."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation requires a single selected node."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done on instanced scenes."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Save New Scene As.."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Makes Sense!"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes from a foreign scene!"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes the current scene inherits from!"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Remove Node(s)"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Create Node"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Couldn't save new scene. Likely dependencies (instances) couldn't be "
+"satisfied."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error saving scene."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error duplicating scene to save it."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "New Scene Root"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Inherit Scene"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add Child Node"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Instance Child Scene"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Change Type"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Edit Groups"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Edit Connections"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add Script"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Merge From Scene"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Save Branch as Scene"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete Node(s)"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add/Create a New Node"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Instance a scene file as a Node. Creates an inherited scene if no root node "
+"exists."
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid ""
+"This item cannot be made visible because the parent is hidden. Unhide the "
+"parent first."
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Toggle Spatial Visible"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Toggle CanvasItem Visible"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Instance:"
+msgstr "Instanz:"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Invalid node name, the following characters are not allowed:"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Rename Node"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Scene Tree (Nodes):"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Editable Children"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Load As Placeholder"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Open in Editor"
+msgstr "Im Editor öffnen"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear Inheritance"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear Inheritance? (No Undo!)"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear!"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Select a Node"
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Same source and destination files, doing nothing."
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Same source and destination paths, doing nothing."
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Can't move directories to within themselves."
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Can't operate on '..'"
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Pick New Name and Location For:"
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "No files selected!"
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Instance"
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Edit Dependencies.."
+msgstr "Bearbeiten Abhängigkeiten.."
+
+#: tools/editor/scenes_dock.cpp
+msgid "View Owners.."
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Rename or Move.."
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Move To.."
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Info"
+msgstr "Info"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Show In File Manager"
+msgstr "Zeige im Dateimanager"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Previous Directory"
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Next Directory"
+msgstr "Nächstes Verzeichnis"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Re-Scan Filesystem"
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Toggle folder status as Favorite"
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Instance the selected scene(s) as child of the selected node."
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Move"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid parent class name"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid chars:"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid class name"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid name"
+msgstr "Gültiger Name"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "N/A"
+msgstr "Nicht verfügbar"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Class name is invalid!"
+msgstr "Name der Klasse ist ungültig!"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Parent class name is invalid!"
+msgstr "Name der Elternklasse ist ungültig!"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid path!"
+msgstr "Ungültiger Pfad!"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Could not create script in filesystem."
+msgstr "Skript konnte nicht im Dateisystem erstellt werden!"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Path is empty"
+msgstr "Pfad ist leer"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Path is not local"
+msgstr "Pfad ist nicht lokal"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid base path"
+msgstr "Ungültiger Pfad!"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "File exists"
+msgstr "Datei existiert"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid extension"
+msgstr "Ungültige Erweiterung"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid path"
+msgstr "Gültiger Pfad"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Class Name:"
+msgstr "Klassenname:"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Built-In Script"
+msgstr "Built-In-Skript"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Create Node Script"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Bytes:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Warning"
+msgstr "Warnung"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Error:"
+msgstr "Fehler:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Source:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Function:"
+msgstr "Funktion:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Errors"
+msgstr "Fehler"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Child Process Connected"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Inspect Previous Instance"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Inspect Next Instance"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Stack Frames"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Variable"
+msgstr "Variable"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Errors:"
+msgstr "Fehler:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Stack Trace (if applicable):"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Remote Inspector"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Live Scene Tree:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Remote Object Properties: "
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Profiler"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Monitor"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Value"
+msgstr "Wert"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Monitors"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "List of Video Memory Usage by Resource:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Total:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Video Mem"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Resource Path"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Type"
+msgstr "Art"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Usage"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Misc"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Clicked Control:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Clicked Control Type:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Live Edit Root:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Set From Tree"
+msgstr ""
+
+#: tools/editor/settings_config_dialog.cpp
+msgid "Plugin List:"
+msgstr "Plugin Liste:"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Light Radius"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Camera FOV"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Camera Size"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Sphere Shape Radius"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Box Shape Extents"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Radius"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Height"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Ray Shape Length"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Notifier Extents"
+msgstr ""
diff --git a/tools/translations/extract.py b/tools/translations/extract.py
index 0eaee58c64..a441bcc480 100755
--- a/tools/translations/extract.py
+++ b/tools/translations/extract.py
@@ -2,73 +2,118 @@
import fnmatch
import os
-import re
import shutil
import subprocess
+import sys
+
+
+line_nb = False
+
+for arg in sys.argv[1:]:
+ if (arg == "--with-line-nb"):
+ print("Enabling line numbers in the context locations.")
+ line_nb = True
+ else:
+ os.sys.exit("Non supported argument '" + arg + "'. Aborting.")
+
if (not os.path.exists("tools")):
os.sys.exit("ERROR: This script should be started from the root of the git repo.")
+
matches = []
for root, dirnames, filenames in os.walk('.'):
for filename in fnmatch.filter(filenames, '*.cpp'):
- if (filename.find("collada")!=-1):
+ if (filename.find("collada") != -1):
continue
matches.append(os.path.join(root, filename))
for filename in fnmatch.filter(filenames, '*.h'):
- if (filename.find("collada")!=-1):
+ if (filename.find("collada") != -1):
continue
matches.append(os.path.join(root, filename))
-
-
-unique_str=[]
-main_po=""
+matches.sort()
+
+
+unique_str = []
+unique_loc = {}
+main_po = """
+# LANGUAGE translation of the Godot Engine editor
+# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community
+# This file is distributed under the same license as the Godot source code.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Godot Engine editor\\n"
+"Content-Type: text/plain; charset=UTF-8\\n"
+"Content-Transfer-Encoding: 8-bit\\n"
+"""
print("Updating the tools.pot template...")
for fname in matches:
- f = open(fname,"rb")
-
- new_f = ""
+ f = open(fname, "rb")
l = f.readline()
- lc=1
- while(l):
+ lc = 1
+ while (l):
+ patterns = ['RTR(\"', 'TTR(\"']
+ idx = 0
pos = 0
- while(pos>=0):
- pos = l.find('TTR(\"',pos)
- if (pos==-1):
- break
- pos+=5
-
- msg=""
- while (pos < len(l) and (l[pos]!='"' or l[pos-1]=='\\') ):
- msg+=l[pos]
- pos+=1
+ while (pos >= 0):
+ pos = l.find(patterns[idx], pos)
+ if (pos == -1):
+ if (idx < len(patterns) - 1):
+ idx += 1
+ pos = 0
+ continue
+ pos += 5
+
+ msg = ""
+ while (pos < len(l) and (l[pos] != '"' or l[pos - 1] == '\\')):
+ msg += l[pos]
+ pos += 1
+
+ location = os.path.relpath(fname).replace('\\','/')
+ if (line_nb):
+ location += ":" + str(lc)
if (not msg in unique_str):
- main_po+="\n#: "+os.path.relpath(fname).replace('\\','/')+":"+str(lc)+"\n"
- main_po+='msgid "'+msg+'"\n'
- main_po+='msgstr ""\n'
+ main_po += "\n#: " + location + "\n"
+ main_po += 'msgid "' + msg + '"\n'
+ main_po += 'msgstr ""\n'
unique_str.append(msg)
+ unique_loc[msg] = [location]
+ elif (not location in unique_loc[msg]):
+ # Add additional location to previous occurence too
+ msg_pos = main_po.find('\nmsgid "' + msg + '"')
+ if (msg_pos == -1):
+ print("Someone apparently thought writing Python was as easy as GDScript. Ping Akien.")
+ main_po = main_po[:msg_pos] + ' ' + location + main_po[msg_pos:]
+ unique_loc[msg].append(location)
l = f.readline()
- lc+=1
+ lc += 1
f.close()
-f = open("tools.pot","wb")
+f = open("tools.pot", "wb")
f.write(main_po)
f.close()
+if (os.name == "posix"):
+ os.system("msgmerge -w80 tools.pot tools.pot > tools.pot.wrap")
+ shutil.move("tools.pot.wrap", "tools.pot")
+
shutil.move("tools.pot", "tools/translations/tools.pot")
# TODO: Make that in a portable way, if we care; if not, kudos to Unix users
if (os.name == "posix"):
- added = subprocess.check_output("git diff tools/translations/tools.pot | grep \+msgid | wc -l", shell=True)
- removed = subprocess.check_output("git diff tools/translations/tools.pot | grep \\\-msgid | wc -l", shell=True)
- print("Template changes compared to the staged status:")
- print(" Additions: %s msgids.\n Deletions: %s msgids." % (int(added), int(removed)))
+ added = subprocess.check_output("git diff tools/translations/tools.pot | grep \+msgid | wc -l", shell = True)
+ removed = subprocess.check_output("git diff tools/translations/tools.pot | grep \\\-msgid | wc -l", shell = True)
+ print("\n# Template changes compared to the staged status:")
+ print("# Additions: %s msgids.\n# Deletions: %s msgids." % (int(added), int(removed)))
diff --git a/tools/translations/fr.po b/tools/translations/fr.po
new file mode 100644
index 0000000000..c6ba2b5d58
--- /dev/null
+++ b/tools/translations/fr.po
@@ -0,0 +1,6011 @@
+# French translation of the Godot Engine editor
+# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community
+# This file is distributed under the same license as the Godot source code.
+# Hugo Locurcio <hugo.l@openmailbox.org>, 2016.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Godot Engine editor\n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: \n"
+"Last-Translator: derderder <derderder77380@gmail.com>\n"
+"Language-Team: French\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.6.10\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: scene/2d/animated_sprite.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the 'Frames' property in "
+"order for AnimatedSprite to display frames."
+msgstr ""
+
+#: scene/2d/canvas_modulate.cpp
+msgid ""
+"Only one visible CanvasModulate is allowed per scene (or set of instanced "
+"scenes). The first created one will work, while the rest will be ignored."
+msgstr ""
+"Seul un nœud de type CanvasModulate est autorisé par scène (ou ensemble de "
+"scènes instanciées). Le premier créé fonctionnera, les autres seront ignorés."
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid ""
+"CollisionPolygon2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+"Un CollisionPolygon2D n'est utile que lorsqu'il est enfant d'un nœud dérivé "
+"de CollisionObject2D, comme Area2D, StaticBody2D, RigidBody2D, "
+"KinematicBody2D, etc."
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid "An empty CollisionPolygon2D has no effect on collision."
+msgstr "Un CollisionPolygon2D vide n'a pas d'effet sur les collisions."
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"CollisionShape2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+"Un CollisionShape2D n'est utile que lorsqu'il est enfant d'un nœud dérivé de "
+"CollisionObject2D, comme Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, "
+"etc."
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"A shape must be provided for CollisionShape2D to function. Please create a "
+"shape resource for it!"
+msgstr ""
+"Une forme doit être créée afin qu'une CollisionShape2D fonctionne. Veuillez "
+"créer une ressource de forme !"
+
+#: scene/2d/light_2d.cpp
+msgid ""
+"A texture with the shape of the light must be supplied to the 'texture' "
+"property."
+msgstr ""
+"Une texture avec la forme de la lumière doit être fournie dans la propriété « "
+"texture »."
+
+#: scene/2d/light_occluder_2d.cpp
+msgid ""
+"An occluder polygon must be set (or drawn) for this occluder to take effect."
+msgstr ""
+"Un polygone d'occultation doit être défini (ou dessiné) afin que cet "
+"occulteur ait un effet."
+
+#: scene/2d/light_occluder_2d.cpp
+msgid "The occluder polygon for this occluder is empty. Please draw a polygon!"
+msgstr ""
+"Le polygone d'occultation pour cet occulteur est vide. Veuillez dessiner un "
+"polygone !"
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"A NavigationPolygon resource must be set or created for this node to work. "
+"Please set a property or draw a polygon."
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
+"node. It only provides navigation data."
+msgstr ""
+
+#: scene/2d/parallax_layer.cpp
+msgid ""
+"ParallaxLayer node only works when set as child of a ParallaxBackground node."
+msgstr ""
+"Le nœud ParallaxLayer ne fonctionne que lorsqu'il s'agit d'un enfant d'un "
+"nœud de type ParallaxBackground."
+
+#: scene/2d/particles_2d.cpp
+msgid "Path property must point to a valid Particles2D node to work."
+msgstr ""
+"La propriété Path doit pointer à un nœud de type Particles2D valide pour "
+"fonctionner."
+
+#: scene/2d/path_2d.cpp
+msgid "PathFollow2D only works when set as a child of a Path2D node."
+msgstr ""
+
+#: scene/2d/remote_transform_2d.cpp
+msgid "Path property must point to a valid Node2D node to work."
+msgstr ""
+"La propriété Path doit pointer vers un nœud de type Node2D valide pour "
+"fonctionner."
+
+#: scene/2d/sample_player_2d.cpp scene/audio/sample_player.cpp
+msgid ""
+"A SampleLibrary resource must be created or set in the 'samples' property in "
+"order for SamplePlayer to play sound."
+msgstr ""
+
+#: scene/2d/sprite.cpp
+msgid ""
+"Path property must point to a valid Viewport node to work. Such Viewport must "
+"be set to 'render target' mode."
+msgstr ""
+"La propriété Path doit pointer vers un nœud de type Viewport valide pour "
+"fonctionner. Ce Viewport doit utiliser le mode « render target »."
+
+#: scene/2d/sprite.cpp
+msgid ""
+"The Viewport set in the path property must be set as 'render target' in order "
+"for this sprite to work."
+msgstr ""
+"Le Viewport défini dans la propriété Path doit utiliser le mode « render "
+"target » pour que cette sprite fonctionne."
+
+#: scene/2d/visibility_notifier_2d.cpp
+msgid ""
+"VisibilityEnable2D works best when used with the edited scene root directly "
+"as parent."
+msgstr ""
+
+#: scene/3d/body_shape.cpp
+msgid ""
+"CollisionShape only serves to provide a collision shape to a CollisionObject "
+"derived node. Please only use it as a child of Area, StaticBody, RigidBody, "
+"KinematicBody, etc. to give them a shape."
+msgstr ""
+"Un CollisionShape n'est utile que lorsqu'il est enfant d'un nœud dérivé de "
+"CollisionObject, comme Area, StaticBody, RigidBody, KinematicBody, etc."
+
+#: scene/3d/body_shape.cpp
+msgid ""
+"A shape must be provided for CollisionShape to function. Please create a "
+"shape resource for it!"
+msgstr ""
+"Afin qu'une CollisionShape fonctionne, il lui faut une forme. Créez une "
+"ressource de forme pour cette CollisionShape !"
+
+#: scene/3d/collision_polygon.cpp
+msgid ""
+"CollisionPolygon only serves to provide a collision shape to a "
+"CollisionObject derived node. Please only use it as a child of Area, "
+"StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
+msgstr ""
+"Un CollisionPolygon n'est utile que lorsqu'il est enfant d'un nœud dérivé de "
+"CollisionObject, comme Area, StaticBody, RigidBody, KinematicBody, etc."
+
+#: scene/3d/collision_polygon.cpp
+msgid "An empty CollisionPolygon has no effect on collision."
+msgstr "Un CollisionPolygon vide n'a pas d'effet sur les collisions."
+
+#: scene/3d/navigation_mesh.cpp
+msgid "A NavigationMesh resource must be set or created for this node to work."
+msgstr ""
+"Une ressource de type NavigationMesh doit être définie ou créée pour que ce "
+"nœud fonctionne."
+
+#: scene/3d/navigation_mesh.cpp
+msgid ""
+"NavigationMeshInstance must be a child or grandchild to a Navigation node. It "
+"only provides navigation data."
+msgstr ""
+
+#: scene/3d/scenario_fx.cpp
+msgid ""
+"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)."
+msgstr ""
+"Seul un WorldEnvironnement ne peut être utilisé par scène (ou ensemble de "
+"scènes instanciées)."
+
+#: scene/3d/spatial_sample_player.cpp
+msgid ""
+"A SampleLibrary resource must be created or set in the 'samples' property in "
+"order for SpatialSamplePlayer to play sound."
+msgstr ""
+"Une ressource de type SampleLibrary doit être créée ou définie dans la "
+"propriété « samples » afin que le SpatialSamplePlayer joue des sons."
+
+#: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Cancel"
+msgstr "Annuler"
+
+#: scene/gui/dialogs.cpp
+msgid "OK"
+msgstr "OK"
+
+#: scene/gui/dialogs.cpp
+msgid "Alert!"
+msgstr ""
+
+#: scene/gui/dialogs.cpp
+msgid "Please Confirm..."
+msgstr "Veuillez confirmer..."
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Cut"
+msgstr "Couper"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp
+msgid "Copy"
+msgstr "Copier"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp
+msgid "Paste"
+msgstr "Coller"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/project_export.cpp
+msgid "Select All"
+msgstr "Tout sélectionner"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_log.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/rich_text_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/script_editor_debugger.cpp
+msgid "Clear"
+msgstr "Effacer"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Undo"
+msgstr "Annuler"
+
+#: scene/gui/popup.cpp
+msgid ""
+"Popups will hide by default unless you call popup() or any of the popup*() "
+"functions. Making them visible for editing is fine though, but they will hide "
+"upon running."
+msgstr ""
+"Les pop-ups seront cachés par défaut jusqu'à ce que vous appelez une fonction "
+"popup() ou une des fonctions popup*(). Les rendre visibles pour l'édition ne "
+"pose pas de problème, mais elles seront cachées lors de l'exécution."
+
+#: scene/main/viewport.cpp
+msgid ""
+"This viewport is not set as render target. If you intend for it to display "
+"its contents directly to the screen, make it a child of a Control so it can "
+"obtain a size. Otherwise, make it a RenderTarget and assign its internal "
+"texture to some node for display."
+msgstr ""
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Error initializing FreeType."
+msgstr "Erreur d'initialisation de Freetype."
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Unknown font format."
+msgstr "Format de police inconnu."
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Error loading font."
+msgstr "Erreur lors du chargement de la police."
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Invalid font size."
+msgstr "Taille de police invalide."
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/call_dialog.cpp
+#: tools/editor/connections_dialog.cpp tools/editor/groups_editor.cpp
+#: tools/editor/import_settings.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp
+#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp
+msgid "Close"
+msgstr "Fermer"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/create_dialog.cpp
+#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/settings_config_dialog.cpp
+msgid "Search:"
+msgstr "Rechercher :"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/code_editor.cpp
+#: tools/editor/editor_help.cpp tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/project_settings.cpp
+msgid "Search"
+msgstr "Rechercher"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/editor_node.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Import"
+msgstr "Importer"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/project_settings.cpp
+#: tools/editor/settings_config_dialog.cpp
+msgid "Plugins"
+msgstr "Extensions"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Sort:"
+msgstr "Trier :"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Reverse"
+msgstr "Inverser"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/project_settings.cpp
+msgid "Category:"
+msgstr "Catégorie :"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "All"
+msgstr "Tout"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Site:"
+msgstr "Site :"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Assets ZIP File"
+msgstr "Fichier ZIP de données"
+
+#: tools/editor/animation_editor.cpp
+msgid "Disabled"
+msgstr "Désactivé"
+
+#: tools/editor/animation_editor.cpp
+msgid "All Selection"
+msgstr "Toute la sélection"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Add Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Transition"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Transform"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Value"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Call"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Track"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Anim Track Up"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Anim Track Down"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove Anim Track"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Duplicate Keys"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Set Transitions to:"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Rename"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Change Interpolation"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Change Value Mode"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Edit Node Curve"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Edit Selection Curve"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Delete Keys"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Move Keys"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale Selection"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale From Cursor"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Duplicate Selection"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Duplicate Transposed"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Goto Next Step"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Goto Prev Step"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp
+msgid "Linear"
+msgstr "Linéaire"
+
+#: tools/editor/animation_editor.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Constant"
+msgstr "Constante"
+
+#: tools/editor/animation_editor.cpp
+msgid "In"
+msgstr "In"
+
+#: tools/editor/animation_editor.cpp
+msgid "Out"
+msgstr "Out"
+
+#: tools/editor/animation_editor.cpp
+msgid "In-Out"
+msgstr "In-out"
+
+#: tools/editor/animation_editor.cpp
+msgid "Out-In"
+msgstr "Out-in"
+
+#: tools/editor/animation_editor.cpp
+msgid "Transitions"
+msgstr "Transitions"
+
+#: tools/editor/animation_editor.cpp
+msgid "Optimize Animation"
+msgstr "Optimiser l'animation"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up Animation"
+msgstr "Nettoyer l'animation"
+
+#: tools/editor/animation_editor.cpp
+msgid "Create NEW track for %s and insert key?"
+msgstr "Créer une NOUVELLE piste pour %s et insérer une clé ?"
+
+#: tools/editor/animation_editor.cpp
+msgid "Create %d NEW tracks and insert keys?"
+msgstr "Créer %d NOUVELLES pistes et insérer des clés ?"
+
+#: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/particles_editor_plugin.cpp
+#: tools/editor/project_manager.cpp tools/editor/script_create_dialog.cpp
+msgid "Create"
+msgstr "Créer"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Create & Insert"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert Track & Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Change Anim Len"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Change Anim Loop"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Create Typed Value Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Scale Keys"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Call Track"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Animation zoom."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Length (s):"
+msgstr "Longueur (s) :"
+
+#: tools/editor/animation_editor.cpp
+msgid "Animation length (in seconds)."
+msgstr "Longueur de l'animation (en secondes)."
+
+#: tools/editor/animation_editor.cpp
+msgid "Step (s):"
+msgstr "Pas (s) :"
+
+#: tools/editor/animation_editor.cpp
+msgid "Cursor step snap (in seconds)."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Enable/Disable looping in animation."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Add new tracks."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Move current track up."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Move current track down."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove selected track."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Track tools"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Enable editing of individual keys by clicking them."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim. Optimizer"
+msgstr "Optimiseur d'animation"
+
+#: tools/editor/animation_editor.cpp
+msgid "Max. Linear Error:"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Max. Angular Error:"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Max Optimizable Angle:"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Optimize"
+msgstr "Optimiser"
+
+#: tools/editor/animation_editor.cpp
+msgid "Key"
+msgstr "Clé"
+
+#: tools/editor/animation_editor.cpp
+msgid "Transition"
+msgstr "Transition"
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale Ratio:"
+msgstr "Ratio d'échelle :"
+
+#: tools/editor/animation_editor.cpp
+msgid "Call Functions in Which Node?"
+msgstr "Appeler des fonctions dans quel nœud ?"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove invalid keys"
+msgstr "Supprimer les clés invalides"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove unresolved and empty tracks"
+msgstr "Supprimer les pistes vides et non résulues"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-up all animations"
+msgstr "Nettoyer toutes les animations"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up Animation(s) (NO UNDO!)"
+msgstr "Nettoyer les animations (PAS DE RETOUR EN ARRIÈRE !)"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up"
+msgstr "Nettoyer"
+
+#: tools/editor/array_property_edit.cpp
+msgid "Resize Array"
+msgstr "Redimensionner le tableau"
+
+#: tools/editor/array_property_edit.cpp
+msgid "Change Array Value Type"
+msgstr ""
+
+#: tools/editor/array_property_edit.cpp
+msgid "Change Array Value"
+msgstr ""
+
+#: tools/editor/call_dialog.cpp
+msgid "Method List For '%s':"
+msgstr "Liste des méthodes pour « %s » :"
+
+#: tools/editor/call_dialog.cpp
+msgid "Call"
+msgstr "Appel"
+
+#: tools/editor/call_dialog.cpp
+msgid "Method List:"
+msgstr "Liste des méthodes :"
+
+#: tools/editor/call_dialog.cpp
+msgid "Arguments:"
+msgstr "Paramètres :"
+
+#: tools/editor/call_dialog.cpp
+msgid "Return:"
+msgstr "Retourne :"
+
+#: tools/editor/code_editor.cpp
+msgid "Go to Line"
+msgstr "Aller à la ligne"
+
+#: tools/editor/code_editor.cpp
+msgid "Line Number:"
+msgstr "Numéro de ligne :"
+
+#: tools/editor/code_editor.cpp
+#, fuzzy
+msgid "No Matches"
+msgstr "Correspondances :"
+
+#: tools/editor/code_editor.cpp
+#, fuzzy
+msgid "Replaced %d Ocurrence(s)."
+msgstr "%d occurrence(s) remplacée(s)."
+
+#: tools/editor/code_editor.cpp
+msgid "Replace"
+msgstr "Remplacer"
+
+#: tools/editor/code_editor.cpp
+#, fuzzy
+msgid "Replace All"
+msgstr "Remplacer"
+
+#: tools/editor/code_editor.cpp
+#, fuzzy
+msgid "Match Case"
+msgstr "Correspondances :"
+
+#: tools/editor/code_editor.cpp
+msgid "Whole Words"
+msgstr "Mots entiers"
+
+#: tools/editor/code_editor.cpp
+msgid "Selection Only"
+msgstr "Sélection uniquement"
+
+#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp
+msgid "Find"
+msgstr "Trouver"
+
+#: tools/editor/code_editor.cpp
+msgid "Next"
+msgstr "Suivant"
+
+#: tools/editor/code_editor.cpp
+msgid "Replaced %d ocurrence(s)."
+msgstr "%d occurrence(s) remplacée(s)."
+
+#: tools/editor/code_editor.cpp
+msgid "Not found!"
+msgstr "Non trouvé !"
+
+#: tools/editor/code_editor.cpp
+msgid "Replace By"
+msgstr "Remplacer par"
+
+#: tools/editor/code_editor.cpp
+msgid "Case Sensitive"
+msgstr "Sensible à la casse"
+
+#: tools/editor/code_editor.cpp
+msgid "Backwards"
+msgstr "À l'envers"
+
+#: tools/editor/code_editor.cpp
+msgid "Prompt On Replace"
+msgstr "Avertir lors du remplacement"
+
+#: tools/editor/code_editor.cpp
+msgid "Skip"
+msgstr "Passer"
+
+#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp
+msgid "Line:"
+msgstr "Ligne :"
+
+#: tools/editor/code_editor.cpp
+msgid "Col:"
+msgstr "Colonne :"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Method in target Node must be specified!"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect To Node:"
+msgstr "Connecter au nœud :"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Binds (Extra Params):"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp tools/editor/groups_editor.cpp
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/project_settings.cpp
+msgid "Add"
+msgstr "Ajouter"
+
+#: tools/editor/connections_dialog.cpp tools/editor/dependency_editor.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Remove"
+msgstr "Supprimer"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Path To Node:"
+msgstr "Chemin vers le nœud :"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Method In Node:"
+msgstr "Méthode dans le nœud :"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Make Function"
+msgstr "Créer une fonction"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Deferred"
+msgstr "Différé"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Oneshot"
+msgstr "One-shot"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect"
+msgstr "Connecter"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect '%s' to '%s'"
+msgstr "Connecter « %s » à « %s »"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Create Subscription"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect.."
+msgstr "Connecter..."
+
+#: tools/editor/connections_dialog.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Disconnect"
+msgstr "Déconnecter..."
+
+#: tools/editor/connections_dialog.cpp
+msgid "Edit Connections.."
+msgstr "Modifier les connexions..."
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connections:"
+msgstr "Connexions :"
+
+#: tools/editor/create_dialog.cpp
+msgid "Create New"
+msgstr "Créer un nouveau"
+
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+msgid "Matches:"
+msgstr "Correspondances :"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Search Replacement For:"
+msgstr "Rechercher un remplacement pour :"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies For:"
+msgstr "Dépendances pour :"
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"Scene '%s' is currently being edited.\n"
+"Changes will not take effect unless reloaded."
+msgstr ""
+"La scène « %s » est actuellement en cours de modification.\n"
+"Les changements n'auront pas d'effet avant un rechargement."
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"Resource '%s' is in use.\n"
+"Changes will take effect when reloaded."
+msgstr ""
+"Le ressource « %s » est utilisée.\n"
+"Les changements n'auront pas d'effet avant un rechargement."
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies"
+msgstr "Dépendances"
+
+#: tools/editor/dependency_editor.cpp
+#, fuzzy
+msgid "Resource"
+msgstr "Ressources"
+
+#: tools/editor/dependency_editor.cpp tools/editor/project_manager.cpp
+#: tools/editor/project_settings.cpp
+#, fuzzy
+msgid "Path"
+msgstr "Chemin :"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies:"
+msgstr "Dépendances :"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Fix Broken"
+msgstr "Corriger les dép. cassées"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependency Editor"
+msgstr "Éditeur de dépendances"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Search Replacement Resource:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Owners Of:"
+msgstr "Propriétaires de :"
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"The files being removed are required by other resources in order for them to "
+"work.\n"
+"Remove them anyway? (no undo)"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Remove selected files from the project? (no undo)"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Error loading:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Scene failed to load due to missing dependencies:"
+msgstr "La scène n'a pas pu être chargée à cause de dépendences manquantes."
+
+#: tools/editor/dependency_editor.cpp
+msgid "Open Anyway"
+msgstr "Ouvrir quand même"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Which action should be taken?"
+msgstr "Quelle action doit être prise ?"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Fix Dependencies"
+msgstr "Corriger les dépendances"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Errors loading!"
+msgstr "Erreurs de chargement !"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Permanently delete %d item(s)? (No undo!)"
+msgstr ""
+"Supprimer de manière permanente %d objet(s) ? (Impossible de revenir en "
+"arrière !)"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Owns"
+msgstr "Possède"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Resources Without Explicit Ownership:"
+msgstr "Ressources sans propriété explicite :"
+
+#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
+msgid "Orphan Resource Explorer"
+msgstr "Explorateur de ressources orphelines"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Delete selected files?"
+msgstr "Supprimer les fichiers sélectionnés ?"
+
+#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+#: tools/editor/scenes_dock.cpp
+msgid "Delete"
+msgstr "Supprimer"
+
+#: tools/editor/editor_data.cpp
+msgid "Updating Scene"
+msgstr "Mise à jour de la scène"
+
+#: tools/editor/editor_data.cpp
+msgid "Storing local changes.."
+msgstr "Stockage des modifications locales..."
+
+#: tools/editor/editor_data.cpp
+msgid "Updating scene.."
+msgstr "Mise à jour de la scène..."
+
+#: tools/editor/editor_dir_dialog.cpp
+msgid "Choose a Directory"
+msgstr "Choisir un répertoire"
+
+#: tools/editor/editor_dir_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Create Folder"
+msgstr "Créer un dossier"
+
+#: tools/editor/editor_dir_dialog.cpp tools/editor/editor_file_dialog.cpp
+#: tools/editor/editor_plugin_settings.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Name:"
+msgstr "Nom :"
+
+#: tools/editor/editor_dir_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Could not create folder."
+msgstr "Impossible de créer le dossier."
+
+#: tools/editor/editor_dir_dialog.cpp
+msgid "Choose"
+msgstr "Choisir"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "File Exists, Overwrite?"
+msgstr "Le fichier existe, l'écraser ?"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "All Recognized"
+msgstr "Tous les fichiers reconnus"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "All Files (*)"
+msgstr "Tous les fichiers (*)"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/quick_open.cpp tools/editor/scenes_dock.cpp
+msgid "Open"
+msgstr "Ouvrir"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save"
+msgstr "Enregistrer"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Save a File"
+msgstr "Enregistrer un fichier"
+
+#: tools/editor/editor_file_dialog.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/script_create_dialog.cpp
+msgid "Path:"
+msgstr "Chemin :"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/scenes_dock.cpp
+msgid "Favorites:"
+msgstr "Favoris :"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Recent:"
+msgstr "Récents :"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Directories & Files:"
+msgstr "Répertoires et fichiers :"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Preview:"
+msgstr "Aperçu :"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/script_editor_debugger.cpp
+msgid "File:"
+msgstr "Fichier :"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Filter:"
+msgstr "Filtre :"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Must use a valid extension."
+msgstr "Utilisez une extension valide."
+
+#: tools/editor/editor_file_system.cpp
+msgid "Cannot go into subdir:"
+msgstr "Impossible d'aller dans le sous-répertoire :"
+
+#: tools/editor/editor_file_system.cpp
+msgid "ScanSources"
+msgstr "Scanner les sources"
+
+#: tools/editor/editor_help.cpp
+msgid "Search Classes"
+msgstr "Chercher dans les classes"
+
+#: tools/editor/editor_help.cpp
+msgid "Class List:"
+msgstr "Liste des classes :"
+
+#: tools/editor/editor_help.cpp tools/editor/property_editor.cpp
+msgid "Class:"
+msgstr "Classe :"
+
+#: tools/editor/editor_help.cpp tools/editor/scene_tree_editor.cpp
+#: tools/editor/script_create_dialog.cpp
+msgid "Inherits:"
+msgstr "Hérite de :"
+
+#: tools/editor/editor_help.cpp
+msgid "Inherited by:"
+msgstr "Héritée par :"
+
+#: tools/editor/editor_help.cpp
+msgid "Brief Description:"
+msgstr "Brève description :"
+
+#: tools/editor/editor_help.cpp
+msgid "Public Methods:"
+msgstr "Méthodes publiques :"
+
+#: tools/editor/editor_help.cpp
+msgid "Members:"
+msgstr "Membres :"
+
+#: tools/editor/editor_help.cpp
+msgid "GUI Theme Items:"
+msgstr "Items de thème GUI :"
+
+#: tools/editor/editor_help.cpp
+msgid "Signals:"
+msgstr "Signaux :"
+
+#: tools/editor/editor_help.cpp
+msgid "Constants:"
+msgstr "Constantes :"
+
+#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "Description :"
+
+#: tools/editor/editor_help.cpp
+msgid "Method Description:"
+msgstr "Description de la méthode :"
+
+#: tools/editor/editor_help.cpp
+msgid "Search Text"
+msgstr "Chercher du texte"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Added:"
+msgstr "Ajouté :"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Removed:"
+msgstr "Supprimé :"
+
+#: tools/editor/editor_import_export.cpp tools/editor/project_export.cpp
+msgid "Error saving atlas:"
+msgstr "Erreur de sauvegarde de l'atlas :"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Could not save atlas subtexture:"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp
+msgid "Storing File:"
+msgstr "Stockage du fichier :"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Packing"
+msgstr "Empaquetage"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Exporting for %s"
+msgstr "Exportation pour %s"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Setting Up.."
+msgstr "Configuration..."
+
+#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
+msgid "Re-Importing"
+msgstr "Ré-importation"
+
+#: tools/editor/editor_node.cpp
+msgid "Importing:"
+msgstr "Importation :"
+
+#: tools/editor/editor_node.cpp
+msgid "Node From Scene"
+msgstr "Nœud à partir d'une scène"
+
+#: tools/editor/editor_node.cpp tools/editor/scenes_dock.cpp
+msgid "Re-Import.."
+msgstr "Ré-importer..."
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/resources_dock.cpp
+msgid "Error saving resource!"
+msgstr "Erreur d'enregistrement de la ressource !"
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/resources_dock.cpp
+msgid "Save Resource As.."
+msgstr "Enregistrer la ressource sous..."
+
+#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
+msgid "I see.."
+msgstr "Je vois..."
+
+#: tools/editor/editor_node.cpp
+msgid "Can't open file for writing:"
+msgstr "Impossible d'ouvrir le fichier pour écriture :"
+
+#: tools/editor/editor_node.cpp
+msgid "Requested file format unknown:"
+msgstr "Format de fichier demandé inconnu :"
+
+#: tools/editor/editor_node.cpp
+msgid "Error while saving."
+msgstr "Erreur lors de l'enregistrement."
+
+#: tools/editor/editor_node.cpp
+msgid "Saving Scene"
+msgstr "Enregistrement de la scène"
+
+#: tools/editor/editor_node.cpp
+msgid "Analyzing"
+msgstr "Analyse"
+
+#: tools/editor/editor_node.cpp
+msgid "Creating Thumbnail"
+msgstr "Création de l'aperçu"
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied."
+msgstr ""
+"Impossible d'enregistrer la scène. Les dépendances (instances) n'ont sans "
+"doute pas pu être satisfaites."
+
+#: tools/editor/editor_node.cpp
+msgid "Failed to load resource."
+msgstr "Impossible de charger la ressource."
+
+#: tools/editor/editor_node.cpp
+msgid "Can't load MeshLibrary for merging!"
+msgstr "Impossible de charger la MeshLibrary pour fusion !"
+
+#: tools/editor/editor_node.cpp
+msgid "Error saving MeshLibrary!"
+msgstr "Erreur d'enregistrement de la MeshLibrary !"
+
+#: tools/editor/editor_node.cpp
+msgid "Can't load TileSet for merging!"
+msgstr "Impossible de charger la TileSet pour fusion !"
+
+#: tools/editor/editor_node.cpp
+msgid "Error saving TileSet!"
+msgstr "Erreur d'enregistrement de la TileSet !"
+
+#: tools/editor/editor_node.cpp
+msgid "Can't open export templates zip."
+msgstr "Impossible d'ouvrir le ZIP de modèles d'exportation."
+
+#: tools/editor/editor_node.cpp
+msgid "Loading Export Templates"
+msgstr "Chargement des modèles d'exportation"
+
+#: tools/editor/editor_node.cpp
+msgid "Error trying to save layout!"
+msgstr "Erreur d'enregistrement de la disposition !"
+
+#: tools/editor/editor_node.cpp
+msgid "Default editor layout overridden."
+msgstr "Disposition de l'éditeur par défaut remplacée."
+
+#: tools/editor/editor_node.cpp
+msgid "Layout name not found!"
+msgstr "Nom de la disposition non trouvé !"
+
+#: tools/editor/editor_node.cpp
+msgid "Restored default layout to base settings."
+msgstr "Disposition par défaut remise à zéro."
+
+#: tools/editor/editor_node.cpp
+msgid "Copy Params"
+msgstr "Copier paramètres"
+
+#: tools/editor/editor_node.cpp
+msgid "Set Params"
+msgstr "Définir paramètres"
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Paste Resource"
+msgstr "Coller la ressource"
+
+#: tools/editor/editor_node.cpp
+msgid "Copy Resource"
+msgstr "Copier la ressource"
+
+#: tools/editor/editor_node.cpp
+msgid "Make Built-In"
+msgstr "Rendre intégré"
+
+#: tools/editor/editor_node.cpp
+msgid "Make Sub-Resources Unique"
+msgstr "Rendre les sous-ressources uniques"
+
+#: tools/editor/editor_node.cpp
+msgid "There is no defined scene to run."
+msgstr "Il n'y a pas de scène définie pour être lancée."
+
+#: tools/editor/editor_node.cpp
+msgid "Current scene was never saved, please save it prior to running."
+msgstr ""
+"La scène actuelle n'a jamais été sauvegardée, veuillez la sauvegarder avant "
+"de la lancer."
+
+#: tools/editor/editor_node.cpp
+msgid "Could not start subprocess!"
+msgstr "Impossible de démarrer le sous-processus !"
+
+#: tools/editor/editor_node.cpp
+msgid "Open Scene"
+msgstr "Ouvrir une scène"
+
+#: tools/editor/editor_node.cpp
+msgid "Open Base Scene"
+msgstr "Ouvrir scène de base"
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Open Scene.."
+msgstr "Ouvrir une scène rapidement..."
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Open Script.."
+msgstr "Ouvrir un script rapidement..."
+
+#: tools/editor/editor_node.cpp
+msgid "Yes"
+msgstr "Oui"
+
+#: tools/editor/editor_node.cpp
+msgid "Close scene? (Unsaved changes will be lost)"
+msgstr "Fermer la scène ? (les modifications non sauvegardées seront perdues)"
+
+#: tools/editor/editor_node.cpp
+msgid "Save Scene As.."
+msgstr "Enregistrer la scène sous..."
+
+#: tools/editor/editor_node.cpp
+msgid "This scene has never been saved. Save before running?"
+msgstr ""
+"Cette scène n'a jamais été enregistrée. L'enregistrer avant de la lancer ?"
+
+#: tools/editor/editor_node.cpp
+msgid "Please save the scene first."
+msgstr "Veuillez enregistrer la scène d'abord."
+
+#: tools/editor/editor_node.cpp
+msgid "Save Translatable Strings"
+msgstr "Enregistrer les chaînes traduisibles"
+
+#: tools/editor/editor_node.cpp
+msgid "Export Mesh Library"
+msgstr "Exporter une bibliothèque de maillages"
+
+#: tools/editor/editor_node.cpp
+msgid "Export Tile Set"
+msgstr "Exporter un ensemble de tuiles"
+
+#: tools/editor/editor_node.cpp
+msgid "Quit"
+msgstr "Quitter"
+
+#: tools/editor/editor_node.cpp
+msgid "Exit the editor?"
+msgstr "Quitter l'éditeur ?"
+
+#: tools/editor/editor_node.cpp
+msgid "Current scene not saved. Open anyway?"
+msgstr "La scène actuelle n'est pas enregistrée. Ouvrir quand même ?"
+
+#: tools/editor/editor_node.cpp
+msgid "Can't reload a scene that was never saved."
+msgstr "Impossible de recharger une scène qui n'a jamais été sauvegardée."
+
+#: tools/editor/editor_node.cpp
+msgid "Revert"
+msgstr "Réinitialiser"
+
+#: tools/editor/editor_node.cpp
+msgid "This action cannot be undone. Revert anyway?"
+msgstr "Cette action ne peut être annulée. Réinitialiser quand même ?"
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Run Scene.."
+msgstr "Lancer une scène rapidement..."
+
+#: tools/editor/editor_node.cpp
+#, fuzzy
+msgid ""
+"Open Project Manager? \n"
+"(Unsaved changes will be lost)"
+msgstr "Fermer la scène ? (les modifications non sauvegardées seront perdues)"
+
+#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
+msgid "Ugh"
+msgstr "Oups"
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Error loading scene, it must be inside the project path. Use 'Import' to open "
+"the scene, then save it inside the project path."
+msgstr ""
+"Erreur lors du chargement de la scène, elle doit être dans le chemin du "
+"projet. Utilisez « Importer » pour ouvrir la scène, puis enregistrez-la dans "
+"le répertoire du projet."
+
+#: tools/editor/editor_node.cpp
+msgid "Error loading scene."
+msgstr "Erreur lors du chargement de la scène."
+
+#: tools/editor/editor_node.cpp
+msgid "Scene '%s' has broken dependencies:"
+msgstr "La scène « %s » a des dépendences cassées :"
+
+#: tools/editor/editor_node.cpp
+msgid "Save Layout"
+msgstr "Enregistrer la disposition"
+
+#: tools/editor/editor_node.cpp
+msgid "Delete Layout"
+msgstr "Supprimer la disposition"
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Default"
+msgstr "Par défaut"
+
+#: tools/editor/editor_node.cpp
+msgid "Switch Scene Tab"
+msgstr "Basculer entre les onglets de scène"
+
+#: tools/editor/editor_node.cpp
+msgid "%d more file(s)"
+msgstr "%d fichier(s) supplémentaire(s)"
+
+#: tools/editor/editor_node.cpp
+msgid "%d more file(s) or folder(s)"
+msgstr "%s fichier(s) ou dossier(s) supplémentaire(s)"
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Scene"
+msgstr "Scène"
+
+#: tools/editor/editor_node.cpp
+msgid "Go to previously opened scene."
+msgstr "Aller à la scène ouverte précédemment."
+
+#: tools/editor/editor_node.cpp
+msgid "Operations with scene files."
+msgstr "Opérations avec les fichiers de scène."
+
+#: tools/editor/editor_node.cpp
+msgid "New Scene"
+msgstr "Nouvelle scène"
+
+#: tools/editor/editor_node.cpp
+msgid "New Inherited Scene.."
+msgstr "Nouvelle scène héritée..."
+
+#: tools/editor/editor_node.cpp
+msgid "Open Scene.."
+msgstr "Ouvrir une scène..."
+
+#: tools/editor/editor_node.cpp
+msgid "Save Scene"
+msgstr "Enregistrer la scène"
+
+#: tools/editor/editor_node.cpp
+msgid "Close Scene"
+msgstr "Fermer la scène"
+
+#: tools/editor/editor_node.cpp
+msgid "Close Goto Prev. Scene"
+msgstr "Fermer, aller à la scène précédente"
+
+#: tools/editor/editor_node.cpp
+msgid "Open Recent"
+msgstr "Fichiers récents"
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Search File.."
+msgstr "Recherche rapide d'un fichier..."
+
+#: tools/editor/editor_node.cpp
+msgid "Convert To.."
+msgstr "Convertir vers..."
+
+#: tools/editor/editor_node.cpp
+msgid "Translatable Strings.."
+msgstr "Chaînes traduisibles..."
+
+#: tools/editor/editor_node.cpp
+msgid "MeshLibrary.."
+msgstr "MeshLibrary..."
+
+#: tools/editor/editor_node.cpp
+msgid "TileSet.."
+msgstr "TileSet..."
+
+#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Redo"
+msgstr "Refaire"
+
+#: tools/editor/editor_node.cpp
+msgid "Run Script"
+msgstr "Lancer le script"
+
+#: tools/editor/editor_node.cpp
+msgid "Project Settings"
+msgstr "Paramètres du projet"
+
+#: tools/editor/editor_node.cpp
+msgid "Revert Scene"
+msgstr "Réinitialiser la scène"
+
+#: tools/editor/editor_node.cpp
+msgid "Quit to Project List"
+msgstr "Quitter vers la liste des projets"
+
+#: tools/editor/editor_node.cpp
+msgid "Import assets to the project."
+msgstr "Importer des ressources dans le projet."
+
+#: tools/editor/editor_node.cpp
+msgid "Miscellaneous project or scene-wide tools."
+msgstr "Outils divers liés au projet ou à la scène."
+
+#: tools/editor/editor_node.cpp
+msgid "Tools"
+msgstr "Outils"
+
+#: tools/editor/editor_node.cpp
+msgid "Export the project to many platforms."
+msgstr "Exporter le projet vers diverses plate-formes."
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Export"
+msgstr "Exporter"
+
+#: tools/editor/editor_node.cpp
+msgid "Play the project (F5)."
+msgstr "Jouer le projet (F5)."
+
+#: tools/editor/editor_node.cpp
+#, fuzzy
+msgid "Pause the scene"
+msgstr "Jouer une scène personnalisée"
+
+#: tools/editor/editor_node.cpp
+msgid "Stop the scene (F8)."
+msgstr "Arrêter la scène (F8)."
+
+#: tools/editor/editor_node.cpp
+msgid "Play the edited scene (F6)."
+msgstr "Jouer la scène actuellement en cours d'édition (F6)."
+
+#: tools/editor/editor_node.cpp
+msgid "Play custom scene"
+msgstr "Jouer une scène personnalisée"
+
+#: tools/editor/editor_node.cpp
+msgid "Debug options"
+msgstr "Options de débogage"
+
+#: tools/editor/editor_node.cpp
+msgid "Live Editing"
+msgstr "Édition en direct"
+
+#: tools/editor/editor_node.cpp
+msgid "File Server"
+msgstr "Serveur de fichiers"
+
+#: tools/editor/editor_node.cpp
+msgid "Deploy Remote Debug"
+msgstr "Déployer le débogage à distance"
+
+#: tools/editor/editor_node.cpp
+msgid "Deploy File Server Clients"
+msgstr "Déployer des clients de serveur de fichiers"
+
+#: tools/editor/editor_node.cpp
+msgid "Visible Collision Shapes"
+msgstr "Formes de collision visibles"
+
+#: tools/editor/editor_node.cpp
+msgid "Visible Navigation"
+msgstr "Navigation visible"
+
+#: tools/editor/editor_node.cpp tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Settings"
+msgstr "Paramètres"
+
+#: tools/editor/editor_node.cpp tools/editor/settings_config_dialog.cpp
+msgid "Editor Settings"
+msgstr "Paramètres de l'éditeur"
+
+#: tools/editor/editor_node.cpp
+msgid "Editor Layout"
+msgstr "Disposition de l'éditeur"
+
+#: tools/editor/editor_node.cpp
+msgid "Install Export Templates"
+msgstr "Installer les modèles d'exportation"
+
+#: tools/editor/editor_node.cpp
+msgid "About"
+msgstr "À propos"
+
+#: tools/editor/editor_node.cpp
+msgid "Alerts when an external resource has changed."
+msgstr "Alerte lorsqu'une ressource externe a été modifiée."
+
+#: tools/editor/editor_node.cpp
+msgid "Spins when the editor window repaints!"
+msgstr "Tourne lorsque la fenêtre de l'éditeur est repainte !"
+
+#: tools/editor/editor_node.cpp
+msgid "Update Always"
+msgstr "Toujours repeindre"
+
+#: tools/editor/editor_node.cpp
+msgid "Update Changes"
+msgstr "Repeindre quand modifié"
+
+#: tools/editor/editor_node.cpp
+msgid "Inspector"
+msgstr "Inspecteur"
+
+#: tools/editor/editor_node.cpp
+msgid "Create a new resource in memory and edit it."
+msgstr "Créer une nouvelle ressource dans la mémoire et la modifier."
+
+#: tools/editor/editor_node.cpp
+msgid "Load an existing resource from disk and edit it."
+msgstr "Charger une ressource existante depuis la disque et la modifier."
+
+#: tools/editor/editor_node.cpp
+msgid "Save the currently edited resource."
+msgstr "Enregistrer la ressource actuellement modifiée."
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save As.."
+msgstr "Enregistrer sous..."
+
+#: tools/editor/editor_node.cpp
+msgid "Go to the previous edited object in history."
+msgstr "Aller à l'objet modifié précédent dans l'historique."
+
+#: tools/editor/editor_node.cpp
+msgid "Go to the next edited object in history."
+msgstr "Aller à l'objet modifié suivant dans l'historique."
+
+#: tools/editor/editor_node.cpp
+msgid "History of recently edited objects."
+msgstr "Historique des objets récemment édités."
+
+#: tools/editor/editor_node.cpp
+msgid "Object properties."
+msgstr "Propriétés de l'objet."
+
+#: tools/editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "Système de fichiers"
+
+#: tools/editor/editor_node.cpp
+msgid "Output"
+msgstr "Sortie"
+
+#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
+#: tools/editor/import_settings.cpp
+msgid "Re-Import"
+msgstr "Ré-importer"
+
+#: tools/editor/editor_node.cpp tools/editor/editor_plugin_settings.cpp
+msgid "Update"
+msgstr "Mettre à jour"
+
+#: tools/editor/editor_node.cpp
+msgid "Thanks from the Godot community!"
+msgstr "La communauté Godot vous dit merci !"
+
+#: tools/editor/editor_node.cpp
+msgid "Thanks!"
+msgstr "Merci !"
+
+#: tools/editor/editor_node.cpp
+msgid "Import Templates From ZIP File"
+msgstr "Importer des modèles depuis un fichier ZIP"
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Export Project"
+msgstr "Exporter le projet"
+
+#: tools/editor/editor_node.cpp
+msgid "Export Library"
+msgstr "Bibliothèque d'exportation"
+
+#: tools/editor/editor_node.cpp
+msgid "Merge With Existing"
+msgstr "Fusionner avec l'existant"
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Password:"
+msgstr "Mot de passe :"
+
+#: tools/editor/editor_node.cpp
+msgid "Open & Run a Script"
+msgstr "Ouvrir et exécuter un script"
+
+#: tools/editor/editor_node.cpp
+msgid "Load Errors"
+msgstr "Erreurs de chargement"
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Installed Plugins:"
+msgstr "Extensions Installées :"
+
+#: tools/editor/editor_plugin_settings.cpp
+#, fuzzy
+msgid "Version:"
+msgstr "Description :"
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Author:"
+msgstr "Auteur :"
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Status:"
+msgstr "État :"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Stop Profiling"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Start Profiling"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Measure:"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame Time (sec)"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Average Time (sec)"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+#, fuzzy
+msgid "Frame %"
+msgstr "Ajouter une image"
+
+#: tools/editor/editor_profiler.cpp
+#, fuzzy
+msgid "Fixed Frame %"
+msgstr "Ajouter une image"
+
+#: tools/editor/editor_profiler.cpp tools/editor/script_editor_debugger.cpp
+msgid "Time:"
+msgstr "Temps :"
+
+#: tools/editor/editor_profiler.cpp
+#, fuzzy
+msgid "Inclusive"
+msgstr "Inclure"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Self"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame #:"
+msgstr ""
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Please wait for scan to complete."
+msgstr "Veuillez attendre la fin du scan."
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Current scene must be saved to re-import."
+msgstr "La scène actuelle doit être enregistrée afin de pouvoir ré-importer."
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Save & Re-Import"
+msgstr "Enregistrer et ré-importer"
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Re-Import Changed Resources"
+msgstr "Ré-importer les ressources modifiées"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Write your logic in the _run() method."
+msgstr "Écrivez votre code dans la méthode _run()."
+
+#: tools/editor/editor_run_script.cpp
+msgid "There is an edited scene already."
+msgstr "Il y a déjà une scène éditée."
+
+#: tools/editor/editor_run_script.cpp
+msgid "Couldn't instance script:"
+msgstr "Impossible d'instancier le script :"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Did you forget the 'tool' keyword?"
+msgstr "Avez-vous oublié le mot-clé « tool » ?"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Couldn't run script:"
+msgstr "Impossible d'exécuter le script :"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Did you forget the '_run' method?"
+msgstr "Avez-vous oublié la méthode « _run » ?"
+
+#: tools/editor/editor_settings.cpp
+msgid "Default (Same as Editor)"
+msgstr "Par défaut (même que l'éditeur)"
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Select Node(s) to Import"
+msgstr "Sélectionner les nœuds à importer"
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Scene Path:"
+msgstr "Chemin de la scène :"
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Import From Node:"
+msgstr "Importer à partir d'un nœud :"
+
+#: tools/editor/file_type_cache.cpp
+msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
+msgstr ""
+"Impossible d'ouvrir file_type_cache.cch en écriture, le fichier de cache ne "
+"sera pas sauvé !"
+
+#: tools/editor/groups_editor.cpp
+msgid "Add to Group"
+msgstr "Ajouter au groupe"
+
+#: tools/editor/groups_editor.cpp
+msgid "Remove from Group"
+msgstr "Supprimer du groupe"
+
+#: tools/editor/groups_editor.cpp
+msgid "Group Editor"
+msgstr "Éditeur de groupes"
+
+#: tools/editor/groups_editor.cpp tools/editor/project_export.cpp
+msgid "Group"
+msgstr "Groupe"
+
+#: tools/editor/groups_editor.cpp
+msgid "Node Group(s)"
+msgstr "Groupes de nœuds"
+
+#: tools/editor/import_settings.cpp
+msgid "Imported Resources"
+msgstr "Ressources importées"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "No source font file!"
+msgstr "Pas de fichier de police source !"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "No target font resource!"
+msgstr "Pas de ressource de police de destination !"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Can't load/process source font."
+msgstr "Impossible de charger ou traiter la police source."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Couldn't save font."
+msgstr "Impossible d'enregistrer la police."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Source Font:"
+msgstr "Police source :"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Source Font Size:"
+msgstr "Taille de la police source :"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Dest Resource:"
+msgstr "Ressource de destination :"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "The quick brown fox jumps over the lazy dog."
+msgstr "The quick brown fox jumps over the lazy dog."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Test:"
+msgstr "Test :"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Options:"
+msgstr "Options :"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Font Import"
+msgstr "Importation d'une police"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Accept"
+msgstr "Accepter"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid ""
+"This file is already a Godot font file, please supply a BMFont type file "
+"instead."
+msgstr ""
+"Ce fichier est déjà un fichier de police Godot, veuillez fournir un fichier "
+"de type BMFont à la place."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Failed opening as BMFont file."
+msgstr "Impossible d'ouvrir le fichier en tant que fichier BMFont."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Invalid font custom source."
+msgstr "Source personnalisée de police invalide."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Font"
+msgstr "Police"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "No meshes to import!"
+msgstr "Pas de maillages à importer !"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Save path is empty!"
+msgstr "Le chemin de sauvegarde est vide !"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Single Mesh Import"
+msgstr "Importer un maillage"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Source Mesh(es):"
+msgstr "Maillage(s) source :"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Target Path:"
+msgstr "Chemin de destination :"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Mesh"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Surface %d"
+msgstr "Surface %d"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "No samples to import!"
+msgstr "Pas d'échantillons à importer !"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path is empty."
+msgstr "Le chemin de destination est vide."
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path must be a complete resource path."
+msgstr ""
+"Le chemin de destination doit être un chemin complet vers une ressource."
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path must exist."
+msgstr "Le chemin de destination doit exister."
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Import Audio Samples"
+msgstr "Importer des échantillons audio"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Source Sample(s):"
+msgstr "Échantillon(s) source :"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#, fuzzy
+msgid "Audio Sample"
+msgstr "Ajouter un échantillon"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "New Clip"
+msgstr "Nouvelle séquence"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Animation Options"
+msgstr "Options d'animation"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Flags"
+msgstr "Drapeaux"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Bake FPS:"
+msgstr "FPS de calcul :"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Optimizer"
+msgstr "Optimiseur"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Linear Error"
+msgstr "Erreur linéaire maximale"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Angular Error"
+msgstr "Erreur angulaire maximale"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Angle"
+msgstr "Angle maximal"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Clips"
+msgstr "Séquences"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/project_manager.cpp tools/editor/project_settings.cpp
+msgid "Name"
+msgstr "Nom"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Start(s)"
+msgstr "Départ(s)"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "End(s)"
+msgstr "Fin(s)"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Loop"
+msgstr "Boucle"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Filters"
+msgstr "Filtres"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Source path is empty."
+msgstr "Le chemin source est vide."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't load post-import script."
+msgstr "Impossible de charger le script de post-importation."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Invalid/broken script for post-import."
+msgstr "Script invalide ou cassé de post-importation."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Error importing scene."
+msgstr "Erreur d'importation de la scène."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import 3D Scene"
+msgstr "Importer une scène 3D"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Source Scene:"
+msgstr "Scène source :"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Same as Target Scene"
+msgstr "Le même que la scène de destination"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Shared"
+msgstr "Partagé"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Target Texture Folder:"
+msgstr "Dossier de destination des textures :"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Post-Process Script:"
+msgstr "Script de post-traitement :"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Custom Root Node Type:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#, fuzzy
+msgid "Auto"
+msgstr "AutoLoad"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "The Following Files are Missing:"
+msgstr "Les fichiers suivants sont manquants :"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import Anyway"
+msgstr "Importer quand même"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import & Open"
+msgstr "Importer et ouvrir"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Edited scene has not been saved, open imported scene anyway?"
+msgstr ""
+"La scène modifiée actuellement n'a pas été enregistrée, ouvrir la scène "
+"importée quand même ?"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+#, fuzzy
+msgid "Import Scene"
+msgstr "Importer la scène"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Importing Scene.."
+msgstr "Importation de la scène..."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Running Custom Script.."
+msgstr "Lancement du script personnalisé..."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't load post-import script:"
+msgstr "Impossible de charger le script de post-importation :"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Invalid/broken script for post-import:"
+msgstr "Script de post-importation invalide ou cassé :"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Error running post-import script:"
+msgstr "Erreur d'exécution du script de post-importation :"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import Image:"
+msgstr "Importer une image :"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Can't import a file over itself:"
+msgstr "Impossible d'importer un fichier par-dessus lui-même."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't localize path: %s (already local)"
+msgstr "Impossible de rendre le chemin local : %s (déjà local)"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Saving.."
+msgstr "Enregistrement..."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#, fuzzy
+msgid "3D Scene Animation"
+msgstr "Renommer l'animation"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Uncompressed"
+msgstr "Non compressé"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress Lossless (PNG)"
+msgstr "Compression sans perte (PNG)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress Lossy (WebP)"
+msgstr "Compression avec perte (WebP)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress (VRAM)"
+msgstr "Compression GPU (VRAM)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Format"
+msgstr "Format de texture"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Compression Quality (WebP):"
+msgstr "Qualité de compression de la texture (WebP) :"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Options"
+msgstr "Options de texture"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Please specify some files!"
+msgstr "Veuillez spécifier des fichiers !"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "At least one file needed for Atlas."
+msgstr "Il faut au moins un fichier pour créer un atlas."
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Error importing:"
+msgstr "Erreur d'importation :"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Only one file is required for large texture."
+msgstr "Un seul fichier est nécessaire pour créer une grande texture."
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Max Texture Size:"
+msgstr "Taille de texture maximale :"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for Atlas (2D)"
+msgstr "Importer des textures pour un atlas (2D)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Cell Size:"
+msgstr "Taille des cellules :"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Large Texture"
+msgstr "Grande texture"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Large Textures (2D)"
+msgstr "Importer des grandes textures (2D)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#, fuzzy
+msgid "Source Texture"
+msgstr "Texture source :"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Base Atlas Texture"
+msgstr "Texture d'atlas de base"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#, fuzzy
+msgid "Source Texture(s)"
+msgstr "Texture(s) source :"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for 2D"
+msgstr "Importer des textures pour la 2D"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for 3D"
+msgstr "Importer des textures pour la 3D"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures"
+msgstr "Improter des textures"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#, fuzzy
+msgid "2D Texture"
+msgstr "Grande texture"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#, fuzzy
+msgid "3D Texture"
+msgstr "Grande texture"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#, fuzzy
+msgid "Atlas Texture"
+msgstr "Texture d'atlas de base"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid ""
+"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to "
+"the project."
+msgstr ""
+"REMARQUE: Il n'est pas obligatoire d'importer les textures 2D. Copiez "
+"directement les fichiers png/jpeg dans le projet."
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture(s):"
+msgstr "Texture(s) source :"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Crop empty space."
+msgstr "Rogner l'espace vide."
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#, fuzzy
+msgid "Texture"
+msgstr "Grande texture"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Large Texture"
+msgstr "Importer une grande texture"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Load Source Image"
+msgstr "Charger une image source"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Slicing"
+msgstr "Découpage"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Inserting"
+msgstr "Insertion"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Saving"
+msgstr "Enregistrement"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save large texture:"
+msgstr "Impossible d'enregistrer la grande texture :"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Build Atlas For:"
+msgstr "Construire l'atlas pour :"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Loading Image:"
+msgstr "Chargement de l'image :"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't load image:"
+msgstr "Impossible de charger l'image :"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Converting Images"
+msgstr "Conversion des images"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Cropping Images"
+msgstr "Rognage des images"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Blitting Images"
+msgstr "Découpage des images"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save atlas image:"
+msgstr "Impossible d'enregistrer l'image d'atlas :"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save converted texture:"
+msgstr "Impossible d'enregistrer la texture convertie :"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Invalid source!"
+msgstr "Source invalide !"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Invalid translation source!"
+msgstr "Source de traduction invalide !"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Column"
+msgstr "Colonne"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#: tools/editor/script_create_dialog.cpp
+msgid "Language"
+msgstr "Langage"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "No items to import!"
+msgstr "Pas d'objets à importer !"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "No target path!"
+msgstr "Pas de chemin de destination !"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Translations"
+msgstr "Importer des traductions"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Couldn't import!"
+msgstr "Impossible d'importer !"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Translation"
+msgstr "Importer une traduction"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Source CSV:"
+msgstr "CSV source :"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Ignore First Row"
+msgstr "Ignorer la première ligne"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Compress"
+msgstr "Compresser"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Add to Project (engine.cfg)"
+msgstr "Ajouter au projet (engine.cfg)"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Languages:"
+msgstr "Importer les langues :"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#, fuzzy
+msgid "Translation"
+msgstr "Traductions"
+
+#: tools/editor/multi_node_edit.cpp
+msgid "MultiNode Set"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Toggle Autoplay"
+msgstr "Activer/désactiver la lecture automatique"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Animation Name:"
+msgstr "Nom de la nouvelle animation :"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Anim"
+msgstr "Nouvelle animation"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Animation Name:"
+msgstr "Modifier le nom de l'animation :"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Remove Animation"
+msgstr "Supprimer l'animation"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Invalid animation name!"
+msgstr "ERREUR : Nom de l'animation invalide !"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Animation name already exists!"
+msgstr "ERREUR : Le nom de l'animation existe déjà !"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Renommer l'animation"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Animation"
+msgstr "Ajouter une animation"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Next Changed"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Blend Time"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load Animation"
+msgstr "Charger l'animation"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Dupliquer l'animation"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to copy!"
+msgstr "ERREUR : Aucune animation à copier !"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation resource on clipboard!"
+msgstr "ERREUR : Pas de ressource de type animation dans le presse-papiers !"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Pasted Animation"
+msgstr "Animation collée"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Paste Animation"
+msgstr "Coller l'animation"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to edit!"
+msgstr "ERREUR : Pas d'animation à modifier !"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from current pos. (A)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from end. (Shift+A)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Stop animation playback. (S)"
+msgstr "Arrêter la lecture de l'animation. (S)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from start. (Shift+D)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from current pos. (D)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation position (in seconds)."
+msgstr "Position de l'animation (en secondes)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Scale animation playback globally for the node."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create new animation in player."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load an animation from disk."
+msgstr "Charger une animation depuis le disque."
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save the current animation"
+msgstr "Enregistrer l'animation actuelle"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Display list of animations in player."
+msgstr "Afficher la liste des animations dans le lecteur."
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Autoplay on Load"
+msgstr "Lecture automatique au chargement"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Edit Target Blend Times"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Tools"
+msgstr "Outils d'animation"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Copy Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Créer une nouvelle animation"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Name:"
+msgstr "Nom de l'animation :"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/script_create_dialog.cpp
+msgid "Error!"
+msgstr "Erreur !"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Times:"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Next (Auto Queue):"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Cross-Animation Blend Times"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Animation"
+msgstr "Animations"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "New name:"
+msgstr "Nouveau nom :"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Scale:"
+msgstr "Échelle :"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade In (s):"
+msgstr "Fondu entrant (s) :"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade Out (s):"
+msgstr "Fondu sortant (s) :"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend"
+msgstr "Mélanger"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix"
+msgstr "Mixer"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Auto Restart:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Restart (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Random Restart (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Start!"
+msgstr "Démarrer !"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Amount:"
+msgstr "Quantité :"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend:"
+msgstr "Mélange :"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 0:"
+msgstr "Mélange 0 :"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 1:"
+msgstr "Mélange 1 :"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "X-Fade Time (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Current:"
+msgstr "Actuel :"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Add Input"
+msgstr "Ajouter une entrée"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Clear Auto-Advance"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Set Auto-Advance"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Delete Input"
+msgstr "Supprimer l'entrée"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Rename"
+msgstr "Renommer"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is valid."
+msgstr "L'arbre d'animations est valide."
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is invalid."
+msgstr "L'arbre d'animations est invalide."
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "OneShot Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend2 Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend3 Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend4 Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeScale Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeSeek Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Transition Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Import Animations.."
+msgstr "Importer des animations..."
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Edit Node Filters"
+msgstr "Modifier les filtres de nœud"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Filters.."
+msgstr "Filtres..."
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Parsing %d Triangles:"
+msgstr "Analyse de %d triangles :"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Triangle #"
+msgstr "Triangle #"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Light Baker Setup:"
+msgstr "Paramètres du calculateur d'éclairage :"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Parsing Geometry"
+msgstr "Analyse de la géométrie"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Fixing Lights"
+msgstr "Correction des lumières"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Making BVH"
+msgstr "Création du BVH"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Creating Light Octree"
+msgstr "Création de l'octree de lumière"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Creating Octree Texture"
+msgstr "Création de la texture d'octree"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Transfer to Lightmaps:"
+msgstr "Transfert vers des lightmaps :"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Allocating Texture #"
+msgstr "Allocation de la texture #"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Baking Triangle #"
+msgstr "Calcul de la texture #"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Post-Processing Texture #"
+msgstr "Post-traitement de la texture #"
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "BakedLightInstance does not contain a BakedLight resource."
+msgstr "La BakedLightInstance ne contient pas de ressource BakedLight."
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "Bake!"
+msgstr "Calculer !"
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "Reset the lightmap octree baking process (start over)."
+msgstr "Remettre le processus de calcul de l'éclairage à zéro (recommencer)."
+
+#: tools/editor/plugins/camera_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Preview"
+msgstr "Aperçu"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Configure Snap"
+msgstr "Configurer la grille"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid Offset:"
+msgstr "Décalage de la grille :"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid Step:"
+msgstr "Pas de la grille :"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Offset:"
+msgstr "Décalage de la rotation :"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Step:"
+msgstr "Pas de la rotation :"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Pivot"
+msgstr "Déplacer le pivot"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Action"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit IK Chain"
+msgstr "Modifier la chaîne IK"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit CanvasItem"
+msgstr "Modifier le CanvasItem"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom (%):"
+msgstr "Zoom (%) :"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Paste Pose"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Select Mode (Q)"
+msgstr "Mode sélection (Q)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Drag: Rotate"
+msgstr "Glisser : tourner"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+Drag: Move"
+msgstr "Alt + Glisser : déplacer"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+RMB: Depth list selection"
+msgstr "Alt + Bouton droit : sélection détaillée par liste"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Move Mode (W)"
+msgstr "Move déplacement (W)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Mode (E)"
+msgstr "Mode rotation (E)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid ""
+"Show a list of all objects at the position clicked\n"
+"(same as Alt+RMB in select mode)."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Click to change object's rotation pivot."
+msgstr "Cliquer pour changer le pivot de rotation de l'objet."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Pan Mode"
+msgstr "Mode navigation"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Lock the selected object in place (can't be moved)."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Unlock the selected object (can be moved)."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Makes sure the object's children are not selectable."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Restores the object's children's ability to be selected."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Edit"
+msgstr "Modifier"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Snap"
+msgstr "Aligner sur la grille"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Show Grid"
+msgstr "Afficher la grille"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Rotation Snap"
+msgstr "Rotation alignée"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap Relative"
+msgstr "Alignement relatif"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Configure Snap.."
+msgstr "Configurer la grille..."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Pixel Snap"
+msgstr "Aligner au pixel près"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Expand to Parent"
+msgstr "Étendre au parent"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Skeleton.."
+msgstr "Squelette..."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make Bones"
+msgstr "Créer les os"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Bones"
+msgstr "Effacer les os"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make IK Chain"
+msgstr "Créer une chaîne IK"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear IK Chain"
+msgstr "Effacer la chaîne IK"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View"
+msgstr "Affichage"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom In"
+msgstr "Zoomer"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Out"
+msgstr "Dézoomer"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Reset"
+msgstr "Réinitialiser le zoom"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Set.."
+msgstr "Définir le zoom"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center Selection"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Frame Selection"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Anchor"
+msgstr "Ancre"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Keys (Ins)"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key (Existing Tracks)"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Copy Pose"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Pose"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Set a Value"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap (Pixels):"
+msgstr ""
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create Poly"
+msgstr "Créer un polygone"
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Edit Poly"
+msgstr "Modifier le polygone"
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Edit Poly (Remove Point)"
+msgstr "Modifier le polygone (supprimer un point)"
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr "Créer un nouveau polygone à partir de rien."
+
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+msgid "Create Poly3D"
+msgstr "Créer un Poly3D"
+
+#: tools/editor/plugins/collision_shape_2d_editor_plugin.cpp
+msgid "Set Handle"
+msgstr ""
+
+#: tools/editor/plugins/color_ramp_editor_plugin.cpp
+msgid "Add/Remove Color Ramp Point"
+msgstr "Ajouter/supprimer un point de rampe de couleur"
+
+#: tools/editor/plugins/color_ramp_editor_plugin.cpp
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Color Ramp"
+msgstr "Modifier une rampe de couleurs"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Creating Mesh Library"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Thumbnail.."
+msgstr "Aperçu..."
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove item %d?"
+msgstr "Supprimer l'objet %d ?"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Add Item"
+msgstr "Ajouter un item"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove Selected Item"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import from Scene"
+msgstr "Importer depuis la scène"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Update from Scene"
+msgstr "Mettre à jour depuis la scène"
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Item %d"
+msgstr "Objet %d"
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Items"
+msgstr "Objets"
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Item List Editor"
+msgstr "Éditeur de listes d'objets"
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Occluder Polygon"
+msgstr "Créer un polygone occulteur"
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Edit existing polygon:"
+msgstr "Modifier un polygone existant :"
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "LMB: Move Point."
+msgstr "Bouton gauche : déplacer un point."
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Ctrl+LMB: Split Segment."
+msgstr "Contrôle + Bouton gauche : séparer le segment"
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "RMB: Erase Point."
+msgstr "Bouton droit : effacer un point."
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh is empty!"
+msgstr "Le maillage est vide !"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Trimesh Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Convex Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "This doesn't work on scene root!"
+msgstr "Cela ne fonctionne pas sur la racine de la scène !"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Shape"
+msgstr "Créer une forme Trimesh"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Shape"
+msgstr "Créer une forme convexe"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Navigation Mesh"
+msgstr "Créer un maillage de navigation"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "MeshInstance lacks a Mesh!"
+msgstr "Le MeshInstance n'a pas de maillage !"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Could not create outline!"
+msgstr "Impossible de créer le contour !"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline"
+msgstr "Créer le contour"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Static Body"
+msgstr "Créer un corps statique Trimesh"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Static Body"
+msgstr "Créer un corps statique convexe"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Collision Sibling"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Collision Sibling"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh.."
+msgstr "Créer un maillage de contour..."
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh"
+msgstr "Créer un maillage de contour"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Outline Size:"
+msgstr "Taille du contour :"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and no MultiMesh set in node)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and MultiMesh contains no Mesh)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (invalid path)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (not a MeshInstance)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (contains no Mesh resource)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No surface source specified."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (invalid path)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no geometry)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no faces)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Parent has no solid faces to populate."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Couldn't map area."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Source Mesh:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Target Surface:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate Surface"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate MultiMesh"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Target Surface:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Source Mesh:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "X-Axis"
+msgstr "Axe X"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Y-Axis"
+msgstr "Axe Y"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Z-Axis"
+msgstr "Axe Z"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh Up Axis:"
+msgstr "Axe vers le haut du maillage :"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Rotation:"
+msgstr "Rotation aléatoire :"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Tilt:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Scale:"
+msgstr "Échelle aléatoire :"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate"
+msgstr "Peupler"
+
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create Navigation Polygon"
+msgstr "Créer un polygone de navigation"
+
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Remove Poly And Point"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Error loading image:"
+msgstr "Erreur de chargement de l'image :"
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "No pixels with transparency > 128 in image.."
+msgstr "Pas de pixels avec une transparence > 128 dans l'image..."
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Set Emission Mask"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Clear Emission Mask"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Load Emission Mask"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generated Point Count:"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry."
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry (faces)."
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Faces contain no area!"
+msgstr "Les faces n'ont pas de surface !"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "No faces!"
+msgstr "Pas de faces !"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Generate AABB"
+msgstr "Générer un AABB"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter From Mesh"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter From Node"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Clear Emitter"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Positions:"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Fill:"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Surface"
+msgstr "Surface"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Volume"
+msgstr "Volume"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Point from Curve"
+msgstr "Supprimer le point d'une courbe"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Add Point to Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Point in Curve"
+msgstr "Déplacer le point dans la courbe"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move In-Control in Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Out-Control in Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr "Sélectionner des points"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr "Maj. + Glisser : sélectionner des points de contrôle"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr "Clic : ajouter un point"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr "Clic droit : supprimer un point"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Select Control Points (Shift+Drag)"
+msgstr "Sélectionner les points de contrôle (Maj. + glisser)"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr "Ajouter un point (dans un espace vide)"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Split Segment (in curve)"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Close Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Curve Point #"
+msgstr "Point de courbe #"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Point Pos"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve In Pos"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Out Pos"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Split Path"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Remove Path Point"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create UV Map"
+msgstr "Créer une carte UV"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Transform UV Map"
+msgstr "Transformer la carte UV"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon 2D UV Editor"
+msgstr "Éditeur UV de polygones 2D"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Point"
+msgstr "Déplacer le point"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Ctrl: Rotate"
+msgstr "Contrôle: Tourner"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift: Move All"
+msgstr "Maj. : Tout déplacer"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift+Ctrl: Scale"
+msgstr "Maj.+Contrôle : Mettre à l'échelle"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Polygon"
+msgstr "Déplacer le polygone"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Rotate Polygon"
+msgstr "Tourner le polygone"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Scale Polygon"
+msgstr "Mettre à l'échelle le polygone"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon->UV"
+msgstr "Polygone -> UV"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "UV->Polygon"
+msgstr "UV -> Polygone"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Clear UV"
+msgstr "Effacer l'UV"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Snap"
+msgstr "Aligner"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Enable Snap"
+msgstr "Activer l'alignement"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid"
+msgstr "Grille"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "ERROR: Couldn't load resource!"
+msgstr "ERREUR : Impossible de charger la ressource !"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Add Resource"
+msgstr "Ajouter une ressource"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Rename Resource"
+msgstr "Renommer une ressource"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Delete Resource"
+msgstr "Supprimer une ressource"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Resource clipboard is empty!"
+msgstr "Le presse-papiers des ressources est vide !"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Load Resource"
+msgstr "Charger une ressource"
+
+#: tools/editor/plugins/rich_text_editor_plugin.cpp
+msgid "Parse BBCode"
+msgstr "Analyser le BBCode"
+
+#: tools/editor/plugins/sample_editor_plugin.cpp
+msgid "Length:"
+msgstr "Longueur :"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Open Sample File(s)"
+msgstr "Ouvrir un ou des fichiers d'échantillons"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "ERROR: Couldn't load sample!"
+msgstr "ERREUR : Impossible de charger l'échantillon !"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Add Sample"
+msgstr "Ajouter un échantillon"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Stop"
+msgstr "Arrêter"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Play"
+msgstr "Jouer"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Rename Sample"
+msgstr "Renommer l'échantillon"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Delete Sample"
+msgstr "Supprimer l'échantillon"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "16 Bits"
+msgstr "16 bits"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "8 Bits"
+msgstr "8 bits"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Stereo"
+msgstr "Stéréo"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Mono"
+msgstr "Mono"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Format"
+msgstr "Format"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Pitch"
+msgstr "Hauteur"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Error while saving theme"
+msgstr "Erreur lors de l'enregistrement."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Error saving"
+msgstr "Erreur de sauvegarde de l'atlas :"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Error importing theme"
+msgstr "Erreur d'importation de la scène."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Error importing"
+msgstr "Erreur d'importation :"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Import Theme"
+msgstr "Improter des textures"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Save Theme As.."
+msgstr "Enregistrer la scène sous..."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/project_export.cpp
+msgid "File"
+msgstr "Fichier"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_editor.cpp
+msgid "New"
+msgstr "Nouveau"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save All"
+msgstr "Tout enregistrer"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "History Prev"
+msgstr "Précédent dans l'historique"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "History Next"
+msgstr "Suivant dans l'historique"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Reload Theme"
+msgstr "Recharger"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Save Theme"
+msgstr "Enregistrer la scène"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Save Theme As"
+msgstr "Enregistrer la scène sous..."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr "Déplacer vers le haut"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr "Déplacer vers le bas"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Indent Left"
+msgstr "Indenter vers la gauche"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Indent Right"
+msgstr "Indenter vers la droite"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Toggle Comment"
+msgstr "Commenter/décommenter"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Clone Down"
+msgstr "Cloner en dessous"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Complete Symbol"
+msgstr "Compléter le symbole"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Trim Trailing Whitespace"
+msgstr "Supprimer les espaces de fin de ligne"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Auto Indent"
+msgstr "Indentation automatique"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find.."
+msgstr "Trouver..."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find Next"
+msgstr "Trouver le suivant"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find Previous"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Replace.."
+msgstr "Remplacer..."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Goto Function.."
+msgstr "Aller à la fonction…"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Goto Line.."
+msgstr "Aller à la ligne..."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Debug"
+msgstr "Débogage"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Toggle Breakpoint"
+msgstr "Placer un point d'arrêt"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Remove All Breakpoints"
+msgstr "Placer un point d'arrêt"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Goto Next Breakpoint"
+msgstr "Placer un point d'arrêt"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Goto Previous Breakpoint"
+msgstr "Placer un point d'arrêt"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Step Over"
+msgstr "Sortir"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Step Into"
+msgstr "Rentrer"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Break"
+msgstr "Mettre en pause"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Continue"
+msgstr "Continuer"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Keep Debugger Open"
+msgstr "Garder le débogueur ouvert"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Window"
+msgstr "Fenêtre"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Left"
+msgstr "Aller à gauche"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Right"
+msgstr "Aller à droite"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Help"
+msgstr "Aide"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Contextual"
+msgstr "Aide contextuelle"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Tutorials"
+msgstr "Tutoriels"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Open https://godotengine.org at tutorials section."
+msgstr "Ouvre https://godotengine.org dans la section des tutoriels."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Classes"
+msgstr "Classes"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search the class hierarchy."
+msgstr "Cherche dans la hiérarchie des classes."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search Help"
+msgstr "Chercher dans l'aide"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search the reference documentation."
+msgstr "Cherche dans la documentation de référence."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Go to previous edited document."
+msgstr "Aller au document modifié précédent."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Go to next edited document."
+msgstr "Aller au document modifié suivant."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Create Script"
+msgstr "Créer un script"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid ""
+"The following files are newer on disk.\n"
+"What action should be taken?:"
+msgstr ""
+"Les fichiers suivants sont plus récents sur le disque.\n"
+"Quelle action doit être prise ? :"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Reload"
+msgstr "Recharger"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Resave"
+msgstr "Ré-enregistrer"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Debugger"
+msgstr "Débogueur"
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Vertex"
+msgstr "Vertex"
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Fragment"
+msgstr "Fragment"
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Lighting"
+msgstr "Éclairage"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Constant"
+msgstr "Modifier une constante scalaire"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Constant"
+msgstr "Modifier une constance vectorielle"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Constant"
+msgstr "Modifier une constante RVB"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Operator"
+msgstr "Modifier un opérateur scalaire"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Operator"
+msgstr "Modifier un opérateur vectoriel"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Scalar Operator"
+msgstr "Modifier un opérateur vectoriel scalaire"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Operator"
+msgstr "Modifier un opérateur RVB"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Toggle Rot Only"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Function"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Function"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Default Value"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change XForm Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Texture Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Cubemap Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Comment"
+msgstr "Modifier un commentaire"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Color Ramp"
+msgstr "Ajouter/supprimer de la rampe de couleurs"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Curve Map"
+msgstr "Ajouter/supprimer de la carte de courbes"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Curve Map"
+msgstr "Modifier la carte de courbes"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Input Name"
+msgstr "Changer le nom de l'entrée"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Connect Graph Nodes"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Disconnect Graph Nodes"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Remove Shader Graph Node"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Move Shader Graph Node"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Duplicate Graph Node(s)"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Delete Shader Graph Node(s)"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Cyclic Connection Link"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Missing Input Connections"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add Shader Graph Node"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal"
+msgstr "Orthogonale"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective"
+msgstr "Perspective"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Aborted."
+msgstr "Transformation annulée."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Plane Transform."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "X-Axis Transform."
+msgstr "Transformation sur l'axe X."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Y-Axis Transform."
+msgstr "Transformation sur l'axe Y."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Z-Axis Transform."
+msgstr "Transformation sur l'axe Z."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling to %s%%."
+msgstr "Mise à l'échelle %s%%."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotating %s degrees."
+msgstr "Rotation de %s degrés."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View."
+msgstr "Vue de dessous."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom"
+msgstr "Dessous"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View."
+msgstr "Vue de dessus."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top"
+msgstr "Dessus"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View."
+msgstr "Vue arrière"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear"
+msgstr "Arrière"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View."
+msgstr "Vue avant"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front"
+msgstr "Avant"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View."
+msgstr "Vue de gauche"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left"
+msgstr "Gauche"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View."
+msgstr "Vue de droite"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right"
+msgstr "Droite"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Keying is disabled (no key inserted)."
+msgstr "L'insertion de clé est désactivée (pas de clé insérée)."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Animation Key Inserted."
+msgstr "Clé d'animation insérée."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Align with view"
+msgstr "Aligner avec la vue"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top (Num7)"
+msgstr "Dessus (Pavé num. 7)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom (Shift+Num7)"
+msgstr "Dessous (Maj+Pavé num. 7)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left (Num3)"
+msgstr "Gauche (Pavé num. 3)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right (Shift+Num3)"
+msgstr "Droite (Maj+Pavé num. 3)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front (Num1)"
+msgstr "Devant (Pavé num. 1)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear (Shift+Num1)"
+msgstr "Arrière (Maj+Pavé num. 1)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective (Num5)"
+msgstr "Perspective (Pavé num. 5)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal (Num5)"
+msgstr "Orthogonale (Pavé num. 5)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Environment"
+msgstr "Environnement"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Audio Listener"
+msgstr "Écouteur audio"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Gizmos"
+msgstr "Gizmos"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Selection (F)"
+msgstr "Sélection (F)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Align with view (Ctrl+Shift+F)"
+msgstr "Aligner avec la vue (Ctrl+Maj+F)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "XForm Dialog"
+msgstr "Dialogue XForm"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "No scene selected to instance!"
+msgstr "Pas de scène sélectionnée à instancier !"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Instance at Cursor"
+msgstr "Instancier sur le cursuer"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Could not instance scene!"
+msgstr "Impossible d'instancier la scène !"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Mode (R)"
+msgstr "Mode de mise à l'échelle (R)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Transform"
+msgstr "Type de transformation"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Local Coords"
+msgstr "Coordonnées locales"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Dialog.."
+msgstr "Dialogue de transformation..."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Default Light"
+msgstr "Utiliser la lumière par défaut"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Default sRGB"
+msgstr "Utiliser sRGB par défaut"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "1 Viewport"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "2 Viewports"
+msgstr "Paramètres de la vue"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports (Alt)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "3 Viewports"
+msgstr "Paramètres de la vue"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports (Alt)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "4 Viewports"
+msgstr "Paramètres de la vue"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Normal"
+msgstr "Affichage normal"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Wireframe"
+msgstr "Affichage en fil de fer"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Overdraw"
+msgstr "Affichage des surimpressions"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Shadeless"
+msgstr "Affichage sans ombrage"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Origin"
+msgstr "Afficher l'origine"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Grid"
+msgstr "Afficher la grille"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap Settings"
+msgstr "Paramètres d'alignement"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate Snap:"
+msgstr "Alignement des translations :"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Snap (deg.):"
+msgstr "Alignement des rotations (degrés) :"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Snap (%):"
+msgstr "Alignement des mises à l'échelle (%) :"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Viewport Settings"
+msgstr "Paramètres de la vue"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Default Light Normal:"
+msgstr "Normale de l'éclairage par défaut :"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Ambient Light Color:"
+msgstr "Couleur de l'éclairage ambient :"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective FOV (deg.):"
+msgstr "Champ de vision de perspective (degrés) :"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Near:"
+msgstr "Z-Near de la vue :"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Far:"
+msgstr "Z-Far de la vue :"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Change"
+msgstr "Modification de la transformation"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate:"
+msgstr "Translater :"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate (deg.):"
+msgstr "Tourner (degrés) :"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale (ratio):"
+msgstr "Échelle (ratio) :"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Type"
+msgstr "Type de transformation"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Pre"
+msgstr "Pré"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Post"
+msgstr "Post"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "ERROR: Couldn't load frame resource!"
+msgstr "ERREUR : Impossible de charger la resource de type trame !"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Frame"
+msgstr "Ajouter une image"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Resource clipboard is empty or not a texture!"
+msgstr "Le presse-papiers des ressources est vide ou n'est pas une texture !"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Paste Frame"
+msgstr "Coller une image"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Empty"
+msgstr "Ajouter vide"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation Loop"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation FPS"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "(empty)"
+msgstr "(vide)"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animations"
+msgstr "Animations"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Speed (FPS):"
+msgstr "Vitesse (FPS) :"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animation Frames"
+msgstr "Trames d'animation"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (Before)"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (After)"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Up"
+msgstr "Haut"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Down"
+msgstr "Bas"
+
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Set region_rect"
+msgstr ""
+
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Sprite Region Editor"
+msgstr "Éditeur de région de Sprite"
+
+#: tools/editor/plugins/style_box_editor_plugin.cpp
+msgid "StyleBox Preview:"
+msgstr "Aperçu de la StyleBox :"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Can't save theme to file:"
+msgstr "Impossible d'enregistrer le thème dans le fichier :"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add All Items"
+msgstr "Ajouter tous les items"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add All"
+msgstr "Tout ajouter"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove Item"
+msgstr "Supprimer l'item"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add Class Items"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Remove Class Items"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Create Template"
+msgstr "Créer un modèle"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio1"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio2"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Item"
+msgstr "Item"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Check Item"
+msgstr "Item à cocher"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Checked Item"
+msgstr "Item coché"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Has"
+msgstr "Possède"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Many"
+msgstr "Plusieurs"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp tools/editor/project_export.cpp
+msgid "Options"
+msgstr "Options"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Have,Many,Several,Options!"
+msgstr "Ont,Plusieurs,Possibilités,D'options !"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 1"
+msgstr "Onglet 1"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 2"
+msgstr "Onglet 2"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 3"
+msgstr "Onglet 3"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/scene_tree_editor.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Type:"
+msgstr "Type :"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Data Type:"
+msgstr "Type de données :"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Icon"
+msgstr "Icône"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Style"
+msgstr "Style"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Color"
+msgstr "Couleur"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint TileMap"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Duplicate"
+msgstr "Dupliquer"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase TileMap"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Bucket"
+msgstr "Seau"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Pick Tile"
+msgstr "Sélectionner une case"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Select"
+msgstr "Sélectionner"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase Selection"
+msgstr "Supprimer la sélection"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Transpose"
+msgstr "Transposer"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror X (A)"
+msgstr "Miroir X (A)"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror Y (S)"
+msgstr "Miroir Y (S)"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 0 degrees"
+msgstr "Tourner de 0 degrés"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 90 degrees"
+msgstr "Tourner de 90 degrés"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 180 degrees"
+msgstr "Tourner de 180 degrés"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 270 degrees"
+msgstr "Tourner de 270 degrés"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Could not find tile:"
+msgstr "Impossible de trouver la tuile :"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Item name or ID:"
+msgstr "Nom d'item ou ID :"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from scene?"
+msgstr "Créer depuis la scène ?"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from scene?"
+msgstr "Fusionner depuis la scène ?"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from Scene"
+msgstr "Créer depuis la scène"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from Scene"
+msgstr "Fusionner depuis la scène"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Error"
+msgstr "Erreur"
+
+#: tools/editor/project_export.cpp
+msgid "Edit Script Options"
+msgstr "Modifier les options du script"
+
+#: tools/editor/project_export.cpp
+msgid "Please export outside the project folder!"
+msgstr "Veuillez exporter en dehors du dossier du projet !"
+
+#: tools/editor/project_export.cpp
+msgid "Error exporting project!"
+msgstr "Erreur d'exportation du projet !"
+
+#: tools/editor/project_export.cpp
+msgid "Error writing the project PCK!"
+msgstr "Erreur d'écriture du PCK du projet !"
+
+#: tools/editor/project_export.cpp
+msgid "No exporter for platform '%s' yet."
+msgstr "Pas d'exportateur pour la plate-forme « %s » actuellement."
+
+#: tools/editor/project_export.cpp
+msgid "Include"
+msgstr "Inclure"
+
+#: tools/editor/project_export.cpp
+msgid "Change Image Group"
+msgstr "Changer le groupe d'images"
+
+#: tools/editor/project_export.cpp
+msgid "Group name can't be empty!"
+msgstr "Le nom du groupe ne peut pas être vide !"
+
+#: tools/editor/project_export.cpp
+msgid "Invalid character in group name!"
+msgstr "Caractère invalide dans le nom du groupe !"
+
+#: tools/editor/project_export.cpp
+msgid "Group name already exists!"
+msgstr "Le nom du groupe existe déjà !"
+
+#: tools/editor/project_export.cpp
+msgid "Add Image Group"
+msgstr "Ajouter un groupe d'images"
+
+#: tools/editor/project_export.cpp
+msgid "Delete Image Group"
+msgstr "Supprimer le groupe d'images"
+
+#: tools/editor/project_export.cpp
+msgid "Atlas Preview"
+msgstr "Aperçu de l'atlas"
+
+#: tools/editor/project_export.cpp
+msgid "Project Export Settings"
+msgstr "Paramètres d'exportation du projet"
+
+#: tools/editor/project_export.cpp
+msgid "Target"
+msgstr "Cible"
+
+#: tools/editor/project_export.cpp
+msgid "Export to Platform"
+msgstr "Exporter vers la plate-forme"
+
+#: tools/editor/project_export.cpp
+msgid "Resources"
+msgstr "Ressources"
+
+#: tools/editor/project_export.cpp
+msgid "Export selected resources (including dependencies)."
+msgstr "Exporter les ressources sélectionnées (y compris les dépendences)."
+
+#: tools/editor/project_export.cpp
+msgid "Export all resources in the project."
+msgstr "Exporter toutes les ressources dans le projet."
+
+#: tools/editor/project_export.cpp
+msgid "Export all files in the project directory."
+msgstr "Exporter tous les fichiers dans le répertoire du projet."
+
+#: tools/editor/project_export.cpp
+msgid "Export Mode:"
+msgstr "Mode d'exportation :"
+
+#: tools/editor/project_export.cpp
+msgid "Resources to Export:"
+msgstr "Ressources à exporter :"
+
+#: tools/editor/project_export.cpp
+msgid "Action"
+msgstr "Action"
+
+#: tools/editor/project_export.cpp
+msgid ""
+"Filters to export non-resource files (comma-separated, e.g.: *.json, *.txt):"
+msgstr ""
+"Filtres à utiliser pour l'exportation des fichiers (séparés par des virgules, "
+"par exemple : *.json, *.txt) :"
+
+#: tools/editor/project_export.cpp
+msgid "Filters to exclude from export (comma-separated, e.g.: *.json, *.txt):"
+msgstr ""
+"Filtres à utiliser pour exclure des fichiers (séparés par des virgules, par "
+"exemple: *.json, *.txt) :"
+
+#: tools/editor/project_export.cpp
+msgid "Convert text scenes to binary on export."
+msgstr "Convertir les scènes en format texte au format binaire à l'exportation."
+
+#: tools/editor/project_export.cpp
+msgid "Images"
+msgstr "Images"
+
+#: tools/editor/project_export.cpp
+msgid "Keep Original"
+msgstr "Garder les originaux"
+
+#: tools/editor/project_export.cpp
+msgid "Compress for Disk (Lossy, WebP)"
+msgstr "Compression pour le disque (avec perte, WebP)"
+
+#: tools/editor/project_export.cpp
+msgid "Compress for RAM (BC/PVRTC/ETC)"
+msgstr "Compression pour la RAM (BC/PVRTC/ETC)"
+
+#: tools/editor/project_export.cpp
+msgid "Convert Images (*.png):"
+msgstr "Convertir les images (*.png) :"
+
+#: tools/editor/project_export.cpp
+msgid "Compress for Disk (Lossy) Quality:"
+msgstr "Qualité de la compression pour le disque (avec perte) :"
+
+#: tools/editor/project_export.cpp
+msgid "Shrink All Images:"
+msgstr "Réduire toutes les images :"
+
+#: tools/editor/project_export.cpp
+msgid "Compress Formats:"
+msgstr "Compresser les formats :"
+
+#: tools/editor/project_export.cpp
+msgid "Image Groups"
+msgstr "Groupes d'images"
+
+#: tools/editor/project_export.cpp
+msgid "Groups:"
+msgstr "Groupes :"
+
+#: tools/editor/project_export.cpp
+msgid "Compress Disk"
+msgstr "Compression pour le disque"
+
+#: tools/editor/project_export.cpp
+msgid "Compress RAM"
+msgstr "Compression pour la RAM"
+
+#: tools/editor/project_export.cpp
+msgid "Compress Mode:"
+msgstr "Mode de compression :"
+
+#: tools/editor/project_export.cpp
+msgid "Lossy Quality:"
+msgstr "Qualité de compression avec perte :"
+
+#: tools/editor/project_export.cpp
+msgid "Atlas:"
+msgstr "Atlas :"
+
+#: tools/editor/project_export.cpp
+msgid "Shrink By:"
+msgstr "Réduire de :"
+
+#: tools/editor/project_export.cpp
+msgid "Preview Atlas"
+msgstr "Aperçu de l'atlas"
+
+#: tools/editor/project_export.cpp
+msgid "Image Filter:"
+msgstr "Filtre d'image :"
+
+#: tools/editor/project_export.cpp
+msgid "Images:"
+msgstr "Images :"
+
+#: tools/editor/project_export.cpp
+msgid "Select None"
+msgstr "Ne rien sélectionner"
+
+#: tools/editor/project_export.cpp
+msgid "Samples"
+msgstr "Échantillons"
+
+#: tools/editor/project_export.cpp
+msgid "Sample Conversion Mode: (.wav files):"
+msgstr "Mode de conversion des échantillons (fichiers .wav) :"
+
+#: tools/editor/project_export.cpp
+msgid "Keep"
+msgstr "Conserver"
+
+#: tools/editor/project_export.cpp
+msgid "Compress (RAM - IMA-ADPCM)"
+msgstr "Compresser (RAM - IMA-ADPCM)"
+
+#: tools/editor/project_export.cpp
+msgid "Sampling Rate Limit (Hz):"
+msgstr "Limite de taux d'échantillonage (Hz) :"
+
+#: tools/editor/project_export.cpp
+msgid "Trim"
+msgstr "Rogner"
+
+#: tools/editor/project_export.cpp
+msgid "Trailing Silence:"
+msgstr "Silence de fin :"
+
+#: tools/editor/project_export.cpp
+#, fuzzy
+msgid "Script"
+msgstr "Lancer le script"
+
+#: tools/editor/project_export.cpp
+msgid "Script Export Mode:"
+msgstr "Mode d'exportation des scripts :"
+
+#: tools/editor/project_export.cpp
+msgid "Text"
+msgstr "Texte"
+
+#: tools/editor/project_export.cpp
+msgid "Compiled"
+msgstr "Compilé"
+
+#: tools/editor/project_export.cpp
+msgid "Encrypted (Provide Key Below)"
+msgstr "Chiffré (insérez une clé ci-dessous)"
+
+#: tools/editor/project_export.cpp
+msgid "Script Encryption Key (256-bits as hex):"
+msgstr "Clé de chiffrement des scripts (256 bits en hexadécimal) :"
+
+#: tools/editor/project_export.cpp
+msgid "Export PCK/Zip"
+msgstr "Exporter le PCK/ZIP"
+
+#: tools/editor/project_export.cpp
+msgid "Export Project PCK"
+msgstr "Exporter le PCK du projet"
+
+#: tools/editor/project_export.cpp
+msgid "Export.."
+msgstr "Exporter..."
+
+#: tools/editor/project_export.cpp
+msgid "Project Export"
+msgstr "Exportation de projet"
+
+#: tools/editor/project_export.cpp
+msgid "Export Preset:"
+msgstr "Pré-réglage d'exportation :"
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, the path must exist!"
+msgstr "Chemin de projet invalide, le chemin doit exister !"
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, engine.cfg must not exist."
+msgstr "Chemin de projet invalide, engine.cfg ne doit pas exister."
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, engine.cfg must exist."
+msgstr "Chemin de projet invalide, engine.cfg doit exister."
+
+#: tools/editor/project_manager.cpp
+msgid "Imported Project"
+msgstr "Projet importé"
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path (changed anything?)."
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Couldn't create engine.cfg in project path."
+msgstr "Impossible de créer le fichier engine.cfg dans le répertoire du projet."
+
+#: tools/editor/project_manager.cpp
+msgid "Import Existing Project"
+msgstr "Importer un projet existant"
+
+#: tools/editor/project_manager.cpp
+msgid "Project Path (Must Exist):"
+msgstr "Chemin du projet (doit exister) :"
+
+#: tools/editor/project_manager.cpp
+msgid "Project Name:"
+msgstr "Nom du projet :"
+
+#: tools/editor/project_manager.cpp
+msgid "Create New Project"
+msgstr "Créer un nouveau projet"
+
+#: tools/editor/project_manager.cpp
+msgid "Project Path:"
+msgstr "Chemin du projet"
+
+#: tools/editor/project_manager.cpp
+msgid "Browse"
+msgstr "Parcourir"
+
+#: tools/editor/project_manager.cpp
+msgid "New Game Project"
+msgstr "Nouveau projet de jeu"
+
+#: tools/editor/project_manager.cpp
+msgid "That's a BINGO!"
+msgstr "C'est un BINGO !"
+
+#: tools/editor/project_manager.cpp
+msgid "Unnamed Project"
+msgstr "Projet sans titre"
+
+#: tools/editor/project_manager.cpp
+msgid "Are you sure to open more than one projects?"
+msgstr "Voulez-vous vraiment ouvrir plus d'un projet à la fois ?"
+
+#: tools/editor/project_manager.cpp
+msgid "Are you sure to run more than one projects?"
+msgstr "Voulez-vous vraiment lancer plus d'un projet à la fois ?"
+
+#: tools/editor/project_manager.cpp
+msgid "Remove project from the list? (Folder contents will not be modified)"
+msgstr ""
+"Supprimer le projet de la liste ? (Le contenu du dossier ne sera pas modifié)"
+
+#: tools/editor/project_manager.cpp
+msgid "Recent Projects:"
+msgstr "Projets récents :"
+
+#: tools/editor/project_manager.cpp
+msgid "Run"
+msgstr "Lancer"
+
+#: tools/editor/project_manager.cpp
+msgid "Scan"
+msgstr "Scanner"
+
+#: tools/editor/project_manager.cpp
+msgid "New Project"
+msgstr "Nouveau projet"
+
+#: tools/editor/project_manager.cpp
+msgid "Exit"
+msgstr "Quitter"
+
+#: tools/editor/project_settings.cpp
+msgid "Key "
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+#, fuzzy
+msgid "Joy Button"
+msgstr "Bouton"
+
+#: tools/editor/project_settings.cpp
+#, fuzzy
+msgid "Joy Axis"
+msgstr "Axe"
+
+#: tools/editor/project_settings.cpp
+#, fuzzy
+msgid "Mouse Button"
+msgstr "Index du bouton de la souris :"
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid action (anything goes but '/' or ':')."
+msgstr "Action invalide (tout passe, sauf « / » ou « : »)."
+
+#: tools/editor/project_settings.cpp
+msgid "Action '%s' already exists!"
+msgstr "L'action « %s » existe déjà !"
+
+#: tools/editor/project_settings.cpp
+msgid "Rename Input Action Event"
+msgstr "Renommer l'événement d'action d'entrée"
+
+#: tools/editor/project_settings.cpp
+msgid "Add Input Action Event"
+msgstr "Ajouter un événement d'action d'entrée"
+
+#: tools/editor/project_settings.cpp
+msgid "Meta+"
+msgstr "Méta+"
+
+#: tools/editor/project_settings.cpp
+msgid "Shift+"
+msgstr "Maj+"
+
+#: tools/editor/project_settings.cpp
+msgid "Alt+"
+msgstr "Alt+"
+
+#: tools/editor/project_settings.cpp
+msgid "Control+"
+msgstr "Contrôle+"
+
+#: tools/editor/project_settings.cpp
+msgid "Press a Key.."
+msgstr "Appuyez sur une touche..."
+
+#: tools/editor/project_settings.cpp
+msgid "Mouse Button Index:"
+msgstr "Index du bouton de la souris :"
+
+#: tools/editor/project_settings.cpp
+msgid "Left Button"
+msgstr "Bouton gauche"
+
+#: tools/editor/project_settings.cpp
+msgid "Right Button"
+msgstr "Bouton droite"
+
+#: tools/editor/project_settings.cpp
+msgid "Middle Button"
+msgstr "Bouton du milieu"
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Up Button"
+msgstr "Molette vers le haut"
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Down Button"
+msgstr "Molette vers le bas"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 6"
+msgstr "Bouton 6"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 7"
+msgstr "Bouton 7"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 8"
+msgstr "Bouton 8"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 9"
+msgstr "Bouton 9"
+
+#: tools/editor/project_settings.cpp
+msgid "Joystick Axis Index:"
+msgstr "Index de l'axe du joystick :"
+
+#: tools/editor/project_settings.cpp
+msgid "Axis"
+msgstr "Axe"
+
+#: tools/editor/project_settings.cpp
+msgid "Joystick Button Index:"
+msgstr "Index du bouton du joystick :"
+
+#: tools/editor/project_settings.cpp
+msgid "Add Input Action"
+msgstr "Ajouter une action d'entrée"
+
+#: tools/editor/project_settings.cpp
+msgid "Erase Input Action Event"
+msgstr "Effacer l'événement d'action d'entrée"
+
+#: tools/editor/project_settings.cpp
+msgid "Device"
+msgstr "Périphérique"
+
+#: tools/editor/project_settings.cpp
+msgid "Button"
+msgstr "Bouton"
+
+#: tools/editor/project_settings.cpp
+msgid "Left Button."
+msgstr "Bouton gauche."
+
+#: tools/editor/project_settings.cpp
+msgid "Right Button."
+msgstr "Bouton droite."
+
+#: tools/editor/project_settings.cpp
+msgid "Middle Button."
+msgstr "Bouton du milieu."
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Up."
+msgstr "Molette vers le haut."
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Down."
+msgstr "Molette vers le bas."
+
+#: tools/editor/project_settings.cpp
+msgid "Toggle Persisting"
+msgstr "Mode persistant"
+
+#: tools/editor/project_settings.cpp
+msgid "Error saving settings."
+msgstr "Erreur d'enregistrement des paramètres."
+
+#: tools/editor/project_settings.cpp
+msgid "Settings saved OK."
+msgstr "Paramètres enregistrés avec succès."
+
+#: tools/editor/project_settings.cpp
+msgid "Add Translation"
+msgstr "Ajouter une traduction"
+
+#: tools/editor/project_settings.cpp
+msgid "Toggle AutoLoad Globals"
+msgstr "Activer les variables globales AutoLoad"
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name."
+msgstr "Nom invalide."
+
+#: tools/editor/project_settings.cpp
+msgid "Valid characters:"
+msgstr "Caractères valides :"
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing engine class name."
+msgstr ""
+"Nom invalide. Le nom ne doit pas rentrer en conflit avec le nom d'une classe "
+"moteur existante."
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing buit-in type name."
+msgstr ""
+"Nom invalide. Le nom ne doit pas rentrer en conflit avec le nom d'un type "
+"intégré au moteur."
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing global constant name."
+msgstr ""
+"Nom invalide. Le nom ne doit pas rentrer en conflit avec le nom d'une "
+"constante globale."
+
+#: tools/editor/project_settings.cpp
+msgid "Add Autoload"
+msgstr "Ajouter un AutoLoad"
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Autoload"
+msgstr "Supprimer l'AutoLoad"
+
+#: tools/editor/project_settings.cpp
+msgid "Move Autoload"
+msgstr "Déplacer l'AutoLoad"
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Translation"
+msgstr "Supprimer la traduction"
+
+#: tools/editor/project_settings.cpp
+msgid "Add Remapped Path"
+msgstr "Ajouter un chemin remappé"
+
+#: tools/editor/project_settings.cpp
+msgid "Resource Remap Add Remap"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Change Resource Remap Language"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Resource Remap"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Resource Remap Option"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Enable"
+msgstr "Activer"
+
+#: tools/editor/project_settings.cpp
+msgid "Project Settings (engine.cfg)"
+msgstr "Paramètres du projet (engine.cfg)"
+
+#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp
+msgid "General"
+msgstr "Général"
+
+#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp
+msgid "Property:"
+msgstr "Propriété :"
+
+#: tools/editor/project_settings.cpp
+msgid "Del"
+msgstr "Supprimer"
+
+#: tools/editor/project_settings.cpp
+msgid "Copy To Platform.."
+msgstr "Copier vers la plate-forme..."
+
+#: tools/editor/project_settings.cpp
+msgid "Input Map"
+msgstr "Carte d'entrée"
+
+#: tools/editor/project_settings.cpp
+msgid "Action:"
+msgstr "Action :"
+
+#: tools/editor/project_settings.cpp
+msgid "Device:"
+msgstr "Périphérique :"
+
+#: tools/editor/project_settings.cpp
+msgid "Index:"
+msgstr "Index :"
+
+#: tools/editor/project_settings.cpp
+msgid "Localization"
+msgstr "Localisation"
+
+#: tools/editor/project_settings.cpp
+msgid "Translations"
+msgstr "Traductions"
+
+#: tools/editor/project_settings.cpp
+msgid "Translations:"
+msgstr "Traductions :"
+
+#: tools/editor/project_settings.cpp
+msgid "Add.."
+msgstr "Ajouter..."
+
+#: tools/editor/project_settings.cpp
+msgid "Remaps"
+msgstr "Remaps"
+
+#: tools/editor/project_settings.cpp
+msgid "Resources:"
+msgstr "Ressources :"
+
+#: tools/editor/project_settings.cpp
+msgid "Remaps by Locale:"
+msgstr "Remaps par langue :"
+
+#: tools/editor/project_settings.cpp
+msgid "Locale"
+msgstr "Langue"
+
+#: tools/editor/project_settings.cpp
+msgid "AutoLoad"
+msgstr "AutoLoad"
+
+#: tools/editor/project_settings.cpp
+msgid "Node Name:"
+msgstr "Nom de nœud :"
+
+#: tools/editor/project_settings.cpp
+msgid "List:"
+msgstr "Liste :"
+
+#: tools/editor/project_settings.cpp
+msgid "Singleton"
+msgstr "Singleton"
+
+#: tools/editor/property_editor.cpp
+msgid "Preset.."
+msgstr "Pré-réglage..."
+
+#: tools/editor/property_editor.cpp
+msgid "Ease In"
+msgstr "Ease in"
+
+#: tools/editor/property_editor.cpp
+msgid "Ease Out"
+msgstr "Ease out"
+
+#: tools/editor/property_editor.cpp
+msgid "Zero"
+msgstr "Zéro"
+
+#: tools/editor/property_editor.cpp
+msgid "Easing In-Out"
+msgstr "Ease in-out"
+
+#: tools/editor/property_editor.cpp
+msgid "Easing Out-In"
+msgstr "Ease out-in"
+
+#: tools/editor/property_editor.cpp
+msgid "File.."
+msgstr "Fichier..."
+
+#: tools/editor/property_editor.cpp
+msgid "Dir.."
+msgstr "Répertoire..."
+
+#: tools/editor/property_editor.cpp
+msgid "Load"
+msgstr "Charger"
+
+#: tools/editor/property_editor.cpp
+msgid "Assign"
+msgstr "Assigner"
+
+#: tools/editor/property_editor.cpp
+msgid "Error loading file: Not a resource!"
+msgstr "Erreur de chargement du fichier : ce n'est pas une ressource !"
+
+#: tools/editor/property_editor.cpp
+msgid "Couldn't load image"
+msgstr "Impossible de charger l'image"
+
+#: tools/editor/property_editor.cpp
+msgid "Bit %d, val %d."
+msgstr "Bit %d, valeur %d."
+
+#: tools/editor/property_editor.cpp
+msgid "On"
+msgstr "Activé"
+
+#: tools/editor/property_editor.cpp
+msgid "Set"
+msgstr "Définir"
+
+#: tools/editor/property_editor.cpp
+msgid "Properties:"
+msgstr "Propriétés :"
+
+#: tools/editor/property_editor.cpp
+msgid "Global"
+msgstr "Global"
+
+#: tools/editor/property_editor.cpp
+msgid "Sections:"
+msgstr "Sections :"
+
+#: tools/editor/pvrtc_compress.cpp
+msgid "Could not execute PVRTC tool:"
+msgstr "Impossible d'exécuter l'outil PVRTC :"
+
+#: tools/editor/pvrtc_compress.cpp
+msgid "Can't load back converted image using PVRTC tool:"
+msgstr ""
+
+#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp
+msgid "Reparent Node"
+msgstr "Re-parenter le nœud"
+
+#: tools/editor/reparent_dialog.cpp
+msgid "Reparent Location (Select new Parent):"
+msgstr "Localisation pour le re-parentage (sélectionnez le nouveau parent) :"
+
+#: tools/editor/reparent_dialog.cpp
+msgid "Keep Global Transform"
+msgstr "Conserver la transformation globale"
+
+#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp
+msgid "Reparent"
+msgstr "Re-parenter"
+
+#: tools/editor/resources_dock.cpp
+msgid "Create New Resource"
+msgstr "Créer une nouvelle ressource"
+
+#: tools/editor/resources_dock.cpp
+msgid "Open Resource"
+msgstr "Ouvrir la ressource"
+
+#: tools/editor/resources_dock.cpp
+msgid "Save Resource"
+msgstr "Enregistrer la ressource"
+
+#: tools/editor/resources_dock.cpp
+msgid "Resource Tools"
+msgstr "Outils des ressources"
+
+#: tools/editor/resources_dock.cpp
+msgid "Make Local"
+msgstr "Rendre local"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Run Mode:"
+msgstr "Mode d'exécution :"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Current Scene"
+msgstr "Scène actuelle"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Main Scene"
+msgstr "Scène principale"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Main Scene Arguments:"
+msgstr "Arguments de la scène principale :"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Scene Run Settings"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "OK :("
+msgstr "OK :("
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "No parent to instance a child at."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error loading scene from %s"
+msgstr "Erreur de chargement de la scène depuis %s"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error instancing scene from %s"
+msgstr "Erreur d'instanciation de la scène depuis %s"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Ok"
+msgstr "OK"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Cannot instance the scene '%s' because the current scene exists within one of "
+"its nodes."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Instance Scene(s)"
+msgstr "Instancier scène(s)"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done on the tree root."
+msgstr "Cette opération ne peut être réalisée sur la racine de l'arbre."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Node In Parent"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Nodes In Parent"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Duplicate Node(s)"
+msgstr "Dupliquer le(s) nœud(s)"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete Node(s)?"
+msgstr "Supprimer le(s) nœud(s) ?"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done without a scene."
+msgstr "Cette opération ne peut être réalisée sans une scène."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation requires a single selected node."
+msgstr ""
+"Cette opération ne peut être réalisée uniquement avec un seul nœud "
+"sélectionné."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done on instanced scenes."
+msgstr "Cette opération ne peut être réalisée sur des scènes instanciées."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Save New Scene As.."
+msgstr "Enregistrer la nouvelle scène sous..."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Makes Sense!"
+msgstr "C'est sensé !"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes from a foreign scene!"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes the current scene inherits from!"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Remove Node(s)"
+msgstr "Supprimer le(s) nœud(s)"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Create Node"
+msgstr "Créer un nœud"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Couldn't save new scene. Likely dependencies (instances) couldn't be "
+"satisfied."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error saving scene."
+msgstr "Erreur d'enregistrement de la scène."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error duplicating scene to save it."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "New Scene Root"
+msgstr "Nouvelle racine de la scène"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Inherit Scene"
+msgstr "Hériter la scène"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add Child Node"
+msgstr "Ajouter un nœud enfant"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Instance Child Scene"
+msgstr "Instancier une scène enfant"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Change Type"
+msgstr "Changer le type"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Edit Groups"
+msgstr "Modifier les groupes"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Edit Connections"
+msgstr "Modifier les connexions"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add Script"
+msgstr "Ajouter un script"
+
+#: tools/editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Merge From Scene"
+msgstr "Fusionner depuis la scène"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Save Branch as Scene"
+msgstr "Sauvegarder la branche comme scène"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete Node(s)"
+msgstr "Supprimer nœud(s)"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add/Create a New Node"
+msgstr "Ajouter un nouveau nœud"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Instance a scene file as a Node. Creates an inherited scene if no root node "
+"exists."
+msgstr ""
+"Instancie un fichier de scène comme nœud. Crée une scène héritée si aucun "
+"nœud racine n'existe."
+
+#: tools/editor/scene_tree_editor.cpp
+msgid ""
+"This item cannot be made visible because the parent is hidden. Unhide the "
+"parent first."
+msgstr ""
+"Cet objet ne peut être rendu visible car son parent est caché. Affichez le "
+"parent d'abord."
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Toggle Spatial Visible"
+msgstr "Afficher/cacher le Spatial"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Toggle CanvasItem Visible"
+msgstr "Afficher/cacher le CanvasItem"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Instance:"
+msgstr "Instance :"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Invalid node name, the following characters are not allowed:"
+msgstr "Nom de nœud invalide, les caractères suivants ne sont pas autorisés :"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Rename Node"
+msgstr "Renommer le nœud"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Scene Tree (Nodes):"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Editable Children"
+msgstr "Enfants modifiables"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Load As Placeholder"
+msgstr "Charger en tant que fictif"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Open in Editor"
+msgstr "Ouvrir dans l'éditeur"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear Inheritance"
+msgstr "Effacer l'héritage"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear Inheritance? (No Undo!)"
+msgstr "Effacer l'héritage ? (Pas de retour en arrière !)"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear!"
+msgstr "Effacer !"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Select a Node"
+msgstr "Sélectionner un nœud"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Same source and destination files, doing nothing."
+msgstr "Fichiers source et destination identiques, rien à faire."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Same source and destination paths, doing nothing."
+msgstr "Chemins source et destination identiques, rien à faire."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Can't move directories to within themselves."
+msgstr "Impossible de déplacer des répertoires vers eux-mêmes."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Can't operate on '..'"
+msgstr "Impossible d'opérer sur « .. »"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Pick New Name and Location For:"
+msgstr "Entrez un nouveau nom et chemin pour :"
+
+#: tools/editor/scenes_dock.cpp
+msgid "No files selected!"
+msgstr "Pas de fichiers sélectionnés !"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Instance"
+msgstr "Instance"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Edit Dependencies.."
+msgstr "Modifier les dépendances..."
+
+#: tools/editor/scenes_dock.cpp
+msgid "View Owners.."
+msgstr "Voir les propriétaires..."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Rename or Move.."
+msgstr "Renommer ou déplacer..."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Move To.."
+msgstr "Déplacer vers..."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Info"
+msgstr "Information"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Show In File Manager"
+msgstr "Montrer dans le gestionnaire de fichiers"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Previous Directory"
+msgstr "Répertoire précédent"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Next Directory"
+msgstr "Répertoire suivant"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Re-Scan Filesystem"
+msgstr "Re-scanner le système de fichiers"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Toggle folder status as Favorite"
+msgstr "Basculer l'état favori du dossier"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Instance the selected scene(s) as child of the selected node."
+msgstr "Instancie la/les scènes sélectionnées en tant qu'enfant du nœud."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Move"
+msgstr "Déplacer"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid parent class name"
+msgstr "Nom de classe parent invalide"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid chars:"
+msgstr "Caractères valides :"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid class name"
+msgstr "Nom de classe invalide"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid name"
+msgstr "Nom valide"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "N/A"
+msgstr "N/A"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Class name is invalid!"
+msgstr "Le nom de classe est invalide !"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Parent class name is invalid!"
+msgstr "Le nom de classe parent est invalide !"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid path!"
+msgstr "Chemin invalide !"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Could not create script in filesystem."
+msgstr "Impossible de créer le script dans le système de fichiers."
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Path is empty"
+msgstr "Le chemin est vide"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Path is not local"
+msgstr "Le chemin n'est pas local"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid base path"
+msgstr "Chemin de base invalide"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "File exists"
+msgstr "Le fichier existe"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid extension"
+msgstr "Extension invalide"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid path"
+msgstr "Chemin valide"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Class Name:"
+msgstr "Nom de classe :"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Built-In Script"
+msgstr "Script intégré"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Create Node Script"
+msgstr "Créer le script de nœud"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Bytes:"
+msgstr "Octets :"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Warning"
+msgstr "Avertissement"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Error:"
+msgstr "Erreur :"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Source:"
+msgstr "Source :"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Function:"
+msgstr "Fonction :"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Errors"
+msgstr "Erreurs"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Child Process Connected"
+msgstr "Processus enfant connecté"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Inspect Previous Instance"
+msgstr "Inspecter l'instance précédente"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Inspect Next Instance"
+msgstr "Inspecter l'instance suivante"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Stack Frames"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Variable"
+msgstr "Variable"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Errors:"
+msgstr "Erreurs :"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Stack Trace (if applicable):"
+msgstr "Trace de pile (si applicable) :"
+
+#: tools/editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Remote Inspector"
+msgstr "Inspecteur"
+
+#: tools/editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Live Scene Tree:"
+msgstr "Arbre des scènes :"
+
+#: tools/editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Remote Object Properties: "
+msgstr "Propriétés de l'objet."
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Profiler"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Monitor"
+msgstr "Moniteur"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Value"
+msgstr "Valeur"
+
+#: tools/editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Monitors"
+msgstr "Moniteur"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "List of Video Memory Usage by Resource:"
+msgstr "Liste de l'utilisation de la mémoire vidéo par ressource :"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Total:"
+msgstr "Total :"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Video Mem"
+msgstr "Mémoire vidéo"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Resource Path"
+msgstr "Chemin de la ressource"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Type"
+msgstr "Type"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Usage"
+msgstr "Utilisation"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Misc"
+msgstr "Divers"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Clicked Control:"
+msgstr "Control cliqué :"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Clicked Control Type:"
+msgstr "Type de Control cliqué :"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Live Edit Root:"
+msgstr "Racine pour l'édition en direct :"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Set From Tree"
+msgstr "Définir depuis l'arbre"
+
+#: tools/editor/settings_config_dialog.cpp
+msgid "Plugin List:"
+msgstr "Liste d'extensions :"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Light Radius"
+msgstr "Changer le rayon d'une lumière"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Camera FOV"
+msgstr "Changer le champ de vision d'une caméra"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Camera Size"
+msgstr "Changer la taille d'une caméra"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Sphere Shape Radius"
+msgstr "Changer le rayon d'une forme en sphère"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Box Shape Extents"
+msgstr "Changer les extents d'une forme en boîte"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Radius"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Height"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Ray Shape Length"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Notifier Extents"
+msgstr ""
+
+#~ msgid "Overwrite Existing Scene"
+#~ msgstr "Écraser la scène existante"
+
+#~ msgid "Overwrite Existing, Keep Materials"
+#~ msgstr "Écraser l'existant, conserver les matériaux"
+
+#~ msgid "Keep Existing, Merge with New"
+#~ msgstr "Conserver l'existant, fusionner avec les nouveautés"
+
+#~ msgid "Keep Existing, Ignore New"
+#~ msgstr "Conserver l'existant, ignorer les nouveautés"
+
+#~ msgid "This Time:"
+#~ msgstr "Cette fois :"
+
+#~ msgid "Next Time:"
+#~ msgstr "Les prochaines fois :"
+
+#~ msgid "Move Favorite Up"
+#~ msgstr "Déplacer le favori vers le haut"
+
+#~ msgid "Move Favorite Down"
+#~ msgstr "Déplacer le favori vers le bas"
+
+#~ msgid "%d frames"
+#~ msgstr "%d images"
+
+#~ msgid ""
+#~ "NOTICE: You are not forced to import textures for 2D projects. Just copy "
+#~ "your .jpg or .png files to your project, and change export options later. "
+#~ "Atlases can be generated on export too."
+#~ msgstr ""
+#~ "NOTICE : Vous n'êtes pas obligé d'importer des textures pour des projets "
+#~ "en 2D. Copiez simplement vos fichiers .jpg ou .png dans le projet, et "
+#~ "modifiez les options d'exportation par la suite. Vous pouvez également "
+#~ "générer des atlas à l'exportation."
+
+#~ msgid "Merging.."
+#~ msgstr "Fusion..."
diff --git a/tools/translations/it.po b/tools/translations/it.po
new file mode 100644
index 0000000000..a68696ca91
--- /dev/null
+++ b/tools/translations/it.po
@@ -0,0 +1,6033 @@
+# LANGUAGE translation of the Godot Engine editor
+# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community
+# This file is distributed under the same license as the Godot source code.
+# Dario Bonfanti <bonfi.96@hotmail.it>, 2016.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Godot Engine editor\n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: \n"
+"Last-Translator: Dario Bonfanti <bonfi.96@hotmail.it>\n"
+"Language-Team: Italian\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.7\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: scene/2d/animated_sprite.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the 'Frames' property in "
+"order for AnimatedSprite to display frames."
+msgstr ""
+"Una risorsa SpriteFrames deve essere creata o impostata nella proprietà "
+"'Frames' affinché AnimatedSprite mostri i frame."
+
+#: scene/2d/canvas_modulate.cpp
+msgid ""
+"Only one visible CanvasModulate is allowed per scene (or set of instanced "
+"scenes). The first created one will work, while the rest will be ignored."
+msgstr ""
+"Solamente un CanvasModulate visibile è consentito per scena (o insieme di "
+"scene istanziate). Il primo creato funzionerà, mentre i restanti saranno "
+"ignorati."
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid ""
+"CollisionPolygon2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+"CollisionPolygon2D serve a fornire una forma di collisione ad un nodo "
+"derivato di CollisionObject2D. Si prega di utilizzarlo solamente come figlio "
+"di Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, etc. in modo da dargli "
+"una forma."
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid "An empty CollisionPolygon2D has no effect on collision."
+msgstr "Un CollisionPolygon2D vuoto non ha effetti sulla collisione."
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"CollisionShape2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+"CollisionShape2D serve a fornire una forma di collisione ad un nodo derivato "
+"di CollisionObject2D. Si prega di utilizzarlo solamente come figlio di "
+"Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, etc. in modo da dargli "
+"una forma."
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"A shape must be provided for CollisionShape2D to function. Please create a "
+"shape resource for it!"
+msgstr ""
+"Perché CollisionShape2D funzioni deve essere fornita una forma. Si prega di "
+"creare una risorsa forma (shape)!"
+
+#: scene/2d/light_2d.cpp
+msgid ""
+"A texture with the shape of the light must be supplied to the 'texture' "
+"property."
+msgstr ""
+"Una texture con la forma della luce deve essere fornita nella proprietà "
+"'texture'."
+
+#: scene/2d/light_occluder_2d.cpp
+msgid ""
+"An occluder polygon must be set (or drawn) for this occluder to take effect."
+msgstr ""
+"Un poligono di occlusione deve essere impostato (o disegnato) affinché "
+"l'occlusore abbia effetto."
+
+#: scene/2d/light_occluder_2d.cpp
+msgid "The occluder polygon for this occluder is empty. Please draw a polygon!"
+msgstr ""
+"Il poligono di occlusione per questo occlusore è vuoto. Per favore disegna un "
+"poligono!"
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"A NavigationPolygon resource must be set or created for this node to work. "
+"Please set a property or draw a polygon."
+msgstr ""
+"Una risorsa NavigationPolygon deve essere impostata o creata affinché questo "
+"nodo funzioni. Si prega di impostare una proprietà o di disegnare un poligono."
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
+"node. It only provides navigation data."
+msgstr ""
+"NavigationPolygonInstance deve essere figlio o nipote di un nodo "
+"Navigation2D. Fornisce solamente dati di navigazione."
+
+#: scene/2d/parallax_layer.cpp
+msgid ""
+"ParallaxLayer node only works when set as child of a ParallaxBackground node."
+msgstr ""
+"Il nodo ParallaxLayer funziona solamente quando impostato come figlio di un "
+"nodo ParallaxBackground."
+
+#: scene/2d/particles_2d.cpp
+msgid "Path property must point to a valid Particles2D node to work."
+msgstr ""
+"La proprietà path deve puntare a un nodo Particles2D valido per poter "
+"funzionare."
+
+#: scene/2d/path_2d.cpp
+msgid "PathFollow2D only works when set as a child of a Path2D node."
+msgstr ""
+"PathFollow2D funziona solamente quando impostato come figlio di un nodo "
+"Path2D."
+
+#: scene/2d/remote_transform_2d.cpp
+msgid "Path property must point to a valid Node2D node to work."
+msgstr "La proprietà path deve puntare ad un nodo Node2D valido per funzionare."
+
+#: scene/2d/sample_player_2d.cpp scene/audio/sample_player.cpp
+msgid ""
+"A SampleLibrary resource must be created or set in the 'samples' property in "
+"order for SamplePlayer to play sound."
+msgstr ""
+"Una risorsa SampleLibrary deve essere creata o impostata nella proprietà "
+"'samples' affinché SamplePlayer riproduca un suono."
+
+#: scene/2d/sprite.cpp
+msgid ""
+"Path property must point to a valid Viewport node to work. Such Viewport must "
+"be set to 'render target' mode."
+msgstr ""
+"La proprietà path deve puntare a un nodo Viewport valido per poter "
+"funzionare. Tale Viewport deve essere impostata in modalità 'render target'."
+
+#: scene/2d/sprite.cpp
+msgid ""
+"The Viewport set in the path property must be set as 'render target' in order "
+"for this sprite to work."
+msgstr ""
+"Il Viewport impostato nella proprietà path deve essere impostato come 'render "
+"target' affinché questa sprite funzioni."
+
+#: scene/2d/visibility_notifier_2d.cpp
+msgid ""
+"VisibilityEnable2D works best when used with the edited scene root directly "
+"as parent."
+msgstr ""
+"VisibilityEnable2D funziona al meglio quando usato direttamente come genitore "
+"con il root della scena modificata."
+
+#: scene/3d/body_shape.cpp
+msgid ""
+"CollisionShape only serves to provide a collision shape to a CollisionObject "
+"derived node. Please only use it as a child of Area, StaticBody, RigidBody, "
+"KinematicBody, etc. to give them a shape."
+msgstr ""
+"CollisionShape serve a fornire una forma di collisione ad un nodo derivato di "
+"CollisionObject. Si prega di utilizzarlo solamente come figlio di Area, "
+"StaticBody, RigidBody, KinematicBody, etc. in modo da dargli una forma."
+
+#: scene/3d/body_shape.cpp
+msgid ""
+"A shape must be provided for CollisionShape to function. Please create a "
+"shape resource for it!"
+msgstr ""
+"Perché CollisionShape funzioni deve essere fornita una forma. Si prega di "
+"creare una risorsa forma (shape)!"
+
+#: scene/3d/collision_polygon.cpp
+msgid ""
+"CollisionPolygon only serves to provide a collision shape to a "
+"CollisionObject derived node. Please only use it as a child of Area, "
+"StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
+msgstr ""
+"CollisionPolygon serve solamente a fornire una forma di collisione ad un nodo "
+"derivato di CollisionObject. Si prega di usarlo solamente come figlio di "
+"Area, StaticBody, RigidBody, KinematicBody, etc. in modo da dargli una forma."
+
+#: scene/3d/collision_polygon.cpp
+msgid "An empty CollisionPolygon has no effect on collision."
+msgstr "Un CollisionPolygon vuoto non ha effetti in collisione."
+
+#: scene/3d/navigation_mesh.cpp
+msgid "A NavigationMesh resource must be set or created for this node to work."
+msgstr ""
+"Una risorsa NavigationMesh deve essere creata o impostata affinché questo "
+"nodo funzioni."
+
+#: scene/3d/navigation_mesh.cpp
+msgid ""
+"NavigationMeshInstance must be a child or grandchild to a Navigation node. It "
+"only provides navigation data."
+msgstr ""
+"NavigationMeshInstance deve essere un figlio o nipote di un nodo Navigation. "
+"Fornisce solamente dati per la navigazione."
+
+#: scene/3d/scenario_fx.cpp
+msgid ""
+"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)."
+msgstr ""
+"Solamente un WorldEnvironment è consentito per scena (o insieme di scene "
+"istanziate)."
+
+#: scene/3d/spatial_sample_player.cpp
+msgid ""
+"A SampleLibrary resource must be created or set in the 'samples' property in "
+"order for SpatialSamplePlayer to play sound."
+msgstr ""
+"Una risorsa SampleLibrary deve essere creata o impostata nella proprietà "
+"'samples' affinché SpatialSamplePlayer riproduca un suono."
+
+#: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Cancel"
+msgstr "Cancella"
+
+#: scene/gui/dialogs.cpp
+msgid "OK"
+msgstr ""
+
+#: scene/gui/dialogs.cpp
+msgid "Alert!"
+msgstr ""
+
+#: scene/gui/dialogs.cpp
+msgid "Please Confirm..."
+msgstr ""
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Cut"
+msgstr "Taglia"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp
+msgid "Copy"
+msgstr "Copia"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp
+msgid "Paste"
+msgstr "Incolla"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp tools/editor/project_export.cpp
+msgid "Select All"
+msgstr "Seleziona tutti"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_log.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/rich_text_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/script_editor_debugger.cpp
+msgid "Clear"
+msgstr "Rimuovi"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Undo"
+msgstr "Annulla"
+
+#: scene/gui/popup.cpp
+msgid ""
+"Popups will hide by default unless you call popup() or any of the popup*() "
+"functions. Making them visible for editing is fine though, but they will hide "
+"upon running."
+msgstr ""
+"I popup saranno nascosti di default a meno che vengano chiamate la funzione "
+"popup() o qualsiasi altra funzione popup*(). Renderli visibili per la "
+"modifica nell'editor è okay, ma verranno nascosti una volta in esecuzione."
+
+#: scene/main/viewport.cpp
+msgid ""
+"This viewport is not set as render target. If you intend for it to display "
+"its contents directly to the screen, make it a child of a Control so it can "
+"obtain a size. Otherwise, make it a RenderTarget and assign its internal "
+"texture to some node for display."
+msgstr ""
+"Questo viewport non è impostato come target di render. Se si vuole che il suo "
+"contenuto venga direttamente mostrato a schermo, renderlo figlio di un "
+"Control, in modo che possa ottenere una dimensione. Altrimenti, renderlo un "
+"RenderTarget e assegnare alla sua texture interna qualche nodo da mostrare."
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Error initializing FreeType."
+msgstr "Errore inizializzazione FreeType"
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Unknown font format."
+msgstr "Formato font sconosciuto."
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Error loading font."
+msgstr "Errore caricamento font."
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Invalid font size."
+msgstr "Dimensione font Invalida."
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/call_dialog.cpp
+#: tools/editor/connections_dialog.cpp tools/editor/groups_editor.cpp
+#: tools/editor/import_settings.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp
+#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp
+msgid "Close"
+msgstr "Chiudi"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/create_dialog.cpp
+#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/settings_config_dialog.cpp
+msgid "Search:"
+msgstr "Cerca:"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/code_editor.cpp
+#: tools/editor/editor_help.cpp tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/project_settings.cpp
+msgid "Search"
+msgstr "Cerca"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/editor_node.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Import"
+msgstr "Importa"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/project_settings.cpp
+#: tools/editor/settings_config_dialog.cpp
+msgid "Plugins"
+msgstr "Plugins"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Sort:"
+msgstr "Ordina:"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Reverse"
+msgstr "Inverti"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/project_settings.cpp
+msgid "Category:"
+msgstr "Categoria:"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "All"
+msgstr "Tutti"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Site:"
+msgstr "Sito:"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Assets ZIP File"
+msgstr "ZIP File degli Asset"
+
+#: tools/editor/animation_editor.cpp
+msgid "Disabled"
+msgstr "Disabilitato"
+
+#: tools/editor/animation_editor.cpp
+msgid "All Selection"
+msgstr "Seleziona Tutto"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Add Key"
+msgstr "Sposta Aggiunta Key"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Transition"
+msgstr "Anim Cambia Transizione"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Transform"
+msgstr "Anim Cambia Transform"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Value"
+msgstr "Anim Cambia Valore"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Call"
+msgstr "Anim Cambia Chiamata"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Track"
+msgstr "Anim Aggiungi Traccia"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Anim Track Up"
+msgstr "Muovi Traccia Animazione Su"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Anim Track Down"
+msgstr "Muovi Traccia Animazione Giù"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove Anim Track"
+msgstr "Rimuovi Traccia Animazione"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Duplicate Keys"
+msgstr "Duplica Key Animazione"
+
+#: tools/editor/animation_editor.cpp
+msgid "Set Transitions to:"
+msgstr "Imposta Transizione a:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Rename"
+msgstr "Traccia Anim Rinomina "
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Change Interpolation"
+msgstr "Traccia Anim Cambia Interpolazione "
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Change Value Mode"
+msgstr "Traccia Anim Cambia Modalità Valore "
+
+#: tools/editor/animation_editor.cpp
+msgid "Edit Node Curve"
+msgstr "Modifica Curva del Nodo"
+
+#: tools/editor/animation_editor.cpp
+msgid "Edit Selection Curve"
+msgstr "Modifica Selezione Curva"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Delete Keys"
+msgstr "Anim Elimina Key"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Key"
+msgstr "Anim Aggiungi Key"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Move Keys"
+msgstr "Anim Sposta Key"
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale Selection"
+msgstr "Scala Selezione"
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale From Cursor"
+msgstr "Scala da Cursore"
+
+#: tools/editor/animation_editor.cpp
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Duplicate Selection"
+msgstr "Duplica Selezione"
+
+#: tools/editor/animation_editor.cpp
+msgid "Duplicate Transposed"
+msgstr "Duplica Transposto"
+
+#: tools/editor/animation_editor.cpp
+msgid "Goto Next Step"
+msgstr "Vai a Step Successivo"
+
+#: tools/editor/animation_editor.cpp
+msgid "Goto Prev Step"
+msgstr "Vai a Step Precedente"
+
+#: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp
+msgid "Linear"
+msgstr "Lineare"
+
+#: tools/editor/animation_editor.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Constant"
+msgstr "Costante"
+
+#: tools/editor/animation_editor.cpp
+msgid "In"
+msgstr "In"
+
+#: tools/editor/animation_editor.cpp
+msgid "Out"
+msgstr "Out"
+
+#: tools/editor/animation_editor.cpp
+msgid "In-Out"
+msgstr "In-Out"
+
+#: tools/editor/animation_editor.cpp
+msgid "Out-In"
+msgstr "Out-In"
+
+#: tools/editor/animation_editor.cpp
+msgid "Transitions"
+msgstr "Transizioni"
+
+#: tools/editor/animation_editor.cpp
+msgid "Optimize Animation"
+msgstr "Ottimizza Animazione"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up Animation"
+msgstr "Pulisci Animazione"
+
+#: tools/editor/animation_editor.cpp
+msgid "Create NEW track for %s and insert key?"
+msgstr "Crea NUOVA traccia per %s e inserire key?"
+
+#: tools/editor/animation_editor.cpp
+msgid "Create %d NEW tracks and insert keys?"
+msgstr "Creare %d NUOVE tracce e inserire key?"
+
+#: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/particles_editor_plugin.cpp
+#: tools/editor/project_manager.cpp tools/editor/script_create_dialog.cpp
+msgid "Create"
+msgstr "Crea"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Create & Insert"
+msgstr "Anim Crea e Inserisci"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert Track & Key"
+msgstr "Anim Inserisci Traccia e Key"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert Key"
+msgstr "Anim Inserisci Key"
+
+#: tools/editor/animation_editor.cpp
+msgid "Change Anim Len"
+msgstr "Cambia Lunghezza Animazione"
+
+#: tools/editor/animation_editor.cpp
+msgid "Change Anim Loop"
+msgstr "Cambia Loop Animazione"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Create Typed Value Key"
+msgstr "Anim Crea Typed Value Key"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert"
+msgstr "Anim Inserisci"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Scale Keys"
+msgstr "Anim Scala Key"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Call Track"
+msgstr "Anim Aggiungi Chiamata Traccia"
+
+#: tools/editor/animation_editor.cpp
+msgid "Animation zoom."
+msgstr "Zoom Animazione."
+
+#: tools/editor/animation_editor.cpp
+msgid "Length (s):"
+msgstr "Lunghezza (e):"
+
+#: tools/editor/animation_editor.cpp
+msgid "Animation length (in seconds)."
+msgstr "Lunghezza animazone (in secondi)."
+
+#: tools/editor/animation_editor.cpp
+msgid "Step (s):"
+msgstr "Step (s):"
+
+#: tools/editor/animation_editor.cpp
+msgid "Cursor step snap (in seconds)."
+msgstr "Step Snap Cursore (in secondi)."
+
+#: tools/editor/animation_editor.cpp
+msgid "Enable/Disable looping in animation."
+msgstr "Attiva/Disattiva loop animazione."
+
+#: tools/editor/animation_editor.cpp
+msgid "Add new tracks."
+msgstr "Aggiungi nuova traccia."
+
+#: tools/editor/animation_editor.cpp
+msgid "Move current track up."
+msgstr "Muovi la traccia corrente su."
+
+#: tools/editor/animation_editor.cpp
+msgid "Move current track down."
+msgstr "Muovi la traccia corrente giù."
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove selected track."
+msgstr "Rimuovi traccia selezionata."
+
+#: tools/editor/animation_editor.cpp
+msgid "Track tools"
+msgstr "Strumenti traccia"
+
+#: tools/editor/animation_editor.cpp
+msgid "Enable editing of individual keys by clicking them."
+msgstr "Attiva modifica di key individuali cliccandovi."
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim. Optimizer"
+msgstr "Ottimizzatore Anim."
+
+#: tools/editor/animation_editor.cpp
+msgid "Max. Linear Error:"
+msgstr ":Max. Errore Lineare"
+
+#: tools/editor/animation_editor.cpp
+msgid "Max. Angular Error:"
+msgstr "Max. Errore Angolare:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Max Optimizable Angle:"
+msgstr "Max. Angolo Ottimizzabile:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Optimize"
+msgstr "Ottimizza"
+
+#: tools/editor/animation_editor.cpp
+msgid "Key"
+msgstr "Key"
+
+#: tools/editor/animation_editor.cpp
+msgid "Transition"
+msgstr "Transizione"
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale Ratio:"
+msgstr "Ratio di scalatura"
+
+#: tools/editor/animation_editor.cpp
+msgid "Call Functions in Which Node?"
+msgstr "Chiama Funzioni in Quale Nodo?"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove invalid keys"
+msgstr "Rimuovi key invalidi"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove unresolved and empty tracks"
+msgstr "Rimuovi tracce Irrisolte e vuote"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-up all animations"
+msgstr "Pulisci tutte le animazioni"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up Animation(s) (NO UNDO!)"
+msgstr "Pulisci Animazione(i) (NO UNDO!)"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up"
+msgstr "Pulisci"
+
+#: tools/editor/array_property_edit.cpp
+msgid "Resize Array"
+msgstr "Ridimensiona Array"
+
+#: tools/editor/array_property_edit.cpp
+msgid "Change Array Value Type"
+msgstr "Cambia Tipo del Valore Array"
+
+#: tools/editor/array_property_edit.cpp
+msgid "Change Array Value"
+msgstr "Cambia Valore Array"
+
+#: tools/editor/call_dialog.cpp
+msgid "Method List For '%s':"
+msgstr "Lista Metodi Per '%s':"
+
+#: tools/editor/call_dialog.cpp
+msgid "Call"
+msgstr "Chiama"
+
+#: tools/editor/call_dialog.cpp
+msgid "Method List:"
+msgstr "Lista Metodi:"
+
+#: tools/editor/call_dialog.cpp
+msgid "Arguments:"
+msgstr "Argomenti:"
+
+#: tools/editor/call_dialog.cpp
+msgid "Return:"
+msgstr "Ritorna:"
+
+#: tools/editor/code_editor.cpp
+msgid "Go to Line"
+msgstr "Vai alla Linea"
+
+#: tools/editor/code_editor.cpp
+msgid "Line Number:"
+msgstr "Numero Linea:"
+
+#: tools/editor/code_editor.cpp
+#, fuzzy
+msgid "No Matches"
+msgstr "Corrispondenze:"
+
+#: tools/editor/code_editor.cpp
+#, fuzzy
+msgid "Replaced %d Ocurrence(s)."
+msgstr "Rimpiazzate %d occorrenze."
+
+#: tools/editor/code_editor.cpp
+msgid "Replace"
+msgstr "Rimpiazza"
+
+#: tools/editor/code_editor.cpp
+#, fuzzy
+msgid "Replace All"
+msgstr "Rimpiazza"
+
+#: tools/editor/code_editor.cpp
+#, fuzzy
+msgid "Match Case"
+msgstr "Corrispondenze:"
+
+#: tools/editor/code_editor.cpp
+msgid "Whole Words"
+msgstr "Parole Intere"
+
+#: tools/editor/code_editor.cpp
+msgid "Selection Only"
+msgstr "Solo Selezione"
+
+#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp
+msgid "Find"
+msgstr "Trova"
+
+#: tools/editor/code_editor.cpp
+msgid "Next"
+msgstr "Successivo"
+
+#: tools/editor/code_editor.cpp
+msgid "Replaced %d ocurrence(s)."
+msgstr "Rimpiazzate %d occorrenze."
+
+#: tools/editor/code_editor.cpp
+msgid "Not found!"
+msgstr "Non trovato!"
+
+#: tools/editor/code_editor.cpp
+msgid "Replace By"
+msgstr "Rimpiazza con"
+
+#: tools/editor/code_editor.cpp
+msgid "Case Sensitive"
+msgstr "Case Sensitive"
+
+#: tools/editor/code_editor.cpp
+msgid "Backwards"
+msgstr "All'indietro"
+
+#: tools/editor/code_editor.cpp
+msgid "Prompt On Replace"
+msgstr "Richiedi Per Rimpiazzare"
+
+#: tools/editor/code_editor.cpp
+msgid "Skip"
+msgstr "Salta"
+
+#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp
+msgid "Line:"
+msgstr "Riga:"
+
+#: tools/editor/code_editor.cpp
+msgid "Col:"
+msgstr "Col:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Method in target Node must be specified!"
+msgstr "Il Metodo nel nodo di target deve essere specificato! "
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect To Node:"
+msgstr "Collega A Nodo:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Binds (Extra Params):"
+msgstr "Lega (Parametri Extra):"
+
+#: tools/editor/connections_dialog.cpp tools/editor/groups_editor.cpp
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/project_settings.cpp
+msgid "Add"
+msgstr "Aggiungi"
+
+#: tools/editor/connections_dialog.cpp tools/editor/dependency_editor.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp tools/editor/project_manager.cpp
+msgid "Remove"
+msgstr "Rimuovi"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Path To Node:"
+msgstr "Percorso Al Nodo:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Method In Node:"
+msgstr "Metodo Nel Nodo:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Make Function"
+msgstr "Rendi Funzione"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Deferred"
+msgstr "Differita"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Oneshot"
+msgstr "Oneshot"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect"
+msgstr "Connetti"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect '%s' to '%s'"
+msgstr "Connetti '%s' a '%s'"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Create Subscription"
+msgstr "Crea Sottoscrizione"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect.."
+msgstr "Connetti.."
+
+#: tools/editor/connections_dialog.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Disconnect"
+msgstr "Disconnetti"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Edit Connections.."
+msgstr "Modifica Connessioni.."
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connections:"
+msgstr "Connessioni:"
+
+#: tools/editor/create_dialog.cpp
+msgid "Create New"
+msgstr "Crea Nuovo"
+
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+msgid "Matches:"
+msgstr "Corrispondenze:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Search Replacement For:"
+msgstr "Cerca Rimpiazzo Per:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies For:"
+msgstr "Dipendenze Per:"
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"Scene '%s' is currently being edited.\n"
+"Changes will not take effect unless reloaded."
+msgstr ""
+"La scena '%s' è al momento in modifica.\n"
+"I cambiamenti non avranno effetto a meno che venga ricaricata."
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"Resource '%s' is in use.\n"
+"Changes will take effect when reloaded."
+msgstr ""
+"La risorsa '%s' è in uso.\n"
+"I cambiamenti avranno effetto quando sarà ricaricata."
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies"
+msgstr "Dipendenze"
+
+#: tools/editor/dependency_editor.cpp
+#, fuzzy
+msgid "Resource"
+msgstr "Risorse"
+
+#: tools/editor/dependency_editor.cpp tools/editor/project_manager.cpp
+#: tools/editor/project_settings.cpp
+#, fuzzy
+msgid "Path"
+msgstr "Percorso:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies:"
+msgstr "Dipendenze:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Fix Broken"
+msgstr "Riparare Rotti"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependency Editor"
+msgstr "Editor Dipendenze"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Search Replacement Resource:"
+msgstr "Cerca Risorsa di Rimpiazzo"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Owners Of:"
+msgstr "Proprietari Di:"
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"The files being removed are required by other resources in order for them to "
+"work.\n"
+"Remove them anyway? (no undo)"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Remove selected files from the project? (no undo)"
+msgstr "Rimuovi i file selezionati dal progetto? (no undo)"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Error loading:"
+msgstr "Errore in caricamento:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Scene failed to load due to missing dependencies:"
+msgstr "Caricamento scena fallito per mancanza di dipendenze:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Open Anyway"
+msgstr "Apri Comunque"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Which action should be taken?"
+msgstr "Quale Azione deve essere intrapresa?"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Fix Dependencies"
+msgstr "Ripara Dipendenze"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Errors loading!"
+msgstr "Errori in caricamento!"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Permanently delete %d item(s)? (No undo!)"
+msgstr "Elimina permanentemente %d elementi? (No undo!)"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Owns"
+msgstr "Possiede"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Resources Without Explicit Ownership:"
+msgstr "Risorse Senza Proprietà Esplicita:"
+
+#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
+msgid "Orphan Resource Explorer"
+msgstr "Explorer Risorse Orfano"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Delete selected files?"
+msgstr "Eliminare i file selezionati?"
+
+#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/item_list_editor_plugin.cpp tools/editor/scenes_dock.cpp
+msgid "Delete"
+msgstr "Elimina"
+
+#: tools/editor/editor_data.cpp
+msgid "Updating Scene"
+msgstr "Aggiornamento Scena"
+
+#: tools/editor/editor_data.cpp
+msgid "Storing local changes.."
+msgstr "Memorizzando i cambiamenti locali.."
+
+#: tools/editor/editor_data.cpp
+msgid "Updating scene.."
+msgstr "Aggiornando la scena.."
+
+#: tools/editor/editor_dir_dialog.cpp
+msgid "Choose a Directory"
+msgstr "Scegli una Directory"
+
+#: tools/editor/editor_dir_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Create Folder"
+msgstr "Crea Cartella"
+
+#: tools/editor/editor_dir_dialog.cpp tools/editor/editor_file_dialog.cpp
+#: tools/editor/editor_plugin_settings.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Name:"
+msgstr "Nome:"
+
+#: tools/editor/editor_dir_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Could not create folder."
+msgstr "Impossibile creare cartella."
+
+#: tools/editor/editor_dir_dialog.cpp
+msgid "Choose"
+msgstr "Scegli"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "File Exists, Overwrite?"
+msgstr "File Esistente, Sovrascrivere?"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "All Recognized"
+msgstr "Tutti i Riconosciuti"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "All Files (*)"
+msgstr "Tutti i File (*)"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/quick_open.cpp tools/editor/scenes_dock.cpp
+msgid "Open"
+msgstr "Apri"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save"
+msgstr "Salva"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Save a File"
+msgstr "Salva un File"
+
+#: tools/editor/editor_file_dialog.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/script_create_dialog.cpp
+msgid "Path:"
+msgstr "Percorso:"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/scenes_dock.cpp
+msgid "Favorites:"
+msgstr "Preferiti:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Recent:"
+msgstr "Recenti:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Directories & Files:"
+msgstr "Directories & Files:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Preview:"
+msgstr "Anteprima:"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/script_editor_debugger.cpp
+msgid "File:"
+msgstr "File:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Filter:"
+msgstr "Filtro:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Must use a valid extension."
+msgstr "Necessaria un'estensione valida."
+
+#: tools/editor/editor_file_system.cpp
+msgid "Cannot go into subdir:"
+msgstr "Impossibile accedere alla subdirectory:"
+
+#: tools/editor/editor_file_system.cpp
+msgid "ScanSources"
+msgstr "ScansionaSorgenti"
+
+#: tools/editor/editor_help.cpp
+msgid "Search Classes"
+msgstr "Cerca Classi"
+
+#: tools/editor/editor_help.cpp
+msgid "Class List:"
+msgstr "Lista Classi:"
+
+#: tools/editor/editor_help.cpp tools/editor/property_editor.cpp
+msgid "Class:"
+msgstr "Classe:"
+
+#: tools/editor/editor_help.cpp tools/editor/scene_tree_editor.cpp
+#: tools/editor/script_create_dialog.cpp
+msgid "Inherits:"
+msgstr "Eredita:"
+
+#: tools/editor/editor_help.cpp
+msgid "Inherited by:"
+msgstr "Ereditato da:"
+
+#: tools/editor/editor_help.cpp
+msgid "Brief Description:"
+msgstr "Breve Descrizione:"
+
+#: tools/editor/editor_help.cpp
+msgid "Public Methods:"
+msgstr "Metodi Pubblici:"
+
+#: tools/editor/editor_help.cpp
+msgid "Members:"
+msgstr "Membri"
+
+#: tools/editor/editor_help.cpp
+msgid "GUI Theme Items:"
+msgstr "Elementi Tema GUI:"
+
+#: tools/editor/editor_help.cpp
+msgid "Signals:"
+msgstr "Segnali:"
+
+#: tools/editor/editor_help.cpp
+msgid "Constants:"
+msgstr "Costanti:"
+
+#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "Descrizione:"
+
+#: tools/editor/editor_help.cpp
+msgid "Method Description:"
+msgstr "Descrizione Metodo:"
+
+#: tools/editor/editor_help.cpp
+msgid "Search Text"
+msgstr "Cerca Testo"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Added:"
+msgstr "Agginto:"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Removed:"
+msgstr "Rimosso:"
+
+#: tools/editor/editor_import_export.cpp tools/editor/project_export.cpp
+msgid "Error saving atlas:"
+msgstr "Errore di salvataggio dell'atlas:"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Could not save atlas subtexture:"
+msgstr "Impossibile salvare la substruttura dell'atlas"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Storing File:"
+msgstr "Memorizzazione File:"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Packing"
+msgstr "Packing"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Exporting for %s"
+msgstr "Esportando per %s"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Setting Up.."
+msgstr "Impostando.."
+
+#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
+msgid "Re-Importing"
+msgstr "Re-Importando"
+
+#: tools/editor/editor_node.cpp
+msgid "Importing:"
+msgstr "Importo:"
+
+#: tools/editor/editor_node.cpp
+msgid "Node From Scene"
+msgstr "Nodo Da Scena"
+
+#: tools/editor/editor_node.cpp tools/editor/scenes_dock.cpp
+msgid "Re-Import.."
+msgstr "Re-Importa.."
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/resources_dock.cpp
+msgid "Error saving resource!"
+msgstr "Errore salvando la Risorsa!"
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/resources_dock.cpp
+msgid "Save Resource As.."
+msgstr "Salva Risorsa Come.."
+
+#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
+msgid "I see.."
+msgstr "Capisco.."
+
+#: tools/editor/editor_node.cpp
+msgid "Can't open file for writing:"
+msgstr "Impossibile aprire il file per la scrittura:"
+
+#: tools/editor/editor_node.cpp
+msgid "Requested file format unknown:"
+msgstr "Formato file richiesto sconosciuto:"
+
+#: tools/editor/editor_node.cpp
+msgid "Error while saving."
+msgstr "Errore durante il salvataggio."
+
+#: tools/editor/editor_node.cpp
+msgid "Saving Scene"
+msgstr "Salvataggio Scena"
+
+#: tools/editor/editor_node.cpp
+msgid "Analyzing"
+msgstr "Analizzo"
+
+#: tools/editor/editor_node.cpp
+msgid "Creating Thumbnail"
+msgstr "Creazione Miniature"
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied."
+msgstr ""
+"Impossibile salvare la scena. Probabili dipendenze (instanze) non sono state "
+"soddisfatte."
+
+#: tools/editor/editor_node.cpp
+msgid "Failed to load resource."
+msgstr "Caricamento della risorsa fallito."
+
+#: tools/editor/editor_node.cpp
+msgid "Can't load MeshLibrary for merging!"
+msgstr "Impossibile caricare MeshLibrary per l'unione!"
+
+#: tools/editor/editor_node.cpp
+msgid "Error saving MeshLibrary!"
+msgstr "Errore salvataggio MeshLibrary!"
+
+#: tools/editor/editor_node.cpp
+msgid "Can't load TileSet for merging!"
+msgstr "Impossibile caricare TileSet per unione!"
+
+#: tools/editor/editor_node.cpp
+msgid "Error saving TileSet!"
+msgstr "Errore di salvataggio TileSet!"
+
+#: tools/editor/editor_node.cpp
+msgid "Can't open export templates zip."
+msgstr "Impossibile aprire zip dei template d'esportazionie"
+
+#: tools/editor/editor_node.cpp
+msgid "Loading Export Templates"
+msgstr "Caricamento Template d'Esportazione"
+
+#: tools/editor/editor_node.cpp
+msgid "Error trying to save layout!"
+msgstr "Errore tentando di salvare il layout!"
+
+#: tools/editor/editor_node.cpp
+msgid "Default editor layout overridden."
+msgstr "Layout dell'editor di default ignorato."
+
+#: tools/editor/editor_node.cpp
+msgid "Layout name not found!"
+msgstr "Nome layout non trovato!"
+
+#: tools/editor/editor_node.cpp
+msgid "Restored default layout to base settings."
+msgstr "Ripristinato il layout di default ai settaggi di base."
+
+#: tools/editor/editor_node.cpp
+msgid "Copy Params"
+msgstr "Copia parametri"
+
+#: tools/editor/editor_node.cpp
+msgid "Set Params"
+msgstr "Imposta parametri"
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Paste Resource"
+msgstr "Incolla Risorsa"
+
+#: tools/editor/editor_node.cpp
+msgid "Copy Resource"
+msgstr "Copia Risorsa"
+
+#: tools/editor/editor_node.cpp
+msgid "Make Built-In"
+msgstr "Rendi Built-In"
+
+#: tools/editor/editor_node.cpp
+msgid "Make Sub-Resources Unique"
+msgstr "Rendi Sotto-risorse Uniche"
+
+#: tools/editor/editor_node.cpp
+msgid "There is no defined scene to run."
+msgstr "Non c'è nessuna scena definita da eseguire."
+
+#: tools/editor/editor_node.cpp
+msgid "Current scene was never saved, please save it prior to running."
+msgstr ""
+"La scena corrente non è mai stata salvata, per favore salvarla prima di "
+"eseguire."
+
+#: tools/editor/editor_node.cpp
+msgid "Could not start subprocess!"
+msgstr "Impossibile avviare subprocesso!"
+
+#: tools/editor/editor_node.cpp
+msgid "Open Scene"
+msgstr "Apri Scena"
+
+#: tools/editor/editor_node.cpp
+msgid "Open Base Scene"
+msgstr "Apri Scena Base"
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Open Scene.."
+msgstr "Apri scena rapido.."
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Open Script.."
+msgstr "Apri Script Rapido.."
+
+#: tools/editor/editor_node.cpp
+msgid "Yes"
+msgstr "Si"
+
+#: tools/editor/editor_node.cpp
+msgid "Close scene? (Unsaved changes will be lost)"
+msgstr "Chiudi scena? (I cambiamenti non salvati saranno persi)"
+
+#: tools/editor/editor_node.cpp
+msgid "Save Scene As.."
+msgstr "Salva Scena Come.."
+
+#: tools/editor/editor_node.cpp
+msgid "This scene has never been saved. Save before running?"
+msgstr "Questa scena non è mai stata salvata. Salvare prima di eseguire?"
+
+#: tools/editor/editor_node.cpp
+msgid "Please save the scene first."
+msgstr "Si prega di salvare prima la scena."
+
+#: tools/editor/editor_node.cpp
+msgid "Save Translatable Strings"
+msgstr "Salva Stringhe Traducibili"
+
+#: tools/editor/editor_node.cpp
+msgid "Export Mesh Library"
+msgstr "Esporta Libreria Mesh"
+
+#: tools/editor/editor_node.cpp
+msgid "Export Tile Set"
+msgstr "Esporta Tile Set"
+
+#: tools/editor/editor_node.cpp
+msgid "Quit"
+msgstr "Esci"
+
+#: tools/editor/editor_node.cpp
+msgid "Exit the editor?"
+msgstr "Uscire dall'editor?"
+
+#: tools/editor/editor_node.cpp
+msgid "Current scene not saved. Open anyway?"
+msgstr "Scena corrente non salvata. Aprire comunque?"
+
+#: tools/editor/editor_node.cpp
+msgid "Can't reload a scene that was never saved."
+msgstr "Impossibile ricaricare una scena che non è mai stata salvata."
+
+#: tools/editor/editor_node.cpp
+msgid "Revert"
+msgstr "Ripristina"
+
+#: tools/editor/editor_node.cpp
+msgid "This action cannot be undone. Revert anyway?"
+msgstr "Questa azione non può essere annullata. Ripristinare comunque?"
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Run Scene.."
+msgstr "Esegui Scena Rapido.."
+
+#: tools/editor/editor_node.cpp
+#, fuzzy
+msgid ""
+"Open Project Manager? \n"
+"(Unsaved changes will be lost)"
+msgstr "Chiudi scena? (I cambiamenti non salvati saranno persi)"
+
+#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
+msgid "Ugh"
+msgstr "Ugh"
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Error loading scene, it must be inside the project path. Use 'Import' to open "
+"the scene, then save it inside the project path."
+msgstr ""
+"Errore di caricamento scena, deve essere all'interno del percorso del "
+"progetto. Usare 'Importa' per aprire la scena, salvarla poi nel percorso del "
+"progetto."
+
+#: tools/editor/editor_node.cpp
+msgid "Error loading scene."
+msgstr "Errore di caricamento della scena."
+
+#: tools/editor/editor_node.cpp
+msgid "Scene '%s' has broken dependencies:"
+msgstr "La scena '%s' ha rotto le dipendenze:"
+
+#: tools/editor/editor_node.cpp
+msgid "Save Layout"
+msgstr "Salva layout"
+
+#: tools/editor/editor_node.cpp
+msgid "Delete Layout"
+msgstr "Elimina Layout"
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Default"
+msgstr "Default"
+
+#: tools/editor/editor_node.cpp
+msgid "Switch Scene Tab"
+msgstr "Cambia Tab di Scena"
+
+#: tools/editor/editor_node.cpp
+msgid "%d more file(s)"
+msgstr "%d altri file"
+
+#: tools/editor/editor_node.cpp
+msgid "%d more file(s) or folder(s)"
+msgstr "% altri file o cartelle"
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Scene"
+msgstr "Scena"
+
+#: tools/editor/editor_node.cpp
+msgid "Go to previously opened scene."
+msgstr "Vai alla scena precedentemente aperta."
+
+#: tools/editor/editor_node.cpp
+msgid "Operations with scene files."
+msgstr "Operazioni con i file delle scene."
+
+#: tools/editor/editor_node.cpp
+msgid "New Scene"
+msgstr "Nuova scena"
+
+#: tools/editor/editor_node.cpp
+msgid "New Inherited Scene.."
+msgstr "Nuova Scena Ereditata.."
+
+#: tools/editor/editor_node.cpp
+msgid "Open Scene.."
+msgstr "Apri Scena"
+
+#: tools/editor/editor_node.cpp
+msgid "Save Scene"
+msgstr "Salva Scena"
+
+#: tools/editor/editor_node.cpp
+msgid "Close Scene"
+msgstr "Chiudi Scena"
+
+#: tools/editor/editor_node.cpp
+msgid "Close Goto Prev. Scene"
+msgstr "Vai a Scena Preced."
+
+#: tools/editor/editor_node.cpp
+msgid "Open Recent"
+msgstr "Apri Recente"
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Search File.."
+msgstr "Ricerca File Rapida.."
+
+#: tools/editor/editor_node.cpp
+msgid "Convert To.."
+msgstr "Converti In.."
+
+#: tools/editor/editor_node.cpp
+msgid "Translatable Strings.."
+msgstr "Stringhe Traducibili.."
+
+#: tools/editor/editor_node.cpp
+msgid "MeshLibrary.."
+msgstr "MeshLibrary.."
+
+#: tools/editor/editor_node.cpp
+msgid "TileSet.."
+msgstr "TileSet.."
+
+#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Redo"
+msgstr "Redo"
+
+#: tools/editor/editor_node.cpp
+msgid "Run Script"
+msgstr "Esegui Script"
+
+#: tools/editor/editor_node.cpp
+msgid "Project Settings"
+msgstr "Impostazioni Progetto"
+
+#: tools/editor/editor_node.cpp
+msgid "Revert Scene"
+msgstr "Ripristina Scena"
+
+#: tools/editor/editor_node.cpp
+msgid "Quit to Project List"
+msgstr "Esci alla Lista Progetti"
+
+#: tools/editor/editor_node.cpp
+msgid "Import assets to the project."
+msgstr "Importa asset nel progetto."
+
+#: tools/editor/editor_node.cpp
+msgid "Miscellaneous project or scene-wide tools."
+msgstr "Strumenti di progetto o scene vari"
+
+#: tools/editor/editor_node.cpp
+msgid "Tools"
+msgstr "Strumenti"
+
+#: tools/editor/editor_node.cpp
+msgid "Export the project to many platforms."
+msgstr "Esporta il progetto a diverse piattaforme."
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Export"
+msgstr "Esporta"
+
+#: tools/editor/editor_node.cpp
+msgid "Play the project (F5)."
+msgstr "Esegui il progetto (F5)."
+
+#: tools/editor/editor_node.cpp
+#, fuzzy
+msgid "Pause the scene"
+msgstr "Esegui scena personalizzata"
+
+#: tools/editor/editor_node.cpp
+msgid "Stop the scene (F8)."
+msgstr "Ferma la scena (F8)."
+
+#: tools/editor/editor_node.cpp
+msgid "Play the edited scene (F6)."
+msgstr "Esegui la scena in modifica (F6)."
+
+#: tools/editor/editor_node.cpp
+msgid "Play custom scene"
+msgstr "Esegui scena personalizzata"
+
+#: tools/editor/editor_node.cpp
+msgid "Debug options"
+msgstr "Opzioni di Debug"
+
+#: tools/editor/editor_node.cpp
+msgid "Live Editing"
+msgstr "Editing Live"
+
+#: tools/editor/editor_node.cpp
+msgid "File Server"
+msgstr "File Server"
+
+#: tools/editor/editor_node.cpp
+msgid "Deploy Remote Debug"
+msgstr "Distribuisci Debug Remoto"
+
+#: tools/editor/editor_node.cpp
+msgid "Deploy File Server Clients"
+msgstr "Distribuisci i Client del File Server"
+
+#: tools/editor/editor_node.cpp
+msgid "Visible Collision Shapes"
+msgstr "Forme di Collisione Visibili"
+
+#: tools/editor/editor_node.cpp
+msgid "Visible Navigation"
+msgstr "Navigazione Visibile"
+
+#: tools/editor/editor_node.cpp tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Settings"
+msgstr "Impostazioni"
+
+#: tools/editor/editor_node.cpp tools/editor/settings_config_dialog.cpp
+msgid "Editor Settings"
+msgstr "Impostazioni Editor"
+
+#: tools/editor/editor_node.cpp
+msgid "Editor Layout"
+msgstr "Layout dell'Editor"
+
+#: tools/editor/editor_node.cpp
+msgid "Install Export Templates"
+msgstr "Installa Template di Esportazione"
+
+#: tools/editor/editor_node.cpp
+msgid "About"
+msgstr "About"
+
+#: tools/editor/editor_node.cpp
+msgid "Alerts when an external resource has changed."
+msgstr "Avverti quando una risorsa esterna è stata modificata."
+
+#: tools/editor/editor_node.cpp
+msgid "Spins when the editor window repaints!"
+msgstr "Gira quando la finestra dell'editor viene ridisegnata. "
+
+#: tools/editor/editor_node.cpp
+msgid "Update Always"
+msgstr "Aggiorna Sempre"
+
+#: tools/editor/editor_node.cpp
+msgid "Update Changes"
+msgstr "Aggiorna Cambiamenti"
+
+#: tools/editor/editor_node.cpp
+msgid "Inspector"
+msgstr "Inspector"
+
+#: tools/editor/editor_node.cpp
+msgid "Create a new resource in memory and edit it."
+msgstr "Crea una nuova risorsa in memoria e modificala."
+
+#: tools/editor/editor_node.cpp
+msgid "Load an existing resource from disk and edit it."
+msgstr "Carica una risorsa esistente dal disco e modificala."
+
+#: tools/editor/editor_node.cpp
+msgid "Save the currently edited resource."
+msgstr "Salva la risorsa in modifica"
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save As.."
+msgstr "Salva Come.."
+
+#: tools/editor/editor_node.cpp
+msgid "Go to the previous edited object in history."
+msgstr "Vai all'ultimo oggetto modificato nella cronologia."
+
+#: tools/editor/editor_node.cpp
+msgid "Go to the next edited object in history."
+msgstr "Vai al prossimo oggetto modificato nella cronologia."
+
+#: tools/editor/editor_node.cpp
+msgid "History of recently edited objects."
+msgstr "Cronologia di oggetti recentemente modificati."
+
+#: tools/editor/editor_node.cpp
+msgid "Object properties."
+msgstr "Proprietà oggetto."
+
+#: tools/editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "FileSystem"
+
+#: tools/editor/editor_node.cpp
+msgid "Output"
+msgstr "Output"
+
+#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
+#: tools/editor/import_settings.cpp
+msgid "Re-Import"
+msgstr "Re-Importa"
+
+#: tools/editor/editor_node.cpp tools/editor/editor_plugin_settings.cpp
+msgid "Update"
+msgstr "Aggiorna"
+
+#: tools/editor/editor_node.cpp
+msgid "Thanks from the Godot community!"
+msgstr "Grazie dalla comunità di Godot!"
+
+#: tools/editor/editor_node.cpp
+msgid "Thanks!"
+msgstr "Grazie!"
+
+#: tools/editor/editor_node.cpp
+msgid "Import Templates From ZIP File"
+msgstr "Importa templates Da File ZIP"
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Export Project"
+msgstr "Esporta Progetto"
+
+#: tools/editor/editor_node.cpp
+msgid "Export Library"
+msgstr "Esporta Libreria"
+
+#: tools/editor/editor_node.cpp
+msgid "Merge With Existing"
+msgstr "Unisci Con Esistente"
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Password:"
+msgstr "Password:"
+
+#: tools/editor/editor_node.cpp
+msgid "Open & Run a Script"
+msgstr "Apri e Esegui uno Script"
+
+#: tools/editor/editor_node.cpp
+msgid "Load Errors"
+msgstr "Carica Errori"
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Installed Plugins:"
+msgstr ""
+
+#: tools/editor/editor_plugin_settings.cpp
+#, fuzzy
+msgid "Version:"
+msgstr "Descrizione:"
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Author:"
+msgstr ""
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Status:"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Stop Profiling"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Start Profiling"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Measure:"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+#, fuzzy
+msgid "Frame Time (sec)"
+msgstr "Tempo(i) di Crossfade: "
+
+#: tools/editor/editor_profiler.cpp
+#, fuzzy
+msgid "Average Time (sec)"
+msgstr "Tempo(i) di Crossfade: "
+
+#: tools/editor/editor_profiler.cpp
+#, fuzzy
+msgid "Frame %"
+msgstr "Aggiungi frame"
+
+#: tools/editor/editor_profiler.cpp
+#, fuzzy
+msgid "Fixed Frame %"
+msgstr "Aggiungi frame"
+
+#: tools/editor/editor_profiler.cpp tools/editor/script_editor_debugger.cpp
+msgid "Time:"
+msgstr "Tempo:"
+
+#: tools/editor/editor_profiler.cpp
+#, fuzzy
+msgid "Inclusive"
+msgstr "Includi"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Self"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame #:"
+msgstr ""
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Please wait for scan to complete."
+msgstr "Si prega di attendere che lo scan venga completato."
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Current scene must be saved to re-import."
+msgstr "La scena corrente deve essere salvata per re-importare,"
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Save & Re-Import"
+msgstr "Salva e Re-Importa"
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Re-Import Changed Resources"
+msgstr "Re-Importando Risorse Cambiate"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Write your logic in the _run() method."
+msgstr "Scrivi la logica nel metodo _run()."
+
+#: tools/editor/editor_run_script.cpp
+msgid "There is an edited scene already."
+msgstr "Vi è già una scena correntemente modificata."
+
+#: tools/editor/editor_run_script.cpp
+msgid "Couldn't instance script:"
+msgstr "Impossibile istanziare script:"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Did you forget the 'tool' keyword?"
+msgstr "Hai dimenticato la keyword 'tool'?"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Couldn't run script:"
+msgstr "Impossibile eseguire lo script:"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Did you forget the '_run' method?"
+msgstr "Hai dimenticato il metodo '_run'?"
+
+#: tools/editor/editor_settings.cpp
+msgid "Default (Same as Editor)"
+msgstr "Default (Stesso che Editor)"
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Select Node(s) to Import"
+msgstr "Scegli Nodo(i) da Importare"
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Scene Path:"
+msgstr "Percorso Scena:"
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Import From Node:"
+msgstr "Importa Da Nodo:"
+
+#: tools/editor/file_type_cache.cpp
+msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
+msgstr ""
+"Impossibile aprire file_type_cache.cch per scrittura, non salvo la cache dei "
+"tipi di file!"
+
+#: tools/editor/groups_editor.cpp
+msgid "Add to Group"
+msgstr "Aggiungi a Gruppo"
+
+#: tools/editor/groups_editor.cpp
+msgid "Remove from Group"
+msgstr "Rimuovi da Gruppo"
+
+#: tools/editor/groups_editor.cpp
+msgid "Group Editor"
+msgstr "Editor Gruppo"
+
+#: tools/editor/groups_editor.cpp tools/editor/project_export.cpp
+msgid "Group"
+msgstr "Gruppo"
+
+#: tools/editor/groups_editor.cpp
+msgid "Node Group(s)"
+msgstr "Gruppo(i) Nodi"
+
+#: tools/editor/import_settings.cpp
+msgid "Imported Resources"
+msgstr "Risorse Importate"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "No source font file!"
+msgstr "Nessun file font sorgente!"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "No target font resource!"
+msgstr "Nessuna risorsa font di destinazione!"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Can't load/process source font."
+msgstr "Impossibile caricare/processare il font sorgente."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Couldn't save font."
+msgstr "Impossibile salvare font."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Source Font:"
+msgstr "Font Sorgente:"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Source Font Size:"
+msgstr "Dimensione Font sorgente:"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Dest Resource:"
+msgstr "Risorsa di dest."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "The quick brown fox jumps over the lazy dog."
+msgstr "La rapida volpe bianca scavalca il cane pigro."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Test:"
+msgstr "Test:"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Options:"
+msgstr "Opzioni:"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Font Import"
+msgstr "Importazione font"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Accept"
+msgstr "Accetta"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid ""
+"This file is already a Godot font file, please supply a BMFont type file "
+"instead."
+msgstr ""
+"Questo file è già un file font di Godot, si prega di fornire invece un file "
+"di tipo BMfont."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Failed opening as BMFont file."
+msgstr "Apertura come BMFont file fallita."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Invalid font custom source."
+msgstr "Sorgente font personalizzato invalido."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Font"
+msgstr "Font"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "No meshes to import!"
+msgstr "Nessuna mesh da importare!"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Save path is empty!"
+msgstr "Il percorso di salvataggio è vuoto!"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Single Mesh Import"
+msgstr "Importa Mesh Singola"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Source Mesh(es):"
+msgstr "Mesh Sorgente(i)"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Target Path:"
+msgstr "Percorso di destinazione:"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Mesh"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Surface %d"
+msgstr "Superficie %d"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "No samples to import!"
+msgstr "Nessun sample da importare!"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path is empty."
+msgstr "Il percorso di destinazione vuoto."
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path must be a complete resource path."
+msgstr ""
+"Il percorso di destinazione deve essere un percorso completo di risorsa."
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path must exist."
+msgstr "Il percorso di destinazione deve esistere."
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Import Audio Samples"
+msgstr "Importa Sample Audio"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Source Sample(s):"
+msgstr "Sample Sorgente(i):"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#, fuzzy
+msgid "Audio Sample"
+msgstr "Aggiungi Sample"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "New Clip"
+msgstr "Nuova Clip"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Animation Options"
+msgstr "Opzioni Animazione"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Flags"
+msgstr "Flags"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Bake FPS:"
+msgstr "Bake FPS:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Optimizer"
+msgstr "Ottimizzatore"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Linear Error"
+msgstr "Errore Lineare Max"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Angular Error"
+msgstr "Errore Angolare Max"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Angle"
+msgstr "Angolo Max"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Clips"
+msgstr "Clips"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/project_manager.cpp tools/editor/project_settings.cpp
+msgid "Name"
+msgstr "Nome"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Start(s)"
+msgstr "Inizio(i)"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "End(s)"
+msgstr "Fine(i)"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Loop"
+msgstr "Loop"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Filters"
+msgstr "Filtri"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Source path is empty."
+msgstr "Il percorso sorgente è vuoto."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't load post-import script."
+msgstr "Impossibile caricare script di post-importazione"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Invalid/broken script for post-import."
+msgstr "Script di post-importazione invalido/non funzionante."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Error importing scene."
+msgstr "Errore di importazione scena."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import 3D Scene"
+msgstr "Importa Scena 3D"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Source Scene:"
+msgstr "Scena Sorgente:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Same as Target Scene"
+msgstr "Stesso che Scena di Destinazione"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Shared"
+msgstr "Condiviso"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Target Texture Folder:"
+msgstr "Cartella Texture di Destinazione:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Post-Process Script:"
+msgstr "Script di Post-Process:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Custom Root Node Type:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#, fuzzy
+msgid "Auto"
+msgstr "AutoLoad"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "The Following Files are Missing:"
+msgstr "I File Seguenti sono Mancanti:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import Anyway"
+msgstr "Importa ComunqueImporta Comunque"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import & Open"
+msgstr "Importa e Apri"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Edited scene has not been saved, open imported scene anyway?"
+msgstr ""
+"La scena modificata non è stata salvata, aprire la scena importata comunque?"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import Scene"
+msgstr "Importa Scena"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Importing Scene.."
+msgstr "Importando Scena.."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Running Custom Script.."
+msgstr "Eseguendo Script Personalizzato.."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't load post-import script:"
+msgstr "Impossibile caricare lo script di post-import:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Invalid/broken script for post-import:"
+msgstr "Script di post-import invalido/non funzionante:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Error running post-import script:"
+msgstr "Errore di esecuzione dello script di post-import"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import Image:"
+msgstr "Importa Immagine:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Can't import a file over itself:"
+msgstr "Impossibile importare un file su se stesso:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't localize path: %s (already local)"
+msgstr "Impossibile localizzare il percorso: %s (già locale)"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Saving.."
+msgstr "Salvataggio.."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#, fuzzy
+msgid "3D Scene Animation"
+msgstr "Rinomina Animazione"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Uncompressed"
+msgstr "Decompressi"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress Lossless (PNG)"
+msgstr "Comprimi Lossless (PNG)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress Lossy (WebP)"
+msgstr "Comprimi Lossy (WebP)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress (VRAM)"
+msgstr "Comprimi (VRAM)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Format"
+msgstr "Formato Texture"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Compression Quality (WebP):"
+msgstr "Qualità Compressione Texture (WebP)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Options"
+msgstr "Opzioni Texture"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Please specify some files!"
+msgstr "Si prega di specificare qualche file!"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "At least one file needed for Atlas."
+msgstr "Almeno un file è richiesto per l'Atlas."
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Error importing:"
+msgstr "Errore di importazione:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Only one file is required for large texture."
+msgstr "Solo un file è richiesto per una texture grande."
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Max Texture Size:"
+msgstr "Dimensione Texture Massima:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for Atlas (2D)"
+msgstr "Importa Textures per Atlas (2D)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Cell Size:"
+msgstr "Dimensione Cella:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Large Texture"
+msgstr "Texture Grande"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Large Textures (2D)"
+msgstr "Importa Texture Grandi (2D)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#, fuzzy
+msgid "Source Texture"
+msgstr "Texture Sorgente:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Base Atlas Texture"
+msgstr "Texture Base Atlas"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#, fuzzy
+msgid "Source Texture(s)"
+msgstr "Texture Sorgenti:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for 2D"
+msgstr "Importa Textures per 2D"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for 3D"
+msgstr "Importa Textures per 3D"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures"
+msgstr "Importa Textures"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#, fuzzy
+msgid "2D Texture"
+msgstr "Texture Grande"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#, fuzzy
+msgid "3D Texture"
+msgstr "Texture Grande"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#, fuzzy
+msgid "Atlas Texture"
+msgstr "Texture Base Atlas"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid ""
+"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to "
+"the project."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture(s):"
+msgstr "Texture Sorgenti:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Crop empty space."
+msgstr "Ritaglia spazio vuoto."
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#, fuzzy
+msgid "Texture"
+msgstr "Testo"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Large Texture"
+msgstr "Importa Texture Grande"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Load Source Image"
+msgstr "Carica Immagine Sorgente"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Slicing"
+msgstr "Taglio"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Inserting"
+msgstr "Inserimento"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Saving"
+msgstr "Salvataggio"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save large texture:"
+msgstr "Impossibile salvare texture grande:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Build Atlas For:"
+msgstr "Costruisci Atlas Per:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Loading Image:"
+msgstr "Immagine Caricamento:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't load image:"
+msgstr "Impossibile caricare immagine"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Converting Images"
+msgstr "Convertendo Immagini"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Cropping Images"
+msgstr "Tagliando Immagini"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Blitting Images"
+msgstr "Bliting Immagini"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save atlas image:"
+msgstr "Impossibile salvare l'immagine di atlas:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save converted texture:"
+msgstr "Impossibile salvare la texture convertita:"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Invalid source!"
+msgstr "Sorgente invalida!"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Invalid translation source!"
+msgstr "Sorgente traduzione invalida!"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Column"
+msgstr "Colonna"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#: tools/editor/script_create_dialog.cpp
+msgid "Language"
+msgstr "Linguaggio"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "No items to import!"
+msgstr "Nessun elemento da importare!"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "No target path!"
+msgstr "Nessun percorso di destinazione!"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Translations"
+msgstr "Importa Traduzioni"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Couldn't import!"
+msgstr "Impossibile Importare!"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Translation"
+msgstr "Importa Traduzione"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Source CSV:"
+msgstr "CSV Sorgente:"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Ignore First Row"
+msgstr "Ignora Prima Riga"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Compress"
+msgstr "Comprimi"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Add to Project (engine.cfg)"
+msgstr "Aggiungi a Progetto (engine.cfg)"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Languages:"
+msgstr "Importa Lingue:"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#, fuzzy
+msgid "Translation"
+msgstr "Traduzioni"
+
+#: tools/editor/multi_node_edit.cpp
+msgid "MultiNode Set"
+msgstr "MultiNode Set"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Toggle Autoplay"
+msgstr "Abilità Autoplay"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Animation Name:"
+msgstr "Nuovo Nome Animazione:"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Anim"
+msgstr "Nuova Animazione"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Animation Name:"
+msgstr "Cambia Nome Animazione:"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Remove Animation"
+msgstr "Rimuovi Animazione"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Invalid animation name!"
+msgstr "ERRORE: Nome animazione invalido!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Animation name already exists!"
+msgstr "ERRORE: Il nome dell'animazione esiste già!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Rinomina Animazione"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Animation"
+msgstr "Aggiungi Animazione"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Next Changed"
+msgstr "Blend Next Changed"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Blend Time"
+msgstr "Cambia tempo di Blend"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load Animation"
+msgstr "Carica Animazione"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Duplica Animazione"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to copy!"
+msgstr "ERRORE: Nessuna animazione da copiare!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation resource on clipboard!"
+msgstr "ERRORE; Nessuna risorsa animazione nella clipboard!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Pasted Animation"
+msgstr "Animazione Incollata"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Paste Animation"
+msgstr "Incolla Animazione"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to edit!"
+msgstr "ERRORE: Nessuna animazione da modificare!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from current pos. (A)"
+msgstr "Esegui la seguente animazione al contrario dalla posizione corrente (A)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from end. (Shift+A)"
+msgstr "Esegui la seguente animazione al contrario dalla fine. (Shift+A)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Stop animation playback. (S)"
+msgstr "Ferma il playback dell'animazione. (S)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from start. (Shift+D)"
+msgstr "Esegui l'animazione seguente dall'inizio (Shift+D)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from current pos. (D)"
+msgstr "Esegui la seguente animazione dalla posizione corrente (D)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation position (in seconds)."
+msgstr "Posizione animazione (in secondi)."
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Scale animation playback globally for the node."
+msgstr "Scala playback dell'animazione globalmente per il nodo."
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create new animation in player."
+msgstr "Crea nuova animazione nel player."
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load an animation from disk."
+msgstr "Carica un'animazione da disco."
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save the current animation"
+msgstr "Salva l'animazione corrente"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Display list of animations in player."
+msgstr "Mostra una lista di animazioni nel player."
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Autoplay on Load"
+msgstr "Autoplay al Caricamento"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Edit Target Blend Times"
+msgstr "Modifica i tempi di Blend della destinazione"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Tools"
+msgstr "Strumenti di Animazione"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Copy Animation"
+msgstr "Copia Animazione"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Crea Nuova Animazione"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Name:"
+msgstr "Nome Animazione:"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/script_create_dialog.cpp
+msgid "Error!"
+msgstr "Errore!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Times:"
+msgstr "Tempi di Blend"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Next (Auto Queue):"
+msgstr "Successivo (Coda Automatica):"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Cross-Animation Blend Times"
+msgstr "Tempi di Blend Cross-Animation"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
+msgid "Animation"
+msgstr "Animazioni"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "New name:"
+msgstr "Nuovo nome:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Scale:"
+msgstr "Scala"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade In (s):"
+msgstr "Fade In (s):"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade Out (s):"
+msgstr "Fade Out (s):"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend"
+msgstr "Fondi"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix"
+msgstr "Mischia"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Auto Restart:"
+msgstr "Restart Automatico:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Restart (s):"
+msgstr "Restart (s):"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Random Restart (s):"
+msgstr "Restart Casuale(i):"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Start!"
+msgstr "Inizia"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Amount:"
+msgstr "Quantità:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend:"
+msgstr "Blend:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 0:"
+msgstr "Blend 0:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 1:"
+msgstr "Blend 1:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "X-Fade Time (s):"
+msgstr "Tempo(i) di Crossfade: "
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Current:"
+msgstr "Corrente"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Add Input"
+msgstr "Aggiungi Input"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Clear Auto-Advance"
+msgstr "Pulisci Auto-Avanzamento"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Set Auto-Advance"
+msgstr "Imposta Auto-Avanzamento"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Delete Input"
+msgstr "Elimina Input"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Rename"
+msgstr "Rinomina"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is valid."
+msgstr "Animation tree valido."
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is invalid."
+msgstr "Animation tree invalido."
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation Node"
+msgstr "Nodo Animazione"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "OneShot Node"
+msgstr "Nodo OneShot"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix Node"
+msgstr "Node Mix"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend2 Node"
+msgstr "Nodo Blend2"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend3 Node"
+msgstr "Nodo Blend3"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend4 Node"
+msgstr "Nodo Blend4"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeScale Node"
+msgstr "Nodo TimeScale"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeSeek Node"
+msgstr "Nodo TimeScale"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Transition Node"
+msgstr "Nodo Transizione"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Import Animations.."
+msgstr "Importa animazioni.."
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Edit Node Filters"
+msgstr "Modifica Filtri Nodi"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Filters.."
+msgstr "Filtri.."
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Parsing %d Triangles:"
+msgstr "Elaborazione %d Triangoli:"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Triangle #"
+msgstr "Triangolo #"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Light Baker Setup:"
+msgstr "Impostazioni Baker Luci:"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Parsing Geometry"
+msgstr "Elaborazione Geometria"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Fixing Lights"
+msgstr "Aggiustando le Luci"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Making BVH"
+msgstr "Making BVH"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Creating Light Octree"
+msgstr "Creazione Octree Luci"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Creating Octree Texture"
+msgstr "Creazione Octree Texture"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Transfer to Lightmaps:"
+msgstr "Trasferisci a Lightmap:"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Allocating Texture #"
+msgstr "Allocazione Texture #"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Baking Triangle #"
+msgstr "Backing Triangoli #"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Post-Processing Texture #"
+msgstr "Texture Post-Processing #"
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "BakedLightInstance does not contain a BakedLight resource."
+msgstr "BakedLightInstance non contiene una risorsa BakedLight."
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "Bake!"
+msgstr "Bake!"
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "Reset the lightmap octree baking process (start over)."
+msgstr "Resetta il processo di baking dell'octree (ricomincia da capo)."
+
+#: tools/editor/plugins/camera_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Preview"
+msgstr "Anteprima"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Configure Snap"
+msgstr "Configura Snap"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid Offset:"
+msgstr "Offset Griglia:"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid Step:"
+msgstr "Step:griglia"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Offset:"
+msgstr "Offset Rotazione:"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Step:"
+msgstr "Step Rotazione:"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Pivot"
+msgstr "Perno di Movimento"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Action"
+msgstr "Azione di spostamento"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit IK Chain"
+msgstr "Modifica Catena IK"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit CanvasItem"
+msgstr "Modifica CanvasItem"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors"
+msgstr "Cambia Ancore"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom (%):"
+msgstr "Zoom(%):"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Paste Pose"
+msgstr "Incolla Posa"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Select Mode (Q)"
+msgstr "Modalità di Selezione(Q)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Drag: Rotate"
+msgstr "Trascina: Ruota"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+Drag: Move"
+msgstr "Alt+Drag: Muovi"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)."
+msgstr ""
+"Premi 'v' per Cambiare Perno, 'Shift+v' per Trascinare il Pernno (durante lo "
+"spostamento)."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+RMB: Depth list selection"
+msgstr "Alt+RMB: Selezione Lista Profondità"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Move Mode (W)"
+msgstr "Modalità Movimento (W)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Mode (E)"
+msgstr "Modalità Rotazione (E)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid ""
+"Show a list of all objects at the position clicked\n"
+"(same as Alt+RMB in select mode)."
+msgstr ""
+"Mostra una lista di tutti gli oggetti alla posizione cliccata\n"
+"(identico a Alt+RMB in modalità selezione)."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Click to change object's rotation pivot."
+msgstr "Clicca per cambiare il perno di rotazione dell'oggetto."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Pan Mode"
+msgstr "Modalità di Pan"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Lock the selected object in place (can't be moved)."
+msgstr "Blocca l'oggetto selezionato sul posto (non può essere mosso)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Unlock the selected object (can be moved)."
+msgstr "Sblocca l'oggetto selezionato (può essere mosso). "
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Makes sure the object's children are not selectable."
+msgstr "Accerta che I figli dell'oggetto non siano selezionabili."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Restores the object's children's ability to be selected."
+msgstr "Ripristina l'abilità dei figli dell'oggetto di essere selezionati."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Edit"
+msgstr "Modifica"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Snap"
+msgstr "Usa lo Snap"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Show Grid"
+msgstr "Mostra Griglia"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Rotation Snap"
+msgstr "Usa lo Snap di Rotazione"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap Relative"
+msgstr "Snap Relativo"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Configure Snap.."
+msgstr "Configura Snap..."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Pixel Snap"
+msgstr "Usa Snap a Pixel"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Expand to Parent"
+msgstr "Espandi a Genitore"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Skeleton.."
+msgstr "Scheletro.."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make Bones"
+msgstr "Crea Ossa"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Bones"
+msgstr "Elimina Ossa"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make IK Chain"
+msgstr "Crea Catena IK"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear IK Chain"
+msgstr "Elimina Catena IK"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View"
+msgstr "Vista"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom In"
+msgstr "Zoom In"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Out"
+msgstr "Zoom Out"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Reset"
+msgstr "Zoom Reset"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Set.."
+msgstr "Imposta Zoom.."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center Selection"
+msgstr "Centra Selezione"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Frame Selection"
+msgstr "Selezione Frame"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Anchor"
+msgstr "Ancora"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Keys (Ins)"
+msgstr "Inserisci Keys (Ins)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key"
+msgstr "Inserisci Key"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key (Existing Tracks)"
+msgstr "Inserisci Key (Tracce Esistenti)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Copy Pose"
+msgstr "Copia Posa"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Pose"
+msgstr "Pulisci Posa"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Set a Value"
+msgstr "Imposta un Valore"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap (Pixels):"
+msgstr "Snap (Pixels):"
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create Poly"
+msgstr "Crea Poly"
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Edit Poly"
+msgstr "Modifica Poly"
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Edit Poly (Remove Point)"
+msgstr "Modifica Poly (Rimuovi Punto)"
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr "Crea un nuovo poligono dal nulla."
+
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+msgid "Create Poly3D"
+msgstr "Crea Poly3D"
+
+#: tools/editor/plugins/collision_shape_2d_editor_plugin.cpp
+msgid "Set Handle"
+msgstr "Imposta Maniglia"
+
+#: tools/editor/plugins/color_ramp_editor_plugin.cpp
+msgid "Add/Remove Color Ramp Point"
+msgstr "Aggiungi/Rimuovi Punto Rampa Colori"
+
+#: tools/editor/plugins/color_ramp_editor_plugin.cpp
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Color Ramp"
+msgstr "Modifica Rampa Colori"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Creating Mesh Library"
+msgstr "Creazione Libreria Mesh"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Thumbnail.."
+msgstr "Miniatura.."
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove item %d?"
+msgstr "Rimuovi elemento %d?"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Add Item"
+msgstr "Aggiungi Elemento"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove Selected Item"
+msgstr "Rimuovi Elementi Selezionati"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import from Scene"
+msgstr "Importa da Scena"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Update from Scene"
+msgstr "Aggiorna da Scena"
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Item %d"
+msgstr "Elemento %d"
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Items"
+msgstr "Elementi"
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Item List Editor"
+msgstr "Editor Lista Elementi"
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Occluder Polygon"
+msgstr "Crea Poligono di occlusione"
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Edit existing polygon:"
+msgstr "Modifica poligono esistente:"
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "LMB: Move Point."
+msgstr "LMB: Sposta punto."
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Ctrl+LMB: Split Segment."
+msgstr "Ctrl+LMB: dividi Segmento."
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "RMB: Erase Point."
+msgstr "RMB: Elimina Punto."
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh is empty!"
+msgstr "La mesh è vuota!"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Trimesh Body"
+msgstr "Crea Corpo Trimesh Statico"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Convex Body"
+msgstr "Crea Corpo Convesso Statico"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "This doesn't work on scene root!"
+msgstr "Questo non funziona sulla root della scena! "
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Shape"
+msgstr "Crea Forma Trimesh"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Shape"
+msgstr "Crea Forma Convessa"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Navigation Mesh"
+msgstr "Crea Mesh di Navigazione"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "MeshInstance lacks a Mesh!"
+msgstr "MeshInstance manca di una Mesh!"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Could not create outline!"
+msgstr "Impossiblile creare outline!"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline"
+msgstr "Crea Outline"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Static Body"
+msgstr "Crea Corpo Statico Trimesh"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Static Body"
+msgstr "Crea Corpo Statico Convesso"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Collision Sibling"
+msgstr "Crea Fratello di Collisione Trimesh"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Collision Sibling"
+msgstr "Crea Fratello di Collisione Convessa"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh.."
+msgstr "Crea Mesh di Outline.."
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh"
+msgstr "Crea Mesh di Outline"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Outline Size:"
+msgstr "Dimensione Outline:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and no MultiMesh set in node)."
+msgstr ""
+"Nessuna sorgente mesh specificata (e nessun MultiMesh impostata nel nodo)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and MultiMesh contains no Mesh)."
+msgstr ""
+"Nessuna sorgente mesh specificata (e la MultiMesh non contiene alcuna Mesh)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (invalid path)."
+msgstr "Sorgente Mesh invalida (percorso invalido)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (not a MeshInstance)."
+msgstr "Sorgente Mesh invalida (non è una MeshInstance)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (contains no Mesh resource)."
+msgstr "Sorgente Mesh invalida (non contiene alcun a risorsa Mesh)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No surface source specified."
+msgstr "Nessuna sorgente di superficie specificata."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (invalid path)."
+msgstr "Sorgente superficie invalida (percorso invalido)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no geometry)."
+msgstr "Sorgente superficie invalida (nessuna geometria)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no faces)."
+msgstr "Sorgente superficie invalida (nessuna faccia)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Parent has no solid faces to populate."
+msgstr "Il genitore non ha facce solde da popolare."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Couldn't map area."
+msgstr "Impossibile mappare l'area."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Source Mesh:"
+msgstr "Seleziona una Mesh Sorgente:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Target Surface:"
+msgstr "Seleziona una Superficie di Target: "
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate Surface"
+msgstr "Popola la Superficie"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate MultiMesh"
+msgstr "Popola MultiMesh"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Target Surface:"
+msgstr "Superficie Target:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Source Mesh:"
+msgstr "Mesh Sorgente:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "X-Axis"
+msgstr "Asse-X"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Y-Axis"
+msgstr "Asse-Y"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Z-Axis"
+msgstr "Asse-Z"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh Up Axis:"
+msgstr "Asse Mesh Su"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Rotation:"
+msgstr "Rotazione Casuale"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Tilt:"
+msgstr "Inclinazione Casuale:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Scale:"
+msgstr "Scala Casuale:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate"
+msgstr "Popola"
+
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create Navigation Polygon"
+msgstr "Crea Poligono di Navigazione"
+
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Remove Poly And Point"
+msgstr "Rimuovi Poligono e Punto"
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Error loading image:"
+msgstr "Errore di caricamento immagine:"
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "No pixels with transparency > 128 in image.."
+msgstr "Nessun pixel con trasparenza >128 nell'immagine.."
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Set Emission Mask"
+msgstr "Imposta Maschera Emissione"
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Clear Emission Mask"
+msgstr "Cancella Maschera Emissione"
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Load Emission Mask"
+msgstr "Carica Maschera Emissione"
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generated Point Count:"
+msgstr "Conteggio Punti Generati:"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry."
+msgstr "Il nodo non contiene geometria."
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry (faces)."
+msgstr "Il nodo non contiene geometria (facce)."
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Faces contain no area!"
+msgstr "Le facce non contengono area!"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "No faces!"
+msgstr "Nessuna faccia!"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Generate AABB"
+msgstr "Genera AABB"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter From Mesh"
+msgstr "Crea Emitter Da Mesh"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter From Node"
+msgstr "Crea Emitter Da Nodo"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Clear Emitter"
+msgstr "Cancella Emitter"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter"
+msgstr "Crea Emitter:"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Positions:"
+msgstr "Posizioni di Emissione:"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Fill:"
+msgstr "Riempimento Emissione:"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Surface"
+msgstr "Superficie"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Volume"
+msgstr "Volume"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Point from Curve"
+msgstr "Rimuovi Punto da Curva"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Add Point to Curve"
+msgstr "Aggiungi Punto a Curva"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Point in Curve"
+msgstr "Sposta Punto in curva"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move In-Control in Curve"
+msgstr "Sposta In-Control sulla Curva"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Out-Control in Curve"
+msgstr "Sposta Out-Control sulla Curva"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr "Selezione Punti"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr "Shift+Trascina: Seleziona Punti di Controllo"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr "Click: Aggiungi Punto"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr "Click Destro: Elimina Punto"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Select Control Points (Shift+Drag)"
+msgstr "Seleziona Punti di Controllo (Shift+Trascina)"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr "Aggiungi Punto (in sapzio vuoto)"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Split Segment (in curve)"
+msgstr "Spezza Segmento (in curva)"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr "Elimina Punto"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Close Curve"
+msgstr "Chiudi curva"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Curve Point #"
+msgstr "Punto Curva #"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Point Pos"
+msgstr "Imposta Posizione Punti curva"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve In Pos"
+msgstr "Imposta Posizione Curve In"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Out Pos"
+msgstr "Imposta Posizione Curve Out"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Split Path"
+msgstr "Dividi Percorso"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Remove Path Point"
+msgstr "Rimuovi Punto Percorso"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create UV Map"
+msgstr "Crea UV Map"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Transform UV Map"
+msgstr "Trasla UV Map"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon 2D UV Editor"
+msgstr "Polygon 2D UV Editor"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Point"
+msgstr "Sposta Punto"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Ctrl: Rotate"
+msgstr "Ctrl: Ruota"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift: Move All"
+msgstr "Shift: Muovi Tutti"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift+Ctrl: Scale"
+msgstr "Shift+Ctrl: Scala"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Polygon"
+msgstr "Sposta Poligono"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Rotate Polygon"
+msgstr "Ruota Poligono"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Scale Polygon"
+msgstr "Scala Poligono"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon->UV"
+msgstr "Poligono->UV"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "UV->Polygon"
+msgstr "UV->Poligono"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Clear UV"
+msgstr "Cancella UV"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Snap"
+msgstr "Snap"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Enable Snap"
+msgstr "Abilita Snap"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid"
+msgstr "Griglia"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "ERROR: Couldn't load resource!"
+msgstr "ERROERE: Impossibile caricare la risorsa!"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Add Resource"
+msgstr "Aggiungi Risorsa"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Rename Resource"
+msgstr "Rinomina Risorsa"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Delete Resource"
+msgstr "Elimina Risorsa"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Resource clipboard is empty!"
+msgstr "Clipboard risorse vuota!"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Load Resource"
+msgstr "Carica Risorsa"
+
+#: tools/editor/plugins/rich_text_editor_plugin.cpp
+msgid "Parse BBCode"
+msgstr "Parse BBCode"
+
+#: tools/editor/plugins/sample_editor_plugin.cpp
+msgid "Length:"
+msgstr "Lunghezza:"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Open Sample File(s)"
+msgstr "Apri File(s) Sample"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "ERROR: Couldn't load sample!"
+msgstr "ERRORE: Impossibile caricare sample!"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Add Sample"
+msgstr "Aggiungi Sample"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Stop"
+msgstr "Stop"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Play"
+msgstr "Play"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Rename Sample"
+msgstr "Rinomina Sample"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Delete Sample"
+msgstr "Elimina Sample"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "16 Bits"
+msgstr "16 Bits"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "8 Bits"
+msgstr "8 Bits"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Stereo"
+msgstr "Stereo"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Mono"
+msgstr "Mono"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Format"
+msgstr "Formato"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Pitch"
+msgstr "Pitch"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Error while saving theme"
+msgstr "Errore durante il salvataggio."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Error saving"
+msgstr "Errore di salvataggio dell'atlas:"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Error importing theme"
+msgstr "Errore di importazione scena."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Error importing"
+msgstr "Errore di importazione:"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Import Theme"
+msgstr "Importa Scena"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Save Theme As.."
+msgstr "Salva Scena Come.."
+
+#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/project_export.cpp
+msgid "File"
+msgstr "File"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_editor.cpp
+msgid "New"
+msgstr "Nuovo"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save All"
+msgstr "Salva Tutto"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "History Prev"
+msgstr "Cronologia Succ."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "History Next"
+msgstr "Cronologia Prec."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Reload Theme"
+msgstr "Ricarica"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Save Theme"
+msgstr "Salva Scena"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Save Theme As"
+msgstr "Salva Scena Come.."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr "Sposta Su"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr "Sposta giù"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Indent Left"
+msgstr "Indenta Sinistra"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Indent Right"
+msgstr "Indenta Destra"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Toggle Comment"
+msgstr "Cambia a Commento"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Clone Down"
+msgstr "Clona Sotto"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Complete Symbol"
+msgstr "Completa Simbolo"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Trim Trailing Whitespace"
+msgstr "Taglia Spazi in Coda "
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Auto Indent"
+msgstr "Auto Indenta"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find.."
+msgstr "Trova.."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find Next"
+msgstr "Trova Successivo"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find Previous"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Replace.."
+msgstr "Rimpiazza.."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Goto Function.."
+msgstr "Vai a Funzione.."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Goto Line.."
+msgstr "Vai a Linea.."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Debug"
+msgstr "Debug"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Toggle Breakpoint"
+msgstr "Abilita Breakpoint"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Remove All Breakpoints"
+msgstr "Abilita Breakpoint"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Goto Next Breakpoint"
+msgstr "Vai a Step Successivo"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#, fuzzy
+msgid "Goto Previous Breakpoint"
+msgstr "Abilita Breakpoint"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Step Over"
+msgstr "Step Over"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Step Into"
+msgstr "Step Into"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Break"
+msgstr "Break"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Continue"
+msgstr "Continua"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Keep Debugger Open"
+msgstr "Mantieni Debugger Aperto"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Window"
+msgstr "Finestra"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Left"
+msgstr "Sposta a Sinistra"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Right"
+msgstr "Sposta a Destra"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Help"
+msgstr "Aiuto"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Contextual"
+msgstr "Contestuale"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Tutorials"
+msgstr "Tutorials"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Open https://godotengine.org at tutorials section."
+msgstr "Apri https://godotengine.org alla sezione tutorial."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Classes"
+msgstr "Classi"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search the class hierarchy."
+msgstr "Cerca nella gerarchia delle classi."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search Help"
+msgstr "Cerca Aiuto"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search the reference documentation."
+msgstr "Cerca Riferimenti nella documentazione."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Go to previous edited document."
+msgstr "Vai al documento precedentemente modificato."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Go to next edited document."
+msgstr "Vai al documento successivo."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Create Script"
+msgstr "Crea Script"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid ""
+"The following files are newer on disk.\n"
+"What action should be taken?:"
+msgstr ""
+"I file seguenti sono più recenti su disco. Che azione deve essere intrapresa?"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Reload"
+msgstr "Ricarica"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Resave"
+msgstr "Risalva"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Debugger"
+msgstr "Debugger"
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Vertex"
+msgstr "Vertice"
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Fragment"
+msgstr "Frammento"
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Lighting"
+msgstr "Illuminazione"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Constant"
+msgstr "Cambia Costante Scalare"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Constant"
+msgstr "Cambia Costante Vett."
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Constant"
+msgstr "Cambia Costante RGB"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Operator"
+msgstr "Cambia Operatore Scalare"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Operator"
+msgstr "Cambia Operatore Vett."
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Scalar Operator"
+msgstr "Cambia Operatore Scalare Vett."
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Operator"
+msgstr "Cambia Operatore RGB"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Toggle Rot Only"
+msgstr "Abilita Solo Rot"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Function"
+msgstr "Cambia Funzione Scalare"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Function"
+msgstr "Cambia Funzione Vett."
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Uniform"
+msgstr "Cambia Uniforme Scalare"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Uniform"
+msgstr "Cambia Uniforme Vett."
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Uniform"
+msgstr "Cambia Uniforme RGB"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Default Value"
+msgstr "Cambia Valore di Default"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change XForm Uniform"
+msgstr "Cambia Uniforme XForm"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Texture Uniform"
+msgstr "Cambia Uniforme Texture"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Cubemap Uniform"
+msgstr "Cambia Uniforme Cubemap"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Comment"
+msgstr "Cambia Commento"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Color Ramp"
+msgstr "Aggiungi/Rimuovi alla Rampa Colori"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Curve Map"
+msgstr "Aggiung/Rimuovi alla Mappa Curve"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Curve Map"
+msgstr "Modifica la Mappa Curve"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Input Name"
+msgstr "Cambia Nome Input"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Connect Graph Nodes"
+msgstr "Connetti Nodi Grafico"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Disconnect Graph Nodes"
+msgstr "Disconnetti Nodi Grafico"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Remove Shader Graph Node"
+msgstr "Rimuovi Nodo Grafico di Shader"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Move Shader Graph Node"
+msgstr "Sposta Nodo Grafico di Shader"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Duplicate Graph Node(s)"
+msgstr "Duplica Nodo(i) Grafico"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Delete Shader Graph Node(s)"
+msgstr "Elimina Nodo(i) Grafico di Shader"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Cyclic Connection Link"
+msgstr "Errore: Giunzione ciclica"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Missing Input Connections"
+msgstr "Errore: Connessioni Input MAncanti"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add Shader Graph Node"
+msgstr "Aggiungi Nodo Grafico Shader"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal"
+msgstr "Ortogonale"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective"
+msgstr "Prospettiva"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Aborted."
+msgstr "Transform Abortito."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Plane Transform."
+msgstr "Visualizza Tranform del Piano."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "X-Axis Transform."
+msgstr "Transform Asse-X"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Y-Axis Transform."
+msgstr "Transform Asse-Y"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Z-Axis Transform."
+msgstr "Transform Asse-Z"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling to %s%%."
+msgstr "Scalando a %s%%."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotating %s degrees."
+msgstr "Ruotando di %s gradi."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View."
+msgstr "Vista dal Basso"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom"
+msgstr "Basso"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View."
+msgstr "Vista dall'Alto."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top"
+msgstr "Alto"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View."
+msgstr "Vista dal Retro."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear"
+msgstr "Retro"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View."
+msgstr "Vista Frontale."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front"
+msgstr "Fronte"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View."
+msgstr "Vista Sinistra."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left"
+msgstr "Sinistra"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View."
+msgstr "Vista Destra."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right"
+msgstr "Destra"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Keying is disabled (no key inserted)."
+msgstr "Keying disabilitato (nessun key inserito)."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Animation Key Inserted."
+msgstr "Key d'Animazione Inserito."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Align with view"
+msgstr "Allinea a vista"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top (Num7)"
+msgstr "Alto (Num7)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom (Shift+Num7)"
+msgstr "Basso (Shift+Num7)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left (Num3)"
+msgstr "Sinistra (Num3)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right (Shift+Num3)"
+msgstr "Right (Shift+Num3)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front (Num1)"
+msgstr "Fronte (Num1)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear (Shift+Num1)"
+msgstr "Retro (Shift+Num1)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective (Num5)"
+msgstr "Prospettiva (Num5)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal (Num5)"
+msgstr "Ortogonale (Num5)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Environment"
+msgstr "Ambientazione"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Audio Listener"
+msgstr "Audio Listener"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Gizmos"
+msgstr "Gizmos"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Selection (F)"
+msgstr "Selezione (F)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Align with view (Ctrl+Shift+F)"
+msgstr "Allinea con vista (Ctrl+Shift+F)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "XForm Dialog"
+msgstr "Finestra di XForm"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "No scene selected to instance!"
+msgstr "Nessuna scena da istanziare selezionata!"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Instance at Cursor"
+msgstr "Istanzia a Cursore"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Could not instance scene!"
+msgstr "Impossibile istanziare la scena!"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Mode (R)"
+msgstr "Modalità Scala (R)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Transform"
+msgstr "Tipo Transform"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Local Coords"
+msgstr "Coordinate locali"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Dialog.."
+msgstr "Finestra di Transform.."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Default Light"
+msgstr "Usa Luce Default"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Default sRGB"
+msgstr "Usa sRGB Default"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "1 Viewport"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "2 Viewports"
+msgstr "Impostazioni Viewport"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports (Alt)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "3 Viewports"
+msgstr "Impostazioni Viewport"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports (Alt)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "4 Viewports"
+msgstr "Impostazioni Viewport"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Normal"
+msgstr "Mostra Normale"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Wireframe"
+msgstr "Mostra Wireframe"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Overdraw"
+msgstr "Mostra Overdraw"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Shadeless"
+msgstr "Mostra senza Shader"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Origin"
+msgstr "Visualizza Origine"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Grid"
+msgstr "Visualizza Griglia"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap Settings"
+msgstr "Impostazioni Snap"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate Snap:"
+msgstr "Trasla Snap: "
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Snap (deg.):"
+msgstr "Ruota Snap (deg.):"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Snap (%):"
+msgstr "Scala Snap (%):"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Viewport Settings"
+msgstr "Impostazioni Viewport"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Default Light Normal:"
+msgstr "Normale Luce di Default:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Ambient Light Color:"
+msgstr "Colore Luce Ambiente:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective FOV (deg.):"
+msgstr "FOV Prospettiva (deg.):"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Near:"
+msgstr "Visualizza Z-Near:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Far:"
+msgstr "Visualizza Z-Far:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Change"
+msgstr "Cambiamento Transform"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate:"
+msgstr "Transla:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate (deg.):"
+msgstr "Ruota (deg.):"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale (ratio):"
+msgstr "Scala (rateo):"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Type"
+msgstr "Tipo Transform"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Pre"
+msgstr "Pre"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Post"
+msgstr "Post"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "ERROR: Couldn't load frame resource!"
+msgstr "ERRORE; Impossibile caricare la risorsa frame!"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Frame"
+msgstr "Aggiungi frame"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Resource clipboard is empty or not a texture!"
+msgstr "Clipboard risorse vuota o non è una texture!"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Paste Frame"
+msgstr "Incolla Frame"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Empty"
+msgstr "Aggiungi vuoto"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation Loop"
+msgstr "Cambia Loop Animazione"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation FPS"
+msgstr "Cambia FPS ANimazione"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "(empty)"
+msgstr "(vuoto)"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animations"
+msgstr "Animazioni"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Speed (FPS):"
+msgstr "Velocità (FPS):"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animation Frames"
+msgstr "Frames Animazione"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (Before)"
+msgstr "Inserisci Vuoto (Prima)"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (After)"
+msgstr "Inserisci Vuoto (Dopo)"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Up"
+msgstr "Su"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Down"
+msgstr "Giù"
+
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Set region_rect"
+msgstr "Imposta region_rect"
+
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Sprite Region Editor"
+msgstr "Editor Regioni Sprite"
+
+#: tools/editor/plugins/style_box_editor_plugin.cpp
+msgid "StyleBox Preview:"
+msgstr "Anteprima StyleBox"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Can't save theme to file:"
+msgstr "Impossibile salvare il tema su file:"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add All Items"
+msgstr "Aggiungi Tutti gli Elementi"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add All"
+msgstr "Aggiungi Tutti"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove Item"
+msgstr "Rimuovi Elemento"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add Class Items"
+msgstr "Aggiungi Elementi di Classe"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Remove Class Items"
+msgstr "Rimuovi Elementi di Classe"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Create Template"
+msgstr "Crea Template"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio1"
+msgstr "CheckBox Radio1"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio2"
+msgstr "CheckBox Radio2"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Item"
+msgstr "Elemento"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Check Item"
+msgstr "Check Item"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Checked Item"
+msgstr "Checked Item"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Has"
+msgstr "Ha"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Many"
+msgstr "Molte"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp tools/editor/project_export.cpp
+msgid "Options"
+msgstr "Opzioni"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Have,Many,Several,Options!"
+msgstr "Ha, Molte, Diverse, Opzioni!"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 1"
+msgstr "Tab 1"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 2"
+msgstr "Tab 2"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 3"
+msgstr "Tab 3"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/scene_tree_editor.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Type:"
+msgstr "Tipo:"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Data Type:"
+msgstr "Tipo Dato:"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Icon"
+msgstr "Icona"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Style"
+msgstr "Stile"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Color"
+msgstr "Colore"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint TileMap"
+msgstr "Disegna TileMap"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Duplicate"
+msgstr "duplica"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase TileMap"
+msgstr "Cancella TileMap"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Bucket"
+msgstr "Secchiello"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Pick Tile"
+msgstr "Preleva Tile"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Select"
+msgstr "Seleziona"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase Selection"
+msgstr "Elimina Selezione"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Transpose"
+msgstr "Trasponi"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror X (A)"
+msgstr "Specchia X (A)"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror Y (S)"
+msgstr "Specchia Y (A)"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 0 degrees"
+msgstr "Ruota a 0 gradi"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 90 degrees"
+msgstr "Ruota a 90 gradi"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 180 degrees"
+msgstr "Ruota a 180 gradi"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 270 degrees"
+msgstr "Ruota a 270 gradi"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Could not find tile:"
+msgstr "Impossibile trovare tile:"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Item name or ID:"
+msgstr "Nome elemento o ID:"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from scene?"
+msgstr "Crea da scena?"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from scene?"
+msgstr "Unisci da scena?"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from Scene"
+msgstr "Crea da Scena?"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from Scene"
+msgstr "Unisci da Scena?"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Error"
+msgstr "Errore"
+
+#: tools/editor/project_export.cpp
+msgid "Edit Script Options"
+msgstr "Modifica le opzioni di script"
+
+#: tools/editor/project_export.cpp
+msgid "Please export outside the project folder!"
+msgstr "Si prega di esportare al di fuori della cartella del progetto!"
+
+#: tools/editor/project_export.cpp
+msgid "Error exporting project!"
+msgstr "Errore di esportazione del progetto!"
+
+#: tools/editor/project_export.cpp
+msgid "Error writing the project PCK!"
+msgstr "Errore di scrittura del PCK del progetto."
+
+#: tools/editor/project_export.cpp
+msgid "No exporter for platform '%s' yet."
+msgstr "Per ora non vi è esportatore per la piattaforma '%s'."
+
+#: tools/editor/project_export.cpp
+msgid "Include"
+msgstr "Includi"
+
+#: tools/editor/project_export.cpp
+msgid "Change Image Group"
+msgstr "Cambia Gruppo Immagine"
+
+#: tools/editor/project_export.cpp
+msgid "Group name can't be empty!"
+msgstr "Il nome del gruppo non può essere vuoto!"
+
+#: tools/editor/project_export.cpp
+msgid "Invalid character in group name!"
+msgstr "Carattere invalido nel nome del gruppo!"
+
+#: tools/editor/project_export.cpp
+msgid "Group name already exists!"
+msgstr "Il nome del gruppo è già esistente!"
+
+#: tools/editor/project_export.cpp
+msgid "Add Image Group"
+msgstr "Aggiungi Gruppo Immagini"
+
+#: tools/editor/project_export.cpp
+msgid "Delete Image Group"
+msgstr "Elimina Gruppo Immagini"
+
+#: tools/editor/project_export.cpp
+msgid "Atlas Preview"
+msgstr "Anteprima Atlas"
+
+#: tools/editor/project_export.cpp
+msgid "Project Export Settings"
+msgstr "Impostazioni Esportazione Progetto"
+
+#: tools/editor/project_export.cpp
+msgid "Target"
+msgstr "Target"
+
+#: tools/editor/project_export.cpp
+msgid "Export to Platform"
+msgstr "Esporta a Piattaforma"
+
+#: tools/editor/project_export.cpp
+msgid "Resources"
+msgstr "Risorse"
+
+#: tools/editor/project_export.cpp
+msgid "Export selected resources (including dependencies)."
+msgstr "Esporta le risorse selezionate (incluse le dipendenze)."
+
+#: tools/editor/project_export.cpp
+msgid "Export all resources in the project."
+msgstr "Esporta tutte le risorse nel progetto."
+
+#: tools/editor/project_export.cpp
+msgid "Export all files in the project directory."
+msgstr "Esporta tutti i file nella directory del progetto."
+
+#: tools/editor/project_export.cpp
+msgid "Export Mode:"
+msgstr "Modalità d'Esportazione:"
+
+#: tools/editor/project_export.cpp
+msgid "Resources to Export:"
+msgstr "Risorse da Esportare:"
+
+#: tools/editor/project_export.cpp
+msgid "Action"
+msgstr "Azione"
+
+#: tools/editor/project_export.cpp
+msgid ""
+"Filters to export non-resource files (comma-separated, e.g.: *.json, *.txt):"
+msgstr ""
+"Filtri per esportare file che non son risorse (separati con virgola, es.: *."
+"json, *.txt):"
+
+#: tools/editor/project_export.cpp
+msgid "Filters to exclude from export (comma-separated, e.g.: *.json, *.txt):"
+msgstr ""
+"Filtri per escludere dall'esportazione (separati con virgola, es.: *.json, *."
+"txt):"
+
+#: tools/editor/project_export.cpp
+msgid "Convert text scenes to binary on export."
+msgstr "Converti le scene in formato testuale in binario all'esportazione. "
+
+#: tools/editor/project_export.cpp
+msgid "Images"
+msgstr "Immagini"
+
+#: tools/editor/project_export.cpp
+msgid "Keep Original"
+msgstr "Mantieni l'originale"
+
+#: tools/editor/project_export.cpp
+msgid "Compress for Disk (Lossy, WebP)"
+msgstr "Comprimi per Disco (Lossy, WebP)"
+
+#: tools/editor/project_export.cpp
+msgid "Compress for RAM (BC/PVRTC/ETC)"
+msgstr "Comprimi per RAM (BC/PVRTC/ETC)"
+
+#: tools/editor/project_export.cpp
+msgid "Convert Images (*.png):"
+msgstr "Converti Immagini (*.png):"
+
+#: tools/editor/project_export.cpp
+msgid "Compress for Disk (Lossy) Quality:"
+msgstr "Qualità compressione per disco (Lossy):"
+
+#: tools/editor/project_export.cpp
+msgid "Shrink All Images:"
+msgstr "Riduci Tutte le Immagini: "
+
+#: tools/editor/project_export.cpp
+msgid "Compress Formats:"
+msgstr "Formati di Compressione:"
+
+#: tools/editor/project_export.cpp
+msgid "Image Groups"
+msgstr "Gruppi Immagini"
+
+#: tools/editor/project_export.cpp
+msgid "Groups:"
+msgstr "Gruppi:"
+
+#: tools/editor/project_export.cpp
+msgid "Compress Disk"
+msgstr "Comprimi Disco"
+
+#: tools/editor/project_export.cpp
+msgid "Compress RAM"
+msgstr "Comprimi RAM"
+
+#: tools/editor/project_export.cpp
+msgid "Compress Mode:"
+msgstr "Modalità di Compressione:"
+
+#: tools/editor/project_export.cpp
+msgid "Lossy Quality:"
+msgstr "Qualità Lossy:"
+
+#: tools/editor/project_export.cpp
+msgid "Atlas:"
+msgstr "Atlas:"
+
+#: tools/editor/project_export.cpp
+msgid "Shrink By:"
+msgstr "Riduci di:"
+
+#: tools/editor/project_export.cpp
+msgid "Preview Atlas"
+msgstr "Anteprima Atlas"
+
+#: tools/editor/project_export.cpp
+msgid "Image Filter:"
+msgstr "Filtro Immagine:"
+
+#: tools/editor/project_export.cpp
+msgid "Images:"
+msgstr "Immagini:"
+
+#: tools/editor/project_export.cpp
+msgid "Select None"
+msgstr "Seleziona Nulla"
+
+#: tools/editor/project_export.cpp
+msgid "Samples"
+msgstr "Samples"
+
+#: tools/editor/project_export.cpp
+msgid "Sample Conversion Mode: (.wav files):"
+msgstr "Modalità Conversione Sample (file .wav):"
+
+#: tools/editor/project_export.cpp
+msgid "Keep"
+msgstr "Mantieni"
+
+#: tools/editor/project_export.cpp
+msgid "Compress (RAM - IMA-ADPCM)"
+msgstr "Comprimi (RAM - IMA-ADPCM)"
+
+#: tools/editor/project_export.cpp
+msgid "Sampling Rate Limit (Hz):"
+msgstr "Limite Sampling Rate (Hz):"
+
+#: tools/editor/project_export.cpp
+msgid "Trim"
+msgstr "Ritaglia"
+
+#: tools/editor/project_export.cpp
+msgid "Trailing Silence:"
+msgstr "Silenzio di coda:"
+
+#: tools/editor/project_export.cpp
+#, fuzzy
+msgid "Script"
+msgstr "Esegui Script"
+
+#: tools/editor/project_export.cpp
+msgid "Script Export Mode:"
+msgstr "Modalità Esportazione Script:"
+
+#: tools/editor/project_export.cpp
+msgid "Text"
+msgstr "Testo"
+
+#: tools/editor/project_export.cpp
+msgid "Compiled"
+msgstr "Compilato"
+
+#: tools/editor/project_export.cpp
+msgid "Encrypted (Provide Key Below)"
+msgstr "Criptato (Fornisci la Chiave Sotto)"
+
+#: tools/editor/project_export.cpp
+msgid "Script Encryption Key (256-bits as hex):"
+msgstr "Chiave di Crittografia Script (256-bits come esadecimali):"
+
+#: tools/editor/project_export.cpp
+msgid "Export PCK/Zip"
+msgstr "Esporta PCK/Zip"
+
+#: tools/editor/project_export.cpp
+msgid "Export Project PCK"
+msgstr "Esporta Progetto PCK"
+
+#: tools/editor/project_export.cpp
+msgid "Export.."
+msgstr "Esporta.."
+
+#: tools/editor/project_export.cpp
+msgid "Project Export"
+msgstr "Esportazione Progetto"
+
+#: tools/editor/project_export.cpp
+msgid "Export Preset:"
+msgstr "Preset Esportazione:"
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, the path must exist!"
+msgstr "Percorso di progetto invalido, il percorso deve esistere!"
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, engine.cfg must not exist."
+msgstr "Percorso di progetto invalido, engine.cfg non deve esistere."
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, engine.cfg must exist."
+msgstr "Percorso di progetto invalido, engine.cfg deve esistere."
+
+#: tools/editor/project_manager.cpp
+msgid "Imported Project"
+msgstr "Progetto Importato"
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path (changed anything?)."
+msgstr "Percorso di progetto invalido (cambiato qualcosa?)."
+
+#: tools/editor/project_manager.cpp
+msgid "Couldn't create engine.cfg in project path."
+msgstr "Impossibile creare engine.cfg nel percorso di progetto."
+
+#: tools/editor/project_manager.cpp
+msgid "Import Existing Project"
+msgstr "Importa Progetto Esistente"
+
+#: tools/editor/project_manager.cpp
+msgid "Project Path (Must Exist):"
+msgstr "Percorso Progetto (Deve Esistere):"
+
+#: tools/editor/project_manager.cpp
+msgid "Project Name:"
+msgstr "Nome Progetto:"
+
+#: tools/editor/project_manager.cpp
+msgid "Create New Project"
+msgstr "Crea Nuovo Progetto"
+
+#: tools/editor/project_manager.cpp
+msgid "Project Path:"
+msgstr "Percorso Progetto:"
+
+#: tools/editor/project_manager.cpp
+msgid "Browse"
+msgstr "Sfoglia"
+
+#: tools/editor/project_manager.cpp
+msgid "New Game Project"
+msgstr "Nuovo Progetto di Gioco"
+
+#: tools/editor/project_manager.cpp
+msgid "That's a BINGO!"
+msgstr "Questo è un BINGO!"
+
+#: tools/editor/project_manager.cpp
+msgid "Unnamed Project"
+msgstr "Progetto Senza Nome"
+
+#: tools/editor/project_manager.cpp
+msgid "Are you sure to open more than one projects?"
+msgstr "Sei sicuro di voler aprire più di un progetto?"
+
+#: tools/editor/project_manager.cpp
+msgid "Are you sure to run more than one projects?"
+msgstr "Sei sicuro di voler eseguire più di un progetto?"
+
+#: tools/editor/project_manager.cpp
+msgid "Remove project from the list? (Folder contents will not be modified)"
+msgstr ""
+"Rimuovere progetto dalla lista? (I contenuti della cartella non saranno "
+"modificati)"
+
+#: tools/editor/project_manager.cpp
+msgid "Recent Projects:"
+msgstr "Progetti Recenti:"
+
+#: tools/editor/project_manager.cpp
+msgid "Run"
+msgstr "Esegui"
+
+#: tools/editor/project_manager.cpp
+msgid "Scan"
+msgstr "Esamina"
+
+#: tools/editor/project_manager.cpp
+msgid "New Project"
+msgstr "Nuovo Progetto"
+
+#: tools/editor/project_manager.cpp
+msgid "Exit"
+msgstr "Esci"
+
+#: tools/editor/project_settings.cpp
+msgid "Key "
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+#, fuzzy
+msgid "Joy Button"
+msgstr "Pulsante"
+
+#: tools/editor/project_settings.cpp
+#, fuzzy
+msgid "Joy Axis"
+msgstr "Asse"
+
+#: tools/editor/project_settings.cpp
+#, fuzzy
+msgid "Mouse Button"
+msgstr "Indice Pulsante Mouse:"
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid action (anything goes but '/' or ':')."
+msgstr "Azione invalida (va bene tutto a parte '/' o ':')."
+
+#: tools/editor/project_settings.cpp
+msgid "Action '%s' already exists!"
+msgstr "L'Azione '%s' esiste già!"
+
+#: tools/editor/project_settings.cpp
+msgid "Rename Input Action Event"
+msgstr "Rinomina Evento di Azione Input"
+
+#: tools/editor/project_settings.cpp
+msgid "Add Input Action Event"
+msgstr "Aggiungi Evento di Azione Input"
+
+#: tools/editor/project_settings.cpp
+msgid "Meta+"
+msgstr "Meta+"
+
+#: tools/editor/project_settings.cpp
+msgid "Shift+"
+msgstr "Shift+"
+
+#: tools/editor/project_settings.cpp
+msgid "Alt+"
+msgstr "Alt+"
+
+#: tools/editor/project_settings.cpp
+msgid "Control+"
+msgstr "Control+"
+
+#: tools/editor/project_settings.cpp
+msgid "Press a Key.."
+msgstr "Premi un tasto.."
+
+#: tools/editor/project_settings.cpp
+msgid "Mouse Button Index:"
+msgstr "Indice Pulsante Mouse:"
+
+#: tools/editor/project_settings.cpp
+msgid "Left Button"
+msgstr "Pulsante Sinistro"
+
+#: tools/editor/project_settings.cpp
+msgid "Right Button"
+msgstr "Pulsante Destro"
+
+#: tools/editor/project_settings.cpp
+msgid "Middle Button"
+msgstr "Pulsante Centrale"
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Up Button"
+msgstr "Pulsante Rotellina Su"
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Down Button"
+msgstr "Pulsante Rotellina Giù"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 6"
+msgstr "Pulsante 6"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 7"
+msgstr "Pulsante 7"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 8"
+msgstr "Pulsante 8"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 9"
+msgstr "Pulsante 9"
+
+#: tools/editor/project_settings.cpp
+msgid "Joystick Axis Index:"
+msgstr "Indice Asse Joystick:"
+
+#: tools/editor/project_settings.cpp
+msgid "Axis"
+msgstr "Asse"
+
+#: tools/editor/project_settings.cpp
+msgid "Joystick Button Index:"
+msgstr "Indice Pulsante Joystick:"
+
+#: tools/editor/project_settings.cpp
+msgid "Add Input Action"
+msgstr "Aggiungi azione di input"
+
+#: tools/editor/project_settings.cpp
+msgid "Erase Input Action Event"
+msgstr "Elimina Evento di Azione Input"
+
+#: tools/editor/project_settings.cpp
+msgid "Device"
+msgstr "Dispositivo"
+
+#: tools/editor/project_settings.cpp
+msgid "Button"
+msgstr "Pulsante"
+
+#: tools/editor/project_settings.cpp
+msgid "Left Button."
+msgstr "Pulsante Sinistro."
+
+#: tools/editor/project_settings.cpp
+msgid "Right Button."
+msgstr "Pulsante DEstro."
+
+#: tools/editor/project_settings.cpp
+msgid "Middle Button."
+msgstr "Pulsante centrale."
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Up."
+msgstr "Rotellina su."
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Down."
+msgstr "Rotellina Giù."
+
+#: tools/editor/project_settings.cpp
+msgid "Toggle Persisting"
+msgstr "Attiva Persistenza"
+
+#: tools/editor/project_settings.cpp
+msgid "Error saving settings."
+msgstr "Errore nel salvare le impostazioni."
+
+#: tools/editor/project_settings.cpp
+msgid "Settings saved OK."
+msgstr "Impostazioni salvate OK."
+
+#: tools/editor/project_settings.cpp
+msgid "Add Translation"
+msgstr "Aggiungi Traduzione"
+
+#: tools/editor/project_settings.cpp
+msgid "Toggle AutoLoad Globals"
+msgstr "Abilita AutoLoad Globals"
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name."
+msgstr "Nome Invalido."
+
+#: tools/editor/project_settings.cpp
+msgid "Valid characters:"
+msgstr "Caratteri validi:"
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing engine class name."
+msgstr ""
+"Nome invalido. Non deve essere in conflitto con un nome di classe di engine "
+"esistente."
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing buit-in type name."
+msgstr ""
+"Nome invalido. Non deve essere in conflitto con un nome di tipo built-in "
+"esistente."
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing global constant name."
+msgstr ""
+"Nome invalido. Non deve essere in conflitto con un nome di una costante "
+"globale esistente."
+
+#: tools/editor/project_settings.cpp
+msgid "Add Autoload"
+msgstr "Aggiungi Autoload"
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Autoload"
+msgstr "Rimuovi Autoload"
+
+#: tools/editor/project_settings.cpp
+msgid "Move Autoload"
+msgstr "Sposta Autoload"
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Translation"
+msgstr "Rimuovi Traduzione"
+
+#: tools/editor/project_settings.cpp
+msgid "Add Remapped Path"
+msgstr "Aggiungi percorso rimappato"
+
+#: tools/editor/project_settings.cpp
+msgid "Resource Remap Add Remap"
+msgstr "Remap Risorse Aggiungi Remap"
+
+#: tools/editor/project_settings.cpp
+msgid "Change Resource Remap Language"
+msgstr "Cambia Lingua Remap Risorse"
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Resource Remap"
+msgstr "Rimuovi Remap Risorse"
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Resource Remap Option"
+msgstr "Rimuovi Opzione di Remap Rimorse"
+
+#: tools/editor/project_settings.cpp
+msgid "Enable"
+msgstr "Abilita"
+
+#: tools/editor/project_settings.cpp
+msgid "Project Settings (engine.cfg)"
+msgstr "Impostazioni Progetto (engine.cfg)"
+
+#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp
+msgid "General"
+msgstr "Generali"
+
+#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp
+msgid "Property:"
+msgstr "Proprietà:"
+
+#: tools/editor/project_settings.cpp
+msgid "Del"
+msgstr "Elim."
+
+#: tools/editor/project_settings.cpp
+msgid "Copy To Platform.."
+msgstr "Copia A Piattaforma.."
+
+#: tools/editor/project_settings.cpp
+msgid "Input Map"
+msgstr "Mappa Input"
+
+#: tools/editor/project_settings.cpp
+msgid "Action:"
+msgstr "Azione:"
+
+#: tools/editor/project_settings.cpp
+msgid "Device:"
+msgstr "Dispositivo:"
+
+#: tools/editor/project_settings.cpp
+msgid "Index:"
+msgstr "Indice:"
+
+#: tools/editor/project_settings.cpp
+msgid "Localization"
+msgstr "Localizzazione"
+
+#: tools/editor/project_settings.cpp
+msgid "Translations"
+msgstr "Traduzioni"
+
+#: tools/editor/project_settings.cpp
+msgid "Translations:"
+msgstr "Traduzioni:"
+
+#: tools/editor/project_settings.cpp
+msgid "Add.."
+msgstr "Aggiungi..."
+
+#: tools/editor/project_settings.cpp
+msgid "Remaps"
+msgstr "Remaps"
+
+#: tools/editor/project_settings.cpp
+msgid "Resources:"
+msgstr "Risorse:"
+
+#: tools/editor/project_settings.cpp
+msgid "Remaps by Locale:"
+msgstr "Remaps per Locale:"
+
+#: tools/editor/project_settings.cpp
+msgid "Locale"
+msgstr "Locale"
+
+#: tools/editor/project_settings.cpp
+msgid "AutoLoad"
+msgstr "AutoLoad"
+
+#: tools/editor/project_settings.cpp
+msgid "Node Name:"
+msgstr "Nome Nodo:"
+
+#: tools/editor/project_settings.cpp
+msgid "List:"
+msgstr "Lista:"
+
+#: tools/editor/project_settings.cpp
+msgid "Singleton"
+msgstr "Singleton"
+
+#: tools/editor/property_editor.cpp
+msgid "Preset.."
+msgstr "Preset.."
+
+#: tools/editor/property_editor.cpp
+msgid "Ease In"
+msgstr "Ease In"
+
+#: tools/editor/property_editor.cpp
+msgid "Ease Out"
+msgstr "Ease Out"
+
+#: tools/editor/property_editor.cpp
+msgid "Zero"
+msgstr "Zero"
+
+#: tools/editor/property_editor.cpp
+msgid "Easing In-Out"
+msgstr "Easing In-Out"
+
+#: tools/editor/property_editor.cpp
+msgid "Easing Out-In"
+msgstr "Easing Out-In"
+
+#: tools/editor/property_editor.cpp
+msgid "File.."
+msgstr "File.."
+
+#: tools/editor/property_editor.cpp
+msgid "Dir.."
+msgstr "Dir.."
+
+#: tools/editor/property_editor.cpp
+msgid "Load"
+msgstr "Carica"
+
+#: tools/editor/property_editor.cpp
+msgid "Assign"
+msgstr "Assegna"
+
+#: tools/editor/property_editor.cpp
+msgid "Error loading file: Not a resource!"
+msgstr "Errore caricamento file: Non è una risorsa!"
+
+#: tools/editor/property_editor.cpp
+msgid "Couldn't load image"
+msgstr "Impossibile caricare l'immagine"
+
+#: tools/editor/property_editor.cpp
+msgid "Bit %d, val %d."
+msgstr "Bit %d, val %d."
+
+#: tools/editor/property_editor.cpp
+msgid "On"
+msgstr "On"
+
+#: tools/editor/property_editor.cpp
+msgid "Set"
+msgstr "Set"
+
+#: tools/editor/property_editor.cpp
+msgid "Properties:"
+msgstr "Proprietà:"
+
+#: tools/editor/property_editor.cpp
+msgid "Global"
+msgstr "Globale"
+
+#: tools/editor/property_editor.cpp
+msgid "Sections:"
+msgstr "Sezioni:"
+
+#: tools/editor/pvrtc_compress.cpp
+msgid "Could not execute PVRTC tool:"
+msgstr "Impossibile eseguire lo strumento di PVRTC:"
+
+#: tools/editor/pvrtc_compress.cpp
+msgid "Can't load back converted image using PVRTC tool:"
+msgstr "Impossibile ricaricare l'immagine convertita usando il tool PVRTC:"
+
+#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp
+msgid "Reparent Node"
+msgstr "Reparent Nodo"
+
+#: tools/editor/reparent_dialog.cpp
+msgid "Reparent Location (Select new Parent):"
+msgstr "Posizione Reparent (Seleziona nuovo genitore):"
+
+#: tools/editor/reparent_dialog.cpp
+msgid "Keep Global Transform"
+msgstr "Mantieni Transform Globale"
+
+#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp
+msgid "Reparent"
+msgstr "Cambia Genitore"
+
+#: tools/editor/resources_dock.cpp
+msgid "Create New Resource"
+msgstr "Crea Nuova Risorsa"
+
+#: tools/editor/resources_dock.cpp
+msgid "Open Resource"
+msgstr "Apri Risorsa"
+
+#: tools/editor/resources_dock.cpp
+msgid "Save Resource"
+msgstr "Salva Risorsa"
+
+#: tools/editor/resources_dock.cpp
+msgid "Resource Tools"
+msgstr "Strumenti Risorsa"
+
+#: tools/editor/resources_dock.cpp
+msgid "Make Local"
+msgstr "Rendi Locale"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Run Mode:"
+msgstr "Modalità esecuzione:"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Current Scene"
+msgstr "Scena Corrente"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Main Scene"
+msgstr "Scena Principale"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Main Scene Arguments:"
+msgstr "Argomenti Scena Principale"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Scene Run Settings"
+msgstr "Impostazioni Esecuzione Scena"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "OK :("
+msgstr "OK :("
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "No parent to instance a child at."
+msgstr "Nessun genitore del quale istanziare un figlio."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error loading scene from %s"
+msgstr "Errore caricamento scena da %s"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error instancing scene from %s"
+msgstr "Errore istanziamento scena da %s"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Ok"
+msgstr "Ok"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Cannot instance the scene '%s' because the current scene exists within one of "
+"its nodes."
+msgstr ""
+"Impossibile istanziale la scena '%s' perché la scena corrente esiste in uno "
+"dei suoi nodi."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Instance Scene(s)"
+msgstr "Istanzia Scena(e)"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done on the tree root."
+msgstr "Questa operazione non può essere eseguita alla tree root"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Node In Parent"
+msgstr "Sposta Nodo In Genitore"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Nodes In Parent"
+msgstr "Sposta Nodi In Genitore"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Duplicate Node(s)"
+msgstr "Duplica Nodo(i)"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete Node(s)?"
+msgstr "Elimina Nodo(i)?"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done without a scene."
+msgstr "Questa operazione non può essere eseguita senza una scena."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation requires a single selected node."
+msgstr "Questa operazione richiede un solo nodo selezionato."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done on instanced scenes."
+msgstr "Questa operazione no può essere eseguita su scene istanziate."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Save New Scene As.."
+msgstr "Salva Nuova Scena Come.."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Makes Sense!"
+msgstr "Ha Senso!"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes from a foreign scene!"
+msgstr "Impossibile operare su nodi da scena esterna!"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes the current scene inherits from!"
+msgstr "Impossibile operare su nodi da cuoi la scena corrente eredita!"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Remove Node(s)"
+msgstr "Rimuovi nodo(i)"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Create Node"
+msgstr "Crea Nodo"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Couldn't save new scene. Likely dependencies (instances) couldn't be "
+"satisfied."
+msgstr ""
+"Impossibile salvare la scena. Probabili dipendenze (istanze) non hanno potuto "
+"essere soddisfatte."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error saving scene."
+msgstr "Errore salvando la scena."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error duplicating scene to save it."
+msgstr "Errore duplicando la scena per salvarla."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "New Scene Root"
+msgstr "Nuova Scena di Root"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Inherit Scene"
+msgstr "Eredita Scena"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add Child Node"
+msgstr "Aggiungi Nodo Figlio"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Instance Child Scene"
+msgstr "Istanzia Scena Figlia"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Change Type"
+msgstr "Cambia Tipo"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Edit Groups"
+msgstr "Modifica Gruppi"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Edit Connections"
+msgstr "Modifica Connessioni"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add Script"
+msgstr "Aggiungi Script"
+
+#: tools/editor/scene_tree_dock.cpp
+#, fuzzy
+msgid "Merge From Scene"
+msgstr "Unisci da Scena?"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Save Branch as Scene"
+msgstr "Salva Ramo come Scena"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete Node(s)"
+msgstr "Elimina Nodo(i)"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add/Create a New Node"
+msgstr "Aggiungi/Crea un Nuovo Nodo"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Instance a scene file as a Node. Creates an inherited scene if no root node "
+"exists."
+msgstr ""
+"Istanzia un file scena come Nodo. Crea una scena ereditata se nessun nodo di "
+"root esiste."
+
+#: tools/editor/scene_tree_editor.cpp
+msgid ""
+"This item cannot be made visible because the parent is hidden. Unhide the "
+"parent first."
+msgstr ""
+"Questo elemento non può essere reso visibile perchè il genitore è nascosto. "
+"Rivela prima il genitore."
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Toggle Spatial Visible"
+msgstr "Abilita Spatial Visibile"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Toggle CanvasItem Visible"
+msgstr "Abilita CanvasItem Visibile"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Instance:"
+msgstr "Istanza:"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Invalid node name, the following characters are not allowed:"
+msgstr "Nome nodo invalido, i caratteri seguenti non sono consentiti:"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Rename Node"
+msgstr "Rinomina Nodo"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Scene Tree (Nodes):"
+msgstr "Scene Tree (Nodi):"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Editable Children"
+msgstr "Figlio Modificabile"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Load As Placeholder"
+msgstr "Carica come placeholder"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Open in Editor"
+msgstr "Apri nell Editor"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear Inheritance"
+msgstr "Liberare ereditarietà"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear Inheritance? (No Undo!)"
+msgstr "Liberare ereditarietà? (No Undo!)"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear!"
+msgstr "Libera!"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Select a Node"
+msgstr "Scegli un Nodo"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Same source and destination files, doing nothing."
+msgstr "Stessi file di origine e e destinazione, non faccio nulla."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Same source and destination paths, doing nothing."
+msgstr ""
+"Stessi percorsi \n"
+"di origine e e destinazione, non faccio nulla."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Can't move directories to within themselves."
+msgstr "Impossibile muovere le directory dentro se stesse."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Can't operate on '..'"
+msgstr "Non posso operare su '..'"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Pick New Name and Location For:"
+msgstr "Scegli un Nuovo Nome e Posizione Per:"
+
+#: tools/editor/scenes_dock.cpp
+msgid "No files selected!"
+msgstr "Nessun File selezionato!"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Instance"
+msgstr "Istanza"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Edit Dependencies.."
+msgstr "Modifica Dipendenze.."
+
+#: tools/editor/scenes_dock.cpp
+msgid "View Owners.."
+msgstr "Vedi Proprietari.."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Rename or Move.."
+msgstr "Rinomina o Sposta.."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Move To.."
+msgstr "Sposta in.."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Info"
+msgstr "Info"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Show In File Manager"
+msgstr "Mostra nel File Manager"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Previous Directory"
+msgstr "Directory Precedente"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Next Directory"
+msgstr "Directory Successiva"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Re-Scan Filesystem"
+msgstr "Re-Scan Filesystem"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Toggle folder status as Favorite"
+msgstr "Abilita lo stato della cartella come Preferito"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Instance the selected scene(s) as child of the selected node."
+msgstr "Istanzia le scene selezionate come figlie del nodo selezionato."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Move"
+msgstr "Sposta"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid parent class name"
+msgstr "Nome classe genitore invalido"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid chars:"
+msgstr "Caratteri Validi:"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid class name"
+msgstr "Nome classe invalido"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid name"
+msgstr "Nome valido"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "N/A"
+msgstr "N/A"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Class name is invalid!"
+msgstr "Nome classe invalido!"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Parent class name is invalid!"
+msgstr "Nome classe genitore invalido!"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid path!"
+msgstr "Percorso Invalido!"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Could not create script in filesystem."
+msgstr "Impossibile creare script in filesystem."
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Path is empty"
+msgstr "Percorso vuoto"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Path is not local"
+msgstr "Percorso non locale"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid base path"
+msgstr "Percorso di base invalido"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "File exists"
+msgstr "File esistente"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid extension"
+msgstr "Estensione Invalida"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid path"
+msgstr "Percorso valido"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Class Name:"
+msgstr "Nome Classe"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Built-In Script"
+msgstr "Built-In Script"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Create Node Script"
+msgstr "Crea Script Nodo"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Bytes:"
+msgstr "Bytes:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Warning"
+msgstr "Avvertimento"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Error:"
+msgstr "Errore:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Source:"
+msgstr "Sorgente:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Function:"
+msgstr "Funzione:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Errors"
+msgstr "Errori"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Child Process Connected"
+msgstr "Processo Figlio Connesso"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Inspect Previous Instance"
+msgstr "Ispeziona Istanza Precedente"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Inspect Next Instance"
+msgstr "Ispeziona Istanza Successiva"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Stack Frames"
+msgstr "Impila Frame"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Variable"
+msgstr "Valiabile"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Errors:"
+msgstr "Errori:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Stack Trace (if applicable):"
+msgstr "Stack Trace (se applicabile):"
+
+#: tools/editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Remote Inspector"
+msgstr "Inspector"
+
+#: tools/editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Live Scene Tree:"
+msgstr "Scene Tree:"
+
+#: tools/editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Remote Object Properties: "
+msgstr "Proprietà oggetto."
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Profiler"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Monitor"
+msgstr "Monitor"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Value"
+msgstr "Valore"
+
+#: tools/editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Monitors"
+msgstr "Monitor"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "List of Video Memory Usage by Resource:"
+msgstr "Lista di Utilizzo Memoria Video per Risorsa:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Total:"
+msgstr "Totale:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Video Mem"
+msgstr "Mem Video"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Resource Path"
+msgstr "Percorso Risosa"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Type"
+msgstr "Tipo"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Usage"
+msgstr "Utilizzo"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Misc"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Clicked Control:"
+msgstr "Clicked Control:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Clicked Control Type:"
+msgstr "Clicked Control Type:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Live Edit Root:"
+msgstr "Modifica Root Live:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Set From Tree"
+msgstr "Imposta da Tree:"
+
+#: tools/editor/settings_config_dialog.cpp
+msgid "Plugin List:"
+msgstr "Lista Plugin:"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Light Radius"
+msgstr "Cambia Raggio Luce"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Camera FOV"
+msgstr "Cambia FOV Telecamera"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Camera Size"
+msgstr "Cambia dimensione Telecamera"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Sphere Shape Radius"
+msgstr "Cambia Raggio di Sphere Shape"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Box Shape Extents"
+msgstr "Cambia Ampiezza Box Shape"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Radius"
+msgstr "Cambia Raggio Capsule Shape"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Height"
+msgstr "Cambia Altezza Capsule Shape"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Ray Shape Length"
+msgstr "Cambia lunghezza Ray Shape"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Notifier Extents"
+msgstr "Cambia Estensione di Notifier"
+
+#~ msgid "Move Favorite Up"
+#~ msgstr "Sposta Preferito Su"
+
+#~ msgid "Move Favorite Down"
+#~ msgstr "Sposta Preferito Giù"
+
+#~ msgid "%d frames"
+#~ msgstr "%d frames"
+
+#~ msgid ""
+#~ "NOTICE: You are not forced to import textures for 2D projects. Just copy "
+#~ "your .jpg or .png files to your project, and change export options later. "
+#~ "Atlases can be generated on export too."
+#~ msgstr ""
+#~ "NOTA: Non sei obbligato ad importare le texture per i progetti 2D. È "
+#~ "sufficiente copiare i tuoi file .jpg o .png nel tuo progetto, e cambiare "
+#~ "le opzioni di esportazione successivamente. Gli atlas possono essere anche "
+#~ "generati in esportazione."
+
+#~ msgid "Overwrite Existing Scene"
+#~ msgstr "Sovrascrivi Scena esistente"
+
+#~ msgid "Overwrite Existing, Keep Materials"
+#~ msgstr "Sovrascrivi Esistente, Mantieni Materiali"
+
+#~ msgid "Keep Existing, Merge with New"
+#~ msgstr "Mantieni Esistente, Unisci a Nuova"
+
+#~ msgid "Keep Existing, Ignore New"
+#~ msgstr "Mantieni Esistente, Ignora Nuova"
+
+#~ msgid "This Time:"
+#~ msgstr "Questa Volta:"
+
+#~ msgid "Next Time:"
+#~ msgstr "Prossima Volta:"
+
+#~ msgid "Merging.."
+#~ msgstr "Unione.."
diff --git a/tools/translations/ko.po b/tools/translations/ko.po
new file mode 100644
index 0000000000..e402504a1a
--- /dev/null
+++ b/tools/translations/ko.po
@@ -0,0 +1,5909 @@
+# LANGUAGE translation of the Godot Engine editor
+# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community
+# This file is distributed under the same license as the Godot source code.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Godot Engine editor\n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: \n"
+"Last-Translator: volzhs <volzhs@gmail.com>\n"
+"Language-Team: \n"
+"Language: ko\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.8\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: scene/2d/animated_sprite.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the 'Frames' property in "
+"order for AnimatedSprite to display frames."
+msgstr ""
+"AnimatedSprite이 프레임을 보여주기 위해서는 'Frames' 속성에 SpriteFrames 리소"
+"스 만들거나 지정해야 합니다."
+
+#: scene/2d/canvas_modulate.cpp
+msgid ""
+"Only one visible CanvasModulate is allowed per scene (or set of instanced "
+"scenes). The first created one will work, while the rest will be ignored."
+msgstr ""
+"씬마다 보이는 CanvasModulate가 단 하나만 허용됩니다. 첫번째로 생성된 것만 동"
+"작하고, 나머지는 무시됩니다."
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid ""
+"CollisionPolygon2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+"CollisionPolygon2D는 CollisionObject2D에 충돌 모양을 지정하기 위해서만 사용됩"
+"니다. Area2D, StaticBody2D, RigidBody2D, KinematicBody2D 등에 자식 노드로 추"
+"가하여 사용합니다."
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid "An empty CollisionPolygon2D has no effect on collision."
+msgstr "빈 CollisionPolygon2D는 충돌에 영향을 주지 않습니다."
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"CollisionShape2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+"CollisionShape2D는 CollisionObject2D에 충돌 모양을 지정하기 위해서만 사용됩니"
+"다. Area2D, StaticBody2D, RigidBody2D, KinematicBody2D 등에 자식 노드로 추가"
+"하여 사용합니다."
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"A shape must be provided for CollisionShape2D to function. Please create a "
+"shape resource for it!"
+msgstr ""
+"CollisionShape2D가 기능을 하기 위해서는 반드시 모양이 제공되어야 합니다. 모"
+"양 리소스를 만드세요!"
+
+#: scene/2d/light_2d.cpp
+msgid ""
+"A texture with the shape of the light must be supplied to the 'texture' "
+"property."
+msgstr "라이트의 모양을 나타내는 텍스쳐를 'texture' 속성에 지정해야합니다."
+
+#: scene/2d/light_occluder_2d.cpp
+msgid ""
+"An occluder polygon must be set (or drawn) for this occluder to take effect."
+msgstr ""
+"Occluder가 동작하기 위해서는 Occluder 폴리곤을 지정하거나 그려야 합니다."
+
+#: scene/2d/light_occluder_2d.cpp
+msgid "The occluder polygon for this occluder is empty. Please draw a polygon!"
+msgstr "Occluder 폴리곤이 비어있습니다. 폴리곤을 그리세요!"
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"A NavigationPolygon resource must be set or created for this node to work. "
+"Please set a property or draw a polygon."
+msgstr ""
+"이 노드가 동작하기 위해서는 NavigationPolygon 리소스를 지정 또는 생성해야 합"
+"니다. 속성을 지정하거나, 폴리곤을 그리세요."
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
+"node. It only provides navigation data."
+msgstr ""
+"NavigationPolygonInstance은 Navigation2D 노드의 하위에 있어야 합니다. 이것은 "
+"네비게이션 데이타만을 제공합니다."
+
+#: scene/2d/parallax_layer.cpp
+msgid ""
+"ParallaxLayer node only works when set as child of a ParallaxBackground node."
+msgstr ""
+"ParallaxLayer는 ParallaxBackground 노드의 자식노드로 있을 때만 동작합니다."
+
+#: scene/2d/particles_2d.cpp
+msgid "Path property must point to a valid Particles2D node to work."
+msgstr "Path 속성은 유효한 Particles2D 노드를 가리켜야 합니다."
+
+#: scene/2d/path_2d.cpp
+msgid "PathFollow2D only works when set as a child of a Path2D node."
+msgstr "PathFollow2D는 Path2D 노드의 자식노드로 있을 때만 동작합니다."
+
+#: scene/2d/remote_transform_2d.cpp
+msgid "Path property must point to a valid Node2D node to work."
+msgstr "Path 속성은 유효한 Node2D 노드를 가리켜야 합니다."
+
+#: scene/2d/sample_player_2d.cpp scene/audio/sample_player.cpp
+msgid ""
+"A SampleLibrary resource must be created or set in the 'samples' property in "
+"order for SamplePlayer to play sound."
+msgstr ""
+"SamplePlayer가 사운드를 재생하기 위해서는 'Samples' 속성에서 새로운 "
+"SampleLibrary 리소스를 생성하거나, 지정해야합니다."
+
+#: scene/2d/sprite.cpp
+msgid ""
+"Path property must point to a valid Viewport node to work. Such Viewport "
+"must be set to 'render target' mode."
+msgstr ""
+"Path 속성은 유효한 Viewport 노드를 가리켜야 합니다. 가리킨 Viewport는 또한 "
+"'render target' 모드로 설정되어야 합니다."
+
+#: scene/2d/sprite.cpp
+msgid ""
+"The Viewport set in the path property must be set as 'render target' in "
+"order for this sprite to work."
+msgstr ""
+"이 Sprite가 동작하기 위해서는 Path 속성에 지정된 Viewport가 'render target'으"
+"로 설정되어야 합니다."
+
+#: scene/2d/visibility_notifier_2d.cpp
+msgid ""
+"VisibilityEnable2D works best when used with the edited scene root directly "
+"as parent."
+msgstr ""
+"VisibilityEnable2D는 편집 씬의 루트의 하위 노드로 추가할 때 가장 잘 동작합니"
+"다."
+
+#: scene/3d/body_shape.cpp
+msgid ""
+"CollisionShape only serves to provide a collision shape to a CollisionObject "
+"derived node. Please only use it as a child of Area, StaticBody, RigidBody, "
+"KinematicBody, etc. to give them a shape."
+msgstr ""
+"CollisionShape은 CollisionObject에 충돌 모양을 지정하기 위해서만 사용됩니다. "
+"Area, StaticBody, RigidBody, KinematicBody 등에 자식 노드로 추가하여 사용합니"
+"다."
+
+#: scene/3d/body_shape.cpp
+msgid ""
+"A shape must be provided for CollisionShape to function. Please create a "
+"shape resource for it!"
+msgstr ""
+"CollisionShape이 기능을 하기 위해서는 모양이 제공되어야 합니다. 모양 리소스"
+"를 만드세요!"
+
+#: scene/3d/collision_polygon.cpp
+msgid ""
+"CollisionPolygon only serves to provide a collision shape to a "
+"CollisionObject derived node. Please only use it as a child of Area, "
+"StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
+msgstr ""
+"CollisionPolygon은 CollisionObject에 충돌 모양을 지정하기 위해서만 사용됩니"
+"다. Area, StaticBody, RigidBody, KinematicBody 등에 자식 노드로 추가하여 사용"
+"합니다."
+
+#: scene/3d/collision_polygon.cpp
+msgid "An empty CollisionPolygon has no effect on collision."
+msgstr "빈 CollisionPolygon는 충돌에 영향을 주지 않습니다."
+
+#: scene/3d/navigation_mesh.cpp
+msgid "A NavigationMesh resource must be set or created for this node to work."
+msgstr ""
+"이 노드가 동작하기 위해서는 NavigationMesh 리소스를 지정하거나 생성해야 합니"
+"다."
+
+#: scene/3d/navigation_mesh.cpp
+msgid ""
+"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
+"It only provides navigation data."
+msgstr ""
+"NavigationMeshInstance은 Navigation 노드의 하위에 있어야 합니다. 이것은 네비"
+"게이션 데이타만을 제공합니다."
+
+#: scene/3d/scenario_fx.cpp
+msgid ""
+"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)."
+msgstr "씬마다 WorldEnvironment가 단 하나만 허용됩니다."
+
+#: scene/3d/spatial_sample_player.cpp
+msgid ""
+"A SampleLibrary resource must be created or set in the 'samples' property in "
+"order for SpatialSamplePlayer to play sound."
+msgstr ""
+"SpatialSamplePlayer가 사운드를 재생하기 위해서는 'Samples' 속성에서 새로운 "
+"SampleLibrary 리소스를 생성하거나, 지정해야합니다."
+
+#: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Cancel"
+msgstr "취소"
+
+#: scene/gui/dialogs.cpp
+msgid "OK"
+msgstr "확인"
+
+#: scene/gui/dialogs.cpp
+msgid "Alert!"
+msgstr "경고!"
+
+#: scene/gui/dialogs.cpp
+msgid "Please Confirm..."
+msgstr "확인해주세요..."
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Cut"
+msgstr "잘라내기"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp
+msgid "Copy"
+msgstr "복사하기"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp
+msgid "Paste"
+msgstr "붙여넣기"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/project_export.cpp
+msgid "Select All"
+msgstr "전체선택"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_log.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/rich_text_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/script_editor_debugger.cpp
+msgid "Clear"
+msgstr "지우기"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Undo"
+msgstr "되돌리기"
+
+#: scene/gui/popup.cpp
+msgid ""
+"Popups will hide by default unless you call popup() or any of the popup*() "
+"functions. Making them visible for editing is fine though, but they will "
+"hide upon running."
+msgstr ""
+"Popup은 popup() 또는 기타 popup*() 함수를 호출하기 전까지는 기본적으로 숨겨집"
+"니다. 화면을 편집하는 동안 보여지도록 할 수는 있으나, 실행시에는 숨겨집니다."
+
+#: scene/main/viewport.cpp
+msgid ""
+"This viewport is not set as render target. If you intend for it to display "
+"its contents directly to the screen, make it a child of a Control so it can "
+"obtain a size. Otherwise, make it a RenderTarget and assign its internal "
+"texture to some node for display."
+msgstr ""
+"Viewport가 Render Target으로 설정되지 않았습니다. Viewport의 내용을 화면상에 "
+"직접 표시하고자 할 경우, 사이즈를 얻기 위해서 Control의 자식 노드로 만들어야"
+"합니다. 그렇지 않을 경우, 화면에 표시하기 위해서는 Render target으로 설정하"
+"고 내부적인 텍스쳐를 다른 노드에 할당해야 합니다."
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Error initializing FreeType."
+msgstr "FreeType 초기화 에러"
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Unknown font format."
+msgstr "알 수 없는 폰트 포멧"
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Error loading font."
+msgstr "폰트 로딩 에러"
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Invalid font size."
+msgstr "유요하지 않은 폰트 사이즈"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/call_dialog.cpp
+#: tools/editor/connections_dialog.cpp tools/editor/groups_editor.cpp
+#: tools/editor/import_settings.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp
+#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp
+msgid "Close"
+msgstr "닫기"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/create_dialog.cpp
+#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/settings_config_dialog.cpp
+msgid "Search:"
+msgstr "검색:"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/code_editor.cpp
+#: tools/editor/editor_help.cpp tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/project_settings.cpp
+msgid "Search"
+msgstr "검색"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/editor_node.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Import"
+msgstr "가져오기"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/project_settings.cpp
+#: tools/editor/settings_config_dialog.cpp
+msgid "Plugins"
+msgstr "플러그인"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Sort:"
+msgstr "정렬:"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Reverse"
+msgstr "뒤집기"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/project_settings.cpp
+msgid "Category:"
+msgstr "카테고리:"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "All"
+msgstr "모두"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Site:"
+msgstr "사이트:"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Assets ZIP File"
+msgstr "에셋 ZIP 파일"
+
+#: tools/editor/animation_editor.cpp
+msgid "Disabled"
+msgstr "사용 안함"
+
+#: tools/editor/animation_editor.cpp
+msgid "All Selection"
+msgstr "모든 선택"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Add Key"
+msgstr "키 이동"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Transition"
+msgstr "전환 변경"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Transform"
+msgstr "속성 변경"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Value"
+msgstr "값 변경"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Call"
+msgstr "호출 변경"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Track"
+msgstr "트랙 추가"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Anim Track Up"
+msgstr "트랙 위로 이동"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Anim Track Down"
+msgstr "트랙 아래로 이동"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove Anim Track"
+msgstr "트랙 삭제"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Duplicate Keys"
+msgstr "키 복제"
+
+#: tools/editor/animation_editor.cpp
+msgid "Set Transitions to:"
+msgstr "전환 설정:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Rename"
+msgstr "트랙 이름 변경"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Change Interpolation"
+msgstr "트랙 보간 변경"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Change Value Mode"
+msgstr "트랙 값 모드 변경"
+
+#: tools/editor/animation_editor.cpp
+msgid "Edit Node Curve"
+msgstr "노드 커브 수정"
+
+#: tools/editor/animation_editor.cpp
+msgid "Edit Selection Curve"
+msgstr "선택 커브 수정"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Delete Keys"
+msgstr "키 삭제"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Key"
+msgstr "키 추가"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Move Keys"
+msgstr "키 이동"
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale Selection"
+msgstr "선택키 스케일 조절"
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale From Cursor"
+msgstr "커서 위치에서 스케일 조절"
+
+#: tools/editor/animation_editor.cpp
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Duplicate Selection"
+msgstr "선택키 복제"
+
+#: tools/editor/animation_editor.cpp
+msgid "Duplicate Transposed"
+msgstr "선택된 트랙에 복제"
+
+#: tools/editor/animation_editor.cpp
+msgid "Goto Next Step"
+msgstr "다음 스텝으로 이동"
+
+#: tools/editor/animation_editor.cpp
+msgid "Goto Prev Step"
+msgstr "이전 스텝으로 이동"
+
+#: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp
+msgid "Linear"
+msgstr "직선형"
+
+#: tools/editor/animation_editor.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Constant"
+msgstr "비선형"
+
+#: tools/editor/animation_editor.cpp
+msgid "In"
+msgstr "In"
+
+#: tools/editor/animation_editor.cpp
+msgid "Out"
+msgstr "Out"
+
+#: tools/editor/animation_editor.cpp
+msgid "In-Out"
+msgstr "In-Out"
+
+#: tools/editor/animation_editor.cpp
+msgid "Out-In"
+msgstr "Out-In"
+
+#: tools/editor/animation_editor.cpp
+msgid "Transitions"
+msgstr "전환"
+
+#: tools/editor/animation_editor.cpp
+msgid "Optimize Animation"
+msgstr "애니메이션 최적화"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up Animation"
+msgstr "애니메이션 정리"
+
+#: tools/editor/animation_editor.cpp
+msgid "Create NEW track for %s and insert key?"
+msgstr "%s (을)를 위해 새 트랙을 만들고 키를 추가하시겠습니까?"
+
+#: tools/editor/animation_editor.cpp
+msgid "Create %d NEW tracks and insert keys?"
+msgstr "%d개의 새 트랙을 생성하고 키를 추가하시겠습니까?"
+
+#: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/particles_editor_plugin.cpp
+#: tools/editor/project_manager.cpp tools/editor/script_create_dialog.cpp
+msgid "Create"
+msgstr "생성"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Create & Insert"
+msgstr "애니메이션 생성과 삽입"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert Track & Key"
+msgstr "애니메이션 트랙과 키 삽입"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert Key"
+msgstr "애니메이션 키 삽입"
+
+#: tools/editor/animation_editor.cpp
+msgid "Change Anim Len"
+msgstr "애니메이션 길이 변경"
+
+#: tools/editor/animation_editor.cpp
+msgid "Change Anim Loop"
+msgstr "애니메이션 루프 변경"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Create Typed Value Key"
+msgstr "애니메이션 타입지정 값 키 만들기"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert"
+msgstr "애니메이션 삽입"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Scale Keys"
+msgstr "애니메이션 키 크기 조절"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Call Track"
+msgstr "애니메이션 함수 트랙 추가"
+
+#: tools/editor/animation_editor.cpp
+msgid "Animation zoom."
+msgstr "애니메이션 확대."
+
+#: tools/editor/animation_editor.cpp
+msgid "Length (s):"
+msgstr "길이 (초):"
+
+#: tools/editor/animation_editor.cpp
+msgid "Animation length (in seconds)."
+msgstr "애니메이션 길이 (초)."
+
+#: tools/editor/animation_editor.cpp
+msgid "Step (s):"
+msgstr "단계 (초):"
+
+#: tools/editor/animation_editor.cpp
+msgid "Cursor step snap (in seconds)."
+msgstr "커서 단계 스냅 (초)."
+
+#: tools/editor/animation_editor.cpp
+msgid "Enable/Disable looping in animation."
+msgstr "애니메이션 루프 활성화/비활성화 "
+
+#: tools/editor/animation_editor.cpp
+msgid "Add new tracks."
+msgstr "새 트랙 추가"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move current track up."
+msgstr "현재 트랙을 위로 이동"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move current track down."
+msgstr "현재 트랙을 아래로 이동"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove selected track."
+msgstr "선택된 트랙 삭제"
+
+#: tools/editor/animation_editor.cpp
+msgid "Track tools"
+msgstr "트랙 도구"
+
+#: tools/editor/animation_editor.cpp
+msgid "Enable editing of individual keys by clicking them."
+msgstr "개별 키를 클릭함으로써 편집 활성화"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim. Optimizer"
+msgstr "애니메이션 최적화"
+
+#: tools/editor/animation_editor.cpp
+msgid "Max. Linear Error:"
+msgstr "최대 선형 오류:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Max. Angular Error:"
+msgstr "최대 각도 오류:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Max Optimizable Angle:"
+msgstr "최적화 가능한 최대 각도:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Optimize"
+msgstr "최적화"
+
+#: tools/editor/animation_editor.cpp
+msgid "Key"
+msgstr "키"
+
+#: tools/editor/animation_editor.cpp
+msgid "Transition"
+msgstr "전환"
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale Ratio:"
+msgstr "스케일 비율:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Call Functions in Which Node?"
+msgstr "어떤 노드에서 함수를 호출할까요?"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove invalid keys"
+msgstr "유효하지 않은 키 삭제"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove unresolved and empty tracks"
+msgstr "미결 트랙과 빈 트랙 삭제"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-up all animations"
+msgstr "모든 애니메이션 없애기"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up Animation(s) (NO UNDO!)"
+msgstr "애니메이션 없애기 (되돌리기 불가!)"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up"
+msgstr "없애기"
+
+#: tools/editor/array_property_edit.cpp
+msgid "Resize Array"
+msgstr "배열 크기 변경"
+
+#: tools/editor/array_property_edit.cpp
+msgid "Change Array Value Type"
+msgstr "배열 값 타입 변경"
+
+#: tools/editor/array_property_edit.cpp
+msgid "Change Array Value"
+msgstr "배열 값 변경"
+
+#: tools/editor/call_dialog.cpp
+msgid "Method List For '%s':"
+msgstr "'%s' 함수 목록:"
+
+#: tools/editor/call_dialog.cpp
+msgid "Call"
+msgstr "호출"
+
+#: tools/editor/call_dialog.cpp
+msgid "Method List:"
+msgstr "함수 목록:"
+
+#: tools/editor/call_dialog.cpp
+msgid "Arguments:"
+msgstr "인수:"
+
+#: tools/editor/call_dialog.cpp
+msgid "Return:"
+msgstr "리턴:"
+
+#: tools/editor/code_editor.cpp
+msgid "Go to Line"
+msgstr "라인으로 이동"
+
+#: tools/editor/code_editor.cpp
+msgid "Line Number:"
+msgstr "라인 번호:"
+
+#: tools/editor/code_editor.cpp
+msgid "No Matches"
+msgstr "일치 결과 없음"
+
+#: tools/editor/code_editor.cpp
+msgid "Replaced %d Ocurrence(s)."
+msgstr "%d 회 바뀜"
+
+#: tools/editor/code_editor.cpp
+msgid "Replace"
+msgstr "바꾸기"
+
+#: tools/editor/code_editor.cpp
+msgid "Replace All"
+msgstr "전체 바꾸기"
+
+#: tools/editor/code_editor.cpp
+msgid "Match Case"
+msgstr "대소문자 구분"
+
+#: tools/editor/code_editor.cpp
+msgid "Whole Words"
+msgstr "전체 단어"
+
+#: tools/editor/code_editor.cpp
+msgid "Selection Only"
+msgstr "선택영역만"
+
+#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp
+msgid "Find"
+msgstr "찾기"
+
+#: tools/editor/code_editor.cpp
+msgid "Next"
+msgstr "다음"
+
+#: tools/editor/code_editor.cpp
+msgid "Replaced %d ocurrence(s)."
+msgstr "%d 회 바뀜"
+
+#: tools/editor/code_editor.cpp
+msgid "Not found!"
+msgstr "찾을 수 없습니다."
+
+#: tools/editor/code_editor.cpp
+msgid "Replace By"
+msgstr "으로 바꿈"
+
+#: tools/editor/code_editor.cpp
+msgid "Case Sensitive"
+msgstr "대소문자 구분"
+
+#: tools/editor/code_editor.cpp
+msgid "Backwards"
+msgstr "뒤로"
+
+#: tools/editor/code_editor.cpp
+msgid "Prompt On Replace"
+msgstr "변경 시 알림"
+
+#: tools/editor/code_editor.cpp
+msgid "Skip"
+msgstr "건너뛰기"
+
+#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp
+msgid "Line:"
+msgstr "라인:"
+
+#: tools/editor/code_editor.cpp
+msgid "Col:"
+msgstr "칼럼:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Method in target Node must be specified!"
+msgstr "대상 노드의 함수를 명시해야합니다."
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect To Node:"
+msgstr "연결할 노드:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Binds (Extra Params):"
+msgstr "바인드 (추가 파라미터):"
+
+#: tools/editor/connections_dialog.cpp tools/editor/groups_editor.cpp
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/project_settings.cpp
+msgid "Add"
+msgstr "추가"
+
+#: tools/editor/connections_dialog.cpp tools/editor/dependency_editor.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Remove"
+msgstr "삭제"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Path To Node:"
+msgstr "노드 경로"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Method In Node:"
+msgstr "노드의 함수:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Make Function"
+msgstr "함수 만들기"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Deferred"
+msgstr "지연"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Oneshot"
+msgstr "1회"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect"
+msgstr "연결"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect '%s' to '%s'"
+msgstr "'%s'를 '%s'에 연결"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Create Subscription"
+msgstr "연결 해제"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect.."
+msgstr "연결하기.."
+
+#: tools/editor/connections_dialog.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Disconnect"
+msgstr "연결해제"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Edit Connections.."
+msgstr "연결 편집.."
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connections:"
+msgstr "연결:"
+
+#: tools/editor/create_dialog.cpp
+msgid "Create New"
+msgstr "새로 만들기"
+
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+msgid "Matches:"
+msgstr "일치:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Search Replacement For:"
+msgstr "대체할 대상 찾기:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies For:"
+msgstr "종속 관계:"
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"Scene '%s' is currently being edited.\n"
+"Changes will not take effect unless reloaded."
+msgstr ""
+"씬 '%s'이(가) 현재 편집 중입니다.\n"
+"다시 로드 할 때 변경 사항이 적용됩니다."
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"Resource '%s' is in use.\n"
+"Changes will take effect when reloaded."
+msgstr ""
+"리소스 '%s'이(가) 사용 중입니다.\n"
+"다시 로드 할 때 변경 사항이 적용됩니다."
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies"
+msgstr "종속 관계"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Resource"
+msgstr "리소스"
+
+#: tools/editor/dependency_editor.cpp tools/editor/project_manager.cpp
+#: tools/editor/project_settings.cpp
+msgid "Path"
+msgstr "경로"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies:"
+msgstr "종속된 항목:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Fix Broken"
+msgstr "깨진 종속성 수정"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependency Editor"
+msgstr "종속 관계 편집기"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Search Replacement Resource:"
+msgstr "대체 리소스 검색:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Owners Of:"
+msgstr "소유자:"
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"The files being removed are required by other resources in order for them to "
+"work.\n"
+"Remove them anyway? (no undo)"
+msgstr ""
+"삭제하려고 하는 파일들은 다른 리소스들이 정상동작하기 위해 필요합니다.\n"
+"정말로 삭제하시겠습니까? (되돌리기 불가)"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Remove selected files from the project? (no undo)"
+msgstr "프로젝트에서 선택된 파일들을 삭제하시겠습니까? (되돌리기 불가)"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Error loading:"
+msgstr "로드 중 에러:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Scene failed to load due to missing dependencies:"
+msgstr "없어진 종속 관계 때문에 씬을 로드할 수 없습니다:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Open Anyway"
+msgstr "무시하고 열기"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Which action should be taken?"
+msgstr "어떤 것을 수행하시겠습니까?"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Fix Dependencies"
+msgstr "종속 관계 수정"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Errors loading!"
+msgstr "로드 중 에러 발생!"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Permanently delete %d item(s)? (No undo!)"
+msgstr "%d개 항목을 영구적으로 삭제하시겠습니까? (되돌리기 불가)"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Owns"
+msgstr "소유"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Resources Without Explicit Ownership:"
+msgstr "명확하게 사용되지 않은 리소스:"
+
+#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
+msgid "Orphan Resource Explorer"
+msgstr "미사용 리소스 탐색기"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Delete selected files?"
+msgstr "선택된 파일들을 삭제하시겠습니까?"
+
+#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+#: tools/editor/scenes_dock.cpp
+msgid "Delete"
+msgstr "삭제"
+
+#: tools/editor/editor_data.cpp
+msgid "Updating Scene"
+msgstr "씬 업데이트 중"
+
+#: tools/editor/editor_data.cpp
+msgid "Storing local changes.."
+msgstr "로컬 변경사항을 저장 중.."
+
+#: tools/editor/editor_data.cpp
+msgid "Updating scene.."
+msgstr "씬 업데이트 중.."
+
+#: tools/editor/editor_dir_dialog.cpp
+msgid "Choose a Directory"
+msgstr "디렉토리 선택"
+
+#: tools/editor/editor_dir_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Create Folder"
+msgstr "폴더 생성"
+
+#: tools/editor/editor_dir_dialog.cpp tools/editor/editor_file_dialog.cpp
+#: tools/editor/editor_plugin_settings.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Name:"
+msgstr "이름:"
+
+#: tools/editor/editor_dir_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Could not create folder."
+msgstr "폴더를 만들 수 없습니다."
+
+#: tools/editor/editor_dir_dialog.cpp
+msgid "Choose"
+msgstr "선택"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "File Exists, Overwrite?"
+msgstr "파일이 존재합니다. 덮어쓰시겠습니까?"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "All Recognized"
+msgstr "인식 가능한 모든 파일"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "All Files (*)"
+msgstr "모든 파일 (*)"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/quick_open.cpp tools/editor/scenes_dock.cpp
+msgid "Open"
+msgstr "열기"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save"
+msgstr "저장하기"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Save a File"
+msgstr "파일로 저장하기"
+
+#: tools/editor/editor_file_dialog.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/script_create_dialog.cpp
+msgid "Path:"
+msgstr "경로:"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/scenes_dock.cpp
+msgid "Favorites:"
+msgstr "즐겨찾기:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Recent:"
+msgstr "최근:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Directories & Files:"
+msgstr "디렉토리와 파일:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Preview:"
+msgstr "미리보기:"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/script_editor_debugger.cpp
+msgid "File:"
+msgstr "파일:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Filter:"
+msgstr "필터:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Must use a valid extension."
+msgstr "유효한 확장자를 사용해야 합니다."
+
+#: tools/editor/editor_file_system.cpp
+msgid "Cannot go into subdir:"
+msgstr "하위 디렉토리로 이동할 수 없습니다."
+
+#: tools/editor/editor_file_system.cpp
+msgid "ScanSources"
+msgstr "소스 조사"
+
+#: tools/editor/editor_help.cpp
+msgid "Search Classes"
+msgstr "클래스 검색"
+
+#: tools/editor/editor_help.cpp
+msgid "Class List:"
+msgstr "클래스 목록:"
+
+#: tools/editor/editor_help.cpp tools/editor/property_editor.cpp
+msgid "Class:"
+msgstr "클래스:"
+
+#: tools/editor/editor_help.cpp tools/editor/scene_tree_editor.cpp
+#: tools/editor/script_create_dialog.cpp
+msgid "Inherits:"
+msgstr "상속:"
+
+#: tools/editor/editor_help.cpp
+msgid "Inherited by:"
+msgstr "상속한 클래스:"
+
+#: tools/editor/editor_help.cpp
+msgid "Brief Description:"
+msgstr "짧은 설명:"
+
+#: tools/editor/editor_help.cpp
+msgid "Public Methods:"
+msgstr "공개 함수:"
+
+#: tools/editor/editor_help.cpp
+msgid "Members:"
+msgstr "멤버:"
+
+#: tools/editor/editor_help.cpp
+msgid "GUI Theme Items:"
+msgstr "GUI 테마 항목:"
+
+#: tools/editor/editor_help.cpp
+msgid "Signals:"
+msgstr "시그널:"
+
+#: tools/editor/editor_help.cpp
+msgid "Constants:"
+msgstr "상수:"
+
+#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "설명:"
+
+#: tools/editor/editor_help.cpp
+msgid "Method Description:"
+msgstr "함수 설명:"
+
+#: tools/editor/editor_help.cpp
+msgid "Search Text"
+msgstr "문자 검색"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Added:"
+msgstr "추가됨:"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Removed:"
+msgstr "제거됨:"
+
+#: tools/editor/editor_import_export.cpp tools/editor/project_export.cpp
+msgid "Error saving atlas:"
+msgstr "아틀라스 저장 중 에러:"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Could not save atlas subtexture:"
+msgstr "아틀라스 서브 텍스쳐를 저장할 수 없습니다:"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Storing File:"
+msgstr "파일 저장 중:"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Packing"
+msgstr "패킹중"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Exporting for %s"
+msgstr "%s 내보내기"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Setting Up.."
+msgstr "설정 중.."
+
+#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
+msgid "Re-Importing"
+msgstr "다시 가져오기"
+
+#: tools/editor/editor_node.cpp
+msgid "Importing:"
+msgstr "가져오는 중:"
+
+#: tools/editor/editor_node.cpp
+msgid "Node From Scene"
+msgstr "씬으로부터 노드 가져오기"
+
+#: tools/editor/editor_node.cpp tools/editor/scenes_dock.cpp
+msgid "Re-Import.."
+msgstr "다시 가져오기.."
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/resources_dock.cpp
+msgid "Error saving resource!"
+msgstr "리소스 저장 중 에러!"
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/resources_dock.cpp
+msgid "Save Resource As.."
+msgstr "리소스를 다른 이름으로 저장.."
+
+#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
+msgid "I see.."
+msgstr "알겠습니다.."
+
+#: tools/editor/editor_node.cpp
+msgid "Can't open file for writing:"
+msgstr "쓰기 위한 파일을 열 수 없음:"
+
+#: tools/editor/editor_node.cpp
+msgid "Requested file format unknown:"
+msgstr "요청한 파일 형식을 알 수 없음:"
+
+#: tools/editor/editor_node.cpp
+msgid "Error while saving."
+msgstr "저장 중 에러."
+
+#: tools/editor/editor_node.cpp
+msgid "Saving Scene"
+msgstr "씬 저장"
+
+#: tools/editor/editor_node.cpp
+msgid "Analyzing"
+msgstr "분석중"
+
+#: tools/editor/editor_node.cpp
+msgid "Creating Thumbnail"
+msgstr "썸네일 생성 중"
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied."
+msgstr ""
+"씬을 저장할 수 없습니다. 아마도 종속 관계가 만족스럽지 않을 수 있습니다."
+
+#: tools/editor/editor_node.cpp
+msgid "Failed to load resource."
+msgstr "리소스 로드 실패"
+
+#: tools/editor/editor_node.cpp
+msgid "Can't load MeshLibrary for merging!"
+msgstr "병합할 메쉬 라이브러리를 로드할 수 없습니다!"
+
+#: tools/editor/editor_node.cpp
+msgid "Error saving MeshLibrary!"
+msgstr "메쉬 라이브러리 저장 중 에러!"
+
+#: tools/editor/editor_node.cpp
+msgid "Can't load TileSet for merging!"
+msgstr "병합할 타일셋을 로드할 수 없습니다!"
+
+#: tools/editor/editor_node.cpp
+msgid "Error saving TileSet!"
+msgstr "타일셋 저장 중 에러!"
+
+#: tools/editor/editor_node.cpp
+msgid "Can't open export templates zip."
+msgstr "내보내기 템플릿 zip 파일을 열 수 없습니다."
+
+#: tools/editor/editor_node.cpp
+msgid "Loading Export Templates"
+msgstr "내보내기 템플릿 로딩 중"
+
+#: tools/editor/editor_node.cpp
+msgid "Error trying to save layout!"
+msgstr "레이아웃 저장 시도 중 에러!"
+
+#: tools/editor/editor_node.cpp
+msgid "Default editor layout overridden."
+msgstr "에디터 기본 레이아웃이 변경되었습니다."
+
+#: tools/editor/editor_node.cpp
+msgid "Layout name not found!"
+msgstr "레이아웃 이름을 찾을 수 없습니다!"
+
+#: tools/editor/editor_node.cpp
+msgid "Restored default layout to base settings."
+msgstr "기본 레이아웃이 초기 설정으로 복원되었습니다."
+
+#: tools/editor/editor_node.cpp
+msgid "Copy Params"
+msgstr "속성 복사"
+
+#: tools/editor/editor_node.cpp
+msgid "Set Params"
+msgstr "속성 적용"
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Paste Resource"
+msgstr "리소스 붙여넣기"
+
+#: tools/editor/editor_node.cpp
+msgid "Copy Resource"
+msgstr "리소스 복사하기"
+
+#: tools/editor/editor_node.cpp
+msgid "Make Built-In"
+msgstr "내장으로 만들기"
+
+#: tools/editor/editor_node.cpp
+msgid "Make Sub-Resources Unique"
+msgstr "하위 리소스를 유일하게 만들기"
+
+#: tools/editor/editor_node.cpp
+msgid "There is no defined scene to run."
+msgstr "실행하기 위해 정의된 씬이 없습니다."
+
+#: tools/editor/editor_node.cpp
+msgid "Current scene was never saved, please save it prior to running."
+msgstr "현재 씬이 저장되지 않았습니다. 실행전에 저장해주세요."
+
+#: tools/editor/editor_node.cpp
+msgid "Could not start subprocess!"
+msgstr "서브 프로세스를 시작할 수 없습니다."
+
+#: tools/editor/editor_node.cpp
+msgid "Open Scene"
+msgstr "씬 열기"
+
+#: tools/editor/editor_node.cpp
+msgid "Open Base Scene"
+msgstr "기본 씬 열기"
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Open Scene.."
+msgstr "빠른 씬 열기.."
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Open Script.."
+msgstr "빠른 스크립트 열기.."
+
+#: tools/editor/editor_node.cpp
+msgid "Yes"
+msgstr "네"
+
+#: tools/editor/editor_node.cpp
+msgid "Close scene? (Unsaved changes will be lost)"
+msgstr "씬을 닫으시겠습니까? (저장하지 않은 변경사항은 사라집니다.)"
+
+#: tools/editor/editor_node.cpp
+msgid "Save Scene As.."
+msgstr "씬을 다른 이름으로 저장.."
+
+#: tools/editor/editor_node.cpp
+msgid "This scene has never been saved. Save before running?"
+msgstr "이 씬은 저장되지 않았습니다. 실행전에 저장하시겠습니까?"
+
+#: tools/editor/editor_node.cpp
+msgid "Please save the scene first."
+msgstr "먼저 씬을 저장해주세요."
+
+#: tools/editor/editor_node.cpp
+msgid "Save Translatable Strings"
+msgstr "번역가능한 문자열 저장"
+
+#: tools/editor/editor_node.cpp
+msgid "Export Mesh Library"
+msgstr "메쉬 라이브러리 내보내기"
+
+#: tools/editor/editor_node.cpp
+msgid "Export Tile Set"
+msgstr "타일 셋 내보내기"
+
+#: tools/editor/editor_node.cpp
+msgid "Quit"
+msgstr "종료"
+
+#: tools/editor/editor_node.cpp
+msgid "Exit the editor?"
+msgstr "에디터를 종료하시겠습니까?"
+
+#: tools/editor/editor_node.cpp
+msgid "Current scene not saved. Open anyway?"
+msgstr "현재 씬이 저장되지 않았습니다. 무시하고 여시겠습니까?"
+
+#: tools/editor/editor_node.cpp
+msgid "Can't reload a scene that was never saved."
+msgstr "저장되지 않은 씬은 다시 로드할 수 없습니다."
+
+#: tools/editor/editor_node.cpp
+msgid "Revert"
+msgstr "되돌리기"
+
+#: tools/editor/editor_node.cpp
+msgid "This action cannot be undone. Revert anyway?"
+msgstr "이 행동은 취소가 불가능합니다. 무시하고 되돌리시겠습니까?"
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Run Scene.."
+msgstr "빠른 씬 실행.."
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Open Project Manager? \n"
+"(Unsaved changes will be lost)"
+msgstr ""
+"프로젝트 매니저를 실행하시겠습니까?\n"
+"(저장하지 않은 변경사항은 사라집니다.)"
+
+#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
+msgid "Ugh"
+msgstr "오우"
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Error loading scene, it must be inside the project path. Use 'Import' to "
+"open the scene, then save it inside the project path."
+msgstr ""
+"씬 로딩 중 에러가 발생했습니다. 프로젝트 경로 안에 존재해야 합니다. '가져오"
+"기'로 씬을 연 후에, 프로젝트 경로 안에 저장하세요."
+
+#: tools/editor/editor_node.cpp
+msgid "Error loading scene."
+msgstr "씬 로딩 중 에러."
+
+#: tools/editor/editor_node.cpp
+msgid "Scene '%s' has broken dependencies:"
+msgstr "'%s' 씬의 종속 항목이 깨져있습니다.:"
+
+#: tools/editor/editor_node.cpp
+msgid "Save Layout"
+msgstr "레이아웃 저장"
+
+#: tools/editor/editor_node.cpp
+msgid "Delete Layout"
+msgstr "레이아웃 삭제"
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Default"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Switch Scene Tab"
+msgstr "씬 탭 전환"
+
+#: tools/editor/editor_node.cpp
+msgid "%d more file(s)"
+msgstr "%d개 추가파일"
+
+#: tools/editor/editor_node.cpp
+msgid "%d more file(s) or folder(s)"
+msgstr "%d개 추가 파일 또는 폴더"
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Scene"
+msgstr "씬"
+
+#: tools/editor/editor_node.cpp
+msgid "Go to previously opened scene."
+msgstr "이전에 열었던 씬으로 가기"
+
+#: tools/editor/editor_node.cpp
+msgid "Operations with scene files."
+msgstr "씬 파일 동작"
+
+#: tools/editor/editor_node.cpp
+msgid "New Scene"
+msgstr "새 씬"
+
+#: tools/editor/editor_node.cpp
+msgid "New Inherited Scene.."
+msgstr "새 상속 씬.."
+
+#: tools/editor/editor_node.cpp
+msgid "Open Scene.."
+msgstr "씬 열기.."
+
+#: tools/editor/editor_node.cpp
+msgid "Save Scene"
+msgstr "씬 저장"
+
+#: tools/editor/editor_node.cpp
+msgid "Close Scene"
+msgstr "씬 닫기"
+
+#: tools/editor/editor_node.cpp
+msgid "Close Goto Prev. Scene"
+msgstr "닫고 이전 씬으로 이동"
+
+#: tools/editor/editor_node.cpp
+msgid "Open Recent"
+msgstr "최근 열었던 항목"
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Search File.."
+msgstr "빠른 파일 검색.."
+
+#: tools/editor/editor_node.cpp
+msgid "Convert To.."
+msgstr "변환.."
+
+#: tools/editor/editor_node.cpp
+msgid "Translatable Strings.."
+msgstr "번역 가능한 문자열.."
+
+#: tools/editor/editor_node.cpp
+msgid "MeshLibrary.."
+msgstr "메쉬 라이브러리.."
+
+#: tools/editor/editor_node.cpp
+msgid "TileSet.."
+msgstr "타일 셋.."
+
+#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Redo"
+msgstr "다시 실행"
+
+#: tools/editor/editor_node.cpp
+msgid "Run Script"
+msgstr "스크립트 실행"
+
+#: tools/editor/editor_node.cpp
+msgid "Project Settings"
+msgstr "프로젝트 설정"
+
+#: tools/editor/editor_node.cpp
+msgid "Revert Scene"
+msgstr "씬 되돌리기"
+
+#: tools/editor/editor_node.cpp
+msgid "Quit to Project List"
+msgstr "종료하고 프로젝트 목록으로 돌아가기"
+
+#: tools/editor/editor_node.cpp
+msgid "Import assets to the project."
+msgstr "프로젝트로 에셋 가져오기"
+
+#: tools/editor/editor_node.cpp
+msgid "Miscellaneous project or scene-wide tools."
+msgstr "프로젝트 또는 씬 관련 여러가지 도구들."
+
+#: tools/editor/editor_node.cpp
+msgid "Tools"
+msgstr "도구"
+
+#: tools/editor/editor_node.cpp
+msgid "Export the project to many platforms."
+msgstr "프로젝트를 많은 플랫폼으로 내보내기"
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Export"
+msgstr "내보내기"
+
+#: tools/editor/editor_node.cpp
+msgid "Play the project (F5)."
+msgstr "프로젝트 실행 (F5)."
+
+#: tools/editor/editor_node.cpp
+msgid "Pause the scene"
+msgstr "씬 일시 정지"
+
+#: tools/editor/editor_node.cpp
+msgid "Stop the scene (F8)."
+msgstr "씬 정지 (F8)."
+
+#: tools/editor/editor_node.cpp
+msgid "Play the edited scene (F6)."
+msgstr "편집 중인 씬 실행 (F6)."
+
+#: tools/editor/editor_node.cpp
+msgid "Play custom scene"
+msgstr "다른 씬 실행"
+
+#: tools/editor/editor_node.cpp
+msgid "Debug options"
+msgstr "디버그 옵션"
+
+#: tools/editor/editor_node.cpp
+msgid "Live Editing"
+msgstr "실시간 편집"
+
+#: tools/editor/editor_node.cpp
+msgid "File Server"
+msgstr "파일 서버"
+
+#: tools/editor/editor_node.cpp
+msgid "Deploy Remote Debug"
+msgstr "원격 디버그 배포"
+
+#: tools/editor/editor_node.cpp
+msgid "Deploy File Server Clients"
+msgstr "파일 서버 클라이언트 배포"
+
+#: tools/editor/editor_node.cpp
+msgid "Visible Collision Shapes"
+msgstr "Collision Shape 보이기"
+
+#: tools/editor/editor_node.cpp
+msgid "Visible Navigation"
+msgstr "Navigation 보이기"
+
+#: tools/editor/editor_node.cpp tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Settings"
+msgstr "설정"
+
+#: tools/editor/editor_node.cpp tools/editor/settings_config_dialog.cpp
+msgid "Editor Settings"
+msgstr "편집기 설정"
+
+#: tools/editor/editor_node.cpp
+msgid "Editor Layout"
+msgstr "에디터 레이아웃"
+
+#: tools/editor/editor_node.cpp
+msgid "Install Export Templates"
+msgstr "내보내기 템플릿 설치"
+
+#: tools/editor/editor_node.cpp
+msgid "About"
+msgstr "정보"
+
+#: tools/editor/editor_node.cpp
+msgid "Alerts when an external resource has changed."
+msgstr "외부 리소스가 변경되었을 때 알림."
+
+#: tools/editor/editor_node.cpp
+msgid "Spins when the editor window repaints!"
+msgstr "에디터 윈도우가 다시 그려질 때 회전!"
+
+#: tools/editor/editor_node.cpp
+msgid "Update Always"
+msgstr "항상 갱신"
+
+#: tools/editor/editor_node.cpp
+msgid "Update Changes"
+msgstr "변경사항만 갱신"
+
+#: tools/editor/editor_node.cpp
+msgid "Inspector"
+msgstr "인스펙터"
+
+#: tools/editor/editor_node.cpp
+msgid "Create a new resource in memory and edit it."
+msgstr "새로운 리소스를 메모리에 만들고 편집합니다."
+
+#: tools/editor/editor_node.cpp
+msgid "Load an existing resource from disk and edit it."
+msgstr "디스크에서 기존 리소스를 로드하여 편집합니다."
+
+#: tools/editor/editor_node.cpp
+msgid "Save the currently edited resource."
+msgstr "현재 편집된 리소스 저장"
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save As.."
+msgstr "다른 이름으로 저장"
+
+#: tools/editor/editor_node.cpp
+msgid "Go to the previous edited object in history."
+msgstr "히스토리상 이전에 편집한 오브젝트로 가기"
+
+#: tools/editor/editor_node.cpp
+msgid "Go to the next edited object in history."
+msgstr "히스토리상 다음에 편집한 오브젝트로 가기"
+
+#: tools/editor/editor_node.cpp
+msgid "History of recently edited objects."
+msgstr "최근 편집 오브젝트 히스토리"
+
+#: tools/editor/editor_node.cpp
+msgid "Object properties."
+msgstr "오브젝트 속성."
+
+#: tools/editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "파일 시스템"
+
+#: tools/editor/editor_node.cpp
+msgid "Output"
+msgstr "출력"
+
+#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
+#: tools/editor/import_settings.cpp
+msgid "Re-Import"
+msgstr "다시 가져오기"
+
+#: tools/editor/editor_node.cpp tools/editor/editor_plugin_settings.cpp
+msgid "Update"
+msgstr "갱신"
+
+#: tools/editor/editor_node.cpp
+msgid "Thanks from the Godot community!"
+msgstr "Godot 커뮤니티에 감사드립니다!"
+
+#: tools/editor/editor_node.cpp
+msgid "Thanks!"
+msgstr "감사합니다!"
+
+#: tools/editor/editor_node.cpp
+msgid "Import Templates From ZIP File"
+msgstr "ZIP 파일로부터 템플릿을 가져오기"
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Export Project"
+msgstr "프로젝트 내보내기"
+
+#: tools/editor/editor_node.cpp
+msgid "Export Library"
+msgstr "라이브러리 내보내기"
+
+#: tools/editor/editor_node.cpp
+msgid "Merge With Existing"
+msgstr "기존과 병합"
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Password:"
+msgstr "암호:"
+
+#: tools/editor/editor_node.cpp
+msgid "Open & Run a Script"
+msgstr "스크립트를 열고 실행"
+
+#: tools/editor/editor_node.cpp
+msgid "Load Errors"
+msgstr "로드 에러"
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Installed Plugins:"
+msgstr "설치된 플러그인:"
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr "버전:"
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Author:"
+msgstr "저자:"
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Status:"
+msgstr "상태:"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Stop Profiling"
+msgstr "프로파일링 중지"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Start Profiling"
+msgstr "프로파일링 시작"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Measure:"
+msgstr "측정:"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame Time (sec)"
+msgstr "프레임 시간 (초)"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Average Time (sec)"
+msgstr "평균 시간 (초)"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame %"
+msgstr "프레임 %"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Fixed Frame %"
+msgstr "고정 프레임 %"
+
+#: tools/editor/editor_profiler.cpp tools/editor/script_editor_debugger.cpp
+msgid "Time:"
+msgstr "시간:"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Inclusive"
+msgstr "포함"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Self"
+msgstr "자신"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame #:"
+msgstr "프레임 #:"
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Please wait for scan to complete."
+msgstr "스캔이 완료될 때까지 기다려주세요."
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Current scene must be saved to re-import."
+msgstr "다시 가져오기 위해서는 현재 씬을 저장해야 합니다."
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Save & Re-Import"
+msgstr "저장 및 다시 가져오기"
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Re-Import Changed Resources"
+msgstr "변경된 리소스 다시 가져오기"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Write your logic in the _run() method."
+msgstr "로직을 _run() 함수안에 작성하세요."
+
+#: tools/editor/editor_run_script.cpp
+msgid "There is an edited scene already."
+msgstr "이미 편집된 씬이 있습니다."
+
+#: tools/editor/editor_run_script.cpp
+msgid "Couldn't instance script:"
+msgstr "스크립트를 인스턴스 할 수 없습니다:"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Did you forget the 'tool' keyword?"
+msgstr "'tool' 키워드를 잊으셨습니까?"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Couldn't run script:"
+msgstr "스크립트를 실행할 수 없습니다:"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Did you forget the '_run' method?"
+msgstr "'_run' 함수를 잊으셨습니까?"
+
+#: tools/editor/editor_settings.cpp
+msgid "Default (Same as Editor)"
+msgstr "기본 (에디터와 동일)"
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Select Node(s) to Import"
+msgstr "가져올 노드들 선택"
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Scene Path:"
+msgstr "씬 경로:"
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Import From Node:"
+msgstr "노드에서 가져오기:"
+
+#: tools/editor/file_type_cache.cpp
+msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
+msgstr "file_type_cache.cch를 열수 없어서, 파일 타입 캐쉬를 저장하지 않습니다."
+
+#: tools/editor/groups_editor.cpp
+msgid "Add to Group"
+msgstr "그룹에 추가"
+
+#: tools/editor/groups_editor.cpp
+msgid "Remove from Group"
+msgstr "그룹에서 제거"
+
+#: tools/editor/groups_editor.cpp
+msgid "Group Editor"
+msgstr "그룹 편집기"
+
+#: tools/editor/groups_editor.cpp tools/editor/project_export.cpp
+msgid "Group"
+msgstr "그룹"
+
+#: tools/editor/groups_editor.cpp
+msgid "Node Group(s)"
+msgstr "노트 그룹"
+
+#: tools/editor/import_settings.cpp
+msgid "Imported Resources"
+msgstr "가져온 리소스"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "No source font file!"
+msgstr "소스 폰트 파일이 없습니다!"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "No target font resource!"
+msgstr "폰트 리소스 경로가 없습니다."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Can't load/process source font."
+msgstr "소스 폰트를 로드/처리할 수 없습니다."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Couldn't save font."
+msgstr "폰트를 저장할 수 없습니다."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Source Font:"
+msgstr "소스 폰트:"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Source Font Size:"
+msgstr "소스 폰트 크기:"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Dest Resource:"
+msgstr "리소스 경로:"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "The quick brown fox jumps over the lazy dog."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Test:"
+msgstr "테스트:"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Options:"
+msgstr "옵션:"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Font Import"
+msgstr "폰트 가져오기"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Accept"
+msgstr "수락"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid ""
+"This file is already a Godot font file, please supply a BMFont type file "
+"instead."
+msgstr "이 파일은 이미 Godot 폰트 파일입니다. BMFont 파일을 선택하세요."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Failed opening as BMFont file."
+msgstr "BMFont 파일을 여는데 실패했습니다."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Invalid font custom source."
+msgstr "사용자 지정 폰트 소스가 유효하지 않습니다."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Font"
+msgstr "폰트"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "No meshes to import!"
+msgstr "가져올 메쉬가 없습니다!"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Save path is empty!"
+msgstr "저장 경로가 없습니다!"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Single Mesh Import"
+msgstr "단일 메쉬 가져오기"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Source Mesh(es):"
+msgstr "소스 메쉬:"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Target Path:"
+msgstr "대상 경로:"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Mesh"
+msgstr "메쉬"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Surface %d"
+msgstr "서페이스 %d"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "No samples to import!"
+msgstr "가져올 샘플이 없습니다!"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path is empty."
+msgstr "대상 경로가 없습니다!"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path must be a complete resource path."
+msgstr "대상 경로는 완전한 리소스 경로여야 합니다."
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path must exist."
+msgstr "대상 경로가 존재해야 합니다."
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Import Audio Samples"
+msgstr "오디오 샘플 가져오기"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Source Sample(s):"
+msgstr "소스 샘플:"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Audio Sample"
+msgstr "오디오 샘플"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "New Clip"
+msgstr "새 클립"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Animation Options"
+msgstr "애니메이션 옵션"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Flags"
+msgstr "플래그"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Bake FPS:"
+msgstr "FPS 설정:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Optimizer"
+msgstr "최적화"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Linear Error"
+msgstr "최대 선형 오류"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Angular Error"
+msgstr "최대 각도 오류"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Angle"
+msgstr "최대 각도"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Clips"
+msgstr "클립"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/project_manager.cpp tools/editor/project_settings.cpp
+msgid "Name"
+msgstr "이름"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Start(s)"
+msgstr "시작(초)"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "End(s)"
+msgstr "끝(초)"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Loop"
+msgstr "루프"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Filters"
+msgstr "필터"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Source path is empty."
+msgstr "소스 경로가 비어있습니다."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't load post-import script."
+msgstr "가져오기 후 실행할 스크립트를 로드할 수 없습니다."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Invalid/broken script for post-import."
+msgstr "가져오기 후 실행할 스크립트가 유효하지 않거나 깨져있습니다."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Error importing scene."
+msgstr "씬 가져오기 에러"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import 3D Scene"
+msgstr "3D 씬 가져오기"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Source Scene:"
+msgstr "소스 씬:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Same as Target Scene"
+msgstr "대상 씬과 같음"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Shared"
+msgstr "공유됨"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Target Texture Folder:"
+msgstr "대상 텍스쳐 폴더:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Post-Process Script:"
+msgstr "가져오기 후 수행할 스크립트:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Custom Root Node Type:"
+msgstr "사용자 정의 루트 노드 타입:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Auto"
+msgstr "자동"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "The Following Files are Missing:"
+msgstr "다음의 파일들이 빠져있습니다:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import Anyway"
+msgstr "무시하고 가져오기"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import & Open"
+msgstr "가져오기 후 열기"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Edited scene has not been saved, open imported scene anyway?"
+msgstr "편집된 씬이 저장되지 않았습니다. 무시하고 가져온 씬을 여시겠습니까?"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import Scene"
+msgstr "씬 가져오기"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Importing Scene.."
+msgstr "씬 가져오는 중.."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Running Custom Script.."
+msgstr "사용자 정의 스크립트 실행중.."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't load post-import script:"
+msgstr "가져오기 후 실행할 스크립트를 로드할 수 없습니다:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Invalid/broken script for post-import:"
+msgstr "가져오기 후 실행할 스크립트가 유효하지 않거나 깨져있습니다:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Error running post-import script:"
+msgstr "가져오기 후 실행할 스크립트 실행 중 에러:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import Image:"
+msgstr "이미지 가져오기:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Can't import a file over itself:"
+msgstr "자신을 가져올 수 없습니다:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't localize path: %s (already local)"
+msgstr "경로를 로컬 경로로 바꿀 수 없습니다: %s (이미 로컬 경로)"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Saving.."
+msgstr "저장 중.."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "3D Scene Animation"
+msgstr "3D 씬 애니메이션"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Uncompressed"
+msgstr "무압축"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress Lossless (PNG)"
+msgstr "무손실 압축 (PNG)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress Lossy (WebP)"
+msgstr "손실 압축 (PNG)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress (VRAM)"
+msgstr "압축 (VRAM)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Format"
+msgstr "텍스쳐 포멧"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Compression Quality (WebP):"
+msgstr "텍스쳐 압축 품질 (WebP):"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Options"
+msgstr "텍스쳐 옵션"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Please specify some files!"
+msgstr "파일을 지정하세요!"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "At least one file needed for Atlas."
+msgstr "아틀라스 생성을 위해서는 최소 1개 이상의 파일이 필요합니다."
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Error importing:"
+msgstr "가져오기 에러:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Only one file is required for large texture."
+msgstr "큰 텍스쳐를 위해서는 단 하나의 파일만 요구됩니다."
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Max Texture Size:"
+msgstr "최대 텍스쳐 사이즈:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for Atlas (2D)"
+msgstr "아틀라스를 위한 텍스쳐 가져오기 (2D)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Cell Size:"
+msgstr "쎌 사이즈:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Large Texture"
+msgstr "큰 텍스쳐"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Large Textures (2D)"
+msgstr "큰 텍스쳐 가져오기 (2D)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture"
+msgstr "소스 텍스쳐"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Base Atlas Texture"
+msgstr "기본 아틀라스 텍스쳐"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture(s)"
+msgstr "소트 텍스쳐"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for 2D"
+msgstr "2D 텍스쳐 가져오기"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for 3D"
+msgstr "3D 텍스쳐 가져오기"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures"
+msgstr "텍스쳐 가져오기"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "2D Texture"
+msgstr "2D 텍스쳐"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "3D Texture"
+msgstr "3D 텍스쳐"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Atlas Texture"
+msgstr "텍스쳐 아틀라스"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid ""
+"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to "
+"the project."
+msgstr ""
+"알림: 2D 텍스쳐 가져오기가 필수는 아닙니다. png/jpg 파일들을 프로젝트에 복사"
+"해서 사용해도 됩니다."
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture(s):"
+msgstr "소스 텍스쳐:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Crop empty space."
+msgstr "빈 영역 잘라내기."
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture"
+msgstr "텍스쳐"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Large Texture"
+msgstr "큰 텍스쳐 가져오기"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Load Source Image"
+msgstr "소스 이미지 로드"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Slicing"
+msgstr "자르는 중"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Inserting"
+msgstr "삽입 중"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Saving"
+msgstr "저장 중"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save large texture:"
+msgstr "큰 텍스쳐를 저장할 수 없음:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Build Atlas For:"
+msgstr "아틀라스 생성:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Loading Image:"
+msgstr "이미지 로딩:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't load image:"
+msgstr "이미지를 로드할 수 없음:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Converting Images"
+msgstr "이미지 변환 중"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Cropping Images"
+msgstr "이미지 자르는 중"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Blitting Images"
+msgstr "이미지 병합 중"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save atlas image:"
+msgstr "아틀라스 이미지를 저장할 수 없음:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save converted texture:"
+msgstr "변환된 텍스쳐를 저장할 수 없음:"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Invalid source!"
+msgstr "유효하지 않은 소스!"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Invalid translation source!"
+msgstr "유효하지 않은 번역 소스!"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Column"
+msgstr "열"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#: tools/editor/script_create_dialog.cpp
+msgid "Language"
+msgstr "언어"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "No items to import!"
+msgstr "가져올 항목이 없습니다!"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "No target path!"
+msgstr "대상 경로가 없습니다!"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Translations"
+msgstr "번역 가져오기"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Couldn't import!"
+msgstr "가져올 수 없습니다!"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Translation"
+msgstr "번역 가져오기"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Source CSV:"
+msgstr "소스 CSV:"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Ignore First Row"
+msgstr "첫째줄 무시"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Compress"
+msgstr "압축"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Add to Project (engine.cfg)"
+msgstr "프로젝트에 추가 (engine.cfg)"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Languages:"
+msgstr "언어 가져오기:"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Translation"
+msgstr "번역"
+
+#: tools/editor/multi_node_edit.cpp
+msgid "MultiNode Set"
+msgstr "다중 노드 설정"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Toggle Autoplay"
+msgstr "자동 재생 전환"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Animation Name:"
+msgstr "새 애니메이션 이름:"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Anim"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Animation Name:"
+msgstr "애니메이션 이름 변경:"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Remove Animation"
+msgstr "애니메이션 제거"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Invalid animation name!"
+msgstr "에러: 유요하지 않은 애니메이션 이름!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Animation name already exists!"
+msgstr "에러: 애니메이션 이름이 이미 존재합니다!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "애니메이션 이름 변경"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Animation"
+msgstr "애니메이션 추가하기"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Next Changed"
+msgstr "다음 연결 변경"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Blend Time"
+msgstr "연결 시간 변경"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load Animation"
+msgstr "애니메이션 로드하기"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "애니메이션 복제하기"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to copy!"
+msgstr "에러: 복사할 애니메이션이 없습니다!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation resource on clipboard!"
+msgstr "에러: 클립보드에 애니메이션 리소스가 없습니다!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Pasted Animation"
+msgstr "붙여진 애니메이션"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Paste Animation"
+msgstr "애니메이션 붙여넣기"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to edit!"
+msgstr "에러: 편집할 애니메이션이 없습니다!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from current pos. (A)"
+msgstr "선택된 애니메이션을 현재 위치에서 거꾸로 재생. (A)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from end. (Shift+A)"
+msgstr "선택된 애니메이션을 끝에서 거꾸로 재생. (Shift+A)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Stop animation playback. (S)"
+msgstr "애니메이션 재생 정지. (S)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from start. (Shift+D)"
+msgstr "선택된 애니메이션을 처음부터 재생. (Shift+D)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from current pos. (D)"
+msgstr "선택된 애니메이션을 현재 위치에서 재생. (D)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation position (in seconds)."
+msgstr "애니메이션 위치 (초)."
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Scale animation playback globally for the node."
+msgstr "애니메이션 재생 속도를 전체적으로 조절."
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create new animation in player."
+msgstr "새로운 애니메이션 만들기"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load an animation from disk."
+msgstr "디스크에서 애니메이션 로드"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save the current animation"
+msgstr "현재 애니메이션 저장"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Display list of animations in player."
+msgstr "애니메이션 목록 표시"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Autoplay on Load"
+msgstr "로드 시 자동 시작"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Edit Target Blend Times"
+msgstr "대상 블렌드 시간 편집"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Tools"
+msgstr "애니메이션 도구"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Copy Animation"
+msgstr "애니메이션 복사"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "새 애니메이션 만들기"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Name:"
+msgstr "애니메이션 이름:"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/script_create_dialog.cpp
+msgid "Error!"
+msgstr "에러!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Times:"
+msgstr "블렌드 시간:"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Next (Auto Queue):"
+msgstr "다음 (자동 큐):"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Cross-Animation Blend Times"
+msgstr "교차-애니메이션 블렌드 시간"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation"
+msgstr "애니메이션"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "New name:"
+msgstr "새 이름:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Scale:"
+msgstr "크기:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade In (s):"
+msgstr "페이드 인 (초):"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade Out (s):"
+msgstr "페이드 아웃 (초):"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend"
+msgstr "블렌드"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix"
+msgstr "믹스"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Auto Restart:"
+msgstr "자동 재시작:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Restart (s):"
+msgstr "재시작 (초):"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Random Restart (s):"
+msgstr "랜덤 재시작 (초):"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Start!"
+msgstr "시작!"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Amount:"
+msgstr "양:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend:"
+msgstr "블렌드:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 0:"
+msgstr "블렌드 0:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 1:"
+msgstr "블렌드 1:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "X-Fade Time (s):"
+msgstr "크로스 페이드 시간 (초):"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Current:"
+msgstr "현재:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Add Input"
+msgstr "입력 추가"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Clear Auto-Advance"
+msgstr "자동 진행 제거"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Set Auto-Advance"
+msgstr "자동 진행 설정"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Delete Input"
+msgstr "입력 삭제"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Rename"
+msgstr "이름 변경"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is valid."
+msgstr "애니메이션 트리가 유효합니다."
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is invalid."
+msgstr "애니메이션 트리가 유효하지 않습니다."
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation Node"
+msgstr "애니메이션 노드"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "OneShot Node"
+msgstr "원샷 노드"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix Node"
+msgstr "믹스 노드"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend2 Node"
+msgstr "블렌드2 노드"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend3 Node"
+msgstr "블렌드3 노드"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend4 Node"
+msgstr "블렌드4 노드"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeScale Node"
+msgstr "시간 크기 조절 노드"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeSeek Node"
+msgstr "시간 탐색 노드"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Transition Node"
+msgstr "전환 노드"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Import Animations.."
+msgstr "애니메이션 가져오기.."
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Edit Node Filters"
+msgstr "노드 필터 편집"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Filters.."
+msgstr "필터.."
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Parsing %d Triangles:"
+msgstr "%d개 삼각형 분석 중:"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Triangle #"
+msgstr "삼각형 #"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Light Baker Setup:"
+msgstr "라이트 베이커 설정:"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Parsing Geometry"
+msgstr "지오미트리 분석 중"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Fixing Lights"
+msgstr "라이트 수정 중"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Making BVH"
+msgstr "BVH 만드는 중"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Creating Light Octree"
+msgstr "라이트 오크트리 생성 중"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Creating Octree Texture"
+msgstr "오크트리 텍스쳐 생성 중"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Transfer to Lightmaps:"
+msgstr "라이트맵으로 전송:"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Allocating Texture #"
+msgstr "텍스쳐 할당 중 #"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Baking Triangle #"
+msgstr "삼각형 굽는 중 #"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Post-Processing Texture #"
+msgstr "텍스쳐 후처리 중 #"
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "BakedLightInstance does not contain a BakedLight resource."
+msgstr "BakedLightInstance가 BakedLight 리소스를 가지고 있지 않습니다."
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "Bake!"
+msgstr "굽기!"
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "Reset the lightmap octree baking process (start over)."
+msgstr "라이트맵 오크트리 굽기 프로세스 재설정 (처음부터 다시)."
+
+#: tools/editor/plugins/camera_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Preview"
+msgstr "미리보기:"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Configure Snap"
+msgstr "스냅 설정"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid Offset:"
+msgstr "그리드 오프셋:"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid Step:"
+msgstr "그리드 스텝:"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Offset:"
+msgstr "회전 오프셋:"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Step:"
+msgstr "회전 스텝:"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Pivot"
+msgstr "피벗 이동"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Action"
+msgstr "이동 액션"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit IK Chain"
+msgstr "IK 체인 편집"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit CanvasItem"
+msgstr "CanvasItem 편집"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors"
+msgstr "앵커 변경"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom (%):"
+msgstr "확대 (%):"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Paste Pose"
+msgstr "포즈 붙여넣기"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Select Mode (Q)"
+msgstr "선택 모드 (Q)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Drag: Rotate"
+msgstr "드래그: 회전"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+Drag: Move"
+msgstr "알트+드래그: 이동"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)."
+msgstr "'v'키는 피벗 이동, '쉬프트+v'키는 피벗 드래그 (이동하는 동안)."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+RMB: Depth list selection"
+msgstr "알트+우클릭: 겹친 오브젝트 선택"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Move Mode (W)"
+msgstr "이동 모드 (W)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Mode (E)"
+msgstr "회전 모드 (E)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid ""
+"Show a list of all objects at the position clicked\n"
+"(same as Alt+RMB in select mode)."
+msgstr ""
+"클릭한 위치에 있는 모든 오브젝트들의 목록을 보여줍니다.\n"
+"(선택모드에서 알트+우클릭과 같습니다.)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Click to change object's rotation pivot."
+msgstr "오브젝트의 회전 피벗 변경"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Pan Mode"
+msgstr "팬 모드"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Lock the selected object in place (can't be moved)."
+msgstr "선택된 오브젝트를 잠급니다 (이동불가)."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Unlock the selected object (can be moved)."
+msgstr "선택된 오브젝트를 잠금 해제합니다 (이동가능)."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Makes sure the object's children are not selectable."
+msgstr "오브젝트의 자식노드가 선택될 수 없도록 설정합니다."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Restores the object's children's ability to be selected."
+msgstr "오브젝트의 자식노드가 선택될 수 있도록 복원합니다."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Edit"
+msgstr "편집"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Snap"
+msgstr "스냅 사용"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Show Grid"
+msgstr "그리드 보이기"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Rotation Snap"
+msgstr "회전 스냅 사용"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap Relative"
+msgstr "상대적인 스냅"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Configure Snap.."
+msgstr "스냅 설정.."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Pixel Snap"
+msgstr "픽셀 스냅 사용"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Expand to Parent"
+msgstr "부모로 확장"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Skeleton.."
+msgstr "스켈레톤.."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make Bones"
+msgstr "Bones 만들기"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Bones"
+msgstr "Bones 없애기"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make IK Chain"
+msgstr "IK 체인 만들기"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear IK Chain"
+msgstr "IK 체인 없애기"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View"
+msgstr "보기"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom In"
+msgstr "확대"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Out"
+msgstr "축소"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Reset"
+msgstr "확대 초기화"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Set.."
+msgstr "확대 설정.."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center Selection"
+msgstr "선택항목 화면 중앙에 표시"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Frame Selection"
+msgstr "선택항목 화면 꽉차게 표시"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Anchor"
+msgstr "앵커"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Keys (Ins)"
+msgstr "키 삽입 (Ins 키)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key"
+msgstr "키 삽입"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key (Existing Tracks)"
+msgstr "키 삽입 (존재하는 트랙)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Copy Pose"
+msgstr "포즈 복사"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Pose"
+msgstr "포즈 정리"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Set a Value"
+msgstr "값 설정"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap (Pixels):"
+msgstr "스냅 (픽셀):"
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create Poly"
+msgstr "폴리곤 생성"
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Edit Poly"
+msgstr "폴리곤 편집"
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Edit Poly (Remove Point)"
+msgstr "폴리곤 편집 (점 삭제)"
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr "처음부터 새로운 폴리곤 만들기"
+
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+msgid "Create Poly3D"
+msgstr "폴리곤3D 만들기"
+
+#: tools/editor/plugins/collision_shape_2d_editor_plugin.cpp
+msgid "Set Handle"
+msgstr "핸들 설정"
+
+#: tools/editor/plugins/color_ramp_editor_plugin.cpp
+msgid "Add/Remove Color Ramp Point"
+msgstr "칼라 램프 포인트 추가/삭제"
+
+#: tools/editor/plugins/color_ramp_editor_plugin.cpp
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Color Ramp"
+msgstr "칼라 램프 수정"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Creating Mesh Library"
+msgstr "메쉬 라이브러리 생성 중"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Thumbnail.."
+msgstr "썸네일.."
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove item %d?"
+msgstr "%d 항목을 삭제하시겠습니까?"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Add Item"
+msgstr "항목 추가"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove Selected Item"
+msgstr "선택된 항목 삭제"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import from Scene"
+msgstr "씬으로부터 가져오기"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Update from Scene"
+msgstr "씬으로부터 갱신하기"
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Item %d"
+msgstr "항목 %d"
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Items"
+msgstr "항목"
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Item List Editor"
+msgstr "항목 목록 편집기"
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Occluder Polygon"
+msgstr "Occluder 폴리곤 만들기"
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Edit existing polygon:"
+msgstr "기존 폴리곤 편집:"
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "LMB: Move Point."
+msgstr "좌클릭: 포인트 이동"
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Ctrl+LMB: Split Segment."
+msgstr "컨트롤+좌클릭: 세그먼트 분할"
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "RMB: Erase Point."
+msgstr "우클릭: 포인트 삭제"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh is empty!"
+msgstr "메쉬가 비었습니다!"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Trimesh Body"
+msgstr "Static Trimesh Body 만들기"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Convex Body"
+msgstr "Static Convex Body 만들기"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "This doesn't work on scene root!"
+msgstr "씬 루트에서는 할 수 없습니다!"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Shape"
+msgstr "Trimesh Shape 만들기"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Shape"
+msgstr "Convex Shape 만들기"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Navigation Mesh"
+msgstr "네비게이션 메쉬 만들기"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "MeshInstance lacks a Mesh!"
+msgstr "MeshInstance에 메쉬가 없습니다!"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Could not create outline!"
+msgstr "외곽선을 만들수 없습니다."
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline"
+msgstr "외곽선 만들기"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Static Body"
+msgstr "Trimesh Static Body 만들기"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Static Body"
+msgstr "Convex Static Body 만들기"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Collision Sibling"
+msgstr "Trimesh Collision Sibling 만들기"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Collision Sibling"
+msgstr "Convex Collision Sibling 만들기"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh.."
+msgstr "외곽선 메쉬 만들기.."
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh"
+msgstr "외곽선 메쉬 만들기"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Outline Size:"
+msgstr "외곽선 크기:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and no MultiMesh set in node)."
+msgstr "소스 메쉬가 지정되지 않았습니다 (그리고 노드에 MultiMesh가 없습니다)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and MultiMesh contains no Mesh)."
+msgstr "소스 메쉬가 지정되지 않았습니다 (그리고 MultiMesh에 메쉬가 없습니다)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (invalid path)."
+msgstr "소스 메쉬가 유효하지 않습니다 (유효하지 않은 경로)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (not a MeshInstance)."
+msgstr "소스 메쉬가 유효하지 않습니다 (MeshInstance가 아닙니다)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (contains no Mesh resource)."
+msgstr "소스 메쉬가 유효하지 않습니다 (메쉬 리소스가 없습니다)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No surface source specified."
+msgstr "서피스 소스가 지정되지 않았습니다."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (invalid path)."
+msgstr "서피스 소스가 유효하지 않습니다 (유효하지 않은 경로)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no geometry)."
+msgstr "서피스 소스가 유효하지 않습니다 (지오미트리 없음)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no faces)."
+msgstr "서피스 소스가 유효하지 않습니다 (페이스 없음)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Parent has no solid faces to populate."
+msgstr "부모노드가 솔리드 페이스를 가지고 있지 않아 생성할 수 없습니다."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Couldn't map area."
+msgstr "영역을 매핑 할 수 없습니다."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Source Mesh:"
+msgstr "소스 메쉬 선택:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Target Surface:"
+msgstr "대상 서피스 선택:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate Surface"
+msgstr "서피스 생성"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate MultiMesh"
+msgstr "MultiMesh 생성"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Target Surface:"
+msgstr "대상 서피스:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Source Mesh:"
+msgstr "소스 메쉬:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "X-Axis"
+msgstr "X축"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Y-Axis"
+msgstr "Y축"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Z-Axis"
+msgstr "Z축"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh Up Axis:"
+msgstr "메쉬의 위쪽 축:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Rotation:"
+msgstr "임의 회전:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Tilt:"
+msgstr "임의 기울기:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Scale:"
+msgstr "임의 크기:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate"
+msgstr "생성"
+
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create Navigation Polygon"
+msgstr "네비게이션 폴리곤 만들기"
+
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Remove Poly And Point"
+msgstr "폴리곤과 포인트 삭제"
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Error loading image:"
+msgstr "이미지 로드 에러:"
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "No pixels with transparency > 128 in image.."
+msgstr "이미지에 투명도가 128보다 큰 픽셀이 없습니다.."
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Set Emission Mask"
+msgstr "에미션 마스크 설정"
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Clear Emission Mask"
+msgstr "에미션 마스크 정리"
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Load Emission Mask"
+msgstr "에미션 마스크 로드"
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generated Point Count:"
+msgstr "생성된 포인트 개수:"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry."
+msgstr "노드가 지오미트리를 포함하고 있지 않습니다."
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry (faces)."
+msgstr "노드가 지오미트리를 포함하고 있지 않습니다 (페이스)."
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Faces contain no area!"
+msgstr "페이스가 영역을 가지고 있지 않습니다!"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "No faces!"
+msgstr "페이스가 없습니다!"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Generate AABB"
+msgstr "AABB 생성"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter From Mesh"
+msgstr "메쉬로부터 에미터 만들기"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter From Node"
+msgstr "노드로부터 에미터 만들기"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Clear Emitter"
+msgstr "에미터 정리"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter"
+msgstr "에미터 만들기"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Positions:"
+msgstr "에미션 위치:"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Fill:"
+msgstr "에미션 채움:"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Surface"
+msgstr "출사면"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Volume"
+msgstr "배출량"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Point from Curve"
+msgstr "커브에서 포인트 삭제"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Add Point to Curve"
+msgstr "커브에 포인트 추가"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Point in Curve"
+msgstr "커브의 포인트 이동"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move In-Control in Curve"
+msgstr "커브의 인-컨트롤 이동"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Out-Control in Curve"
+msgstr "커브의 아웃-컨트롤 이동"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr "포인트 선택"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr "쉬푸트+드래그: 컨트롤 포인트 선택"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr "클릭: 포인트 추가"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr "우클릭: 포인트 삭제"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Select Control Points (Shift+Drag)"
+msgstr "컨트롤 포인트 선택 (쉬프트+드래그)"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr "포인트 추가 (빈 공간)"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Split Segment (in curve)"
+msgstr "세그먼트 분할 (커브)"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr "포인트 삭제"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Close Curve"
+msgstr "커브 닫기"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Curve Point #"
+msgstr "커브 포인트 #"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Point Pos"
+msgstr "커브 포인트 위치 설정"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve In Pos"
+msgstr "커브 포인트 In 설정"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Out Pos"
+msgstr "커브 포인트 Out 설정"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Split Path"
+msgstr "경로 나누기"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Remove Path Point"
+msgstr "경로 포인트 삭제"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create UV Map"
+msgstr "UV 맵 만들기"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Transform UV Map"
+msgstr "UV 맵 변형"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon 2D UV Editor"
+msgstr "폴리곤 2D UV 편집기"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Point"
+msgstr "포인트 이동"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Ctrl: Rotate"
+msgstr "컨트롤: 회전"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift: Move All"
+msgstr "쉬프트: 전체 이동"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift+Ctrl: Scale"
+msgstr "쉬프트+컨트롤: 크기 조절"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Polygon"
+msgstr "폴리곤 이동"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Rotate Polygon"
+msgstr "폴리곤 회전"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Scale Polygon"
+msgstr "폴리곤 크기 조절"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon->UV"
+msgstr "폴리곤->UV"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "UV->Polygon"
+msgstr "UV->폴리곤"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Clear UV"
+msgstr "UV 정리"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Snap"
+msgstr "스냅"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Enable Snap"
+msgstr "스냅 활성화"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid"
+msgstr "그리드"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "ERROR: Couldn't load resource!"
+msgstr "에러: 리소스를 로드할 수 없습니다!"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Add Resource"
+msgstr "리소스 추가"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Rename Resource"
+msgstr "리소스 이름 변경"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Delete Resource"
+msgstr "리소스 삭제"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Resource clipboard is empty!"
+msgstr "리소스 클립보드가 비었습니다!"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Load Resource"
+msgstr "리소스 로드"
+
+#: tools/editor/plugins/rich_text_editor_plugin.cpp
+msgid "Parse BBCode"
+msgstr "BBCode 읽기"
+
+#: tools/editor/plugins/sample_editor_plugin.cpp
+msgid "Length:"
+msgstr "길이:"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Open Sample File(s)"
+msgstr "샘플 파일 열기"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "ERROR: Couldn't load sample!"
+msgstr "에러: 샘플을 로드할 수 없습니다."
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Add Sample"
+msgstr "샘플 추가"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Stop"
+msgstr "정지"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Play"
+msgstr "재성"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Rename Sample"
+msgstr "샘플 이름 변경"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Delete Sample"
+msgstr "샘플 삭제"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "16 Bits"
+msgstr "16 비트"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "8 Bits"
+msgstr "8 비트"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Stereo"
+msgstr "스테레오"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Mono"
+msgstr "모노"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Format"
+msgstr "포멧"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Pitch"
+msgstr "피치"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error while saving theme"
+msgstr "테마 저장 중 에러"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error saving"
+msgstr "저장 중 에러"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error importing theme"
+msgstr "테마 가져오는 중 에러"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error importing"
+msgstr "가져오는 중 에러"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Import Theme"
+msgstr "테마 가져오기"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As.."
+msgstr "테마 다른 이름으로 저장.."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/project_export.cpp
+msgid "File"
+msgstr "파일"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_editor.cpp
+msgid "New"
+msgstr "새로운"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save All"
+msgstr "모두 저장"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "History Prev"
+msgstr "이전 히스토리"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "History Next"
+msgstr "다음 히스토리"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Reload Theme"
+msgstr "테마 재로드"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme"
+msgstr "테마 저장"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As"
+msgstr "테마 다른 이름으로 저장"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr "위로 이동"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr "아래로 이동"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Indent Left"
+msgstr "내어쓰기"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Indent Right"
+msgstr "들여쓰기"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Toggle Comment"
+msgstr "주석 토글"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Clone Down"
+msgstr "아래로 복제"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Complete Symbol"
+msgstr "자동 완성"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Trim Trailing Whitespace"
+msgstr "후행 공백 문자 제거"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Auto Indent"
+msgstr "자동 들여쓰기"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find.."
+msgstr "찾기.."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find Next"
+msgstr "다음 찾기"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find Previous"
+msgstr "이전 찾기"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Replace.."
+msgstr "변경.."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Goto Function.."
+msgstr "함수로 이동.."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Goto Line.."
+msgstr "라인으로 이동.."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Debug"
+msgstr "디버그"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Toggle Breakpoint"
+msgstr "중단점 토글"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Remove All Breakpoints"
+msgstr "중단점 모두 삭제"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Goto Next Breakpoint"
+msgstr "다음 중단점으로 이동"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Goto Previous Breakpoint"
+msgstr "이전 중단점으로 이동"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Step Over"
+msgstr "한 단계식 코드 실행"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Step Into"
+msgstr "프로시저 단위 실행"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Break"
+msgstr "정지"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Continue"
+msgstr "계속"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Keep Debugger Open"
+msgstr "디버거 항상 열어놓기"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Window"
+msgstr "윈도우"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Left"
+msgstr "왼쪽으로 이동"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Right"
+msgstr "오른쪽으로 이동"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Help"
+msgstr "도움말"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Contextual"
+msgstr "문맥상 찾기"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Tutorials"
+msgstr "튜토리얼"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Open https://godotengine.org at tutorials section."
+msgstr "https://godotengine.org의 튜토리얼 부분을 엽니다."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Classes"
+msgstr "클래스"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search the class hierarchy."
+msgstr "클래스 계층 검색."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search Help"
+msgstr "도움말 검색"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search the reference documentation."
+msgstr "레퍼런스 문서 검색"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Go to previous edited document."
+msgstr "이전 편집 문서로 이동"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Go to next edited document."
+msgstr "다음 편집 문서로 이동"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Create Script"
+msgstr "스크립트 만들기"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid ""
+"The following files are newer on disk.\n"
+"What action should be taken?:"
+msgstr ""
+"다음의 파일들이 디스크상 더 최신입니다.\n"
+"어떤 작업을 수행하시겠습니까?:"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Reload"
+msgstr "다시 로드"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Resave"
+msgstr "다시 저장"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Debugger"
+msgstr "디버거"
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Vertex"
+msgstr "버텍스"
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Fragment"
+msgstr "프래그먼트"
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Lighting"
+msgstr "라이팅"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Constant"
+msgstr "Scalar 상수 변경"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Constant"
+msgstr "Vec 상수 변경"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Constant"
+msgstr "RGB 상수 변경"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Operator"
+msgstr "Scalar 연산자 변경"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Operator"
+msgstr "Vec 연산자 변경"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Scalar Operator"
+msgstr "Vec Scalar 연산자 변경"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Operator"
+msgstr "RGB 연산자 변경"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Toggle Rot Only"
+msgstr "회전만 토글"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Function"
+msgstr "Scalar 함수 변경"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Function"
+msgstr "Vec 함수 변경"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Uniform"
+msgstr "Scalar uniform 변경"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Uniform"
+msgstr "Vec uniform 변경"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Uniform"
+msgstr "RGB uniform 변경"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Default Value"
+msgstr "기본값 변경"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change XForm Uniform"
+msgstr "변환 uniform 변경"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Texture Uniform"
+msgstr "텍스쳐 uniform 변경"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Cubemap Uniform"
+msgstr "큐브맵 uniform 변경"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Comment"
+msgstr "주석 변경"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Color Ramp"
+msgstr "색상 램프 추가/삭제"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Curve Map"
+msgstr "커브 맵 추가/삭제"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Curve Map"
+msgstr "커브맵 수정"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Input Name"
+msgstr "입력 이름 변경"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Connect Graph Nodes"
+msgstr "그래프 노드 연결"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Disconnect Graph Nodes"
+msgstr "그래프 노드 연결 해제"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Remove Shader Graph Node"
+msgstr "셰이더 그래프 노드 삭제"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Move Shader Graph Node"
+msgstr "셰이더 그래프 노드 이동"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Duplicate Graph Node(s)"
+msgstr "그래프 노드 복제"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Delete Shader Graph Node(s)"
+msgstr "셰이더 그래프 노드 삭제"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Cyclic Connection Link"
+msgstr "에러: 순환 연결 링크"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Missing Input Connections"
+msgstr "에러: 입력 연결 누락"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add Shader Graph Node"
+msgstr "셰이더 그래프 노드 추가"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal"
+msgstr "직교보기"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective"
+msgstr "원근보기"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Aborted."
+msgstr "변형 중단."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Plane Transform."
+msgstr "뷰 평면 변형."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "X-Axis Transform."
+msgstr "X축 변형."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Y-Axis Transform."
+msgstr "Y축 변형."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Z-Axis Transform."
+msgstr "Z축 변형."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling to %s%%."
+msgstr "%s%%로 크기 변경."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotating %s degrees."
+msgstr "%s도로 회전."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View."
+msgstr "아랫면 보기."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom"
+msgstr "아랫면"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View."
+msgstr "윗면 보기."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top"
+msgstr "윗면"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View."
+msgstr "뒷면 보기."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear"
+msgstr "뒷면"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View."
+msgstr "정면 보기."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front"
+msgstr "정면"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View."
+msgstr "왼쪽면 보기."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left"
+msgstr "왼쪽면"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View."
+msgstr "오른쪽면 보기."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right"
+msgstr "오른쪽면"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Keying is disabled (no key inserted)."
+msgstr "키가 비활성화 되어 있습니다 (키가 삽입되지 않았습니다)."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Animation Key Inserted."
+msgstr "애니메이션 키가 삽입되었습니다."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Align with view"
+msgstr "뷰에 정렬"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top (Num7)"
+msgstr "윗면 (넘버패드7)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom (Shift+Num7)"
+msgstr "아랫면 (쉬프트+넘버패드7)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left (Num3)"
+msgstr "왼쪽면 (넘버패드3)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right (Shift+Num3)"
+msgstr "오른쪽면 (쉬프트+넘버패드3)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front (Num1)"
+msgstr "정면 (넘버패드1)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear (Shift+Num1)"
+msgstr "뒷면 (쉬프트+넘버패드1)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective (Num5)"
+msgstr "원근보기 (넘버패드5)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal (Num5)"
+msgstr "직교보기 (넘버패드5)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Environment"
+msgstr "환경"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Audio Listener"
+msgstr "오디오 리스너"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Gizmos"
+msgstr "기즈모"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Selection (F)"
+msgstr "선택 (F)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Align with view (Ctrl+Shift+F)"
+msgstr "뷰에 정렬 (컨트롤+쉬프트+F)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "XForm Dialog"
+msgstr "변환 다이얼로그"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "No scene selected to instance!"
+msgstr "인스턴스할 씬이 선택되지 않았습니다!"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Instance at Cursor"
+msgstr "커서에 인스턴스 만들기"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Could not instance scene!"
+msgstr "씬을 인스턴스 할 수 없습니다!"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Mode (R)"
+msgstr "크기조절 모드 (R)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform"
+msgstr "변환"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Local Coords"
+msgstr "로컬 좌표"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Dialog.."
+msgstr "변환 다이얼로그.."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Default Light"
+msgstr "기본 Light 사용"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Default sRGB"
+msgstr "기본 sRGB 사용"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "1 Viewport"
+msgstr "1개 뷰포트"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports"
+msgstr "2개 뷰포트"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports (Alt)"
+msgstr "2개 뷰포트 (다른 방식)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports"
+msgstr "3개 뷰포트"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports (Alt)"
+msgstr "3개 뷰포트 (다른 방식)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "4 Viewports"
+msgstr "4개 뷰포트"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Normal"
+msgstr "Normal 표시"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Wireframe"
+msgstr "Wireframe 표시"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Overdraw"
+msgstr "Overdraw 표시"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Shadeless"
+msgstr "Shadeless 표시"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Origin"
+msgstr "원점 보기"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Grid"
+msgstr "그리드 보기"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap Settings"
+msgstr "스냅 설정"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate Snap:"
+msgstr "이동 스냅:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Snap (deg.):"
+msgstr "회전 스냅 (도):"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Snap (%):"
+msgstr "크기 스냅 (%)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Viewport Settings"
+msgstr "뷰포트 설정"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Default Light Normal:"
+msgstr "기본 라이트 노말:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Ambient Light Color:"
+msgstr "환경 광 색상:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective FOV (deg.):"
+msgstr "원근 시야 (도):"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Near:"
+msgstr "Z축 가까이 보기:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Far:"
+msgstr "Z축 멀리 보기:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Change"
+msgstr "변환 변경"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate:"
+msgstr "이동:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate (deg.):"
+msgstr "회전 (도):"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale (ratio):"
+msgstr "크기 (비율):"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Type"
+msgstr "변환 타입"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Pre"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Post"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "ERROR: Couldn't load frame resource!"
+msgstr "에러: 프레임 리소스를 로드할 수 없습니다!"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Frame"
+msgstr "프레임 추가"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Resource clipboard is empty or not a texture!"
+msgstr "리소스 클립보드가 비었거나 텍스쳐가 아닙니다!"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Paste Frame"
+msgstr "프레임 붙여넣기"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Empty"
+msgstr "빈 프레임 추가"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation Loop"
+msgstr "애니메이션 루프 변경"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation FPS"
+msgstr "애니메이션 FPS 변경"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "(empty)"
+msgstr "(비었음)"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animations"
+msgstr "애니메이션"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Speed (FPS):"
+msgstr "속도 (FPS):"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animation Frames"
+msgstr "애니메이션 프레임"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (Before)"
+msgstr "빈 프레임 삽입 (이전)"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (After)"
+msgstr "빈 프레임 삽입 (이후)"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Up"
+msgstr "위"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Down"
+msgstr "아래"
+
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Set region_rect"
+msgstr "구역 설정"
+
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Sprite Region Editor"
+msgstr "Sprite 구역 편집기"
+
+#: tools/editor/plugins/style_box_editor_plugin.cpp
+msgid "StyleBox Preview:"
+msgstr "StyleBox 미리보기:"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Can't save theme to file:"
+msgstr "테마를 파일로 저장할 수 없습니다:"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add All Items"
+msgstr "모든 아이템 추가"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add All"
+msgstr "모두 추가"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove Item"
+msgstr "아이템 삭제"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add Class Items"
+msgstr "클래스 아이템 추가"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Remove Class Items"
+msgstr "클래스 아이템 삭제"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Create Template"
+msgstr "템플릿 만들기"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio1"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio2"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Item"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Check Item"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Checked Item"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Has"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Many"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp tools/editor/project_export.cpp
+msgid "Options"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Have,Many,Several,Options!"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 1"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 2"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 3"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/scene_tree_editor.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Type:"
+msgstr "타입:"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Data Type:"
+msgstr "데이타 타입:"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Icon"
+msgstr "아이콘"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Style"
+msgstr "스타일"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Color"
+msgstr "색깔"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint TileMap"
+msgstr "타일맵 칠하기"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Duplicate"
+msgstr "복제"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase TileMap"
+msgstr "타일맵 지우기"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Bucket"
+msgstr "채우기"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Pick Tile"
+msgstr "타일 선택"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Select"
+msgstr "선택"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase Selection"
+msgstr "선택 지우기"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Transpose"
+msgstr "바꾸기"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror X (A)"
+msgstr "X축 뒤집기 (A)"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror Y (S)"
+msgstr "Y축 뒤집기 (S)"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 0 degrees"
+msgstr "0도 회전"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 90 degrees"
+msgstr "90도 회전"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 180 degrees"
+msgstr "180도 회전"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 270 degrees"
+msgstr "270도 회전"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Could not find tile:"
+msgstr "타일을 찾을 수 없음:"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Item name or ID:"
+msgstr "아이템 이름 또는 아이디:"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from scene?"
+msgstr "씬으로부터 만드시겠습니까?"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from scene?"
+msgstr "씬으로부터 병합하시겠습니까?"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from Scene"
+msgstr "씬으로부터 만들기"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from Scene"
+msgstr "씬으로부터 병합하기"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Error"
+msgstr "에러"
+
+#: tools/editor/project_export.cpp
+msgid "Edit Script Options"
+msgstr "스크립트 옵션 편집"
+
+#: tools/editor/project_export.cpp
+msgid "Please export outside the project folder!"
+msgstr "프로젝트 폴더 바깥에 내보내기를 하세요."
+
+#: tools/editor/project_export.cpp
+msgid "Error exporting project!"
+msgstr "프로젝트 내보내기 중 에러"
+
+#: tools/editor/project_export.cpp
+msgid "Error writing the project PCK!"
+msgstr "프로젝트 PCK 작성중 에러"
+
+#: tools/editor/project_export.cpp
+msgid "No exporter for platform '%s' yet."
+msgstr "'%s' 플랫폼으로 내보내기 위한 템플릿 파일이 없습니다."
+
+#: tools/editor/project_export.cpp
+msgid "Include"
+msgstr "포함"
+
+#: tools/editor/project_export.cpp
+msgid "Change Image Group"
+msgstr "이미지 그룹 변경"
+
+#: tools/editor/project_export.cpp
+msgid "Group name can't be empty!"
+msgstr "그룹 이름을 지정해야 합니다."
+
+#: tools/editor/project_export.cpp
+msgid "Invalid character in group name!"
+msgstr "그룹 이름에 유효하지 않은 문자가 사용되었습니다."
+
+#: tools/editor/project_export.cpp
+msgid "Group name already exists!"
+msgstr "그룹 이름이 이미 사용중입니다."
+
+#: tools/editor/project_export.cpp
+msgid "Add Image Group"
+msgstr "이미지 그룹 추가"
+
+#: tools/editor/project_export.cpp
+msgid "Delete Image Group"
+msgstr "이미지 그룹 삭제"
+
+#: tools/editor/project_export.cpp
+msgid "Atlas Preview"
+msgstr "아틀라스 미리보기"
+
+#: tools/editor/project_export.cpp
+msgid "Project Export Settings"
+msgstr "프로젝트 내보내기 설정"
+
+#: tools/editor/project_export.cpp
+msgid "Target"
+msgstr "대상"
+
+#: tools/editor/project_export.cpp
+msgid "Export to Platform"
+msgstr "플랫폼으로 내보내기"
+
+#: tools/editor/project_export.cpp
+msgid "Resources"
+msgstr "리소스"
+
+#: tools/editor/project_export.cpp
+msgid "Export selected resources (including dependencies)."
+msgstr "선택된 리소스 내보내기 (종속된 리소스 포함)"
+
+#: tools/editor/project_export.cpp
+msgid "Export all resources in the project."
+msgstr "프로젝트의 모든 리소스 내보내기"
+
+#: tools/editor/project_export.cpp
+msgid "Export all files in the project directory."
+msgstr "프로젝트 디렉토리 안의 모든 파일 내보내기"
+
+#: tools/editor/project_export.cpp
+msgid "Export Mode:"
+msgstr "내보내기 모드:"
+
+#: tools/editor/project_export.cpp
+msgid "Resources to Export:"
+msgstr "내보낼 리소스:"
+
+#: tools/editor/project_export.cpp
+msgid "Action"
+msgstr "액션"
+
+#: tools/editor/project_export.cpp
+msgid ""
+"Filters to export non-resource files (comma-separated, e.g.: *.json, *.txt):"
+msgstr "내보내기 시, 포함시킬 파일 (콤마로 구분, 예: *.json, *.txt):"
+
+#: tools/editor/project_export.cpp
+msgid "Filters to exclude from export (comma-separated, e.g.: *.json, *.txt):"
+msgstr "내보내기 시, 제외시킬 파일 (콤마로 구분, 예: *.json, *.txt):"
+
+#: tools/editor/project_export.cpp
+msgid "Convert text scenes to binary on export."
+msgstr "내보내기 시, 텍스트 기반 씬 파일을 바이너리 형식으로 변환"
+
+#: tools/editor/project_export.cpp
+msgid "Images"
+msgstr "이미지"
+
+#: tools/editor/project_export.cpp
+msgid "Keep Original"
+msgstr "원본 유지"
+
+#: tools/editor/project_export.cpp
+msgid "Compress for Disk (Lossy, WebP)"
+msgstr "디스크 압축 (Lossy, WebP)"
+
+#: tools/editor/project_export.cpp
+msgid "Compress for RAM (BC/PVRTC/ETC)"
+msgstr "메모리 압축 (BC/PVRTC/ETC)"
+
+#: tools/editor/project_export.cpp
+msgid "Convert Images (*.png):"
+msgstr "이미지 변환 (*.png):"
+
+#: tools/editor/project_export.cpp
+msgid "Compress for Disk (Lossy) Quality:"
+msgstr "디스크를 위한 압축 (손실) 품질:"
+
+#: tools/editor/project_export.cpp
+msgid "Shrink All Images:"
+msgstr "모든 이미지 줄이기:"
+
+#: tools/editor/project_export.cpp
+msgid "Compress Formats:"
+msgstr "압축 포멧:"
+
+#: tools/editor/project_export.cpp
+msgid "Image Groups"
+msgstr "이미지 그룹"
+
+#: tools/editor/project_export.cpp
+msgid "Groups:"
+msgstr "그룹:"
+
+#: tools/editor/project_export.cpp
+msgid "Compress Disk"
+msgstr "디스크 압축"
+
+#: tools/editor/project_export.cpp
+msgid "Compress RAM"
+msgstr "메모리 압축"
+
+#: tools/editor/project_export.cpp
+msgid "Compress Mode:"
+msgstr "압축 모드:"
+
+#: tools/editor/project_export.cpp
+msgid "Lossy Quality:"
+msgstr "손실 품질:"
+
+#: tools/editor/project_export.cpp
+msgid "Atlas:"
+msgstr "아틀라스:"
+
+#: tools/editor/project_export.cpp
+msgid "Shrink By:"
+msgstr "이미지 줄이기:"
+
+#: tools/editor/project_export.cpp
+msgid "Preview Atlas"
+msgstr "아틀라스 미리보기"
+
+#: tools/editor/project_export.cpp
+msgid "Image Filter:"
+msgstr "이미지 필터:"
+
+#: tools/editor/project_export.cpp
+msgid "Images:"
+msgstr "이미지:"
+
+#: tools/editor/project_export.cpp
+msgid "Select None"
+msgstr "모든 선택 해제"
+
+#: tools/editor/project_export.cpp
+msgid "Samples"
+msgstr "샘플"
+
+#: tools/editor/project_export.cpp
+msgid "Sample Conversion Mode: (.wav files):"
+msgstr "샘플 변환 모드: (.wav 파일):"
+
+#: tools/editor/project_export.cpp
+msgid "Keep"
+msgstr "유지"
+
+#: tools/editor/project_export.cpp
+msgid "Compress (RAM - IMA-ADPCM)"
+msgstr "압축 (RAM - IMA-ADPCM)"
+
+#: tools/editor/project_export.cpp
+msgid "Sampling Rate Limit (Hz):"
+msgstr "샘플링 레이트 제한 (Hz):"
+
+#: tools/editor/project_export.cpp
+msgid "Trim"
+msgstr "잘라내기"
+
+#: tools/editor/project_export.cpp
+msgid "Trailing Silence:"
+msgstr "끝의 무음:"
+
+#: tools/editor/project_export.cpp
+msgid "Script"
+msgstr "스크립트"
+
+#: tools/editor/project_export.cpp
+msgid "Script Export Mode:"
+msgstr "스크립트 내보내기 모드:"
+
+#: tools/editor/project_export.cpp
+msgid "Text"
+msgstr "텍스트"
+
+#: tools/editor/project_export.cpp
+msgid "Compiled"
+msgstr "컴파일"
+
+#: tools/editor/project_export.cpp
+msgid "Encrypted (Provide Key Below)"
+msgstr "암호화 (아래에 키값 필요)"
+
+#: tools/editor/project_export.cpp
+msgid "Script Encryption Key (256-bits as hex):"
+msgstr "스크립트 암호 키 (256-비트를 hex 포멧으로):"
+
+#: tools/editor/project_export.cpp
+msgid "Export PCK/Zip"
+msgstr "PCK/Zip 내보내기"
+
+#: tools/editor/project_export.cpp
+msgid "Export Project PCK"
+msgstr "프로젝트 PCK 내보내기"
+
+#: tools/editor/project_export.cpp
+msgid "Export.."
+msgstr "내보내기.."
+
+#: tools/editor/project_export.cpp
+msgid "Project Export"
+msgstr "프로젝트 내보내기"
+
+#: tools/editor/project_export.cpp
+msgid "Export Preset:"
+msgstr "프리셋 내보내기:"
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, the path must exist!"
+msgstr "프로젝트 경로가 유효하지 않습니다. 경로가 반드시 존재해야 합니다!"
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, engine.cfg must not exist."
+msgstr "프로젝트 경로가 유효하지 않습니다. engine.cfg가 있으면 안됩니다."
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, engine.cfg must exist."
+msgstr "프로젝트 경로가 유효하지 않습니다. engine.cfg가 존재해야합니다."
+
+#: tools/editor/project_manager.cpp
+msgid "Imported Project"
+msgstr "가져온 프로젝트"
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path (changed anything?)."
+msgstr "유효하지 않은 프로젝트 경로 (뭔가 변경하신 거라도?)."
+
+#: tools/editor/project_manager.cpp
+msgid "Couldn't create engine.cfg in project path."
+msgstr "프로젝트 경로에 engine.cfg를 생성할 수 없습니다."
+
+#: tools/editor/project_manager.cpp
+msgid "Import Existing Project"
+msgstr "기존 프로젝트 가져오기"
+
+#: tools/editor/project_manager.cpp
+msgid "Project Path (Must Exist):"
+msgstr "프로젝트 경로 (반드시 필요):"
+
+#: tools/editor/project_manager.cpp
+msgid "Project Name:"
+msgstr "프로젝트 명:"
+
+#: tools/editor/project_manager.cpp
+msgid "Create New Project"
+msgstr "새 프로젝트 만들기"
+
+#: tools/editor/project_manager.cpp
+msgid "Project Path:"
+msgstr "프로젝트 경로:"
+
+#: tools/editor/project_manager.cpp
+msgid "Browse"
+msgstr "찾아보기"
+
+#: tools/editor/project_manager.cpp
+msgid "New Game Project"
+msgstr "새 게임 프로젝트"
+
+#: tools/editor/project_manager.cpp
+msgid "That's a BINGO!"
+msgstr "빙고!"
+
+#: tools/editor/project_manager.cpp
+msgid "Unnamed Project"
+msgstr "이름없는 프로젝트"
+
+#: tools/editor/project_manager.cpp
+msgid "Are you sure to open more than one projects?"
+msgstr "두개 이상의 프로젝트를 열려는 것이 확실합니까?"
+
+#: tools/editor/project_manager.cpp
+msgid "Are you sure to run more than one projects?"
+msgstr "두개 이상의 프로젝트를 실행하려는 것이 확실합니까?"
+
+#: tools/editor/project_manager.cpp
+msgid "Remove project from the list? (Folder contents will not be modified)"
+msgstr ""
+"목록에서 프로젝트를 제거하시겠습니까? (폴더와 파일들은 남아있게 됩니다.)"
+
+#: tools/editor/project_manager.cpp
+msgid "Recent Projects:"
+msgstr "최근 프로젝트:"
+
+#: tools/editor/project_manager.cpp
+msgid "Run"
+msgstr "실행"
+
+#: tools/editor/project_manager.cpp
+msgid "Scan"
+msgstr "스캔"
+
+#: tools/editor/project_manager.cpp
+msgid "New Project"
+msgstr "새 프로젝트"
+
+#: tools/editor/project_manager.cpp
+msgid "Exit"
+msgstr "종료"
+
+#: tools/editor/project_settings.cpp
+msgid "Key "
+msgstr "키"
+
+#: tools/editor/project_settings.cpp
+msgid "Joy Button"
+msgstr "조이스틱 버튼"
+
+#: tools/editor/project_settings.cpp
+msgid "Joy Axis"
+msgstr "조이스틱 축"
+
+#: tools/editor/project_settings.cpp
+msgid "Mouse Button"
+msgstr "마우스 버튼"
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid action (anything goes but '/' or ':')."
+msgstr "유효하지 않은 액션 ('/' 또는 ':' 문자 사용 불가)"
+
+#: tools/editor/project_settings.cpp
+msgid "Action '%s' already exists!"
+msgstr "'%s' 액션이 이미 존재합니다!"
+
+#: tools/editor/project_settings.cpp
+msgid "Rename Input Action Event"
+msgstr "입력 앱션 이벤트 이름 변경"
+
+#: tools/editor/project_settings.cpp
+msgid "Add Input Action Event"
+msgstr "입력 액션 이벤트 추가"
+
+#: tools/editor/project_settings.cpp
+msgid "Meta+"
+msgstr "메타+"
+
+#: tools/editor/project_settings.cpp
+msgid "Shift+"
+msgstr "쉬프트+"
+
+#: tools/editor/project_settings.cpp
+msgid "Alt+"
+msgstr "알트+"
+
+#: tools/editor/project_settings.cpp
+msgid "Control+"
+msgstr "컨트롤+"
+
+#: tools/editor/project_settings.cpp
+msgid "Press a Key.."
+msgstr "키를 눌러주세요.."
+
+#: tools/editor/project_settings.cpp
+msgid "Mouse Button Index:"
+msgstr "마우스 버튼 인덱스:"
+
+#: tools/editor/project_settings.cpp
+msgid "Left Button"
+msgstr "왼쪽 버튼"
+
+#: tools/editor/project_settings.cpp
+msgid "Right Button"
+msgstr "오른쪽 버튼"
+
+#: tools/editor/project_settings.cpp
+msgid "Middle Button"
+msgstr "가운데 버튼"
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Up Button"
+msgstr "휠 위로 버튼"
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Down Button"
+msgstr "휠 아래로 버튼"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 6"
+msgstr "버튼 6"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 7"
+msgstr "버튼 7"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 8"
+msgstr "버튼 8"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 9"
+msgstr "버튼 9"
+
+#: tools/editor/project_settings.cpp
+msgid "Joystick Axis Index:"
+msgstr "조이스틱 축 인덱스:"
+
+#: tools/editor/project_settings.cpp
+msgid "Axis"
+msgstr "축"
+
+#: tools/editor/project_settings.cpp
+msgid "Joystick Button Index:"
+msgstr "조이스틱 버튼 인덱스:"
+
+#: tools/editor/project_settings.cpp
+msgid "Add Input Action"
+msgstr "입력 액션 추가"
+
+#: tools/editor/project_settings.cpp
+msgid "Erase Input Action Event"
+msgstr "입력 액션 이벤트 삭제"
+
+#: tools/editor/project_settings.cpp
+msgid "Device"
+msgstr "기기"
+
+#: tools/editor/project_settings.cpp
+msgid "Button"
+msgstr "버튼"
+
+#: tools/editor/project_settings.cpp
+msgid "Left Button."
+msgstr "왼쪽 버튼."
+
+#: tools/editor/project_settings.cpp
+msgid "Right Button."
+msgstr "오른쪽 버튼."
+
+#: tools/editor/project_settings.cpp
+msgid "Middle Button."
+msgstr "가운데 버튼."
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Up."
+msgstr "휠 위로."
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Down."
+msgstr "휠 아래로."
+
+#: tools/editor/project_settings.cpp
+msgid "Toggle Persisting"
+msgstr "지속 전환"
+
+#: tools/editor/project_settings.cpp
+msgid "Error saving settings."
+msgstr "설정 저장 중 에러."
+
+#: tools/editor/project_settings.cpp
+msgid "Settings saved OK."
+msgstr "설정 저장 완료."
+
+#: tools/editor/project_settings.cpp
+msgid "Add Translation"
+msgstr "번역 추가"
+
+#: tools/editor/project_settings.cpp
+msgid "Toggle AutoLoad Globals"
+msgstr "자동로드 글로벌 토글"
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name."
+msgstr "유효하지 않은 이름."
+
+#: tools/editor/project_settings.cpp
+msgid "Valid characters:"
+msgstr "유효한 문자:"
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing engine class name."
+msgstr ""
+"유효하지 않은 이름입니다. 엔진에 존재하는 클래스 이름과 충돌하지 않아야 합니"
+"다."
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing buit-in type name."
+msgstr "유효하지 않은 이름입니다. 내장 타입 이름과 충돌하지 않아야 합니다."
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing global constant name."
+msgstr "유효하지 않은 이름입니다. 전역 상수 이름과 충돌하지 않아야 합니다."
+
+#: tools/editor/project_settings.cpp
+msgid "Add Autoload"
+msgstr "자동 로드 추가"
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Autoload"
+msgstr "자동 로드 삭제"
+
+#: tools/editor/project_settings.cpp
+msgid "Move Autoload"
+msgstr "자동 로드 이동"
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Translation"
+msgstr "번역 삭제"
+
+#: tools/editor/project_settings.cpp
+msgid "Add Remapped Path"
+msgstr "리맵핑 경로 추가"
+
+#: tools/editor/project_settings.cpp
+msgid "Resource Remap Add Remap"
+msgstr "리소스 리맵핑 추가"
+
+#: tools/editor/project_settings.cpp
+msgid "Change Resource Remap Language"
+msgstr "언어 리소스 리맵핑 변경"
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Resource Remap"
+msgstr "리소스 리맵핑 제거"
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Resource Remap Option"
+msgstr "리소스 리맵핑 옵션 제거"
+
+#: tools/editor/project_settings.cpp
+msgid "Enable"
+msgstr "활성화"
+
+#: tools/editor/project_settings.cpp
+msgid "Project Settings (engine.cfg)"
+msgstr "프로젝트 설정 (engine.cfg)"
+
+#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp
+msgid "General"
+msgstr "일반"
+
+#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp
+msgid "Property:"
+msgstr "속성:"
+
+#: tools/editor/project_settings.cpp
+msgid "Del"
+msgstr "삭제"
+
+#: tools/editor/project_settings.cpp
+msgid "Copy To Platform.."
+msgstr "플랫폼으로 복사.."
+
+#: tools/editor/project_settings.cpp
+msgid "Input Map"
+msgstr "입력 설정"
+
+#: tools/editor/project_settings.cpp
+msgid "Action:"
+msgstr "액션:"
+
+#: tools/editor/project_settings.cpp
+msgid "Device:"
+msgstr "기기:"
+
+#: tools/editor/project_settings.cpp
+msgid "Index:"
+msgstr "인덱스:"
+
+#: tools/editor/project_settings.cpp
+msgid "Localization"
+msgstr "현지화"
+
+#: tools/editor/project_settings.cpp
+msgid "Translations"
+msgstr "번역"
+
+#: tools/editor/project_settings.cpp
+msgid "Translations:"
+msgstr "번역:"
+
+#: tools/editor/project_settings.cpp
+msgid "Add.."
+msgstr "추가.."
+
+#: tools/editor/project_settings.cpp
+msgid "Remaps"
+msgstr "리맵핑"
+
+#: tools/editor/project_settings.cpp
+msgid "Resources:"
+msgstr "리소스:"
+
+#: tools/editor/project_settings.cpp
+msgid "Remaps by Locale:"
+msgstr "지역에 따른 리맵핑:"
+
+#: tools/editor/project_settings.cpp
+msgid "Locale"
+msgstr "지역"
+
+#: tools/editor/project_settings.cpp
+msgid "AutoLoad"
+msgstr "자동 로드"
+
+#: tools/editor/project_settings.cpp
+msgid "Node Name:"
+msgstr "노드 이름:"
+
+#: tools/editor/project_settings.cpp
+msgid "List:"
+msgstr "목록:"
+
+#: tools/editor/project_settings.cpp
+msgid "Singleton"
+msgstr "싱글톤"
+
+#: tools/editor/property_editor.cpp
+msgid "Preset.."
+msgstr "프리셋.."
+
+#: tools/editor/property_editor.cpp
+msgid "Ease In"
+msgstr "감속"
+
+#: tools/editor/property_editor.cpp
+msgid "Ease Out"
+msgstr "가속"
+
+#: tools/editor/property_editor.cpp
+msgid "Zero"
+msgstr "등속"
+
+#: tools/editor/property_editor.cpp
+msgid "Easing In-Out"
+msgstr "감속-가속"
+
+#: tools/editor/property_editor.cpp
+msgid "Easing Out-In"
+msgstr "가속-감속"
+
+#: tools/editor/property_editor.cpp
+msgid "File.."
+msgstr "파일.."
+
+#: tools/editor/property_editor.cpp
+msgid "Dir.."
+msgstr "디렉토리.."
+
+#: tools/editor/property_editor.cpp
+msgid "Load"
+msgstr "로드"
+
+#: tools/editor/property_editor.cpp
+msgid "Assign"
+msgstr "할당"
+
+#: tools/editor/property_editor.cpp
+msgid "Error loading file: Not a resource!"
+msgstr "파일 로드 에러: 리소스가 아닙니다!"
+
+#: tools/editor/property_editor.cpp
+msgid "Couldn't load image"
+msgstr "이미지를 로드할 수 없습니다."
+
+#: tools/editor/property_editor.cpp
+msgid "Bit %d, val %d."
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "On"
+msgstr "사용"
+
+#: tools/editor/property_editor.cpp
+msgid "Set"
+msgstr "설정"
+
+#: tools/editor/property_editor.cpp
+msgid "Properties:"
+msgstr "속성:"
+
+#: tools/editor/property_editor.cpp
+msgid "Global"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Sections:"
+msgstr "부문:"
+
+#: tools/editor/pvrtc_compress.cpp
+msgid "Could not execute PVRTC tool:"
+msgstr "PVRTC 도구를 실행할 수 없습니다:"
+
+#: tools/editor/pvrtc_compress.cpp
+msgid "Can't load back converted image using PVRTC tool:"
+msgstr "PVRTC 도구를 사용하여 변환된 이미지를 다시 로드 할 수 없습니다:"
+
+#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp
+msgid "Reparent Node"
+msgstr "부모노드 재지정"
+
+#: tools/editor/reparent_dialog.cpp
+msgid "Reparent Location (Select new Parent):"
+msgstr "부모노드 재지정 위치 (새 부모 노드를 선택):"
+
+#: tools/editor/reparent_dialog.cpp
+msgid "Keep Global Transform"
+msgstr "현재 모양새 유지"
+
+#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp
+msgid "Reparent"
+msgstr "부모노드 재지정"
+
+#: tools/editor/resources_dock.cpp
+msgid "Create New Resource"
+msgstr "새 리소스 만들기"
+
+#: tools/editor/resources_dock.cpp
+msgid "Open Resource"
+msgstr "리소스 열기"
+
+#: tools/editor/resources_dock.cpp
+msgid "Save Resource"
+msgstr "리로스 저장"
+
+#: tools/editor/resources_dock.cpp
+msgid "Resource Tools"
+msgstr "리소스 도구"
+
+#: tools/editor/resources_dock.cpp
+msgid "Make Local"
+msgstr "로컬로 만들기"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Run Mode:"
+msgstr "실행 모드:"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Current Scene"
+msgstr "현재 씬"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Main Scene"
+msgstr "메인 씬"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Main Scene Arguments:"
+msgstr "메인 씬 인수:"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Scene Run Settings"
+msgstr "씬 실행 설정"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "OK :("
+msgstr "넹 :("
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "No parent to instance a child at."
+msgstr "선택된 부모 노드가 없어서 자식노드를 인스턴스할 수 없습니다."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error loading scene from %s"
+msgstr "'%s' 로부터 씬 로딩 중 에러"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error instancing scene from %s"
+msgstr "'%s' 로부터 씬 인스턴스 중 에러"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Ok"
+msgstr "확인"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Cannot instance the scene '%s' because the current scene exists within one "
+"of its nodes."
+msgstr "노드중에 현재 씬이 존재하기 때문에, '%s' 씬을 인스턴스 할 수 없습니다."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Instance Scene(s)"
+msgstr "씬 인스턴스"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done on the tree root."
+msgstr "이 작업은 트리 루트에서는 불가합니다."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Node In Parent"
+msgstr "노드를 부모 노드로 이동"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Nodes In Parent"
+msgstr "노드들을 부모 노드로 이동"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Duplicate Node(s)"
+msgstr "노드 복제"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete Node(s)?"
+msgstr "노드를 삭제하시겠습니까?"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done without a scene."
+msgstr "이 작업은 씬 없이는 불가합니다."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation requires a single selected node."
+msgstr "이 작업은 하나의 선택된 노드를 필요로 합니다."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done on instanced scenes."
+msgstr "이 작업은 인스턴스된 씬에서는 불가합니다."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Save New Scene As.."
+msgstr "새 씬을 다른 이름으로 저장.."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Makes Sense!"
+msgstr "오케바리!"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes from a foreign scene!"
+msgstr "다른 씬에서 수행할 수 없는 작업입니다!"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes the current scene inherits from!"
+msgstr "상속 씬 내에서 수행할 수 없는 작업입니다!"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Remove Node(s)"
+msgstr "노드 삭제"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Create Node"
+msgstr "노드 생성"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Couldn't save new scene. Likely dependencies (instances) couldn't be "
+"satisfied."
+msgstr ""
+"씬을 저장할 수 없습니다. 아마도 종속 관계가 만족스럽지 않을 수 있습니다."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error saving scene."
+msgstr "씬 저장 중 에러."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error duplicating scene to save it."
+msgstr "저장하기 위해 씬을 복제하는 중에 에러가 발생했습니다."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "New Scene Root"
+msgstr "새로운 씬 루트"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Inherit Scene"
+msgstr "상속 씬"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add Child Node"
+msgstr "자식 노드 추가"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Instance Child Scene"
+msgstr "자식 씬 추가"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Change Type"
+msgstr "타입 변경"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Edit Groups"
+msgstr "그룹 편집"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Edit Connections"
+msgstr "연결 편집"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add Script"
+msgstr "스크립트 추가"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Merge From Scene"
+msgstr "다른 씬과 병합"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Save Branch as Scene"
+msgstr "선택 노드를 다른 씬으로 저장"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete Node(s)"
+msgstr "노드 삭제"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add/Create a New Node"
+msgstr "새 노드 추가/생성"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Instance a scene file as a Node. Creates an inherited scene if no root node "
+"exists."
+msgstr ""
+"씬 파일을 노드로 추가합니다. 루트 노드가 없을 경우, 상속씬으로 만들어집니다."
+
+#: tools/editor/scene_tree_editor.cpp
+msgid ""
+"This item cannot be made visible because the parent is hidden. Unhide the "
+"parent first."
+msgstr ""
+"부모 노드가 숨겨져 있기 때문에 이 항목을 보이도록 만들 수 없습니다. 부모 노드"
+"를 먼저 보이도록 하세요."
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Toggle Spatial Visible"
+msgstr "Spatial 보이기 토글"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Toggle CanvasItem Visible"
+msgstr "CanvasItem 보이기 토글"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Instance:"
+msgstr "인스턴스:"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Invalid node name, the following characters are not allowed:"
+msgstr "유효하지 않은 노드 이름입니다. 다음의 문자는 허용되지 않습니다:"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Rename Node"
+msgstr "노드 이름 변경"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Scene Tree (Nodes):"
+msgstr "씬 트리 (노드):"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Editable Children"
+msgstr "자식노드 편집 가능"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Load As Placeholder"
+msgstr "Placeholder로써 로드"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Open in Editor"
+msgstr "에디터에서 열기"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear Inheritance"
+msgstr "상속 없애기"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear Inheritance? (No Undo!)"
+msgstr "상속을 없애시겠습니까? (되돌리기 불가!)"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear!"
+msgstr "없앴습니다!"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Select a Node"
+msgstr "노드 선택"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Same source and destination files, doing nothing."
+msgstr "소스와 대상 파일이 동일하여, 무시됩니다."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Same source and destination paths, doing nothing."
+msgstr "소스와 대상 경로가 동일하여, 무시됩니다."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Can't move directories to within themselves."
+msgstr "디렉토리를 자신으로 이동할 수 없습니다."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Can't operate on '..'"
+msgstr "'..'에 수행할 수 없습니다."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Pick New Name and Location For:"
+msgstr "새로운 이름과 위치를 고르세요:"
+
+#: tools/editor/scenes_dock.cpp
+msgid "No files selected!"
+msgstr "파일이 선택되지 않았습니다!"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Instance"
+msgstr "인스턴스"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Edit Dependencies.."
+msgstr "종속 관계 편집.."
+
+#: tools/editor/scenes_dock.cpp
+msgid "View Owners.."
+msgstr "소유자 보기.."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Rename or Move.."
+msgstr "이름 변경 또는 이동.."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Move To.."
+msgstr "이동.."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Info"
+msgstr "정보"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Show In File Manager"
+msgstr "파일 매니저에서 보기"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Previous Directory"
+msgstr "이전 디렉토리"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Next Directory"
+msgstr "다음 디렉토리"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Re-Scan Filesystem"
+msgstr "파일 시스템 재검사"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Toggle folder status as Favorite"
+msgstr "즐겨찾기로 설정 토글"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Instance the selected scene(s) as child of the selected node."
+msgstr "선택된 씬을 선택된 노드의 자식으로 인스턴스 합니다."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Move"
+msgstr "이동"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid parent class name"
+msgstr "유요하지 않은 부모 클래스명"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid chars:"
+msgstr "유요한 문자:"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid class name"
+msgstr "유요하지 않은 클래스명"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid name"
+msgstr "유요한 이름"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "N/A"
+msgstr "해당 없음"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Class name is invalid!"
+msgstr "클래스명이 유효하지 않습니다!"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Parent class name is invalid!"
+msgstr "부모 클래스명이 유효하지 않습니다!"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid path!"
+msgstr "경로가 유효하지 않습니다!"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Could not create script in filesystem."
+msgstr "파일 시스템에 스크립트를 생성할 수 없습니다."
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Path is empty"
+msgstr "경로가 비어 있습니다."
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Path is not local"
+msgstr "경로가 로컬이 아닙니다."
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid base path"
+msgstr "기본 경로가 유요하지 않습니다."
+
+#: tools/editor/script_create_dialog.cpp
+msgid "File exists"
+msgstr "파일이 존재합니다."
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid extension"
+msgstr "확장자가 유요하지 않습니다."
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid path"
+msgstr "유요한 경로"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Class Name:"
+msgstr "클래스명:"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Built-In Script"
+msgstr "내장 스크립트"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Create Node Script"
+msgstr "노드 스크립트 생성"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Bytes:"
+msgstr "바이트:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Warning"
+msgstr "경고"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Error:"
+msgstr "에러:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Source:"
+msgstr "소스:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Function:"
+msgstr "함수:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Errors"
+msgstr "에러"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Child Process Connected"
+msgstr "자식 프로세스 연결됨"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Inspect Previous Instance"
+msgstr "이전 인스턴스 검사"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Inspect Next Instance"
+msgstr "다음 인스턴스 검사"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Stack Frames"
+msgstr "스택 프레임"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Variable"
+msgstr "변수"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Errors:"
+msgstr "에러:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Stack Trace (if applicable):"
+msgstr "스택 추적 (해당되는 경우):"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Remote Inspector"
+msgstr "원격 인스펙터"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Live Scene Tree:"
+msgstr "실시간 씬 트리:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Remote Object Properties: "
+msgstr "원격 오브젝트 속성:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Profiler"
+msgstr "프로파일러"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Monitor"
+msgstr "모니터"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Value"
+msgstr "값"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Monitors"
+msgstr "모니터"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "List of Video Memory Usage by Resource:"
+msgstr "리소스별 비디오 메모리 사용량 목록:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Total:"
+msgstr "전체:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Video Mem"
+msgstr "비디오 메모리"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Resource Path"
+msgstr "리소스 경로"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Type"
+msgstr "타입"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Usage"
+msgstr "사용"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Misc"
+msgstr "기타"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Clicked Control:"
+msgstr "클릭된 Control:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Clicked Control Type:"
+msgstr "클릭된 Control 타입:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Live Edit Root:"
+msgstr "실시간 편집 루트:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Set From Tree"
+msgstr "트리로부터 설정"
+
+#: tools/editor/settings_config_dialog.cpp
+msgid "Plugin List:"
+msgstr "플러그인 목록:"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Light Radius"
+msgstr "Light 반경 변경"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Camera FOV"
+msgstr "Camera 시야 변경"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Camera Size"
+msgstr "Camera 크기 변경"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Sphere Shape Radius"
+msgstr "Sphere Shape 반경 변경"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Box Shape Extents"
+msgstr "Box Shape 범위 변경"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Radius"
+msgstr "Capsule Shape 반경 변경"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Height"
+msgstr "Capsule Shape 높이 변경"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Ray Shape Length"
+msgstr "Ray Shape 길이 변경"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Notifier Extents"
+msgstr "Notifier 범위 변경"
diff --git a/tools/translations/pt_BR.po b/tools/translations/pt_BR.po
new file mode 100644
index 0000000000..1fa28e2662
--- /dev/null
+++ b/tools/translations/pt_BR.po
@@ -0,0 +1,5987 @@
+# LANGUAGE translation of the Godot Engine editor
+# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community
+# This file is distributed under the same license as the Godot source code.
+# George Marques <george@gmarqu.es>, 2016.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Godot Engine editor\n"
+"POT-Creation-Date: 2016-05-30\n"
+"PO-Revision-Date: 2016-05-30\n"
+"Last-Translator: George Marques <george@gmarqu.es>\n"
+"Language-Team: Godot Brasil\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Poedit 1.8.7\n"
+
+#: scene/2d/animated_sprite.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the 'Frames' property in "
+"order for AnimatedSprite to display frames."
+msgstr ""
+"Um recurso do tipo SpriteFrames deve ser criado ou definido na propriedade "
+"\"Quadros\" para que o nó AnimatedSprite mostre quadros."
+
+#: scene/2d/canvas_modulate.cpp
+msgid ""
+"Only one visible CanvasModulate is allowed per scene (or set of instanced "
+"scenes). The first created one will work, while the rest will be ignored."
+msgstr ""
+"É permitido apenas um CanvasModulate visível por cena (ou conjunto de cenas "
+"instanciadas). O primeiro criado irá funcionar, enquanto os outros serão "
+"ignorados."
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid ""
+"CollisionPolygon2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+"CollisionPolygon2D apenas serve para fornecer a forma de colisão para um nó "
+"derivado de CollisionObject2D. Por favor use-o apenas como filho de Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. para dá-los forma."
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid "An empty CollisionPolygon2D has no effect on collision."
+msgstr "Um nó CollisionPolygon2D vazio não é efetivo para colisão."
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"CollisionShape2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+"CollisionShape2D apenas serve para fornecer a forma de colisão para um nó "
+"derivado de CollisionObject2D. Por favor use-o apenas como filho de Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. para dá-los forma."
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"A shape must be provided for CollisionShape2D to function. Please create a "
+"shape resource for it!"
+msgstr ""
+"Uma forma deve ser fornecida para que o nó CollisionShape2D funcione. Por "
+"favor, crie um recurso de forma para ele!"
+
+#: scene/2d/light_2d.cpp
+msgid ""
+"A texture with the shape of the light must be supplied to the 'texture' "
+"property."
+msgstr ""
+"Uma textura com a forma da luz deve ser fornecida na propriedade \"textura\"."
+
+#: scene/2d/light_occluder_2d.cpp
+msgid ""
+"An occluder polygon must be set (or drawn) for this occluder to take effect."
+msgstr ""
+"Um polígono de oclusão deve ser definido (ou desenhado) para que este oclusor "
+"tenha efeito."
+
+#: scene/2d/light_occluder_2d.cpp
+msgid "The occluder polygon for this occluder is empty. Please draw a polygon!"
+msgstr "O polígono para este oclusor está vazio. Por favor desenhe um polígono!"
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"A NavigationPolygon resource must be set or created for this node to work. "
+"Please set a property or draw a polygon."
+msgstr ""
+"Um recurso do tipo NavigationPolygon deve ser definido ou criado para que "
+"este nó funcione. Por favor defina a propriedade ou desenhe um polígono."
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
+"node. It only provides navigation data."
+msgstr ""
+"NavigationPolygonInstance deve ser filho ou neto de um nó Navigation2D. Ele "
+"apenas fornece dados de navegação."
+
+#: scene/2d/parallax_layer.cpp
+msgid ""
+"ParallaxLayer node only works when set as child of a ParallaxBackground node."
+msgstr ""
+"O nó ParallaxLayer apenas funciona quando definido como filho de um nó "
+"ParallaxBackground."
+
+#: scene/2d/particles_2d.cpp
+msgid "Path property must point to a valid Particles2D node to work."
+msgstr "A propriedade Caminho deve apontar a um nó Particles2D para funcionar."
+
+#: scene/2d/path_2d.cpp
+msgid "PathFollow2D only works when set as a child of a Path2D node."
+msgstr ""
+"PathFollow2D apenas funciona quando definido como filho de um nó Path2D."
+
+#: scene/2d/remote_transform_2d.cpp
+msgid "Path property must point to a valid Node2D node to work."
+msgstr ""
+"A propriedade \"Caminho\" deve apontar para um nó Node2D válido para "
+"funcionar."
+
+#: scene/2d/sample_player_2d.cpp scene/audio/sample_player.cpp
+msgid ""
+"A SampleLibrary resource must be created or set in the 'samples' property in "
+"order for SamplePlayer to play sound."
+msgstr ""
+"Um recurso do tipo SampleLibrary deve ser criado ou definido na propriedade "
+"'amostras' para que o SamplePlayer possa tocar algum som."
+
+#: scene/2d/sprite.cpp
+msgid ""
+"Path property must point to a valid Viewport node to work. Such Viewport must "
+"be set to 'render target' mode."
+msgstr ""
+"A propriedade \"Caminho\" deve apontar a um nó Viewport para funcionar. Tal "
+"Viewport deve estar no modo \"Destino de Render\"."
+
+#: scene/2d/sprite.cpp
+msgid ""
+"The Viewport set in the path property must be set as 'render target' in order "
+"for this sprite to work."
+msgstr ""
+"O nó Viewport definido na propriedade \"Caminho\" deve ser marcado como "
+"\"destino de render\" para que este sprite funcione."
+
+#: scene/2d/visibility_notifier_2d.cpp
+msgid ""
+"VisibilityEnable2D works best when used with the edited scene root directly "
+"as parent."
+msgstr ""
+"VisibilityEnable2D funciona melhor quando usado como filho direto da raiz da "
+"cena atualmente editada."
+
+#: scene/3d/body_shape.cpp
+msgid ""
+"CollisionShape only serves to provide a collision shape to a CollisionObject "
+"derived node. Please only use it as a child of Area, StaticBody, RigidBody, "
+"KinematicBody, etc. to give them a shape."
+msgstr ""
+"CollisionShape apenas serve para fornecer formas de colisão a um nó derivado "
+"de CollisionObject. Por favor, use-o apenas como filho de Area, StaticBody, "
+"RigidBody, KinematicBody, etc. para dá-los forma."
+
+#: scene/3d/body_shape.cpp
+msgid ""
+"A shape must be provided for CollisionShape to function. Please create a "
+"shape resource for it!"
+msgstr ""
+"Uma forma deve ser fornecida para que o nó CollisionShape fucione. Por favor, "
+"crie um recurso de forma a ele!"
+
+#: scene/3d/collision_polygon.cpp
+msgid ""
+"CollisionPolygon only serves to provide a collision shape to a "
+"CollisionObject derived node. Please only use it as a child of Area, "
+"StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
+msgstr ""
+"CollisionPolygon apenas serve para fornecer formas de colisão a um nó "
+"derivado de CollisionObject. Por favor, use-o apenas como filho de Area, "
+"StaticBody, RigidBody, KinematicBody, etc. para dá-los forma."
+
+#: scene/3d/collision_polygon.cpp
+msgid "An empty CollisionPolygon has no effect on collision."
+msgstr "Um nó CollisionPolygon vazio não é efetivo na colisão."
+
+#: scene/3d/navigation_mesh.cpp
+msgid "A NavigationMesh resource must be set or created for this node to work."
+msgstr ""
+"Um recurso do tipo NavigationMesh deve ser definido ou criado para que este "
+"nó funcione."
+
+#: scene/3d/navigation_mesh.cpp
+msgid ""
+"NavigationMeshInstance must be a child or grandchild to a Navigation node. It "
+"only provides navigation data."
+msgstr ""
+"NavigationMeshInstance deve ser filho ou neto de um nó Navigation. Ele apenas "
+"fornece dados de navegação."
+
+#: scene/3d/scenario_fx.cpp
+msgid ""
+"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)."
+msgstr ""
+"É permitido apenas um nó WorldEnvironment por cena (ou conjunto de cenas "
+"instanciadas)."
+
+#: scene/3d/spatial_sample_player.cpp
+msgid ""
+"A SampleLibrary resource must be created or set in the 'samples' property in "
+"order for SpatialSamplePlayer to play sound."
+msgstr ""
+"Um recurso do tipo SampleLibrary deve ser criado ou definido na propriedade "
+"'amostras' para que o SpatialSamplePlayer possa tocar algum som."
+
+#: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: scene/gui/dialogs.cpp
+msgid "OK"
+msgstr "OK"
+
+#: scene/gui/dialogs.cpp
+msgid "Alert!"
+msgstr "Alerta!"
+
+#: scene/gui/dialogs.cpp
+msgid "Please Confirm..."
+msgstr "Confirme Por Favor..."
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Cut"
+msgstr "Recortar"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp
+msgid "Copy"
+msgstr "Copiar"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp
+msgid "Paste"
+msgstr "Colar"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp tools/editor/project_export.cpp
+msgid "Select All"
+msgstr "Selecionar Tudo"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_log.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/rich_text_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/script_editor_debugger.cpp
+msgid "Clear"
+msgstr "Limpar"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Undo"
+msgstr "Desfazer"
+
+#: scene/gui/popup.cpp
+msgid ""
+"Popups will hide by default unless you call popup() or any of the popup*() "
+"functions. Making them visible for editing is fine though, but they will hide "
+"upon running."
+msgstr ""
+"Popups são ocultos por padrão a menos que você chame alguma das funções "
+"popup*(). Torná-los visíveis para editar não causa problema, mas eles "
+"ocultarão ao rodar a cena."
+
+#: scene/main/viewport.cpp
+msgid ""
+"This viewport is not set as render target. If you intend for it to display "
+"its contents directly to the screen, make it a child of a Control so it can "
+"obtain a size. Otherwise, make it a RenderTarget and assign its internal "
+"texture to some node for display."
+msgstr ""
+"Este viewport não está definido como destino de render. Se você pretende que "
+"ele mostre seu conteúdo diretamente na tela, faça-o filho de um nó Control "
+"para que ele possa ter um tamanho. Caso contrário, defina-o como destino de "
+"render e atribua sua textura interna a algum nó para exibir."
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Error initializing FreeType."
+msgstr "Erro ao inicializar FreeType."
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Unknown font format."
+msgstr "Formato de fonte desconhecido."
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Error loading font."
+msgstr "Erro ao carregar fonte."
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Invalid font size."
+msgstr "Tamanho de fonte inválido."
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/call_dialog.cpp
+#: tools/editor/connections_dialog.cpp tools/editor/groups_editor.cpp
+#: tools/editor/import_settings.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp
+#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp
+msgid "Close"
+msgstr "Fechar"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/create_dialog.cpp
+#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/settings_config_dialog.cpp
+msgid "Search:"
+msgstr "Pesquisar:"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/code_editor.cpp
+#: tools/editor/editor_help.cpp tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/project_settings.cpp
+msgid "Search"
+msgstr "Pesquisar"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/editor_node.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Import"
+msgstr "Importar"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/project_settings.cpp
+#: tools/editor/settings_config_dialog.cpp
+msgid "Plugins"
+msgstr "Plugins"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Sort:"
+msgstr "Ordenar:"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Reverse"
+msgstr "Reverso"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/project_settings.cpp
+msgid "Category:"
+msgstr "Categoria:"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "All"
+msgstr "Todos"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Site:"
+msgstr "Site:"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Assets ZIP File"
+msgstr "Arquivo ZIP de Assets"
+
+#: tools/editor/animation_editor.cpp
+msgid "Disabled"
+msgstr "Desabilitado"
+
+#: tools/editor/animation_editor.cpp
+msgid "All Selection"
+msgstr "Toda a Seleção"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Add Key"
+msgstr "Mover Adicionar Chave"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Transition"
+msgstr "Mudar Transição da Anim"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Transform"
+msgstr "Mudar Transformação da Anim"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Value"
+msgstr "Mudar Valor da Anim"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Call"
+msgstr "Mudar Chamada da Anim"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Track"
+msgstr "Adicionar Trilha na Anim"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Anim Track Up"
+msgstr "Mover Trilha para cima"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Anim Track Down"
+msgstr "Mover Trilha para Baixo"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove Anim Track"
+msgstr "Remover Trilha da Anim"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Duplicate Keys"
+msgstr "Duplicar Chave na Anim"
+
+#: tools/editor/animation_editor.cpp
+msgid "Set Transitions to:"
+msgstr "Definir Transições para:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Rename"
+msgstr "Renomear Trilha na Anim"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Change Interpolation"
+msgstr "Alterar Interpolação da Trilha"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Change Value Mode"
+msgstr "Mudar Modo de Valor da Trilha"
+
+#: tools/editor/animation_editor.cpp
+msgid "Edit Node Curve"
+msgstr "Editar Curva do Nó"
+
+#: tools/editor/animation_editor.cpp
+msgid "Edit Selection Curve"
+msgstr "Editar Curva da Seleção"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Delete Keys"
+msgstr "Excluir Chaves da Anim"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Key"
+msgstr "Adicionar Chave na Anim"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Move Keys"
+msgstr "Mover Chaves da Anim"
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale Selection"
+msgstr "Mudar Escala da Seleção"
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale From Cursor"
+msgstr "Mudar Escala a partir do Cursor"
+
+#: tools/editor/animation_editor.cpp
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Duplicate Selection"
+msgstr "Duplicar Seleção"
+
+#: tools/editor/animation_editor.cpp
+msgid "Duplicate Transposed"
+msgstr "Duplicar Transposto"
+
+#: tools/editor/animation_editor.cpp
+msgid "Goto Next Step"
+msgstr "Ir ao Próximo Passo"
+
+#: tools/editor/animation_editor.cpp
+msgid "Goto Prev Step"
+msgstr "Ir ao Passo Anterior"
+
+#: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp
+msgid "Linear"
+msgstr "Linear"
+
+#: tools/editor/animation_editor.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Constant"
+msgstr "Constante"
+
+#: tools/editor/animation_editor.cpp
+msgid "In"
+msgstr "In"
+
+#: tools/editor/animation_editor.cpp
+msgid "Out"
+msgstr "Out"
+
+#: tools/editor/animation_editor.cpp
+msgid "In-Out"
+msgstr "In-Out"
+
+#: tools/editor/animation_editor.cpp
+msgid "Out-In"
+msgstr "Out-In"
+
+#: tools/editor/animation_editor.cpp
+msgid "Transitions"
+msgstr "Transições"
+
+#: tools/editor/animation_editor.cpp
+msgid "Optimize Animation"
+msgstr "Otimizar Animação"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up Animation"
+msgstr "Limpar Animação"
+
+#: tools/editor/animation_editor.cpp
+msgid "Create NEW track for %s and insert key?"
+msgstr "Criar NOVA trilha para %s e inserir chave?"
+
+#: tools/editor/animation_editor.cpp
+msgid "Create %d NEW tracks and insert keys?"
+msgstr "Criar %d NOVAS trilhas e inserir chaves?"
+
+#: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/particles_editor_plugin.cpp
+#: tools/editor/project_manager.cpp tools/editor/script_create_dialog.cpp
+msgid "Create"
+msgstr "Criar"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Create & Insert"
+msgstr "Criar e Inserir Anim"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert Track & Key"
+msgstr "Inserir Trilha e Chave na Anim"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert Key"
+msgstr "Inserir Chave na Anim"
+
+#: tools/editor/animation_editor.cpp
+msgid "Change Anim Len"
+msgstr "Mudar Comprimento da Animação"
+
+#: tools/editor/animation_editor.cpp
+msgid "Change Anim Loop"
+msgstr "Mudar Loop da Animação"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Create Typed Value Key"
+msgstr "Criar Chave com Valor Definido"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert"
+msgstr "Inserir Anim"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Scale Keys"
+msgstr "Alterar Escala das Chaves na Anim"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Call Track"
+msgstr "Adicionar Trilha de Chamada"
+
+#: tools/editor/animation_editor.cpp
+msgid "Animation zoom."
+msgstr "Zoom da animação."
+
+#: tools/editor/animation_editor.cpp
+msgid "Length (s):"
+msgstr "Duração (s):"
+
+#: tools/editor/animation_editor.cpp
+msgid "Animation length (in seconds)."
+msgstr "Duração da animação (em segundos)."
+
+#: tools/editor/animation_editor.cpp
+msgid "Step (s):"
+msgstr "Passo (s):"
+
+#: tools/editor/animation_editor.cpp
+msgid "Cursor step snap (in seconds)."
+msgstr "Passo de snap do cursor (em segundos)."
+
+#: tools/editor/animation_editor.cpp
+msgid "Enable/Disable looping in animation."
+msgstr "Habilitar/Desabilitar loop de animação."
+
+#: tools/editor/animation_editor.cpp
+msgid "Add new tracks."
+msgstr "Adicionar novas trilhas."
+
+#: tools/editor/animation_editor.cpp
+msgid "Move current track up."
+msgstr "Mover a trilha atual para cima."
+
+#: tools/editor/animation_editor.cpp
+msgid "Move current track down."
+msgstr "Mover a trilha atual para baixo."
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove selected track."
+msgstr "Remover trilha selecionada."
+
+#: tools/editor/animation_editor.cpp
+msgid "Track tools"
+msgstr "Ferramentas de trilha"
+
+#: tools/editor/animation_editor.cpp
+msgid "Enable editing of individual keys by clicking them."
+msgstr "Habilitar edição de chaves individuais clicando nelas."
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim. Optimizer"
+msgstr "Otimizador de Animação"
+
+#: tools/editor/animation_editor.cpp
+msgid "Max. Linear Error:"
+msgstr "Erro Linear Max.:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Max. Angular Error:"
+msgstr "Erro Angular Max.:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Max Optimizable Angle:"
+msgstr "Angulo Máximo otimizável:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Optimize"
+msgstr "Otimizar"
+
+#: tools/editor/animation_editor.cpp
+msgid "Key"
+msgstr "Chave"
+
+#: tools/editor/animation_editor.cpp
+msgid "Transition"
+msgstr "Transição"
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale Ratio:"
+msgstr "Proporção de Escala:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Call Functions in Which Node?"
+msgstr "Chamar Funções em Qual Nó?"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove invalid keys"
+msgstr "Remover Chaves Invalidas"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove unresolved and empty tracks"
+msgstr "Remover trilhas vazias e não resolvidas"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-up all animations"
+msgstr "Limpar todas as animações"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up Animation(s) (NO UNDO!)"
+msgstr "Limpar Animação(ões) (IRREVERSÍVEL!)"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up"
+msgstr "Limpar"
+
+#: tools/editor/array_property_edit.cpp
+msgid "Resize Array"
+msgstr "Redimensionar Vetor"
+
+#: tools/editor/array_property_edit.cpp
+msgid "Change Array Value Type"
+msgstr "Alterar Tipo de Valor do Vetor"
+
+#: tools/editor/array_property_edit.cpp
+msgid "Change Array Value"
+msgstr "Alterar Valor do Vetor"
+
+#: tools/editor/call_dialog.cpp
+msgid "Method List For '%s':"
+msgstr "Lista de Métodos para \"%s\":"
+
+#: tools/editor/call_dialog.cpp
+msgid "Call"
+msgstr "Chamar"
+
+#: tools/editor/call_dialog.cpp
+msgid "Method List:"
+msgstr "Lista de Métodos:"
+
+#: tools/editor/call_dialog.cpp
+msgid "Arguments:"
+msgstr "Argumentos:"
+
+#: tools/editor/call_dialog.cpp
+msgid "Return:"
+msgstr "Retornar:"
+
+#: tools/editor/code_editor.cpp
+msgid "Go to Line"
+msgstr "Ir para Linha"
+
+#: tools/editor/code_editor.cpp
+msgid "Line Number:"
+msgstr "Número da Linha:"
+
+#: tools/editor/code_editor.cpp
+msgid "No Matches"
+msgstr "Sem Correspondências"
+
+#: tools/editor/code_editor.cpp
+msgid "Replaced %d Ocurrence(s)."
+msgstr "Substituída(s) %d Ocorrência(s)"
+
+#: tools/editor/code_editor.cpp
+msgid "Replace"
+msgstr "Substituir"
+
+#: tools/editor/code_editor.cpp
+msgid "Replace All"
+msgstr "Substituir Tudo"
+
+#: tools/editor/code_editor.cpp
+msgid "Match Case"
+msgstr "Corresponder Caixa"
+
+#: tools/editor/code_editor.cpp
+msgid "Whole Words"
+msgstr "Palavras Inteiras"
+
+#: tools/editor/code_editor.cpp
+msgid "Selection Only"
+msgstr "Apenas na Seleção"
+
+#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp
+msgid "Find"
+msgstr "Localizar"
+
+#: tools/editor/code_editor.cpp
+msgid "Next"
+msgstr "Próximo"
+
+#: tools/editor/code_editor.cpp
+msgid "Replaced %d ocurrence(s)."
+msgstr "%d ocorrência(s) substituída(s)."
+
+#: tools/editor/code_editor.cpp
+msgid "Not found!"
+msgstr "Não encontrado!"
+
+#: tools/editor/code_editor.cpp
+msgid "Replace By"
+msgstr "Substituir Por"
+
+#: tools/editor/code_editor.cpp
+msgid "Case Sensitive"
+msgstr "Diferenciar Caixa"
+
+#: tools/editor/code_editor.cpp
+msgid "Backwards"
+msgstr "Para trás"
+
+#: tools/editor/code_editor.cpp
+msgid "Prompt On Replace"
+msgstr "Perguntar ao Substituir"
+
+#: tools/editor/code_editor.cpp
+msgid "Skip"
+msgstr "Pular"
+
+#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp
+msgid "Line:"
+msgstr "Linha:"
+
+#: tools/editor/code_editor.cpp
+msgid "Col:"
+msgstr "Coluna:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Method in target Node must be specified!"
+msgstr "O método no Nó destino precisa ser especificado!"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect To Node:"
+msgstr "Conectar ao Nó:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Binds (Extra Params):"
+msgstr "Ligações (Parâmetros Extra):"
+
+#: tools/editor/connections_dialog.cpp tools/editor/groups_editor.cpp
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/project_settings.cpp
+msgid "Add"
+msgstr "Adicionar"
+
+#: tools/editor/connections_dialog.cpp tools/editor/dependency_editor.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp tools/editor/project_manager.cpp
+msgid "Remove"
+msgstr "Remover"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Path To Node:"
+msgstr "Caminho para o Nó:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Method In Node:"
+msgstr "Método no Nó:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Make Function"
+msgstr "Criar Função"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Deferred"
+msgstr "Postergado"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Oneshot"
+msgstr "Uma vez"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect"
+msgstr "Conectar"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect '%s' to '%s'"
+msgstr "Conectar \"%s\" a \"%s\""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Create Subscription"
+msgstr "Criar Conexão"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect.."
+msgstr "Conectar..."
+
+#: tools/editor/connections_dialog.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Disconnect"
+msgstr "Disconectar"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Edit Connections.."
+msgstr "Editar Conexões..."
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connections:"
+msgstr "Conexões:"
+
+#: tools/editor/create_dialog.cpp
+msgid "Create New"
+msgstr "Criar Novo"
+
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+msgid "Matches:"
+msgstr "Combinações:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Search Replacement For:"
+msgstr "Buscar Substituição Para:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies For:"
+msgstr "Dependências Para:"
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"Scene '%s' is currently being edited.\n"
+"Changes will not take effect unless reloaded."
+msgstr ""
+"A cena \"%s\" está sendo editada atualmente.\n"
+"As mudanças não terão efeito a menos que seja recarregada."
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"Resource '%s' is in use.\n"
+"Changes will take effect when reloaded."
+msgstr ""
+"O recurso \"%s\" está em uso.\n"
+"As mudanças não terão efeito a menos que seja recarregado."
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies"
+msgstr "Dependências"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Resource"
+msgstr "Recurso"
+
+#: tools/editor/dependency_editor.cpp tools/editor/project_manager.cpp
+#: tools/editor/project_settings.cpp
+msgid "Path"
+msgstr "Caminho"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies:"
+msgstr "Dependências:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Fix Broken"
+msgstr "Consertar Quebradas:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependency Editor"
+msgstr "Editor de Dependências"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Search Replacement Resource:"
+msgstr "Buscar Recurso para Substituição:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Owners Of:"
+msgstr "Donos De:"
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"The files being removed are required by other resources in order for them to "
+"work.\n"
+"Remove them anyway? (no undo)"
+msgstr ""
+"Os arquivos a serem removidos são requeridos por outros recursos para que "
+"funcionem.\n"
+"Removê-los mesmo assim? (irreversível)"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Remove selected files from the project? (no undo)"
+msgstr "Remover os arquivos selecionados do projeto? (impossível desfazer)"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Error loading:"
+msgstr "Erro ao carregar:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Scene failed to load due to missing dependencies:"
+msgstr "A cena não pôde ser carregada por causa de dependências ausentes:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Open Anyway"
+msgstr "Abrir Assim Mesmo"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Which action should be taken?"
+msgstr "Que ação deve ser tomada?"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Fix Dependencies"
+msgstr "Consertar Dependências"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Errors loading!"
+msgstr "Erros ao carregar!"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Permanently delete %d item(s)? (No undo!)"
+msgstr "Excluir permanentemente %d item(s)? (Impossível desfazer!)"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Owns"
+msgstr "Possui"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Resources Without Explicit Ownership:"
+msgstr "Recursos Sem Posse Explícita:"
+
+#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
+msgid "Orphan Resource Explorer"
+msgstr "Explorador de Recursos Órfãos"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Delete selected files?"
+msgstr "Excluir os arquivos selecionados?"
+
+#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/item_list_editor_plugin.cpp tools/editor/scenes_dock.cpp
+msgid "Delete"
+msgstr "Excluir"
+
+#: tools/editor/editor_data.cpp
+msgid "Updating Scene"
+msgstr "Atualizando Cena"
+
+#: tools/editor/editor_data.cpp
+msgid "Storing local changes.."
+msgstr "Armazenando mudanças locais..."
+
+#: tools/editor/editor_data.cpp
+msgid "Updating scene.."
+msgstr "Atualizando Cena..."
+
+#: tools/editor/editor_dir_dialog.cpp
+msgid "Choose a Directory"
+msgstr "Escolha um Diretório"
+
+#: tools/editor/editor_dir_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Create Folder"
+msgstr "Criar Pasta"
+
+#: tools/editor/editor_dir_dialog.cpp tools/editor/editor_file_dialog.cpp
+#: tools/editor/editor_plugin_settings.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Name:"
+msgstr "Nome:"
+
+#: tools/editor/editor_dir_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Could not create folder."
+msgstr "Não foi possível criar a pasta."
+
+#: tools/editor/editor_dir_dialog.cpp
+msgid "Choose"
+msgstr "Escolher"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "File Exists, Overwrite?"
+msgstr "O arquivo existe. Sobrescrever?"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "All Recognized"
+msgstr "Todas Reconhecidas"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "All Files (*)"
+msgstr "Todos os Arquivos (*)"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/quick_open.cpp tools/editor/scenes_dock.cpp
+msgid "Open"
+msgstr "Abrir"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save"
+msgstr "Salvar"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Save a File"
+msgstr "Salvar um Arquivo"
+
+#: tools/editor/editor_file_dialog.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/script_create_dialog.cpp
+msgid "Path:"
+msgstr "Caminho:"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/scenes_dock.cpp
+msgid "Favorites:"
+msgstr "Favoritos:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Recent:"
+msgstr "Recente:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Directories & Files:"
+msgstr "Diretórios & Arquivos:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Preview:"
+msgstr "Previsualização:"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/script_editor_debugger.cpp
+msgid "File:"
+msgstr "Arquivo:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Filter:"
+msgstr "Filtro:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Must use a valid extension."
+msgstr "Deve usar uma extensão válida."
+
+#: tools/editor/editor_file_system.cpp
+msgid "Cannot go into subdir:"
+msgstr "Não é possível ir ao subdiretório:"
+
+#: tools/editor/editor_file_system.cpp
+msgid "ScanSources"
+msgstr "BuscarFontes"
+
+#: tools/editor/editor_help.cpp
+msgid "Search Classes"
+msgstr "Pesquisar Classes"
+
+#: tools/editor/editor_help.cpp
+msgid "Class List:"
+msgstr "Lista de Classes:"
+
+#: tools/editor/editor_help.cpp tools/editor/property_editor.cpp
+msgid "Class:"
+msgstr "Classe:"
+
+#: tools/editor/editor_help.cpp tools/editor/scene_tree_editor.cpp
+#: tools/editor/script_create_dialog.cpp
+msgid "Inherits:"
+msgstr "Herda de:"
+
+#: tools/editor/editor_help.cpp
+msgid "Inherited by:"
+msgstr "Herdado por:"
+
+#: tools/editor/editor_help.cpp
+msgid "Brief Description:"
+msgstr "Descrição breve:"
+
+#: tools/editor/editor_help.cpp
+msgid "Public Methods:"
+msgstr "Métodos Públicos:"
+
+#: tools/editor/editor_help.cpp
+msgid "Members:"
+msgstr "Membros:"
+
+#: tools/editor/editor_help.cpp
+msgid "GUI Theme Items:"
+msgstr "Itens do Tema de GUI:"
+
+#: tools/editor/editor_help.cpp
+msgid "Signals:"
+msgstr "Sinais:"
+
+#: tools/editor/editor_help.cpp
+msgid "Constants:"
+msgstr "Constantes:"
+
+#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "Descrição:"
+
+#: tools/editor/editor_help.cpp
+msgid "Method Description:"
+msgstr "Descrição do Método:"
+
+#: tools/editor/editor_help.cpp
+msgid "Search Text"
+msgstr "Pesquisar Texto"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Added:"
+msgstr "Adicionado:"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Removed:"
+msgstr "Removido:"
+
+#: tools/editor/editor_import_export.cpp tools/editor/project_export.cpp
+msgid "Error saving atlas:"
+msgstr "Erro ao salvar atlas:"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Could not save atlas subtexture:"
+msgstr "Não foi possível salvar Subtextura do Atlas:"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Storing File:"
+msgstr "Armazenando Arquivo:"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Packing"
+msgstr "Empacotando"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Exporting for %s"
+msgstr "Exportando para %s"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Setting Up.."
+msgstr "Ajustando..."
+
+#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
+msgid "Re-Importing"
+msgstr "Re-Importando"
+
+#: tools/editor/editor_node.cpp
+msgid "Importing:"
+msgstr "Importando:"
+
+#: tools/editor/editor_node.cpp
+msgid "Node From Scene"
+msgstr "Nó a Partir de Cena"
+
+#: tools/editor/editor_node.cpp tools/editor/scenes_dock.cpp
+msgid "Re-Import.."
+msgstr "Re-importar..."
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/resources_dock.cpp
+msgid "Error saving resource!"
+msgstr "Erro ao salvar Recurso!"
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/resources_dock.cpp
+msgid "Save Resource As.."
+msgstr "Salvar Recuso como..."
+
+#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
+msgid "I see.."
+msgstr "Entendo..."
+
+#: tools/editor/editor_node.cpp
+msgid "Can't open file for writing:"
+msgstr "Não é possível abrir arquivo para escrita:"
+
+#: tools/editor/editor_node.cpp
+msgid "Requested file format unknown:"
+msgstr "Formato de arquivo requisitado desconhecido:"
+
+#: tools/editor/editor_node.cpp
+msgid "Error while saving."
+msgstr "Erro ao salvar."
+
+#: tools/editor/editor_node.cpp
+msgid "Saving Scene"
+msgstr "Salvando Cena"
+
+#: tools/editor/editor_node.cpp
+msgid "Analyzing"
+msgstr "Analisando"
+
+#: tools/editor/editor_node.cpp
+msgid "Creating Thumbnail"
+msgstr "Criando Miniatura"
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied."
+msgstr ""
+"Não se pôde salvar a cena. É provável que dependências (instâncias) não foram "
+"satisfeitas."
+
+#: tools/editor/editor_node.cpp
+msgid "Failed to load resource."
+msgstr "Falha ao carregar recurso."
+
+#: tools/editor/editor_node.cpp
+msgid "Can't load MeshLibrary for merging!"
+msgstr "Não se pôde carregar MeshLibrary para fusão!"
+
+#: tools/editor/editor_node.cpp
+msgid "Error saving MeshLibrary!"
+msgstr "Erro ao salvar MeshLibrary!"
+
+#: tools/editor/editor_node.cpp
+msgid "Can't load TileSet for merging!"
+msgstr "Não se pôde carregar TileSet para fusão!"
+
+#: tools/editor/editor_node.cpp
+msgid "Error saving TileSet!"
+msgstr "Erro ao salvar TileSet!"
+
+#: tools/editor/editor_node.cpp
+msgid "Can't open export templates zip."
+msgstr "Não se pôde abrir zip dos modelos de exportação."
+
+#: tools/editor/editor_node.cpp
+msgid "Loading Export Templates"
+msgstr "Carregando Modelos de Exportação"
+
+#: tools/editor/editor_node.cpp
+msgid "Error trying to save layout!"
+msgstr "Erro ao salvar o layout!"
+
+#: tools/editor/editor_node.cpp
+msgid "Default editor layout overridden."
+msgstr "Layout padrão do editor sobrescrito."
+
+#: tools/editor/editor_node.cpp
+msgid "Layout name not found!"
+msgstr "Nome do layout não encontrado!"
+
+#: tools/editor/editor_node.cpp
+msgid "Restored default layout to base settings."
+msgstr "Layout padrão restaurado às configurações base."
+
+#: tools/editor/editor_node.cpp
+msgid "Copy Params"
+msgstr "Copiar Parâmetros"
+
+#: tools/editor/editor_node.cpp
+msgid "Set Params"
+msgstr "Definir Parâmetros"
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Paste Resource"
+msgstr "Colar Recurso"
+
+#: tools/editor/editor_node.cpp
+msgid "Copy Resource"
+msgstr "Copiar Recurso"
+
+#: tools/editor/editor_node.cpp
+msgid "Make Built-In"
+msgstr "Tornar Embutido"
+
+#: tools/editor/editor_node.cpp
+msgid "Make Sub-Resources Unique"
+msgstr "Tornar Únicos os Sub-recursos"
+
+#: tools/editor/editor_node.cpp
+msgid "There is no defined scene to run."
+msgstr "Não há cena definida para rodar."
+
+#: tools/editor/editor_node.cpp
+msgid "Current scene was never saved, please save it prior to running."
+msgstr "A cena atual nunca foi salva. Por favor salve antes de rodá-la."
+
+#: tools/editor/editor_node.cpp
+msgid "Could not start subprocess!"
+msgstr "Não se pôde iniciar sub-processo!"
+
+#: tools/editor/editor_node.cpp
+msgid "Open Scene"
+msgstr "Abrir Cena"
+
+#: tools/editor/editor_node.cpp
+msgid "Open Base Scene"
+msgstr "Abrir Cena Base"
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Open Scene.."
+msgstr "Abri Cena Ágil..."
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Open Script.."
+msgstr "Abrir Script Ágil..."
+
+#: tools/editor/editor_node.cpp
+msgid "Yes"
+msgstr "Sim"
+
+#: tools/editor/editor_node.cpp
+msgid "Close scene? (Unsaved changes will be lost)"
+msgstr "Fechar cena? (Mudanças não salvas serão perdidas)"
+
+#: tools/editor/editor_node.cpp
+msgid "Save Scene As.."
+msgstr "Salvar Cena Como..."
+
+#: tools/editor/editor_node.cpp
+msgid "This scene has never been saved. Save before running?"
+msgstr "Esta cena nunca foi salva. Salvar antes de rodar?"
+
+#: tools/editor/editor_node.cpp
+msgid "Please save the scene first."
+msgstr "Por favor salve a cena primeiro."
+
+#: tools/editor/editor_node.cpp
+msgid "Save Translatable Strings"
+msgstr "Salvar Strings Traduzíveis"
+
+#: tools/editor/editor_node.cpp
+msgid "Export Mesh Library"
+msgstr "Exportar MeshLibrary"
+
+#: tools/editor/editor_node.cpp
+msgid "Export Tile Set"
+msgstr "Exportar Tile Set"
+
+#: tools/editor/editor_node.cpp
+msgid "Quit"
+msgstr "Sair"
+
+#: tools/editor/editor_node.cpp
+msgid "Exit the editor?"
+msgstr "Sair do editor?"
+
+#: tools/editor/editor_node.cpp
+msgid "Current scene not saved. Open anyway?"
+msgstr "Cena atual não salva. Abrir mesmo assim?"
+
+#: tools/editor/editor_node.cpp
+msgid "Can't reload a scene that was never saved."
+msgstr "Não foi possível recarregar a cena pois nunca foi salva."
+
+#: tools/editor/editor_node.cpp
+msgid "Revert"
+msgstr "Reverter"
+
+#: tools/editor/editor_node.cpp
+msgid "This action cannot be undone. Revert anyway?"
+msgstr "Esta ação não pode ser desfeita. Reverter mesmo assim?"
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Run Scene.."
+msgstr "Rodar Cena Ágil..."
+
+#: tools/editor/editor_node.cpp
+#, fuzzy
+msgid ""
+"Open Project Manager? \n"
+"(Unsaved changes will be lost)"
+msgstr "Fechar cena? (Mudanças não salvas serão perdidas)"
+
+#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
+msgid "Ugh"
+msgstr "Ugh"
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Error loading scene, it must be inside the project path. Use 'Import' to open "
+"the scene, then save it inside the project path."
+msgstr ""
+"Erro ao carregar cena, ela deve estar dentro do caminho do projeto. Use "
+"\"Importar\" para abrir a cena e então salve-a dentro do projeto."
+
+#: tools/editor/editor_node.cpp
+msgid "Error loading scene."
+msgstr "Erro ao carregar cena."
+
+#: tools/editor/editor_node.cpp
+msgid "Scene '%s' has broken dependencies:"
+msgstr "A cena \"%s\" tem dependências quebradas:"
+
+#: tools/editor/editor_node.cpp
+msgid "Save Layout"
+msgstr "Salvar Layout"
+
+#: tools/editor/editor_node.cpp
+msgid "Delete Layout"
+msgstr "Excluir Layout"
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Default"
+msgstr "Padrão"
+
+#: tools/editor/editor_node.cpp
+msgid "Switch Scene Tab"
+msgstr "Trocar Guia de Cena"
+
+#: tools/editor/editor_node.cpp
+msgid "%d more file(s)"
+msgstr "Mais %d arquivo(s)"
+
+#: tools/editor/editor_node.cpp
+msgid "%d more file(s) or folder(s)"
+msgstr "Mais %d arquivo(s) ou pasta(s)"
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Scene"
+msgstr "Cena"
+
+#: tools/editor/editor_node.cpp
+msgid "Go to previously opened scene."
+msgstr "Ir para cena aberta anteriormente"
+
+#: tools/editor/editor_node.cpp
+msgid "Operations with scene files."
+msgstr "Operações com arquivos de cena."
+
+#: tools/editor/editor_node.cpp
+msgid "New Scene"
+msgstr "Nova Cena"
+
+#: tools/editor/editor_node.cpp
+msgid "New Inherited Scene.."
+msgstr "Nova Cena Herdada..."
+
+#: tools/editor/editor_node.cpp
+msgid "Open Scene.."
+msgstr "Abrir Cena..."
+
+#: tools/editor/editor_node.cpp
+msgid "Save Scene"
+msgstr "Salvar Cena"
+
+#: tools/editor/editor_node.cpp
+msgid "Close Scene"
+msgstr "Fechar Cena"
+
+#: tools/editor/editor_node.cpp
+msgid "Close Goto Prev. Scene"
+msgstr "Ir a Cena Fechada Anterior"
+
+#: tools/editor/editor_node.cpp
+msgid "Open Recent"
+msgstr "Abrir Recente"
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Search File.."
+msgstr "Buscar Arquivo Ágil..."
+
+#: tools/editor/editor_node.cpp
+msgid "Convert To.."
+msgstr "Converter Para..."
+
+#: tools/editor/editor_node.cpp
+msgid "Translatable Strings.."
+msgstr "Strings Traduzíveis..."
+
+#: tools/editor/editor_node.cpp
+msgid "MeshLibrary.."
+msgstr "MeshLibrary..."
+
+#: tools/editor/editor_node.cpp
+msgid "TileSet.."
+msgstr "TileSet..."
+
+#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Redo"
+msgstr "Refazer"
+
+#: tools/editor/editor_node.cpp
+msgid "Run Script"
+msgstr "Rodar Script"
+
+#: tools/editor/editor_node.cpp
+msgid "Project Settings"
+msgstr "Configurações do Projeto"
+
+#: tools/editor/editor_node.cpp
+msgid "Revert Scene"
+msgstr "Reverter Cena"
+
+#: tools/editor/editor_node.cpp
+msgid "Quit to Project List"
+msgstr "Sair para a Lista de Projetos"
+
+#: tools/editor/editor_node.cpp
+msgid "Import assets to the project."
+msgstr "Importar assets ao projeto."
+
+#: tools/editor/editor_node.cpp
+msgid "Miscellaneous project or scene-wide tools."
+msgstr "Ferramentas diversas atuantes no projeto ou cena."
+
+#: tools/editor/editor_node.cpp
+msgid "Tools"
+msgstr "Ferramentas"
+
+#: tools/editor/editor_node.cpp
+msgid "Export the project to many platforms."
+msgstr "Exportar o projeto para diversas plataformas."
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Export"
+msgstr "Exportar"
+
+#: tools/editor/editor_node.cpp
+msgid "Play the project (F5)."
+msgstr "Rodar o projeto (F5)."
+
+#: tools/editor/editor_node.cpp
+msgid "Pause the scene"
+msgstr "Pausar a cena"
+
+#: tools/editor/editor_node.cpp
+msgid "Stop the scene (F8)."
+msgstr "Parar a cena (F8)."
+
+#: tools/editor/editor_node.cpp
+msgid "Play the edited scene (F6)."
+msgstr "Rodar a cena editada (F6)."
+
+#: tools/editor/editor_node.cpp
+msgid "Play custom scene"
+msgstr "Rodar outra cena"
+
+#: tools/editor/editor_node.cpp
+msgid "Debug options"
+msgstr "Opções de depuração"
+
+#: tools/editor/editor_node.cpp
+msgid "Live Editing"
+msgstr "Edição ao vivo"
+
+#: tools/editor/editor_node.cpp
+msgid "File Server"
+msgstr "Servidor de Arquivos"
+
+#: tools/editor/editor_node.cpp
+msgid "Deploy Remote Debug"
+msgstr "Instalar Depuração Remota"
+
+#: tools/editor/editor_node.cpp
+msgid "Deploy File Server Clients"
+msgstr "Instalar Clientes do Servidor de Arquivos"
+
+#: tools/editor/editor_node.cpp
+msgid "Visible Collision Shapes"
+msgstr "Formas de Colisão Visíveis"
+
+#: tools/editor/editor_node.cpp
+msgid "Visible Navigation"
+msgstr "Navegação Visível"
+
+#: tools/editor/editor_node.cpp tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Settings"
+msgstr "Configurações"
+
+#: tools/editor/editor_node.cpp tools/editor/settings_config_dialog.cpp
+msgid "Editor Settings"
+msgstr "Configurações do Editor"
+
+#: tools/editor/editor_node.cpp
+msgid "Editor Layout"
+msgstr "Layout do Editor"
+
+#: tools/editor/editor_node.cpp
+msgid "Install Export Templates"
+msgstr "Instalar Models de Exportação"
+
+#: tools/editor/editor_node.cpp
+msgid "About"
+msgstr "Sobre"
+
+#: tools/editor/editor_node.cpp
+msgid "Alerts when an external resource has changed."
+msgstr "Alerta quando um recurso externo foi alterado."
+
+#: tools/editor/editor_node.cpp
+msgid "Spins when the editor window repaints!"
+msgstr "Gira quando a janela do editor atualiza!"
+
+#: tools/editor/editor_node.cpp
+msgid "Update Always"
+msgstr "Atualizar Sempre"
+
+#: tools/editor/editor_node.cpp
+msgid "Update Changes"
+msgstr "Atualizar nas Mudanças"
+
+#: tools/editor/editor_node.cpp
+msgid "Inspector"
+msgstr "Inspetor"
+
+#: tools/editor/editor_node.cpp
+msgid "Create a new resource in memory and edit it."
+msgstr "Cria um novo recurso na memória e o edita."
+
+#: tools/editor/editor_node.cpp
+msgid "Load an existing resource from disk and edit it."
+msgstr "Carrega um recurso existente do disco e o edita."
+
+#: tools/editor/editor_node.cpp
+msgid "Save the currently edited resource."
+msgstr "Salva o recurso editado atualmente."
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save As.."
+msgstr "Salvar Como..."
+
+#: tools/editor/editor_node.cpp
+msgid "Go to the previous edited object in history."
+msgstr "Ir ao objeto editado anteriormente no histórico."
+
+#: tools/editor/editor_node.cpp
+msgid "Go to the next edited object in history."
+msgstr "Ir ao próximo objeto editado no histórico."
+
+#: tools/editor/editor_node.cpp
+msgid "History of recently edited objects."
+msgstr "Histórico dos objetos editados recentemente."
+
+#: tools/editor/editor_node.cpp
+msgid "Object properties."
+msgstr "Propriedades do objeto."
+
+#: tools/editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "Arquivos"
+
+#: tools/editor/editor_node.cpp
+msgid "Output"
+msgstr "Saída"
+
+#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
+#: tools/editor/import_settings.cpp
+msgid "Re-Import"
+msgstr "Reimportar"
+
+#: tools/editor/editor_node.cpp tools/editor/editor_plugin_settings.cpp
+msgid "Update"
+msgstr "Atualizar"
+
+#: tools/editor/editor_node.cpp
+msgid "Thanks from the Godot community!"
+msgstr "Agradecimentos da comunidade Godot!"
+
+#: tools/editor/editor_node.cpp
+msgid "Thanks!"
+msgstr "Obrigado!"
+
+#: tools/editor/editor_node.cpp
+msgid "Import Templates From ZIP File"
+msgstr "Importar Modelos de um Arquivo ZIP."
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Export Project"
+msgstr "Exportar Projeto"
+
+#: tools/editor/editor_node.cpp
+msgid "Export Library"
+msgstr "Exportar Biblioteca"
+
+#: tools/editor/editor_node.cpp
+msgid "Merge With Existing"
+msgstr "Fundir Com Existente"
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Password:"
+msgstr "Senha:"
+
+#: tools/editor/editor_node.cpp
+msgid "Open & Run a Script"
+msgstr "Abrir e Rodar um Script"
+
+#: tools/editor/editor_node.cpp
+msgid "Load Errors"
+msgstr "Erros de Carregamento"
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Installed Plugins:"
+msgstr "Plugins Instalados:"
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr "Versão:"
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Author:"
+msgstr "Autor:"
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Status:"
+msgstr "Status:"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Stop Profiling"
+msgstr "Parar Profiling"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Start Profiling"
+msgstr "Iniciar Profiling"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Measure:"
+msgstr "Medida:"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame Time (sec)"
+msgstr "Tempo de Quadro (seg)"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Average Time (sec)"
+msgstr "Tempo Médio (seg)"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame %"
+msgstr "% de Quadro"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Fixed Frame %"
+msgstr "% de Quadro Fixo"
+
+#: tools/editor/editor_profiler.cpp tools/editor/script_editor_debugger.cpp
+msgid "Time:"
+msgstr "Tempo:"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Inclusive"
+msgstr "Inclusivo"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Self"
+msgstr "Mesmo"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame #:"
+msgstr "Frame nº:"
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Please wait for scan to complete."
+msgstr "Por favor aguarde a verificação completar."
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Current scene must be saved to re-import."
+msgstr "Cena Atual só deve ser salva para re-importação."
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Save & Re-Import"
+msgstr "Salvar e Re-Importar"
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Re-Import Changed Resources"
+msgstr "Re-Importar Recursos Alterados"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Write your logic in the _run() method."
+msgstr "Escreva sua lógica no método _run()."
+
+#: tools/editor/editor_run_script.cpp
+msgid "There is an edited scene already."
+msgstr "Já existe uma cena editada."
+
+#: tools/editor/editor_run_script.cpp
+msgid "Couldn't instance script:"
+msgstr "Não foi possível instanciar o script:"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Did you forget the 'tool' keyword?"
+msgstr "Você esqueceu da palavra-chave \"tool\"?"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Couldn't run script:"
+msgstr "Não foi possível rodar o script:"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Did you forget the '_run' method?"
+msgstr "Você esqueceu o método '_run'?"
+
+#: tools/editor/editor_settings.cpp
+msgid "Default (Same as Editor)"
+msgstr "Padrão (Mesma do Editor)"
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Select Node(s) to Import"
+msgstr "Selecionar Nó(s) para Importar"
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Scene Path:"
+msgstr "Caminho da Cena:"
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Import From Node:"
+msgstr "Importar a Partir do Nó:"
+
+#: tools/editor/file_type_cache.cpp
+msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
+msgstr ""
+"Não pode abrir file_type_cache.cch para escrita, cache de tipos de arquivo "
+"não salvo!"
+
+#: tools/editor/groups_editor.cpp
+msgid "Add to Group"
+msgstr "Adicionar ao Grupo"
+
+#: tools/editor/groups_editor.cpp
+msgid "Remove from Group"
+msgstr "Remover do Grupo"
+
+#: tools/editor/groups_editor.cpp
+msgid "Group Editor"
+msgstr "Editor de Grupos"
+
+#: tools/editor/groups_editor.cpp tools/editor/project_export.cpp
+msgid "Group"
+msgstr "Grupo"
+
+#: tools/editor/groups_editor.cpp
+msgid "Node Group(s)"
+msgstr "Grupo(s) do Nó"
+
+#: tools/editor/import_settings.cpp
+msgid "Imported Resources"
+msgstr "Recursos Importados"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "No source font file!"
+msgstr "Falta arquivo de fonte origem!"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "No target font resource!"
+msgstr "Falta recurso de fonte destino!"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Can't load/process source font."
+msgstr "Não se pôde carregar/processar fonte de origem."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Couldn't save font."
+msgstr "Não se pôde salvar fonte."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Source Font:"
+msgstr "Fonte Origem:"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Source Font Size:"
+msgstr "Tamanho da Fonte de Origem:"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Dest Resource:"
+msgstr "Recurso Destino:"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "The quick brown fox jumps over the lazy dog."
+msgstr ""
+"À noite, vovô Kowalsky vê o ímã cair no pé do pinguim queixoso e vovó põe "
+"açúcar no chá de tâmaras do jabuti feliz."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Test:"
+msgstr "Teste:"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Options:"
+msgstr "Opções:"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Font Import"
+msgstr "Importar Fonte"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Accept"
+msgstr "Aceitar"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid ""
+"This file is already a Godot font file, please supply a BMFont type file "
+"instead."
+msgstr ""
+"Este arquivo já é um arquivo de fonte Godot, por favor forneça um arquivo "
+"BMFont."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Failed opening as BMFont file."
+msgstr "Falha ao abrir como arquivo BMFont."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Invalid font custom source."
+msgstr "Origem personalizada da fonte inválida."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Font"
+msgstr "Fonte"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "No meshes to import!"
+msgstr "Sem meshes para importar!"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Save path is empty!"
+msgstr "Caminho de salvamento vazio!"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Single Mesh Import"
+msgstr "Importar Única Mesh"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Source Mesh(es):"
+msgstr "Origem de Mesh(es):"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Target Path:"
+msgstr "Caminho Destino:"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Mesh"
+msgstr "Mesh"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Surface %d"
+msgstr "Superfície %d"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "No samples to import!"
+msgstr "Sem amostras para importar!"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path is empty."
+msgstr "Caminho destino está vazio."
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path must be a complete resource path."
+msgstr "Caminho destino deve ser um caminho completo a um recurso."
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path must exist."
+msgstr "Caminho destino deve existir."
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Import Audio Samples"
+msgstr "Importar Amostras de Áudio"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Source Sample(s):"
+msgstr "Amostra(s) de Origem:"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Audio Sample"
+msgstr "Amostra de Áudio"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "New Clip"
+msgstr "Novo Clipe"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Animation Options"
+msgstr "Opções da Animação"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Flags"
+msgstr "Flags"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Bake FPS:"
+msgstr "Precalcular FPS:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Optimizer"
+msgstr "Otimizador"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Linear Error"
+msgstr "Erro Linear Máximo"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Angular Error"
+msgstr "Erro Angular Máximo"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Angle"
+msgstr "Ângulo Máximo"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Clips"
+msgstr "Clipes"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/project_manager.cpp tools/editor/project_settings.cpp
+msgid "Name"
+msgstr "Nome"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Start(s)"
+msgstr "Início(s)"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "End(s)"
+msgstr "Fim(ns)"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Loop"
+msgstr "Repetir"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Filters"
+msgstr "Filtros"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Source path is empty."
+msgstr "Caminho de origem está vazio"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't load post-import script."
+msgstr "Não se pôde carregar script pós-importação."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Invalid/broken script for post-import."
+msgstr "Script pós-importação inválido/quebrado."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Error importing scene."
+msgstr "Erro ao importar cena."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import 3D Scene"
+msgstr "Importar Cena 3D"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Source Scene:"
+msgstr "Cena de Origem:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Same as Target Scene"
+msgstr "Mesma da Cena Destino"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Shared"
+msgstr "Compartilhado"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Target Texture Folder:"
+msgstr "Pasta Destino para Textura"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Post-Process Script:"
+msgstr "Script de Pós-Processamento"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Custom Root Node Type:"
+msgstr "Tipo Personalizado de Nó Raiz:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#, fuzzy
+msgid "Auto"
+msgstr "AutoLoad"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "The Following Files are Missing:"
+msgstr "Os Seguintes Arquivos estão Faltando:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import Anyway"
+msgstr "Importar Mesmo Assim"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import & Open"
+msgstr "Importar e Abrir"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Edited scene has not been saved, open imported scene anyway?"
+msgstr "A cena editada não foi salva, abrir cena importada ainda assim?"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import Scene"
+msgstr "Importar Cena"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Importing Scene.."
+msgstr "Importando Cena..."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Running Custom Script.."
+msgstr "Rodando Script Personalizado..."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't load post-import script:"
+msgstr "Não se pôde carregar script pós-importação:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Invalid/broken script for post-import:"
+msgstr "Script pós-importação inválido/quebrado."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Error running post-import script:"
+msgstr "Erro ao rodar script pós-importação:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import Image:"
+msgstr "Importar Imagem:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Can't import a file over itself:"
+msgstr "Não é possível importar arquivo sobre si mesmo:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't localize path: %s (already local)"
+msgstr "Caminho não pôde ser localizado: %s (já é local)"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Saving.."
+msgstr "Salvando..."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "3D Scene Animation"
+msgstr "Animação Cena 3D"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Uncompressed"
+msgstr "Não comprimido"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress Lossless (PNG)"
+msgstr "Comprimido Sem Perdas (PNG)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress Lossy (WebP)"
+msgstr "Comprido Com Perdas (WebP)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress (VRAM)"
+msgstr "Comprimido (VRAM)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Format"
+msgstr "Formato da Textura"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Compression Quality (WebP):"
+msgstr "Qualidade da Compressão da Textura (WebP):"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Options"
+msgstr "Opções da Textura"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Please specify some files!"
+msgstr "Por favor especifique alguns arquivos!"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "At least one file needed for Atlas."
+msgstr "Pelo menos um arquivo é preciso para o Atlas."
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Error importing:"
+msgstr "Erro ao importar:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Only one file is required for large texture."
+msgstr "Apenas um arquivo é requerido para textura grande."
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Max Texture Size:"
+msgstr "Tamanho Máximo de Textura:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for Atlas (2D)"
+msgstr "Importar Texturas para Atlas (2D)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Cell Size:"
+msgstr "Tamanho da Célula:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Large Texture"
+msgstr "Textura Grande"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Large Textures (2D)"
+msgstr "Importar Texturas Grandes (2D)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture"
+msgstr "Textura Origem"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Base Atlas Texture"
+msgstr "Textura Base do Atlas"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture(s)"
+msgstr "Textura(s) Origem(ns)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for 2D"
+msgstr "Importar Texturas para 2D"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for 3D"
+msgstr "Importar Texturas para 3D"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures"
+msgstr "Importar Textura"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "2D Texture"
+msgstr "Textura 2D"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "3D Texture"
+msgstr "Textura 3D"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Atlas Texture"
+msgstr "Textura Atlas"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid ""
+"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to "
+"the project."
+msgstr ""
+"AVISO: Importar texturas 2D não é obrigatório. Apenas copie arquivos png/jpg "
+"para o projeto."
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture(s):"
+msgstr "Textura(s) de Origem:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Crop empty space."
+msgstr "Aparar espaço vazio."
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture"
+msgstr "Textura"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Large Texture"
+msgstr "Importar Textura Grande"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Load Source Image"
+msgstr "Carregar Imagem Origem"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Slicing"
+msgstr "Fatiando"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Inserting"
+msgstr "Inserindo"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Saving"
+msgstr "Salvando"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save large texture:"
+msgstr "Não se pôde salvar textura grande:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Build Atlas For:"
+msgstr "Montar Atlas Para:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Loading Image:"
+msgstr "Carregando Imagem:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't load image:"
+msgstr "Não se pôde carregar imagem:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Converting Images"
+msgstr "Convertendo Imagens"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Cropping Images"
+msgstr "Aparando Imagens"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Blitting Images"
+msgstr "Fazendo Blitting das Imagens"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save atlas image:"
+msgstr "Não se pôde salva imagem de atlas:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save converted texture:"
+msgstr "Não se pôde salvar textura convertida:"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Invalid source!"
+msgstr "Origem inválida!"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Invalid translation source!"
+msgstr "Origem de tradução inválida!"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Column"
+msgstr "Coluna"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#: tools/editor/script_create_dialog.cpp
+msgid "Language"
+msgstr "Idioma"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "No items to import!"
+msgstr "Nenhum item a importar!"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "No target path!"
+msgstr "Nenhum caminho destino!"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Translations"
+msgstr "Importar Traduções"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Couldn't import!"
+msgstr "Não foi possível importar!"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Translation"
+msgstr "Importar Tradução"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Source CSV:"
+msgstr "Arquivo CSV Origem:"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Ignore First Row"
+msgstr "Ignorar Primeira Linha"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Compress"
+msgstr "Comprimir"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Add to Project (engine.cfg)"
+msgstr "Adicionar ao Projeto (engine.cfg)"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Languages:"
+msgstr "Importar Idiomas:"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Translation"
+msgstr "Tradução"
+
+#: tools/editor/multi_node_edit.cpp
+msgid "MultiNode Set"
+msgstr "Múltiplos Nós definidos"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Toggle Autoplay"
+msgstr "Alternar Inicio automático"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Animation Name:"
+msgstr "Novo Nome da Animação:"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Anim"
+msgstr "Nova Animação"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Animation Name:"
+msgstr "Alterar Nome da Animação:"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Remove Animation"
+msgstr "Remover Animação"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Invalid animation name!"
+msgstr "ERRO: Nome de animação inválido!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Animation name already exists!"
+msgstr "ERRO: Nome da animação já existe!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Renomear Animação"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Animation"
+msgstr "Adicionar Animação"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Next Changed"
+msgstr "Misturar com o Próximo Alterado"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Blend Time"
+msgstr "Mudar Tempo de Mistura"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load Animation"
+msgstr "Carregar Animação"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Duplicar Animação"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to copy!"
+msgstr "ERRO: Nenhuma animação para copiar!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation resource on clipboard!"
+msgstr "ERRO: Nenhum recurso de animação na área de transferência!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Pasted Animation"
+msgstr "Animação Colada"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Paste Animation"
+msgstr "Colar Animação"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to edit!"
+msgstr "ERRO: Nenhuma animação para editar!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from current pos. (A)"
+msgstr ""
+"Iniciar animação selecionada de trás pra frente a partir da posição atual. (A)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from end. (Shift+A)"
+msgstr ""
+"Iniciar animação selecionada de trás pra frente a partir do fim. (Shift+A)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Stop animation playback. (S)"
+msgstr "Parar reprodução da animação. (S)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from start. (Shift+D)"
+msgstr "Reproduzir animação selecionada do início. (Shift +D)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from current pos. (D)"
+msgstr "Reproduzir animação selecionada da posição atual. (D)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation position (in seconds)."
+msgstr "Posição da Animação (em segundos)."
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Scale animation playback globally for the node."
+msgstr "Escalonar reprodução da animação globalmente para o nó."
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create new animation in player."
+msgstr "Criar nova animação no player."
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load an animation from disk."
+msgstr "Carregar uma animação do disco."
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save the current animation"
+msgstr "Salvar a animação atual"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Display list of animations in player."
+msgstr "Mostrar lista de animações no player."
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Autoplay on Load"
+msgstr "Reproduzir automaticamente ao carregar."
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Edit Target Blend Times"
+msgstr "Editar alvos dos tempos de mistura"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Tools"
+msgstr "Ferramentas de Animação"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Copy Animation"
+msgstr "Copiar Animação"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Criar Nova Animação"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Name:"
+msgstr "Nome da Animação:"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/script_create_dialog.cpp
+msgid "Error!"
+msgstr "Erro!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Times:"
+msgstr "Tempos de Mistura:"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Next (Auto Queue):"
+msgstr "Próximo (Entrar na fila automaticamente)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Cross-Animation Blend Times"
+msgstr "Tempos de Mistura de Animação Cruzada"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation"
+msgstr "Animação"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "New name:"
+msgstr "Novo nome:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Scale:"
+msgstr "Escala:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade In (s):"
+msgstr "Fade In (s):"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade Out (s):"
+msgstr "Fade Out (s):"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend"
+msgstr "Misturar"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix"
+msgstr "Misturar"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Auto Restart:"
+msgstr "Reinício Automático:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Restart (s):"
+msgstr "Reinício (s):"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Random Restart (s):"
+msgstr "Reinício Randômico:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Start!"
+msgstr "Iniciar!"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Amount:"
+msgstr "Quantidade:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend:"
+msgstr "Misturar:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 0:"
+msgstr "Misturar 0:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 1:"
+msgstr "Misturar 1:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "X-Fade Time (s):"
+msgstr "Tempo do X-Fade (s):"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Current:"
+msgstr "Atual:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Add Input"
+msgstr "Adicionar Entrada"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Clear Auto-Advance"
+msgstr "Limpar Avanço Automático"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Set Auto-Advance"
+msgstr "Definir Avanço Automático"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Delete Input"
+msgstr "Deletar Entrada"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Rename"
+msgstr "Renomear"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is valid."
+msgstr "Árvore de Animação é válida."
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is invalid."
+msgstr "Árvore de Animação é inválida."
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation Node"
+msgstr "Nó de Animação"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "OneShot Node"
+msgstr "Nó de tipo Uma-Vez"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix Node"
+msgstr "Misturar Nó"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend2 Node"
+msgstr "Nó Misturar2"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend3 Node"
+msgstr "Nó Misturar3"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend4 Node"
+msgstr "Nó Misturar4"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeScale Node"
+msgstr "Nó Tempo de Escala"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeSeek Node"
+msgstr "Nó Tempo de Procura"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Transition Node"
+msgstr "Nó de Transição"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Import Animations.."
+msgstr "Importar Animações..."
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Edit Node Filters"
+msgstr "Editar Filtros de Nó"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Filters.."
+msgstr "Filtros..."
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Parsing %d Triangles:"
+msgstr "Analisando %d Triângulos:"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Triangle #"
+msgstr "Triângulo nº"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Light Baker Setup:"
+msgstr "Configurar Baker de Luz."
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Parsing Geometry"
+msgstr "Analisando Geometria"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Fixing Lights"
+msgstr "Consertando Luzes"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Making BVH"
+msgstr "Fazendo BVH"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Creating Light Octree"
+msgstr "Criando Luz Octree"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Creating Octree Texture"
+msgstr "Criando Textura Octree"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Transfer to Lightmaps:"
+msgstr "Transferir para Mapas de Luz:"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Allocating Texture #"
+msgstr "Alocando Textura nº"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Baking Triangle #"
+msgstr "Precalculando Triângulo nº"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Post-Processing Texture #"
+msgstr "Pós-Processando Textura nº"
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "BakedLightInstance does not contain a BakedLight resource."
+msgstr "BakedLightInstance não contém um recurso BakedLight ."
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "Bake!"
+msgstr "Precalcular!"
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "Reset the lightmap octree baking process (start over)."
+msgstr "Redefinir o processo \"octree baking\" do lightmap (recomeçar)."
+
+#: tools/editor/plugins/camera_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Preview"
+msgstr "Visualização"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Configure Snap"
+msgstr "Configurar o Snap"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid Offset:"
+msgstr "Deslocamento da grade:"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid Step:"
+msgstr "Passo de grade:"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Offset:"
+msgstr "Deslocamento de rotação:"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Step:"
+msgstr "Passo de Rotação"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Pivot"
+msgstr "Mover Pivô"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Action"
+msgstr "Mover Ação"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit IK Chain"
+msgstr "Editar Cadeia de IK"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit CanvasItem"
+msgstr "Editar CanvaItem"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors"
+msgstr "Alterar Âncoras"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom (%):"
+msgstr "Ampliar (%)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Paste Pose"
+msgstr "Colar Pose"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Select Mode (Q)"
+msgstr "Modo de Seleção (Q)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Drag: Rotate"
+msgstr "Arrastar: Rotacionar"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+Drag: Move"
+msgstr "Alt+Arrastar: Mover"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)."
+msgstr ""
+"Aperte \"v\" para Mudar Pivô, \"Shift+v\" para Arrastar Pivô (enquanto "
+"movendo)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+RMB: Depth list selection"
+msgstr "Alt+RMB: Lista de seleção de profundidade"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Move Mode (W)"
+msgstr "Modo Mover (W)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Mode (E)"
+msgstr "Modo Rotacionar"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid ""
+"Show a list of all objects at the position clicked\n"
+"(same as Alt+RMB in select mode)."
+msgstr ""
+"Mostrar uma lista de todos os objetos na posição clicada\n"
+"(mesmo como Alt+RMB no Modo de seleção)."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Click to change object's rotation pivot."
+msgstr "Clique para mudar o pivô de rotação do objeto."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Pan Mode"
+msgstr "Modo Panorâmico"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Lock the selected object in place (can't be moved)."
+msgstr "Travar o objeto selecionado no local (não pode ser movido)."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Unlock the selected object (can be moved)."
+msgstr "Destravar o objeto selecionado (pode ser movido)."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Makes sure the object's children are not selectable."
+msgstr "Garante que os filhos do objeto não sejam selecionáveis."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Restores the object's children's ability to be selected."
+msgstr "Restaura a habilidade dos filhos do objeto de serem selecionados."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Edit"
+msgstr "Editar"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Snap"
+msgstr "Usar Snap"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Show Grid"
+msgstr "Mostrar Grade"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Rotation Snap"
+msgstr "Usar Snap de Rotação"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap Relative"
+msgstr "Snap Relativo"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Configure Snap.."
+msgstr "Configurar Snap..."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Pixel Snap"
+msgstr "Usar Snap de Pixel"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Expand to Parent"
+msgstr "Expandir para Pai"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Skeleton.."
+msgstr "Esqueleto..."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make Bones"
+msgstr "Fazer Ossos"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Bones"
+msgstr "Limpar Ossos"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make IK Chain"
+msgstr "Fazer Cadeia de IK"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear IK Chain"
+msgstr "Limpar Cadeia de IK"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View"
+msgstr "Visualizar"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom In"
+msgstr "Ampliar Mais"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Out"
+msgstr "Ampliar Menos"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Reset"
+msgstr "Restaurar Ampliação"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Set.."
+msgstr "Definir Ampliação..."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center Selection"
+msgstr "Centralizar Seleção"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Frame Selection"
+msgstr "Seleção de Quadros"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Anchor"
+msgstr "Âncora"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Keys (Ins)"
+msgstr "Inserir Chaves (Ins)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key"
+msgstr "Inserir Chave"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key (Existing Tracks)"
+msgstr "Inserir Chave (Trilhas Existentes)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Copy Pose"
+msgstr "Copiar Pose"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Pose"
+msgstr "Limpar Pose"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Set a Value"
+msgstr "Defina um Valor"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap (Pixels):"
+msgstr "Snap (Pixels):"
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create Poly"
+msgstr "Criar polígono"
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Edit Poly"
+msgstr "Editar Polígono"
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Edit Poly (Remove Point)"
+msgstr "Editar Polígono (Remover Ponto)"
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr "Criar um novo polígono do zero"
+
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+msgid "Create Poly3D"
+msgstr "Criar Polígono 3D"
+
+#: tools/editor/plugins/collision_shape_2d_editor_plugin.cpp
+msgid "Set Handle"
+msgstr "Definir Manipulador"
+
+#: tools/editor/plugins/color_ramp_editor_plugin.cpp
+msgid "Add/Remove Color Ramp Point"
+msgstr "Adicionar/Remover Ponto na Curva de Cor"
+
+#: tools/editor/plugins/color_ramp_editor_plugin.cpp
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Color Ramp"
+msgstr "Modificar Curva de Cores"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Creating Mesh Library"
+msgstr "Criando MeshLibrary"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Thumbnail.."
+msgstr "Miniatura..."
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove item %d?"
+msgstr "Remover item %d?"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Add Item"
+msgstr "Adicionar Item"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove Selected Item"
+msgstr "Remover Item Selecionado"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import from Scene"
+msgstr "Importar da Cena"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Update from Scene"
+msgstr "Atualizar a partir de Cena"
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Item %d"
+msgstr "Item %d"
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Items"
+msgstr "Itens"
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Item List Editor"
+msgstr "Editor de Lista de Itens"
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Occluder Polygon"
+msgstr "Criar Polígono de Oclusão"
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Edit existing polygon:"
+msgstr "Editar polígono existente:"
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "LMB: Move Point."
+msgstr "LMB: Mover Ponto."
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Ctrl+LMB: Split Segment."
+msgstr "Ctrl+LMB: Dividir Segmento"
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "RMB: Erase Point."
+msgstr "RMB: Apagar Ponto."
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh is empty!"
+msgstr "Mesh está vazia!"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Trimesh Body"
+msgstr "Criar Corpo Trimesh Estático"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Convex Body"
+msgstr "Criar Corpo Convexo Estático"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "This doesn't work on scene root!"
+msgstr "Não funciona na raiz da cena!"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Shape"
+msgstr "Criar Forma Trimesh"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Shape"
+msgstr "Criar Forma Convexa"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Navigation Mesh"
+msgstr "Criar Mesh de Navegação"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "MeshInstance lacks a Mesh!"
+msgstr "Falta uma MeshInstance na Mesh!"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Could not create outline!"
+msgstr "Não se pôde criar contorno!"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline"
+msgstr "Criar Contorno"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Static Body"
+msgstr "Criar Corpo Trimesh Estático"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Static Body"
+msgstr "Create Convex Static Body"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Collision Sibling"
+msgstr "Criar Colisão Trimesh Irmã"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Collision Sibling"
+msgstr "Criar Colisão Convexa Irmã"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh.."
+msgstr "Criar Mesh de Contorno..."
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh"
+msgstr "Criar Mesh de Contorno"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Outline Size:"
+msgstr "Tamanho do Contorno:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and no MultiMesh set in node)."
+msgstr ""
+"Nenhuma mesh de origem especificada (e nenhuma MultiMesh definida no nó)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and MultiMesh contains no Mesh)."
+msgstr "Nenhuma mesh de origem especificada (e MultiMesh contém nenhuma Mesh)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (invalid path)."
+msgstr "Mesh de origem é inválida (Caminho inválido)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (not a MeshInstance)."
+msgstr "Mesh de origem é inválida (não é uma MeshInstance)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (contains no Mesh resource)."
+msgstr "Mesh de origem é inválida (contém nenhum recurso de Mesh)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No surface source specified."
+msgstr "Nenhuma superfície de origem especificada."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (invalid path)."
+msgstr "Superfície de origem é inválida (Caminho inválido)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no geometry)."
+msgstr "Superfície de origem é inválida (sem geometria)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no faces)."
+msgstr "Superfície de origem é inválida (sem faces)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Parent has no solid faces to populate."
+msgstr "Pai não tem faces sólidas para popular."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Couldn't map area."
+msgstr "Não foi possível mapear área."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Source Mesh:"
+msgstr "Selecione uma Mesh de origem:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Target Surface:"
+msgstr "Selecione uma Superfície Destino:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate Surface"
+msgstr "Popular Superfície"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate MultiMesh"
+msgstr "Popular MultiMesh"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Target Surface:"
+msgstr "Superfície Destino:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Source Mesh:"
+msgstr "Mesh de Origem:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "X-Axis"
+msgstr "Eixo-X"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Y-Axis"
+msgstr "Eixo-Y"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Z-Axis"
+msgstr "Eixo-Z"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh Up Axis:"
+msgstr "Mesh acima do Eixo:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Rotation:"
+msgstr "Rotação aleatória:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Tilt:"
+msgstr "Inclinação aleatória:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Scale:"
+msgstr "Escala aleatória:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate"
+msgstr "Popular"
+
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create Navigation Polygon"
+msgstr "Criar Polígono de Navegação"
+
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Remove Poly And Point"
+msgstr "Remover Polígono e Ponto"
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Error loading image:"
+msgstr "Erro ao carregar imagem:"
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "No pixels with transparency > 128 in image.."
+msgstr "Nenhum pixel com transparência > 128 na imagem."
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Set Emission Mask"
+msgstr "Definir Máscara de Emissão"
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Clear Emission Mask"
+msgstr "Limpar Máscara de Emissão"
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Load Emission Mask"
+msgstr "Carregar Máscara de Emissão"
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generated Point Count:"
+msgstr "Gerar Contagem de Pontos:"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry."
+msgstr "O nó não contém geometria."
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry (faces)."
+msgstr "O nó não contém geometria (faces)."
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Faces contain no area!"
+msgstr "As faces não têm área!"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "No faces!"
+msgstr "Nenhuma face!"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Generate AABB"
+msgstr "Gerar AABB"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter From Mesh"
+msgstr "Criar Emissor a partir de Mesh"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter From Node"
+msgstr "Criar Emissor a partir de Nó"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Clear Emitter"
+msgstr "Limpar Emissor"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter"
+msgstr "Criar Emissor"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Positions:"
+msgstr "Posições de Emissão:"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Fill:"
+msgstr "Preenchimento de Emissão:"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Surface"
+msgstr "Superfície"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Volume"
+msgstr "Volume"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Point from Curve"
+msgstr "Remover Ponto da Curva"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Add Point to Curve"
+msgstr "Adicionar Ponto à Curva"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Point in Curve"
+msgstr "Mover Ponto na Curva"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move In-Control in Curve"
+msgstr "Mover Controle de Entrada na Curva"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Out-Control in Curve"
+msgstr "Mover Controle de Saída na Curva"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr "Selecionar Pontos"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr "Shift+Arrastar: Selecionar Pontos de Controle"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr "Clique: Adicionar Ponto"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr "Clique Direito: Excluir Ponto"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Select Control Points (Shift+Drag)"
+msgstr "Selecionar Pontos de Controle (Shift+Arrastar)"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr "Adicionar Ponto (em espaço vazio)"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Split Segment (in curve)"
+msgstr "Dividir Segmentos (na curva)"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr "Excluir Ponto"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Close Curve"
+msgstr "Fechar Curva"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Curve Point #"
+msgstr "Ponto da Curva nº"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Point Pos"
+msgstr "Definir Pos do Ponto da Curva"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve In Pos"
+msgstr "Definir Pos da Entrada da Curva"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Out Pos"
+msgstr "Definir Pos da Saída da Curva"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Split Path"
+msgstr "Dividir Caminho"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Remove Path Point"
+msgstr "Remover Ponto do Caminho"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create UV Map"
+msgstr "Criar Mapa UV"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Transform UV Map"
+msgstr "Transformar Mapa UV"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon 2D UV Editor"
+msgstr "Editor UV de Polígonos 2D"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Point"
+msgstr "Mover Ponto"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Ctrl: Rotate"
+msgstr "Ctrl: Rotaciona"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift: Move All"
+msgstr "Shift: Mover Todos"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift+Ctrl: Scale"
+msgstr "Shift+Ctrl: Escala"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Polygon"
+msgstr "Mover Polígono"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Rotate Polygon"
+msgstr "Rotacionar Polígono"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Scale Polygon"
+msgstr "Escalonar Polígono"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon->UV"
+msgstr "Polígono->UV"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "UV->Polygon"
+msgstr "UV->Polígono"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Clear UV"
+msgstr "Limpar UV"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Snap"
+msgstr "Snap"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Enable Snap"
+msgstr "Ativar Snap"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid"
+msgstr "Grade"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "ERROR: Couldn't load resource!"
+msgstr "ERRO: Não foi possível carregar recurso!"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Add Resource"
+msgstr "Adicionar Recurso"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Rename Resource"
+msgstr "Renomear Recurso"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Delete Resource"
+msgstr "Excluir Recurso"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Resource clipboard is empty!"
+msgstr "Recurso da área de transferência está vazio!"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Load Resource"
+msgstr "Carregar Recurso"
+
+#: tools/editor/plugins/rich_text_editor_plugin.cpp
+msgid "Parse BBCode"
+msgstr "Analisar BBCode"
+
+#: tools/editor/plugins/sample_editor_plugin.cpp
+msgid "Length:"
+msgstr "Duração:"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Open Sample File(s)"
+msgstr "Abrir Arquivo(s) de Amostra"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "ERROR: Couldn't load sample!"
+msgstr "ERRO: Não é possível carregar a amostra!"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Add Sample"
+msgstr "Adicionar Amostra"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Stop"
+msgstr "Parar"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Play"
+msgstr "Tocar"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Rename Sample"
+msgstr "Renomear Amostra"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Delete Sample"
+msgstr "Excluir Amostra"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "16 Bits"
+msgstr "16 bits"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "8 Bits"
+msgstr "8 Bits"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Stereo"
+msgstr "Estéreo"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Mono"
+msgstr "Mono"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Format"
+msgstr "Formato"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Pitch"
+msgstr "Pitch"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error while saving theme"
+msgstr "Erro ao salvar tema"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error saving"
+msgstr "Erro ao salvar"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error importing theme"
+msgstr "Erro ao importar tema"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error importing"
+msgstr "Erro ao importar"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Import Theme"
+msgstr "Importar Tema"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As.."
+msgstr "Salvar Tema Como..."
+
+#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/project_export.cpp
+msgid "File"
+msgstr "Arquivo"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_editor.cpp
+msgid "New"
+msgstr "Novo"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save All"
+msgstr "Salvar Tudo"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "History Prev"
+msgstr "Anterior no Histórico"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "History Next"
+msgstr "Próximo no Histórico"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Reload Theme"
+msgstr "Recarregar Tema"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme"
+msgstr "Salvar Tema"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As"
+msgstr "Salvar Tema Como"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr "Mover para Cima"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr "Mover para Baixo"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Indent Left"
+msgstr "Recuar Esquerda"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Indent Right"
+msgstr "Recuar Direita"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Toggle Comment"
+msgstr "Alternar Comentário"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Clone Down"
+msgstr "Clonar Abaixo"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Complete Symbol"
+msgstr "Completar Símbolo"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Trim Trailing Whitespace"
+msgstr "Apagar Espaços em Branco"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Auto Indent"
+msgstr "Auto Recuar"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find.."
+msgstr "Localizar..."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find Next"
+msgstr "Localizar próximo"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find Previous"
+msgstr "Encontrar Anterior"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Replace.."
+msgstr "Substituir..."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Goto Function.."
+msgstr "Ir para Função..."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Goto Line.."
+msgstr "Ir para linha..."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Debug"
+msgstr "Depurar"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Toggle Breakpoint"
+msgstr "Alternar Ponto de interrupção"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Remove All Breakpoints"
+msgstr "Remover Todos os Pontos de Interrupção"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Goto Next Breakpoint"
+msgstr "Ir ao Próximo Ponto de Interrupção"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Goto Previous Breakpoint"
+msgstr "Ir ao Ponto de Interrupção Anterior"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Step Over"
+msgstr "Passo por cima"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Step Into"
+msgstr "Passo para dentro"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Break"
+msgstr "Pausar"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Continue"
+msgstr "Continuar"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Keep Debugger Open"
+msgstr "Manter Depurador Aberto"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Window"
+msgstr "Janela"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Left"
+msgstr "Mover para Esquerda"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Right"
+msgstr "Mover para Direita"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Help"
+msgstr "Ajuda"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Contextual"
+msgstr "Contextual"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Tutorials"
+msgstr "Tutoriais"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Open https://godotengine.org at tutorials section."
+msgstr "Abre https://godotengine.org na seção tutoriais."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Classes"
+msgstr "Classes"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search the class hierarchy."
+msgstr "Pesquise na hierarquia da classe."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search Help"
+msgstr "Pesquisar Ajuda"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search the reference documentation."
+msgstr "Pesquise a documentação de referência."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Go to previous edited document."
+msgstr "Ir para o documento editado anteriormente."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Go to next edited document."
+msgstr "Ir para o próximo documento editado."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Create Script"
+msgstr "Criar Script"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid ""
+"The following files are newer on disk.\n"
+"What action should be taken?:"
+msgstr ""
+"Os seguintes arquivos são mais recentes no disco.\n"
+"Que ação deve ser tomada?:"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Reload"
+msgstr "Recarregar"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Resave"
+msgstr "Salve novamente"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Debugger"
+msgstr "Depurador"
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Vertex"
+msgstr "Vértice"
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Fragment"
+msgstr "Fragmento"
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Lighting"
+msgstr "Iluminação"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Constant"
+msgstr "Alterar Constante Escalar"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Constant"
+msgstr "Alterar Constante Vet"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Constant"
+msgstr "Alterar Constante RGB"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Operator"
+msgstr "Alterar Operador Escalar"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Operator"
+msgstr "Alterar Operador Vet"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Scalar Operator"
+msgstr "Alterar Operador Vet Escalar"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Operator"
+msgstr "Alterar Operador RGB"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Toggle Rot Only"
+msgstr "Alternar Rotação Somente"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Function"
+msgstr "Alterar Função Escalar"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Function"
+msgstr "Alterar Função Vet"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Uniform"
+msgstr "Alterar Uniforme Escalar"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Uniform"
+msgstr "Alterar Uniforme Vet"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Uniform"
+msgstr "Alterar Uniforme RGB"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Default Value"
+msgstr "Alterar Valor Padrão"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change XForm Uniform"
+msgstr "Alterar Uniforme XForm"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Texture Uniform"
+msgstr "Alterar Uniforme da Textura"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Cubemap Uniform"
+msgstr "Alterar Uniforme do Cubemap"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Comment"
+msgstr "Alterar Comentário"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Color Ramp"
+msgstr "Adicionar/Remover para Curva de Cores"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Curve Map"
+msgstr "Adicionar/Remover para Curve Map"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Curve Map"
+msgstr "Modificar Curve Map"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Input Name"
+msgstr "Alterar Nome de Entrada"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Connect Graph Nodes"
+msgstr "Conectar Nós de Grafos"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Disconnect Graph Nodes"
+msgstr "Desconectar Nós de Grafos"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Remove Shader Graph Node"
+msgstr "Remover Nó de Shader Graph"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Move Shader Graph Node"
+msgstr "Mover Nó de Shader Graph"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Duplicate Graph Node(s)"
+msgstr "Duplicar Nó(s) de Grafo(s)"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Delete Shader Graph Node(s)"
+msgstr "Deletar Nó(s) de Shader Graph(s)"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Cyclic Connection Link"
+msgstr "Erro: Vínculo de Conexão Cíclico"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Missing Input Connections"
+msgstr "Erro: Faltando Conexões de Entrada"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add Shader Graph Node"
+msgstr "Adicionar Nó de Shader Graph"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal"
+msgstr "Ortogonal"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective"
+msgstr "Perspectiva"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Aborted."
+msgstr "Transformação Abortada."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Plane Transform."
+msgstr "Visualizar Transformação do Plano."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "X-Axis Transform."
+msgstr "Transformação do Eixo-X."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Y-Axis Transform."
+msgstr "Transformação do Eixo-Y."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Z-Axis Transform."
+msgstr "Transformação do Eixo-Z."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling to %s%%."
+msgstr "Escalonando para %s%%."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotating %s degrees."
+msgstr "Rotacionando %s degraus."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View."
+msgstr "Visão inferior"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom"
+msgstr "Baixo"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View."
+msgstr "Visão Superior."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top"
+msgstr "Cima"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View."
+msgstr "Visão Traseira."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear"
+msgstr "Traseira"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View."
+msgstr "Visão Frontal."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front"
+msgstr "Frente"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View."
+msgstr "Visão Esquerda."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left"
+msgstr "Esquerda"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View."
+msgstr "Visão Direita."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right"
+msgstr "Direita"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Keying is disabled (no key inserted)."
+msgstr "Chaveamento está desativado (nenhuma chave inserida)."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Animation Key Inserted."
+msgstr "Chave de Animação Inserida"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Align with view"
+msgstr "Alinhar com Visão"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top (Num7)"
+msgstr "Cima (Num7)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom (Shift+Num7)"
+msgstr "Baixo (Shift+Num7)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left (Num3)"
+msgstr "Esquerda (Num3)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right (Shift+Num3)"
+msgstr "Direita (Shift+Num3)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front (Num1)"
+msgstr "Frente (Num1)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear (Shift+Num1)"
+msgstr "Traseira (Shift+Num1)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective (Num5)"
+msgstr "Perspectiva (Num5)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal (Num5)"
+msgstr "Ortogonal (Num5)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Environment"
+msgstr "Ambiente"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Audio Listener"
+msgstr "Ouvinte de Áudio"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Gizmos"
+msgstr "Gizmos"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Selection (F)"
+msgstr "Seleção (F)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Align with view (Ctrl+Shift+F)"
+msgstr "Alinhar com Visão (Ctrl+Shift+F)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "XForm Dialog"
+msgstr "Diálogo XForm"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "No scene selected to instance!"
+msgstr "Nenhuma cena selecionada para instanciar!"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Instance at Cursor"
+msgstr "Instanciar no Cursor"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Could not instance scene!"
+msgstr "Não foi possível instanciar cena!"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Mode (R)"
+msgstr "Modo Escala (R)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Transform"
+msgstr "Tipo de Transformação"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Local Coords"
+msgstr "Coordenadas Locais"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Dialog.."
+msgstr "Diálogo Transformação..."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Default Light"
+msgstr "Usar Luz Padrão"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Default sRGB"
+msgstr "Usar sRGB Padrão"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "1 Viewport"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "2 Viewports"
+msgstr "Configurações da Viewport:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports (Alt)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "3 Viewports"
+msgstr "Configurações da Viewport:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports (Alt)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "4 Viewports"
+msgstr "Configurações da Viewport:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Normal"
+msgstr "Exibição Normal"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Wireframe"
+msgstr "Exibição Wireframe"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Overdraw"
+msgstr "Exibição Overdraw"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Shadeless"
+msgstr "Exibição Shadeless"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Origin"
+msgstr "Ver Origem"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Grid"
+msgstr "Ver Grade"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap Settings"
+msgstr "Configurações do Snap"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate Snap:"
+msgstr "Snap de Translação:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Snap (deg.):"
+msgstr "Rotacionar Snap (deg.):"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Snap (%):"
+msgstr "Escala do Snap (%):"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Viewport Settings"
+msgstr "Configurações da Viewport:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Default Light Normal:"
+msgstr "Luz Normal Padrão:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Ambient Light Color:"
+msgstr "Cor de Luz Ambiente:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective FOV (deg.):"
+msgstr "FOV Perspectiva (deg.):"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Near:"
+msgstr "Visão Z-Próximo:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Far:"
+msgstr "Visão Z-Longe:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Change"
+msgstr "Mudar Transformação"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate:"
+msgstr "Translação:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate (deg.):"
+msgstr "Rotacionar (deg.):"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale (ratio):"
+msgstr "Escalonar (taxa):"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Type"
+msgstr "Tipo de Transformação"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Pre"
+msgstr "Pré"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Post"
+msgstr "Pós"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "ERROR: Couldn't load frame resource!"
+msgstr "ERRO: Não foi possível carregar recurso de quadro!"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Frame"
+msgstr "Adicionar Quadro"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Resource clipboard is empty or not a texture!"
+msgstr "Recurso da área de transferência está vazio ou não é uma textura!"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Paste Frame"
+msgstr "Colar Quadro"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Empty"
+msgstr "Adicionar Vazio"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation Loop"
+msgstr "Mudar Repetição da Animação"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation FPS"
+msgstr "Mudar FPS da Animação"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "(empty)"
+msgstr "(vazio)"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animations"
+msgstr "Animações"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Speed (FPS):"
+msgstr "Velocidade (FPS):"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animation Frames"
+msgstr "Quadros da Animação"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (Before)"
+msgstr "Inserir Vazio (Antes)"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (After)"
+msgstr "Inserir Vazio (Depois)"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Up"
+msgstr "Acima"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Down"
+msgstr "Abaixo"
+
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Set region_rect"
+msgstr "Definir region_rect"
+
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Sprite Region Editor"
+msgstr "Editor de Região do Sprite"
+
+#: tools/editor/plugins/style_box_editor_plugin.cpp
+msgid "StyleBox Preview:"
+msgstr "Pré-Visualização do StyleBox:"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Can't save theme to file:"
+msgstr "Não pôde salvar tema ao arquivo:"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add All Items"
+msgstr "Adicionar Todos os Itens"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add All"
+msgstr "Adicionar Todos"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove Item"
+msgstr "Remover Item"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add Class Items"
+msgstr "Adicionar Itens de Classe"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Remove Class Items"
+msgstr "Remover Itens de Classe"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Create Template"
+msgstr "Criar Modelo"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio1"
+msgstr "Rádio Checkbox 1"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio2"
+msgstr "Rádio CheckBox 2"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Item"
+msgstr "Item"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Check Item"
+msgstr "Checar Item"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Checked Item"
+msgstr "Item Checado"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Has"
+msgstr "Tem"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Many"
+msgstr "Muitos"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp tools/editor/project_export.cpp
+msgid "Options"
+msgstr "Opções"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Have,Many,Several,Options!"
+msgstr "Ter,Muitas,Várias,Opções!"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 1"
+msgstr "Guia 1"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 2"
+msgstr "Guia 2"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 3"
+msgstr "Guia 3"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/scene_tree_editor.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Type:"
+msgstr "Tipo:"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Data Type:"
+msgstr "Tipo de Dados:"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Icon"
+msgstr "Ícone"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Style"
+msgstr "Estilo"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Color"
+msgstr "Cor"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint TileMap"
+msgstr "Pintar TileMap"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Duplicate"
+msgstr "Duplicar"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase TileMap"
+msgstr "Apagar TileMap"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Bucket"
+msgstr "Balde"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Pick Tile"
+msgstr "Pegar Tile"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Select"
+msgstr "Selecionar"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase Selection"
+msgstr "Apagar Seleção"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Transpose"
+msgstr "Transpor"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror X (A)"
+msgstr "Espelhar X (A)"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror Y (S)"
+msgstr "Espelhar Y (S)"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 0 degrees"
+msgstr "Rotacionar 0 degraus"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 90 degrees"
+msgstr "Rotacionar 90 degraus"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 180 degrees"
+msgstr "Rotacionar 180 degraus"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 270 degrees"
+msgstr "Rotacionar 270 degraus"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Could not find tile:"
+msgstr "Não se pôde achar tile:"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Item name or ID:"
+msgstr "Nome ou ID do item:"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from scene?"
+msgstr "Criar a partir de cena?"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from scene?"
+msgstr "Fundir a partir de cena?"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from Scene"
+msgstr "Criar a partir de Cena"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from Scene"
+msgstr "Fundir a partir de Cena"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Error"
+msgstr "Erro"
+
+#: tools/editor/project_export.cpp
+msgid "Edit Script Options"
+msgstr "Editar Opções de Script"
+
+#: tools/editor/project_export.cpp
+msgid "Please export outside the project folder!"
+msgstr "Por favor export para fora da pasta do projeto!"
+
+#: tools/editor/project_export.cpp
+msgid "Error exporting project!"
+msgstr "Erro ao exportar o projeto!"
+
+#: tools/editor/project_export.cpp
+msgid "Error writing the project PCK!"
+msgstr "Erro ao escrever o PCK do projeto!"
+
+#: tools/editor/project_export.cpp
+msgid "No exporter for platform '%s' yet."
+msgstr "Ainda não há exportador para a plataforma \"%s\"."
+
+#: tools/editor/project_export.cpp
+msgid "Include"
+msgstr "Incluir"
+
+#: tools/editor/project_export.cpp
+msgid "Change Image Group"
+msgstr "Alterar Grupo de Imagens"
+
+#: tools/editor/project_export.cpp
+msgid "Group name can't be empty!"
+msgstr "O nome do grupo não pode estar vazio!"
+
+#: tools/editor/project_export.cpp
+msgid "Invalid character in group name!"
+msgstr "Caractere inválido no nome do grupo!"
+
+#: tools/editor/project_export.cpp
+msgid "Group name already exists!"
+msgstr "O nome do grupo já existe!"
+
+#: tools/editor/project_export.cpp
+msgid "Add Image Group"
+msgstr "Adicionar Grupo de Imagens"
+
+#: tools/editor/project_export.cpp
+msgid "Delete Image Group"
+msgstr "Excluir Imagem do Grupo"
+
+#: tools/editor/project_export.cpp
+msgid "Atlas Preview"
+msgstr "Visualização do Atlas"
+
+#: tools/editor/project_export.cpp
+msgid "Project Export Settings"
+msgstr "Configurações de Exportação de Projeto"
+
+#: tools/editor/project_export.cpp
+msgid "Target"
+msgstr "Destino"
+
+#: tools/editor/project_export.cpp
+msgid "Export to Platform"
+msgstr "Exportar para Plataforma"
+
+#: tools/editor/project_export.cpp
+msgid "Resources"
+msgstr "Recursos"
+
+#: tools/editor/project_export.cpp
+msgid "Export selected resources (including dependencies)."
+msgstr "Exportar recursos selecionados (incluindo dependências)."
+
+#: tools/editor/project_export.cpp
+msgid "Export all resources in the project."
+msgstr "Exportar todos os recursos no projeto."
+
+#: tools/editor/project_export.cpp
+msgid "Export all files in the project directory."
+msgstr "Exportar todos os arquivos no diretório do projeto."
+
+#: tools/editor/project_export.cpp
+msgid "Export Mode:"
+msgstr "Modo de Exportação:"
+
+#: tools/editor/project_export.cpp
+msgid "Resources to Export:"
+msgstr "Recursos a Exportar:"
+
+#: tools/editor/project_export.cpp
+msgid "Action"
+msgstr "Ação"
+
+#: tools/editor/project_export.cpp
+msgid ""
+"Filters to export non-resource files (comma-separated, e.g.: *.json, *.txt):"
+msgstr ""
+"Filtros para exportar arquivos que não sejam recursos (separados por vírgula, "
+"e.g.: *.json, *.txt):"
+
+#: tools/editor/project_export.cpp
+msgid "Filters to exclude from export (comma-separated, e.g.: *.json, *.txt):"
+msgstr ""
+"Filtros para excluir da exportação (separados por vírgula, e.g.: *.json, *."
+"txt):"
+
+#: tools/editor/project_export.cpp
+msgid "Convert text scenes to binary on export."
+msgstr "Converter cenas em formato texto para binário ao exportar."
+
+#: tools/editor/project_export.cpp
+msgid "Images"
+msgstr "Imagens"
+
+#: tools/editor/project_export.cpp
+msgid "Keep Original"
+msgstr "Manter Original"
+
+#: tools/editor/project_export.cpp
+msgid "Compress for Disk (Lossy, WebP)"
+msgstr "Comprimir para Disco (Com perdas, WebP)"
+
+#: tools/editor/project_export.cpp
+msgid "Compress for RAM (BC/PVRTC/ETC)"
+msgstr "Comprimir para RAM (BC/PVRTC/ETC)"
+
+#: tools/editor/project_export.cpp
+msgid "Convert Images (*.png):"
+msgstr "Converter Imagens (*.png):"
+
+#: tools/editor/project_export.cpp
+msgid "Compress for Disk (Lossy) Quality:"
+msgstr "Qualidade da Compressão para Disco (com perdas):"
+
+#: tools/editor/project_export.cpp
+msgid "Shrink All Images:"
+msgstr "Encolher Todas as Imagens:"
+
+#: tools/editor/project_export.cpp
+msgid "Compress Formats:"
+msgstr "Formatos de Compressão:"
+
+#: tools/editor/project_export.cpp
+msgid "Image Groups"
+msgstr "Grupos de Imagens:"
+
+#: tools/editor/project_export.cpp
+msgid "Groups:"
+msgstr "Grupos:"
+
+#: tools/editor/project_export.cpp
+msgid "Compress Disk"
+msgstr "Comprimir para Disco"
+
+#: tools/editor/project_export.cpp
+msgid "Compress RAM"
+msgstr "Comprimir para RAM"
+
+#: tools/editor/project_export.cpp
+msgid "Compress Mode:"
+msgstr "Modo de Compressão:"
+
+#: tools/editor/project_export.cpp
+msgid "Lossy Quality:"
+msgstr "Qualidade com Perdas:"
+
+#: tools/editor/project_export.cpp
+msgid "Atlas:"
+msgstr "Atlas:"
+
+#: tools/editor/project_export.cpp
+msgid "Shrink By:"
+msgstr "Encolher por:"
+
+#: tools/editor/project_export.cpp
+msgid "Preview Atlas"
+msgstr "Prever Atlas"
+
+#: tools/editor/project_export.cpp
+msgid "Image Filter:"
+msgstr "Filtrar Imagens:"
+
+#: tools/editor/project_export.cpp
+msgid "Images:"
+msgstr "Imagens:"
+
+#: tools/editor/project_export.cpp
+msgid "Select None"
+msgstr "Remover Seleção"
+
+#: tools/editor/project_export.cpp
+msgid "Samples"
+msgstr "Amostras"
+
+#: tools/editor/project_export.cpp
+msgid "Sample Conversion Mode: (.wav files):"
+msgstr "Modo de Conversão de Amostras (arquivos .wav):"
+
+#: tools/editor/project_export.cpp
+msgid "Keep"
+msgstr "Manter"
+
+#: tools/editor/project_export.cpp
+msgid "Compress (RAM - IMA-ADPCM)"
+msgstr "Comprimir (RAM - IMA-ADPCM)"
+
+#: tools/editor/project_export.cpp
+msgid "Sampling Rate Limit (Hz):"
+msgstr "Limite da Taxa de Amostragem (Hz):"
+
+#: tools/editor/project_export.cpp
+msgid "Trim"
+msgstr "Cortar"
+
+#: tools/editor/project_export.cpp
+msgid "Trailing Silence:"
+msgstr "Silêncio no Fim:"
+
+#: tools/editor/project_export.cpp
+msgid "Script"
+msgstr "Script"
+
+#: tools/editor/project_export.cpp
+msgid "Script Export Mode:"
+msgstr "Modo de Exportação de Scripts:"
+
+#: tools/editor/project_export.cpp
+msgid "Text"
+msgstr "Texto"
+
+#: tools/editor/project_export.cpp
+msgid "Compiled"
+msgstr "Compilado"
+
+#: tools/editor/project_export.cpp
+msgid "Encrypted (Provide Key Below)"
+msgstr "Criptografado (forneça chave abaixo)"
+
+#: tools/editor/project_export.cpp
+msgid "Script Encryption Key (256-bits as hex):"
+msgstr "Chave de Criptografia dos Scripts (256-bit como hex):"
+
+#: tools/editor/project_export.cpp
+msgid "Export PCK/Zip"
+msgstr "Exportar PCK/Zip"
+
+#: tools/editor/project_export.cpp
+msgid "Export Project PCK"
+msgstr "Exportar PCK do Projeto"
+
+#: tools/editor/project_export.cpp
+msgid "Export.."
+msgstr "Exportar..."
+
+#: tools/editor/project_export.cpp
+msgid "Project Export"
+msgstr "Exportação de Projeto"
+
+#: tools/editor/project_export.cpp
+msgid "Export Preset:"
+msgstr "Preset de Exportação:"
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, the path must exist!"
+msgstr "Caminho de projeto inválido, o caminho deve existir!"
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, engine.cfg must not exist."
+msgstr "Caminho de projeto inválido, engine.cfg não deve existir!"
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, engine.cfg must exist."
+msgstr "Caminho de projeto inválido, engine.cfg deve existir."
+
+#: tools/editor/project_manager.cpp
+msgid "Imported Project"
+msgstr "Projeto Importado"
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path (changed anything?)."
+msgstr "Caminho de projeto inválido (mudou alguma coisa?)."
+
+#: tools/editor/project_manager.cpp
+msgid "Couldn't create engine.cfg in project path."
+msgstr "Não se pôde criar engine.cfg no caminho do projeto."
+
+#: tools/editor/project_manager.cpp
+msgid "Import Existing Project"
+msgstr "Importar Projeto Existente"
+
+#: tools/editor/project_manager.cpp
+msgid "Project Path (Must Exist):"
+msgstr "Caminho do Projeto (Deve Existir):"
+
+#: tools/editor/project_manager.cpp
+msgid "Project Name:"
+msgstr "Nome do Projeto:"
+
+#: tools/editor/project_manager.cpp
+msgid "Create New Project"
+msgstr "Criar Novo Projeto"
+
+#: tools/editor/project_manager.cpp
+msgid "Project Path:"
+msgstr "Caminho do Projeto:"
+
+#: tools/editor/project_manager.cpp
+msgid "Browse"
+msgstr "Navegar"
+
+#: tools/editor/project_manager.cpp
+msgid "New Game Project"
+msgstr "Novo Projeto de Jogo"
+
+#: tools/editor/project_manager.cpp
+msgid "That's a BINGO!"
+msgstr "É um BINGO!"
+
+#: tools/editor/project_manager.cpp
+msgid "Unnamed Project"
+msgstr "Projeto Sem Nome"
+
+#: tools/editor/project_manager.cpp
+msgid "Are you sure to open more than one projects?"
+msgstr "Tem certeza de que quer abrir mais de um projeto?"
+
+#: tools/editor/project_manager.cpp
+msgid "Are you sure to run more than one projects?"
+msgstr "Tem certeza de que quer rodar mais de um projeto?"
+
+#: tools/editor/project_manager.cpp
+msgid "Remove project from the list? (Folder contents will not be modified)"
+msgstr "Remover projeto da lista? (O conteúdo da pasta não será modificado)"
+
+#: tools/editor/project_manager.cpp
+msgid "Recent Projects:"
+msgstr "Projetos Recentes:"
+
+#: tools/editor/project_manager.cpp
+msgid "Run"
+msgstr "Rodar"
+
+#: tools/editor/project_manager.cpp
+msgid "Scan"
+msgstr "Escanear"
+
+#: tools/editor/project_manager.cpp
+msgid "New Project"
+msgstr "Novo Projeto"
+
+#: tools/editor/project_manager.cpp
+msgid "Exit"
+msgstr "Sair"
+
+#: tools/editor/project_settings.cpp
+msgid "Key "
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+#, fuzzy
+msgid "Joy Button"
+msgstr "Botão"
+
+#: tools/editor/project_settings.cpp
+#, fuzzy
+msgid "Joy Axis"
+msgstr "Eixo"
+
+#: tools/editor/project_settings.cpp
+#, fuzzy
+msgid "Mouse Button"
+msgstr "Botão do Mouse:"
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid action (anything goes but '/' or ':')."
+msgstr "Ação Inválida (qualquer coisa serve, exceto '/' ou ':')."
+
+#: tools/editor/project_settings.cpp
+msgid "Action '%s' already exists!"
+msgstr "A ação \"%s\" já existe!"
+
+#: tools/editor/project_settings.cpp
+msgid "Rename Input Action Event"
+msgstr "Renomear Evento Ação de Entrada"
+
+#: tools/editor/project_settings.cpp
+msgid "Add Input Action Event"
+msgstr "Adicionar Evento Ação de Entrada"
+
+#: tools/editor/project_settings.cpp
+msgid "Meta+"
+msgstr "Meta+"
+
+#: tools/editor/project_settings.cpp
+msgid "Shift+"
+msgstr "Shift+"
+
+#: tools/editor/project_settings.cpp
+msgid "Alt+"
+msgstr "Alt+"
+
+#: tools/editor/project_settings.cpp
+msgid "Control+"
+msgstr "Control+"
+
+#: tools/editor/project_settings.cpp
+msgid "Press a Key.."
+msgstr "Pressione uma Tecla..."
+
+#: tools/editor/project_settings.cpp
+msgid "Mouse Button Index:"
+msgstr "Botão do Mouse:"
+
+#: tools/editor/project_settings.cpp
+msgid "Left Button"
+msgstr "Botão Esquerdo"
+
+#: tools/editor/project_settings.cpp
+msgid "Right Button"
+msgstr "Botão Direito"
+
+#: tools/editor/project_settings.cpp
+msgid "Middle Button"
+msgstr "Botão do Meio"
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Up Button"
+msgstr "Roda para Cima"
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Down Button"
+msgstr "Roda para Baixo"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 6"
+msgstr "Botão 6"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 7"
+msgstr "Botão 7"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 8"
+msgstr "Botão 8"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 9"
+msgstr "Botão 9"
+
+#: tools/editor/project_settings.cpp
+msgid "Joystick Axis Index:"
+msgstr "Eixo do Joystick:"
+
+#: tools/editor/project_settings.cpp
+msgid "Axis"
+msgstr "Eixo"
+
+#: tools/editor/project_settings.cpp
+msgid "Joystick Button Index:"
+msgstr "Botão do Joystick:"
+
+#: tools/editor/project_settings.cpp
+msgid "Add Input Action"
+msgstr "Adicionar Ação de Entrada"
+
+#: tools/editor/project_settings.cpp
+msgid "Erase Input Action Event"
+msgstr "Apagar Evento Ação de Entrada"
+
+#: tools/editor/project_settings.cpp
+msgid "Device"
+msgstr "Dispositivo"
+
+#: tools/editor/project_settings.cpp
+msgid "Button"
+msgstr "Botão"
+
+#: tools/editor/project_settings.cpp
+msgid "Left Button."
+msgstr "Botão Esquerdo."
+
+#: tools/editor/project_settings.cpp
+msgid "Right Button."
+msgstr "Botão Direito."
+
+#: tools/editor/project_settings.cpp
+msgid "Middle Button."
+msgstr "Botão do Meio."
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Up."
+msgstr "Roda para Cima."
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Down."
+msgstr "Roda para Baixo."
+
+#: tools/editor/project_settings.cpp
+msgid "Toggle Persisting"
+msgstr "Alternar Persistência"
+
+#: tools/editor/project_settings.cpp
+msgid "Error saving settings."
+msgstr "Erro ao salvar as configurações."
+
+#: tools/editor/project_settings.cpp
+msgid "Settings saved OK."
+msgstr "Configurações Salvas."
+
+#: tools/editor/project_settings.cpp
+msgid "Add Translation"
+msgstr "Adicionar Tradução"
+
+#: tools/editor/project_settings.cpp
+msgid "Toggle AutoLoad Globals"
+msgstr "Alternar Auto Carregamentos de Globais"
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name."
+msgstr "Nome Inválido."
+
+#: tools/editor/project_settings.cpp
+msgid "Valid characters:"
+msgstr "Caracteres válidos:"
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing engine class name."
+msgstr "Nome inválido. Não é permitido utilizar nomes de classes da engine."
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing buit-in type name."
+msgstr ""
+"Nome inválido. Não é permitido utilizar nomes de tipos internos da engine."
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing global constant name."
+msgstr ""
+"Nome inválido. Não é permitido utilizar nomes de constantes globais da engine."
+
+#: tools/editor/project_settings.cpp
+msgid "Add Autoload"
+msgstr "Adicionar Autoload"
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Autoload"
+msgstr "Remover Autoload"
+
+#: tools/editor/project_settings.cpp
+msgid "Move Autoload"
+msgstr "Mover Autoload"
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Translation"
+msgstr "Remover Tradução"
+
+#: tools/editor/project_settings.cpp
+msgid "Add Remapped Path"
+msgstr "Adicionar Caminho Remapeado"
+
+#: tools/editor/project_settings.cpp
+msgid "Resource Remap Add Remap"
+msgstr "Remapeamento de Recurso Adicionar Remap"
+
+#: tools/editor/project_settings.cpp
+msgid "Change Resource Remap Language"
+msgstr "Alterar Idioma de Remapeamento de Recuso"
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Resource Remap"
+msgstr "Remover Remapeamento de Recurso"
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Resource Remap Option"
+msgstr "Remover Opção de Remapeamento de Recurso"
+
+#: tools/editor/project_settings.cpp
+msgid "Enable"
+msgstr "Habilitar"
+
+#: tools/editor/project_settings.cpp
+msgid "Project Settings (engine.cfg)"
+msgstr "Configurações do Projeto (engine.cfg)"
+
+#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp
+msgid "General"
+msgstr "Geral"
+
+#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp
+msgid "Property:"
+msgstr "Propriedade:"
+
+#: tools/editor/project_settings.cpp
+msgid "Del"
+msgstr "Del"
+
+#: tools/editor/project_settings.cpp
+msgid "Copy To Platform.."
+msgstr "Copiar para a Plataforma..."
+
+#: tools/editor/project_settings.cpp
+msgid "Input Map"
+msgstr "Mapa de Entrada"
+
+#: tools/editor/project_settings.cpp
+msgid "Action:"
+msgstr "Ação:"
+
+#: tools/editor/project_settings.cpp
+msgid "Device:"
+msgstr "Dispositivo:"
+
+#: tools/editor/project_settings.cpp
+msgid "Index:"
+msgstr "Índice:"
+
+#: tools/editor/project_settings.cpp
+msgid "Localization"
+msgstr "Localização"
+
+#: tools/editor/project_settings.cpp
+msgid "Translations"
+msgstr "Traduções"
+
+#: tools/editor/project_settings.cpp
+msgid "Translations:"
+msgstr "Traduções:"
+
+#: tools/editor/project_settings.cpp
+msgid "Add.."
+msgstr "Adicionar..."
+
+#: tools/editor/project_settings.cpp
+msgid "Remaps"
+msgstr "Remapeamentos"
+
+#: tools/editor/project_settings.cpp
+msgid "Resources:"
+msgstr "Recursos:"
+
+#: tools/editor/project_settings.cpp
+msgid "Remaps by Locale:"
+msgstr "Remapeamentos por Localidade:"
+
+#: tools/editor/project_settings.cpp
+msgid "Locale"
+msgstr "Localidade:"
+
+#: tools/editor/project_settings.cpp
+msgid "AutoLoad"
+msgstr "AutoLoad"
+
+#: tools/editor/project_settings.cpp
+msgid "Node Name:"
+msgstr "Nome do Nó:"
+
+#: tools/editor/project_settings.cpp
+msgid "List:"
+msgstr "Lista:"
+
+#: tools/editor/project_settings.cpp
+msgid "Singleton"
+msgstr "Singleton"
+
+#: tools/editor/property_editor.cpp
+msgid "Preset.."
+msgstr "Predefinição..."
+
+#: tools/editor/property_editor.cpp
+msgid "Ease In"
+msgstr "Ease In"
+
+#: tools/editor/property_editor.cpp
+msgid "Ease Out"
+msgstr "Ease Out"
+
+#: tools/editor/property_editor.cpp
+msgid "Zero"
+msgstr "Zero"
+
+#: tools/editor/property_editor.cpp
+msgid "Easing In-Out"
+msgstr "Easing In-Out"
+
+#: tools/editor/property_editor.cpp
+msgid "Easing Out-In"
+msgstr "Easing Out-In"
+
+#: tools/editor/property_editor.cpp
+msgid "File.."
+msgstr "Arquivo..."
+
+#: tools/editor/property_editor.cpp
+msgid "Dir.."
+msgstr "Dir..."
+
+#: tools/editor/property_editor.cpp
+msgid "Load"
+msgstr "Carregar"
+
+#: tools/editor/property_editor.cpp
+msgid "Assign"
+msgstr "Atribuir"
+
+#: tools/editor/property_editor.cpp
+msgid "Error loading file: Not a resource!"
+msgstr "Erro ao carregar arquivo: Não é um recurso!"
+
+#: tools/editor/property_editor.cpp
+msgid "Couldn't load image"
+msgstr "Não pôde carregar a imagem"
+
+#: tools/editor/property_editor.cpp
+msgid "Bit %d, val %d."
+msgstr "Bit %d, val %d."
+
+#: tools/editor/property_editor.cpp
+msgid "On"
+msgstr "Ativo"
+
+#: tools/editor/property_editor.cpp
+msgid "Set"
+msgstr "Definir"
+
+#: tools/editor/property_editor.cpp
+msgid "Properties:"
+msgstr "Propriedades:"
+
+#: tools/editor/property_editor.cpp
+msgid "Global"
+msgstr "Global"
+
+#: tools/editor/property_editor.cpp
+msgid "Sections:"
+msgstr "Seções:"
+
+#: tools/editor/pvrtc_compress.cpp
+msgid "Could not execute PVRTC tool:"
+msgstr "Não se pôde executar a ferramenta PVRTC:"
+
+#: tools/editor/pvrtc_compress.cpp
+msgid "Can't load back converted image using PVRTC tool:"
+msgstr "Não se pôde carregar de volta imagem convertida por PVRTC:"
+
+#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp
+msgid "Reparent Node"
+msgstr "Reparentar Nó"
+
+#: tools/editor/reparent_dialog.cpp
+msgid "Reparent Location (Select new Parent):"
+msgstr "Local para Reparentar (Selecione Novo Pai):"
+
+#: tools/editor/reparent_dialog.cpp
+msgid "Keep Global Transform"
+msgstr "Manter Transformação Global"
+
+#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp
+msgid "Reparent"
+msgstr "Reparentar"
+
+#: tools/editor/resources_dock.cpp
+msgid "Create New Resource"
+msgstr "Criar Novo Recurso"
+
+#: tools/editor/resources_dock.cpp
+msgid "Open Resource"
+msgstr "Abrir Recurso"
+
+#: tools/editor/resources_dock.cpp
+msgid "Save Resource"
+msgstr "Salvar Recurso"
+
+#: tools/editor/resources_dock.cpp
+msgid "Resource Tools"
+msgstr "Ferramentas de Recurso"
+
+#: tools/editor/resources_dock.cpp
+msgid "Make Local"
+msgstr "Tornar Local"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Run Mode:"
+msgstr "Modo de Início:"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Current Scene"
+msgstr "Cena Atual"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Main Scene"
+msgstr "Cena Principal"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Main Scene Arguments:"
+msgstr "Argumentos da Cena Principal:"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Scene Run Settings"
+msgstr "Configurações de Carregamento da Cena"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "OK :("
+msgstr "OK :("
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "No parent to instance a child at."
+msgstr "Sem nó pai onde instanciar um filho."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error loading scene from %s"
+msgstr "Erro ao carregar cena de %s"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error instancing scene from %s"
+msgstr "Erro ao instanciar cena de %s"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Ok"
+msgstr "Ok"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Cannot instance the scene '%s' because the current scene exists within one of "
+"its nodes."
+msgstr ""
+"Não se pode instanciar a cena \"%s\" porque a cena atual existe dentro de um "
+"de seus nós."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Instance Scene(s)"
+msgstr "Instanciar Cena(s)"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done on the tree root."
+msgstr "Esta operação não pode ser feita na raiz da árvore."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Node In Parent"
+msgstr "Mover Nó no Pai"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Nodes In Parent"
+msgstr "Mover Nós no Pai"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Duplicate Node(s)"
+msgstr "Duplicar Nó(s)"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete Node(s)?"
+msgstr "Excluir Nó(s)?"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done without a scene."
+msgstr "Essa operação não pode ser realizada sem uma cena."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation requires a single selected node."
+msgstr "Essa operação requer um único nó selecionado."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done on instanced scenes."
+msgstr "Essa operação não pode ser realizada em cenas instanciadas."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Save New Scene As.."
+msgstr "Salvar Nova Cena Como..."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Makes Sense!"
+msgstr "Faz Sentido!"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes from a foreign scene!"
+msgstr "Não é possível operar em nós de uma cena externa!"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes the current scene inherits from!"
+msgstr "Não é possível operar em nós que a cena atual herda!"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Remove Node(s)"
+msgstr "Remover Nó(s)"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Create Node"
+msgstr "Criar Nó"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Couldn't save new scene. Likely dependencies (instances) couldn't be "
+"satisfied."
+msgstr ""
+"Não é possível salvar a nova cena. Provavelmente dependências (instâncias) "
+"não foram satisfeitas."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error saving scene."
+msgstr "Erro ao salvar cena."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error duplicating scene to save it."
+msgstr "Erro duplicando cena ao salvar."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "New Scene Root"
+msgstr "Nova Raiz de Cena"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Inherit Scene"
+msgstr "Herdar Cena"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add Child Node"
+msgstr "Adicionar Nó Filho"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Instance Child Scene"
+msgstr "Instânciar Cena Filha"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Change Type"
+msgstr "Alterar Tipo"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Edit Groups"
+msgstr "Editar Grupos"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Edit Connections"
+msgstr "Editar Conexões"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add Script"
+msgstr "Adicionar Script"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Merge From Scene"
+msgstr "Fundir a Partir de Cena"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Save Branch as Scene"
+msgstr "Salvar Ramo como Cena"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete Node(s)"
+msgstr "Excluir Nó(s)"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add/Create a New Node"
+msgstr "Adicionar/Criar um Novo Nó"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Instance a scene file as a Node. Creates an inherited scene if no root node "
+"exists."
+msgstr ""
+"Instanciar um arquivo de cena como um Nó. Criar uma cena herdada se não "
+"existe um nó raiz."
+
+#: tools/editor/scene_tree_editor.cpp
+msgid ""
+"This item cannot be made visible because the parent is hidden. Unhide the "
+"parent first."
+msgstr ""
+"Este item não pode se tornar visível porque o pai está escondido. Reexiba o "
+"pai primeiro."
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Toggle Spatial Visible"
+msgstr "Alternar Spatial Visível"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Toggle CanvasItem Visible"
+msgstr "Alternar CanvasItem Visível"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Instance:"
+msgstr "Instância:"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Invalid node name, the following characters are not allowed:"
+msgstr "Nome de nó Inválido, os seguintes caracteres não são permitidos:"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Rename Node"
+msgstr "Renomear Nó"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Scene Tree (Nodes):"
+msgstr "Árvore de Cena (Nós):"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Editable Children"
+msgstr "Filhos Editáveis"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Load As Placeholder"
+msgstr "Carregar como Substituto"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Open in Editor"
+msgstr "Abrir no Editor"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear Inheritance"
+msgstr "Limpar Herança"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear Inheritance? (No Undo!)"
+msgstr "Limpar Herança? (Irreversível!)"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear!"
+msgstr "Limpar!"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Select a Node"
+msgstr "Selecione um Nó"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Same source and destination files, doing nothing."
+msgstr "Mesmos arquivos de destino e origem, nada a fazer."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Same source and destination paths, doing nothing."
+msgstr "Mesmo caminhos de destino e origem, nada a fazer."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Can't move directories to within themselves."
+msgstr "Não é possível mover diretórios para dentro de si mesmos."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Can't operate on '..'"
+msgstr "Não é possível operar em \"..\""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Pick New Name and Location For:"
+msgstr "Escolha Novo Nome e Localização Para:"
+
+#: tools/editor/scenes_dock.cpp
+msgid "No files selected!"
+msgstr "Nenhum arquivo selecionado!"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Instance"
+msgstr "Instanciar"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Edit Dependencies.."
+msgstr "Editar Dependências.."
+
+#: tools/editor/scenes_dock.cpp
+msgid "View Owners.."
+msgstr "Visualizar Proprietários..."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Rename or Move.."
+msgstr "Renomear ou Mover..."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Move To.."
+msgstr "Mover Para..."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Info"
+msgstr "Informação"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Show In File Manager"
+msgstr "Mostrar no Gerenciador de Arquivos"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Previous Directory"
+msgstr "Diretório Anterior"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Next Directory"
+msgstr "Próximo Diretório"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Re-Scan Filesystem"
+msgstr "Re-escanear Arquivos de Sistema"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Toggle folder status as Favorite"
+msgstr "Alternar status da pasta como Favorito"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Instance the selected scene(s) as child of the selected node."
+msgstr "Instancia a(s) cena(s) selecionada como filho do nó selecionado."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Move"
+msgstr "Mover"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid parent class name"
+msgstr "Nome de classe pai inválido"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid chars:"
+msgstr "Caracteres válidos:"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid class name"
+msgstr "Nome de classe inválido"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid name"
+msgstr "Nome Válido"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "N/A"
+msgstr "N/D"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Class name is invalid!"
+msgstr "O nome da classe é inválido!"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Parent class name is invalid!"
+msgstr "O nome da classe pai é inválido!"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid path!"
+msgstr "Caminho inválido!"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Could not create script in filesystem."
+msgstr "Não foi possível criar o script no sistema de arquivos."
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Path is empty"
+msgstr "O caminho está vazio"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Path is not local"
+msgstr "O caminho não é local"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid base path"
+msgstr "Caminho base inválido"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "File exists"
+msgstr "O arquivo existe"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid extension"
+msgstr "Extensão inválida"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid path"
+msgstr "Caminho válido"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Class Name:"
+msgstr "Nome da Classe"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Built-In Script"
+msgstr "Script Embutido"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Create Node Script"
+msgstr "Criar Script para Nó"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Bytes:"
+msgstr "Bytes:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Warning"
+msgstr "Aviso"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Error:"
+msgstr "Erro:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Source:"
+msgstr "Origem:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Function:"
+msgstr "Função:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Errors"
+msgstr "Erros"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Child Process Connected"
+msgstr "Processo Filho Conectado"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Inspect Previous Instance"
+msgstr "Inspecionar a Instância Anterior"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Inspect Next Instance"
+msgstr "Inspecionar a Próxima Instância"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Stack Frames"
+msgstr "Pilha de Quadros"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Variable"
+msgstr "Variável"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Errors:"
+msgstr "Erros:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Stack Trace (if applicable):"
+msgstr "Pilha de Rastreamento (se aplicável):"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Remote Inspector"
+msgstr "Inspetor Remoto"
+
+#: tools/editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Live Scene Tree:"
+msgstr "Árvore de Cena:"
+
+#: tools/editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Remote Object Properties: "
+msgstr "Propriedades do objeto."
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Profiler"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Monitor"
+msgstr "Monitor"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Value"
+msgstr "Valor"
+
+#: tools/editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Monitors"
+msgstr "Monitor"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "List of Video Memory Usage by Resource:"
+msgstr "Listagem de Uso Memória de Vídeo por Recurso:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Total:"
+msgstr "Total:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Video Mem"
+msgstr "Memória de Vídeo"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Resource Path"
+msgstr "Caminho do recurso"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Type"
+msgstr "Tipo"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Usage"
+msgstr "Uso"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Misc"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Clicked Control:"
+msgstr "Controle Clicado:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Clicked Control Type:"
+msgstr "Tipo de Controle Clicado:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Live Edit Root:"
+msgstr "Edição de Root em tempo real:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Set From Tree"
+msgstr "Definir a partir da árvore"
+
+#: tools/editor/settings_config_dialog.cpp
+msgid "Plugin List:"
+msgstr "Lista de Plugins:"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Light Radius"
+msgstr "Mudar Raio da Luz"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Camera FOV"
+msgstr "Mudar FOV da Câmera"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Camera Size"
+msgstr "Mudar Tamanho da Câmera"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Sphere Shape Radius"
+msgstr "Mudar Raio da Forma de Esfera"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Box Shape Extents"
+msgstr "Mudar Dimensões da Forma de Caixa"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Radius"
+msgstr "Alterar o raio do Shape Capsule"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Height"
+msgstr "Alterar a altura do Shape Capsule"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Ray Shape Length"
+msgstr "Mudar o tamanho do Shape Ray"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Notifier Extents"
+msgstr "Alterar a Extensão do Notificador"
+
+#~ msgid "Overwrite Existing Scene"
+#~ msgstr "Sobrescrever Cena Existente"
+
+#~ msgid "Overwrite Existing, Keep Materials"
+#~ msgstr "Sobrescrever Existente, Manter Materiais"
+
+#~ msgid "Keep Existing, Merge with New"
+#~ msgstr "Manter Existente, Fundir com Novo"
+
+#~ msgid "Keep Existing, Ignore New"
+#~ msgstr "Manter Existente, Ignorar Novo"
+
+#~ msgid "This Time:"
+#~ msgstr "This Time:"
+
+#~ msgid "Next Time:"
+#~ msgstr "Next Time:"
+
+#~ msgid "Move Favorite Up"
+#~ msgstr "Mover Favorito Acima"
+
+#~ msgid "Move Favorite Down"
+#~ msgstr "Mover Favorito Abaixo"
+
+#~ msgid "%d frames"
+#~ msgstr "%d quadros"
+
+#~ msgid ""
+#~ "NOTICE: You are not forced to import textures for 2D projects. Just copy "
+#~ "your .jpg or .png files to your project, and change export options later. "
+#~ "Atlases can be generated on export too."
+#~ msgstr ""
+#~ "AVISO: Você não é forçado a importar texturas para projetos 2D. Apenas "
+#~ "copie seus arquivos .jpg ou .png para o projeto e mude as opções de "
+#~ "exportação mais tarde. Também é possível gerar Atlases ao exportar."
+
+#~ msgid "Source Texture:"
+#~ msgstr "Textura de Origem:"
+
+#~ msgid "Merging.."
+#~ msgstr "Fundindo..."
diff --git a/tools/translations/ru.po b/tools/translations/ru.po
new file mode 100644
index 0000000000..eeafe6333c
--- /dev/null
+++ b/tools/translations/ru.po
@@ -0,0 +1,5966 @@
+# LANGUAGE translation of the Godot Engine editor
+# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community
+# This file is distributed under the same license as the Godot source code.
+# DimOkGamer dimokgamer@gmail.com , 2016
+# Maxim toby3d Lebedev mail@toby3d.ru , 2016
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Godot Engine editor\n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: \n"
+"Last-Translator: DimOkGamer <dimokgamer@gmail.com>\n"
+"Language-Team: Russian\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.8\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: scene/2d/animated_sprite.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the 'Frames' property in "
+"order for AnimatedSprite to display frames."
+msgstr ""
+"Чтобы AnimatedSprite отображал кадры, пожалуйста установите или создайте "
+"ресурс SpriteFrames в параметре 'Frames'"
+
+#: scene/2d/canvas_modulate.cpp
+msgid ""
+"Only one visible CanvasModulate is allowed per scene (or set of instanced "
+"scenes). The first created one will work, while the rest will be ignored."
+msgstr ""
+"Только один видимый CanvasModulate на сцену (или совокупность приведённых "
+"сцен). Будет работать первый созданный, остальные будут проигнорированы."
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid ""
+"CollisionPolygon2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+"CollisionPolygon2D служит только для обеспечения столкновений фигурам типа "
+"CollisionObject2D. Пожалуйста использовать его только в качестве дочернего "
+"для Area2D, StaticBody2D, RigidBody2D, KinematicBody2D и др. чтобы придать им "
+"форму."
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid "An empty CollisionPolygon2D has no effect on collision."
+msgstr "Пустой CollisionPolygon2D не влияет на столкновения."
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"CollisionShape2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+"CollisionShape2D служит только для обеспечения столкновений фигурам типа "
+"CollisionObject2D. Пожалуйста использовать его только в качестве дочернего "
+"для Area2D, StaticBody2D, RigidBody2D, KinematicBody2D и др. чтобы придать им "
+"форму."
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"A shape must be provided for CollisionShape2D to function. Please create a "
+"shape resource for it!"
+msgstr ""
+"Шэйп должен быть предусмотрен для функций CollisionShape2D. Пожалуйста, "
+"создайте шэйп- ресурс для этого!"
+
+#: scene/2d/light_2d.cpp
+msgid ""
+"A texture with the shape of the light must be supplied to the 'texture' "
+"property."
+msgstr ""
+"Текстуры с формой света должна быть предоставлена параметру \"texture\"."
+
+#: scene/2d/light_occluder_2d.cpp
+msgid ""
+"An occluder polygon must be set (or drawn) for this occluder to take effect."
+msgstr ""
+"Заслоняющий полигон должен быть установлен (или нарисован) на этот окклюдер, "
+"чтобы работать."
+
+#: scene/2d/light_occluder_2d.cpp
+msgid "The occluder polygon for this occluder is empty. Please draw a polygon!"
+msgstr ""
+"Заслоняющий полигон для этого окклюдера пуст. Пожалуйста, нарисуйте полигон!"
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"A NavigationPolygon resource must be set or created for this node to work. "
+"Please set a property or draw a polygon."
+msgstr ""
+"Ресурс NavigationPolygon должен быть установлен или создан для этого нода. "
+"Пожалуйста, установите свойство или нарисуйте многоугольник."
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
+"node. It only provides navigation data."
+msgstr ""
+"NavigationPolygonInstance должен быть ребёнком или внуком нода Navigation2D. "
+"Он обеспечивает только навигационные данные."
+
+#: scene/2d/parallax_layer.cpp
+msgid ""
+"ParallaxLayer node only works when set as child of a ParallaxBackground node."
+msgstr ""
+"Нод ParallaxLayer работает только при установке его в качестве дочернего узла "
+"ParallaxBackground."
+
+#: scene/2d/particles_2d.cpp
+msgid "Path property must point to a valid Particles2D node to work."
+msgstr ""
+"Свойство Path должен указывать на действительный нод Particles2D для работы."
+
+#: scene/2d/path_2d.cpp
+msgid "PathFollow2D only works when set as a child of a Path2D node."
+msgstr ""
+"PathFollow2D работает только при установке его в качестве дочернего узла "
+"Path2D."
+
+#: scene/2d/remote_transform_2d.cpp
+msgid "Path property must point to a valid Node2D node to work."
+msgstr "Свойство Path должен указывать на действительный нод Node2D для работы."
+
+#: scene/2d/sample_player_2d.cpp scene/audio/sample_player.cpp
+msgid ""
+"A SampleLibrary resource must be created or set in the 'samples' property in "
+"order for SamplePlayer to play sound."
+msgstr ""
+"Чтобы SamplePlayer воспроизводил звук, нужно создать или установить ресурс "
+"SampleLibrary в параметре 'samples'."
+
+#: scene/2d/sprite.cpp
+msgid ""
+"Path property must point to a valid Viewport node to work. Such Viewport must "
+"be set to 'render target' mode."
+msgstr ""
+"Для работы, параметр Path должен указывать на действительный Нод Viewport. "
+"Такой Viewport должен быть установлен в качестве цели рендеринга."
+
+#: scene/2d/sprite.cpp
+msgid ""
+"The Viewport set in the path property must be set as 'render target' in order "
+"for this sprite to work."
+msgstr ""
+"Области просмотра установленная в свойстве path должна быть назначена \"целью "
+"визуализации\" для того, чтобы этот спрайт работал."
+
+#: scene/2d/visibility_notifier_2d.cpp
+msgid ""
+"VisibilityEnable2D works best when used with the edited scene root directly "
+"as parent."
+msgstr ""
+"VisibilityEnable2D работает лучше, когда используется, как дочерний нод корня."
+
+#: scene/3d/body_shape.cpp
+msgid ""
+"CollisionShape only serves to provide a collision shape to a CollisionObject "
+"derived node. Please only use it as a child of Area, StaticBody, RigidBody, "
+"KinematicBody, etc. to give them a shape."
+msgstr ""
+"CollisionShape служит только для обеспечения столкновений фигурам типа "
+"CollisionObject. Пожалуйста использовать его только в качестве дочернего для "
+"Area, StaticBody, RigidBody, KinematicBody и др. чтобы придать им форму."
+
+#: scene/3d/body_shape.cpp
+msgid ""
+"A shape must be provided for CollisionShape to function. Please create a "
+"shape resource for it!"
+msgstr ""
+"Шэйп должен быть предусмотрен для функций CollisionShape. Пожалуйста, "
+"создайте шэйп-ресурс для этого!"
+
+#: scene/3d/collision_polygon.cpp
+msgid ""
+"CollisionPolygon only serves to provide a collision shape to a "
+"CollisionObject derived node. Please only use it as a child of Area, "
+"StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
+msgstr ""
+"CollisionPolygon служит только для обеспечения столкновений фигурам типа "
+"CollisionObject. Пожалуйста использовать его только в качестве дочернего для "
+"Area, StaticBody, RigidBody, KinematicBody и др. чтобы придать им форму."
+
+#: scene/3d/collision_polygon.cpp
+msgid "An empty CollisionPolygon has no effect on collision."
+msgstr "Пустой CollisionPolygon не влияет на столкновения."
+
+#: scene/3d/navigation_mesh.cpp
+msgid "A NavigationMesh resource must be set or created for this node to work."
+msgstr "Ресурс NavigationMesh должен быть установлен или создан для этого нода."
+
+#: scene/3d/navigation_mesh.cpp
+msgid ""
+"NavigationMeshInstance must be a child or grandchild to a Navigation node. It "
+"only provides navigation data."
+msgstr ""
+"NavigationMeshInstance должен быть ребёнком или внуком нода Navigation. Он "
+"обеспечивает только навигационные данные."
+
+#: scene/3d/scenario_fx.cpp
+msgid ""
+"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)."
+msgstr ""
+"Только один WorldEnvironment допускается на сцену или совокупность "
+"приведённых сцен."
+
+#: scene/3d/spatial_sample_player.cpp
+msgid ""
+"A SampleLibrary resource must be created or set in the 'samples' property in "
+"order for SpatialSamplePlayer to play sound."
+msgstr ""
+"Чтобы SpatialSamplePlayer воспроизводил звук, нужно создать или установить "
+"ресурс SampleLibrary в параметре 'samples'."
+
+#: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Cancel"
+msgstr "Отмена"
+
+#: scene/gui/dialogs.cpp
+msgid "OK"
+msgstr "Ок"
+
+#: scene/gui/dialogs.cpp
+msgid "Alert!"
+msgstr "Тревога!"
+
+#: scene/gui/dialogs.cpp
+msgid "Please Confirm..."
+msgstr "Подтверждение..."
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Cut"
+msgstr "Вырезать"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp
+msgid "Copy"
+msgstr "Копировать"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp
+msgid "Paste"
+msgstr "Вставить"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp tools/editor/project_export.cpp
+msgid "Select All"
+msgstr "Выбрать все"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_log.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/rich_text_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/script_editor_debugger.cpp
+msgid "Clear"
+msgstr "Очистить"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Undo"
+msgstr "Отменить"
+
+#: scene/gui/popup.cpp
+msgid ""
+"Popups will hide by default unless you call popup() or any of the popup*() "
+"functions. Making them visible for editing is fine though, but they will hide "
+"upon running."
+msgstr ""
+"Всплывающие окна будут скрываться по-умолчанию, если Вы не вызовете popup() "
+"или любой из popup*(). Делая их доступными для редактирования хорошая мысль, "
+"хотя они будут прятаться при запуске."
+
+#: scene/main/viewport.cpp
+msgid ""
+"This viewport is not set as render target. If you intend for it to display "
+"its contents directly to the screen, make it a child of a Control so it can "
+"obtain a size. Otherwise, make it a RenderTarget and assign its internal "
+"texture to some node for display."
+msgstr ""
+"Эта область не установлена в качестве цели рендеринга. Если вы собираетесь "
+"использовать его, чтобы отобразить его содержимое прямо на экране, сделать "
+"его потомком Control'а, чтобы он мог получить размер. В противном случае, "
+"сделайте его целью рендеринга и передайте его внутренние текстуры какому-то "
+"другому Ноду для отображения."
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Error initializing FreeType."
+msgstr "Ошибка инициализации FreeType."
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Unknown font format."
+msgstr "Неизвестный формат шрифта."
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Error loading font."
+msgstr "Ошибка загрузки шрифта."
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Invalid font size."
+msgstr "Недопустимый размер шрифта."
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/call_dialog.cpp
+#: tools/editor/connections_dialog.cpp tools/editor/groups_editor.cpp
+#: tools/editor/import_settings.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp
+#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp
+msgid "Close"
+msgstr "Закрыть"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/create_dialog.cpp
+#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/settings_config_dialog.cpp
+msgid "Search:"
+msgstr "Поиск:"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/code_editor.cpp
+#: tools/editor/editor_help.cpp tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/project_settings.cpp
+msgid "Search"
+msgstr "Поиск"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/editor_node.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Import"
+msgstr "Импорт"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/project_settings.cpp
+#: tools/editor/settings_config_dialog.cpp
+msgid "Plugins"
+msgstr "Плагины"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Sort:"
+msgstr "Сортировать:"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Reverse"
+msgstr "Обратный"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/project_settings.cpp
+msgid "Category:"
+msgstr "Категория:"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "All"
+msgstr "Все"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Site:"
+msgstr "Сайт:"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Assets ZIP File"
+msgstr "ZIP файл ассетов"
+
+#: tools/editor/animation_editor.cpp
+msgid "Disabled"
+msgstr "Отключить"
+
+#: tools/editor/animation_editor.cpp
+msgid "All Selection"
+msgstr "Все выбранные элементы"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Add Key"
+msgstr "Подвинут ключ"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Transition"
+msgstr "Изменён переход анимации"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Transform"
+msgstr "Изменено преобразование анимации"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Value"
+msgstr "Изменено значение анимации"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Call"
+msgstr "Изменён вызов анимации"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Track"
+msgstr "Добавлен новый трек"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Anim Track Up"
+msgstr "Трек передвинут вверх"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Anim Track Down"
+msgstr "Трек передвинут вниз"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove Anim Track"
+msgstr "Трек удалён"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Duplicate Keys"
+msgstr "Дублированы ключи анимации"
+
+#: tools/editor/animation_editor.cpp
+msgid "Set Transitions to:"
+msgstr "Установлен переход на:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Rename"
+msgstr "Трэк переименован"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Change Interpolation"
+msgstr "Изменена интреполяция"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Change Value Mode"
+msgstr "Изменён режим значений"
+
+#: tools/editor/animation_editor.cpp
+msgid "Edit Node Curve"
+msgstr "Кривая изменена"
+
+#: tools/editor/animation_editor.cpp
+msgid "Edit Selection Curve"
+msgstr "Выбор кривой изменён"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Delete Keys"
+msgstr "Ключ удалён"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Key"
+msgstr "Ключ добавлен"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Move Keys"
+msgstr "Ключ передвинут"
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale Selection"
+msgstr "Масштаб выбранного промежутка"
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale From Cursor"
+msgstr "Масштаб относительно курсора"
+
+#: tools/editor/animation_editor.cpp
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Duplicate Selection"
+msgstr "Дублировать выделенное"
+
+#: tools/editor/animation_editor.cpp
+msgid "Duplicate Transposed"
+msgstr "Дублировать перемещённый"
+
+#: tools/editor/animation_editor.cpp
+msgid "Goto Next Step"
+msgstr "Перейти к следующему шагу"
+
+#: tools/editor/animation_editor.cpp
+msgid "Goto Prev Step"
+msgstr "Перейти к предыдущему шагу"
+
+#: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp
+msgid "Linear"
+msgstr "Линейный"
+
+#: tools/editor/animation_editor.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Constant"
+msgstr "Постоянный"
+
+#: tools/editor/animation_editor.cpp
+msgid "In"
+msgstr "В"
+
+#: tools/editor/animation_editor.cpp
+msgid "Out"
+msgstr "Из"
+
+#: tools/editor/animation_editor.cpp
+msgid "In-Out"
+msgstr "В-Из"
+
+#: tools/editor/animation_editor.cpp
+msgid "Out-In"
+msgstr "Из-В"
+
+#: tools/editor/animation_editor.cpp
+msgid "Transitions"
+msgstr "Переходы"
+
+#: tools/editor/animation_editor.cpp
+msgid "Optimize Animation"
+msgstr "Оптимизировать анимацию"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up Animation"
+msgstr "Подчистить анимацию"
+
+#: tools/editor/animation_editor.cpp
+msgid "Create NEW track for %s and insert key?"
+msgstr "Создать новую дорожку для %s и вставить ключ?"
+
+#: tools/editor/animation_editor.cpp
+msgid "Create %d NEW tracks and insert keys?"
+msgstr "Создать %d новые дорожки и вставить ключи?"
+
+#: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/particles_editor_plugin.cpp
+#: tools/editor/project_manager.cpp tools/editor/script_create_dialog.cpp
+msgid "Create"
+msgstr "Создать"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Create & Insert"
+msgstr "Анимация создать и вставить"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert Track & Key"
+msgstr "Анимация вставка дорожки и ключа"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert Key"
+msgstr "Вставка ключа анимации"
+
+#: tools/editor/animation_editor.cpp
+msgid "Change Anim Len"
+msgstr "Изменена длинна анимации"
+
+#: tools/editor/animation_editor.cpp
+msgid "Change Anim Loop"
+msgstr "Изменено зацикливание анимации"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Create Typed Value Key"
+msgstr "Создан ключ с вводимым значением"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert"
+msgstr "Вставка на анимацию"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Scale Keys"
+msgstr "Масштабирование ключей анимации"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Call Track"
+msgstr "Добавлен ключ вызова в анимацию"
+
+#: tools/editor/animation_editor.cpp
+msgid "Animation zoom."
+msgstr "Масштаб анимации."
+
+#: tools/editor/animation_editor.cpp
+msgid "Length (s):"
+msgstr "Длинна (сек.):"
+
+#: tools/editor/animation_editor.cpp
+msgid "Animation length (in seconds)."
+msgstr "Длинна анимации (в секундах)."
+
+#: tools/editor/animation_editor.cpp
+msgid "Step (s):"
+msgstr "Шаг (сек.):"
+
+#: tools/editor/animation_editor.cpp
+msgid "Cursor step snap (in seconds)."
+msgstr "Шаг привязки курсора (в секундах)."
+
+#: tools/editor/animation_editor.cpp
+msgid "Enable/Disable looping in animation."
+msgstr "Включить/отключить зацикливание в анимации."
+
+#: tools/editor/animation_editor.cpp
+msgid "Add new tracks."
+msgstr "Добавить новые дорожки."
+
+#: tools/editor/animation_editor.cpp
+msgid "Move current track up."
+msgstr "Подвинуть текущую дорожку вверх."
+
+#: tools/editor/animation_editor.cpp
+msgid "Move current track down."
+msgstr "Подвинуть текущую дорожку вниз."
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove selected track."
+msgstr "Удалить текущую дорожку."
+
+#: tools/editor/animation_editor.cpp
+msgid "Track tools"
+msgstr "Инструменты дорожек"
+
+#: tools/editor/animation_editor.cpp
+msgid "Enable editing of individual keys by clicking them."
+msgstr "Включить индивидуальное редактирование ключей, кликая по ним."
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim. Optimizer"
+msgstr "Оптимизатор анимации."
+
+#: tools/editor/animation_editor.cpp
+msgid "Max. Linear Error:"
+msgstr "Макс. Линейные погрешности:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Max. Angular Error:"
+msgstr "Макс. Угловые погрешности:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Max Optimizable Angle:"
+msgstr "Максимальный оптимизируемы угол:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Optimize"
+msgstr "Оптимизировать"
+
+#: tools/editor/animation_editor.cpp
+msgid "Key"
+msgstr "Ключ"
+
+#: tools/editor/animation_editor.cpp
+msgid "Transition"
+msgstr "Переход"
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale Ratio:"
+msgstr "Коэффициент масштабирования:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Call Functions in Which Node?"
+msgstr "Вызвать функцию в каком ноде?"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove invalid keys"
+msgstr "Удалить недопустимые ключи"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove unresolved and empty tracks"
+msgstr "Удалить не разрешенные и пустые дорожки"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-up all animations"
+msgstr "Подчистить все анимации"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up Animation(s) (NO UNDO!)"
+msgstr "Подчистить анимацию(и) (Нельзя отменить!)"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up"
+msgstr "Подчистить"
+
+#: tools/editor/array_property_edit.cpp
+msgid "Resize Array"
+msgstr "Изменить размер Массива"
+
+#: tools/editor/array_property_edit.cpp
+msgid "Change Array Value Type"
+msgstr "Изменение типа значения массива"
+
+#: tools/editor/array_property_edit.cpp
+msgid "Change Array Value"
+msgstr "Изменить значение массива"
+
+#: tools/editor/call_dialog.cpp
+msgid "Method List For '%s':"
+msgstr "Список способ для '%s':"
+
+#: tools/editor/call_dialog.cpp
+msgid "Call"
+msgstr "Вызов"
+
+#: tools/editor/call_dialog.cpp
+msgid "Method List:"
+msgstr "Список методов:"
+
+#: tools/editor/call_dialog.cpp
+msgid "Arguments:"
+msgstr "Аргументы:"
+
+#: tools/editor/call_dialog.cpp
+msgid "Return:"
+msgstr "Возвращение:"
+
+#: tools/editor/code_editor.cpp
+msgid "Go to Line"
+msgstr "Перейти к строке"
+
+#: tools/editor/code_editor.cpp
+msgid "Line Number:"
+msgstr "Номер строки:"
+
+#: tools/editor/code_editor.cpp
+msgid "No Matches"
+msgstr "Нет совпадений"
+
+#: tools/editor/code_editor.cpp
+msgid "Replaced %d Ocurrence(s)."
+msgstr "Заменено %d совпадений."
+
+#: tools/editor/code_editor.cpp
+msgid "Replace"
+msgstr "Заменить"
+
+#: tools/editor/code_editor.cpp
+msgid "Replace All"
+msgstr "Заменить всё"
+
+#: tools/editor/code_editor.cpp
+msgid "Match Case"
+msgstr "Учитывать регистр"
+
+#: tools/editor/code_editor.cpp
+msgid "Whole Words"
+msgstr "Целые слова"
+
+#: tools/editor/code_editor.cpp
+msgid "Selection Only"
+msgstr "Только выделять"
+
+#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp
+msgid "Find"
+msgstr "Найти"
+
+#: tools/editor/code_editor.cpp
+msgid "Next"
+msgstr "Следующий"
+
+#: tools/editor/code_editor.cpp
+msgid "Replaced %d ocurrence(s)."
+msgstr "Заменено %d совпадений."
+
+#: tools/editor/code_editor.cpp
+msgid "Not found!"
+msgstr "Не найдено!"
+
+#: tools/editor/code_editor.cpp
+msgid "Replace By"
+msgstr "Заменить чем"
+
+#: tools/editor/code_editor.cpp
+msgid "Case Sensitive"
+msgstr "Чувствительность регистра"
+
+#: tools/editor/code_editor.cpp
+msgid "Backwards"
+msgstr "В обратном направлении"
+
+#: tools/editor/code_editor.cpp
+msgid "Prompt On Replace"
+msgstr "Подтверждение замены"
+
+#: tools/editor/code_editor.cpp
+msgid "Skip"
+msgstr "Пропустить"
+
+#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp
+msgid "Line:"
+msgstr "Стр:"
+
+#: tools/editor/code_editor.cpp
+msgid "Col:"
+msgstr "Стлб:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Method in target Node must be specified!"
+msgstr "Метод должен быть указан в целевом Ноде!"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect To Node:"
+msgstr "Присоединить к ноду:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Binds (Extra Params):"
+msgstr "Связи (необязательные параметры):"
+
+#: tools/editor/connections_dialog.cpp tools/editor/groups_editor.cpp
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/project_settings.cpp
+msgid "Add"
+msgstr "Добавить"
+
+#: tools/editor/connections_dialog.cpp tools/editor/dependency_editor.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp tools/editor/project_manager.cpp
+msgid "Remove"
+msgstr "Удалить"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Path To Node:"
+msgstr "Путь к ноду:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Method In Node:"
+msgstr "Название метода:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Make Function"
+msgstr "Сделать функцию"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Deferred"
+msgstr "Отложенное"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Oneshot"
+msgstr "Один раз"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect"
+msgstr "Присоединить"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect '%s' to '%s'"
+msgstr "Присоединить '%s' к '%s'"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Create Subscription"
+msgstr "Создать подписку"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect.."
+msgstr "Присоединить.."
+
+#: tools/editor/connections_dialog.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Disconnect"
+msgstr "Отсоединить"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Edit Connections.."
+msgstr "Изменить связи.."
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connections:"
+msgstr "Связи:"
+
+#: tools/editor/create_dialog.cpp
+msgid "Create New"
+msgstr "Создать новый"
+
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+msgid "Matches:"
+msgstr "Совпадения:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Search Replacement For:"
+msgstr "Поиск замены для:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies For:"
+msgstr "Зависимости для:"
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"Scene '%s' is currently being edited.\n"
+"Changes will not take effect unless reloaded."
+msgstr ""
+"Сцена '%s' в настоящее время редактируется.\n"
+"Изменения вступят в силу, после перезагрузки."
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"Resource '%s' is in use.\n"
+"Changes will take effect when reloaded."
+msgstr ""
+"Ресурсу '% s' используется.\n"
+"Изменения вступят в силу после перезагрузки."
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies"
+msgstr "Зависимости"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Resource"
+msgstr "Ресурс"
+
+#: tools/editor/dependency_editor.cpp tools/editor/project_manager.cpp
+#: tools/editor/project_settings.cpp
+msgid "Path"
+msgstr "Путь"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies:"
+msgstr "Зависимости:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Fix Broken"
+msgstr "Исправить ошибку"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependency Editor"
+msgstr "Редактор зависимостей"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Search Replacement Resource:"
+msgstr "Найти заменяемый ресурс:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Owners Of:"
+msgstr "Владельцы:"
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"The files being removed are required by other resources in order for them to "
+"work.\n"
+"Remove them anyway? (no undo)"
+msgstr ""
+"Удаляемый файл требуется для правильной работы других ресурсов.\n"
+"Всё равно удалить его? (Нельзя отменить!)"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Remove selected files from the project? (no undo)"
+msgstr "Удалить выбранный файл из проекта? (Нельзя отменить!)"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Error loading:"
+msgstr "Ошибка при загрузке:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Scene failed to load due to missing dependencies:"
+msgstr "Не удалось загрузить сцену из-за отсутствия зависимостей:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Open Anyway"
+msgstr "Всё равно открыть"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Which action should be taken?"
+msgstr "Какое действие следует выполнить?"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Fix Dependencies"
+msgstr "Исправить зависимости"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Errors loading!"
+msgstr "Ошибки загрузки!"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Permanently delete %d item(s)? (No undo!)"
+msgstr "Навсегда удалить %d элемент(ов)? (Нельзя отменить!)"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Owns"
+msgstr "Кол-во"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Resources Without Explicit Ownership:"
+msgstr "Ресурсы без явного владения:"
+
+#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
+msgid "Orphan Resource Explorer"
+msgstr "Обзор подключённых ресурсов"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Delete selected files?"
+msgstr "Удалить выбранные файлы?"
+
+#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/item_list_editor_plugin.cpp tools/editor/scenes_dock.cpp
+msgid "Delete"
+msgstr "Удалить"
+
+#: tools/editor/editor_data.cpp
+msgid "Updating Scene"
+msgstr "Обновление сцены"
+
+#: tools/editor/editor_data.cpp
+msgid "Storing local changes.."
+msgstr "Сохранение локальных изменений.."
+
+#: tools/editor/editor_data.cpp
+msgid "Updating scene.."
+msgstr "Обновление сцены.."
+
+#: tools/editor/editor_dir_dialog.cpp
+msgid "Choose a Directory"
+msgstr "Выбрать каталог"
+
+#: tools/editor/editor_dir_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Create Folder"
+msgstr "Создать папку"
+
+#: tools/editor/editor_dir_dialog.cpp tools/editor/editor_file_dialog.cpp
+#: tools/editor/editor_plugin_settings.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Name:"
+msgstr "Имя:"
+
+#: tools/editor/editor_dir_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Could not create folder."
+msgstr "Невозможно создать папку."
+
+#: tools/editor/editor_dir_dialog.cpp
+msgid "Choose"
+msgstr "Выбрать"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "File Exists, Overwrite?"
+msgstr "Файл существует, перезаписать?"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "All Recognized"
+msgstr "Все разрешённые"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "All Files (*)"
+msgstr "Все файлы (*)"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/quick_open.cpp tools/editor/scenes_dock.cpp
+msgid "Open"
+msgstr "Открыть"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save"
+msgstr "Сохранить"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Save a File"
+msgstr "Сохранить файл"
+
+#: tools/editor/editor_file_dialog.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/script_create_dialog.cpp
+msgid "Path:"
+msgstr "Путь:"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/scenes_dock.cpp
+msgid "Favorites:"
+msgstr "Избранное:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Recent:"
+msgstr "Недавнее:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Directories & Files:"
+msgstr "Каталоги и файлы:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Preview:"
+msgstr "Предпросмотр:"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/script_editor_debugger.cpp
+msgid "File:"
+msgstr "Файл:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Filter:"
+msgstr "Фильтр:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Must use a valid extension."
+msgstr "Нужно использовать доступное расширение."
+
+#: tools/editor/editor_file_system.cpp
+msgid "Cannot go into subdir:"
+msgstr "Невозможно перейти в подпапку:"
+
+#: tools/editor/editor_file_system.cpp
+msgid "ScanSources"
+msgstr "Просканировать исходники"
+
+#: tools/editor/editor_help.cpp
+msgid "Search Classes"
+msgstr "Поиск классов"
+
+#: tools/editor/editor_help.cpp
+msgid "Class List:"
+msgstr "Список классов:"
+
+#: tools/editor/editor_help.cpp tools/editor/property_editor.cpp
+msgid "Class:"
+msgstr "Класс:"
+
+#: tools/editor/editor_help.cpp tools/editor/scene_tree_editor.cpp
+#: tools/editor/script_create_dialog.cpp
+msgid "Inherits:"
+msgstr "Наследует:"
+
+#: tools/editor/editor_help.cpp
+msgid "Inherited by:"
+msgstr "Унаследован:"
+
+#: tools/editor/editor_help.cpp
+msgid "Brief Description:"
+msgstr "Краткое описание:"
+
+#: tools/editor/editor_help.cpp
+msgid "Public Methods:"
+msgstr "Список методов:"
+
+#: tools/editor/editor_help.cpp
+msgid "Members:"
+msgstr "Участники:"
+
+#: tools/editor/editor_help.cpp
+msgid "GUI Theme Items:"
+msgstr "Тема элементов GUI:"
+
+#: tools/editor/editor_help.cpp
+msgid "Signals:"
+msgstr "Сигналы:"
+
+#: tools/editor/editor_help.cpp
+msgid "Constants:"
+msgstr "Константы:"
+
+#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "Описание:"
+
+#: tools/editor/editor_help.cpp
+msgid "Method Description:"
+msgstr "Описание методов:"
+
+#: tools/editor/editor_help.cpp
+msgid "Search Text"
+msgstr "Искать текст:"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Added:"
+msgstr "Добавлено:"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Removed:"
+msgstr "Удалено:"
+
+#: tools/editor/editor_import_export.cpp tools/editor/project_export.cpp
+msgid "Error saving atlas:"
+msgstr "Ошибка сохранения атласа:"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Could not save atlas subtexture:"
+msgstr "Невозможно сохранить текстуру атласа:"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Storing File:"
+msgstr "Сохранение файла:"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Packing"
+msgstr "Упаковывание"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Exporting for %s"
+msgstr "Экспортирование для %s"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Setting Up.."
+msgstr "Настройка.."
+
+#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
+msgid "Re-Importing"
+msgstr "Переимпортировать"
+
+#: tools/editor/editor_node.cpp
+msgid "Importing:"
+msgstr "Импортируется:"
+
+#: tools/editor/editor_node.cpp
+msgid "Node From Scene"
+msgstr "Нод со сцены"
+
+#: tools/editor/editor_node.cpp tools/editor/scenes_dock.cpp
+msgid "Re-Import.."
+msgstr "Переимпортировать.."
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/resources_dock.cpp
+msgid "Error saving resource!"
+msgstr "Ошибка при сохранении ресурса!"
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/resources_dock.cpp
+msgid "Save Resource As.."
+msgstr "Сохранить ресурс как.."
+
+#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
+msgid "I see.."
+msgstr "Понимаю.."
+
+#: tools/editor/editor_node.cpp
+msgid "Can't open file for writing:"
+msgstr "Невозможно открыть файл для записи:"
+
+#: tools/editor/editor_node.cpp
+msgid "Requested file format unknown:"
+msgstr "Неизвестный формат запрашиваемого файла:"
+
+#: tools/editor/editor_node.cpp
+msgid "Error while saving."
+msgstr "Ошибка при сохранении."
+
+#: tools/editor/editor_node.cpp
+msgid "Saving Scene"
+msgstr "Сохранение сцены"
+
+#: tools/editor/editor_node.cpp
+msgid "Analyzing"
+msgstr "Анализ"
+
+#: tools/editor/editor_node.cpp
+msgid "Creating Thumbnail"
+msgstr "Создание эскизов"
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied."
+msgstr ""
+"Не возможно сохранить сцену. Вероятно, зависимости (экземпляры) не могли быть "
+"удовлетворены."
+
+#: tools/editor/editor_node.cpp
+msgid "Failed to load resource."
+msgstr "Не удалось загрузить ресурс."
+
+#: tools/editor/editor_node.cpp
+msgid "Can't load MeshLibrary for merging!"
+msgstr "Невозможно загрузить библиотеку полисеток для слияния!"
+
+#: tools/editor/editor_node.cpp
+msgid "Error saving MeshLibrary!"
+msgstr "Ошибка сохранения библиотеки полисеток!"
+
+#: tools/editor/editor_node.cpp
+msgid "Can't load TileSet for merging!"
+msgstr "Невозможно загрузить набор тайлов для слияния!"
+
+#: tools/editor/editor_node.cpp
+msgid "Error saving TileSet!"
+msgstr "Ошибка сохранения набора тайлов!"
+
+#: tools/editor/editor_node.cpp
+msgid "Can't open export templates zip."
+msgstr "Не удаётся открыть архив шаблонов экспорта."
+
+#: tools/editor/editor_node.cpp
+msgid "Loading Export Templates"
+msgstr "Загрузка шаблонов экспорта"
+
+#: tools/editor/editor_node.cpp
+msgid "Error trying to save layout!"
+msgstr "Ошибка при попытке сохранить макет!"
+
+#: tools/editor/editor_node.cpp
+msgid "Default editor layout overridden."
+msgstr "Переопределить макет по-умолчанию."
+
+#: tools/editor/editor_node.cpp
+msgid "Layout name not found!"
+msgstr "Название макета не найдено!"
+
+#: tools/editor/editor_node.cpp
+msgid "Restored default layout to base settings."
+msgstr "Вернуть макет по-умолчанию к стандартному."
+
+#: tools/editor/editor_node.cpp
+msgid "Copy Params"
+msgstr "Копировать параметры"
+
+#: tools/editor/editor_node.cpp
+msgid "Set Params"
+msgstr "Назначить параметры"
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Paste Resource"
+msgstr "Вставить параметры"
+
+#: tools/editor/editor_node.cpp
+msgid "Copy Resource"
+msgstr "Копировать параметры"
+
+#: tools/editor/editor_node.cpp
+msgid "Make Built-In"
+msgstr "Сделать встроенным"
+
+#: tools/editor/editor_node.cpp
+msgid "Make Sub-Resources Unique"
+msgstr "Сделать вложенные ресурсы уникальными"
+
+#: tools/editor/editor_node.cpp
+msgid "There is no defined scene to run."
+msgstr "Нет определённой сцены, чтобы работать."
+
+#: tools/editor/editor_node.cpp
+msgid "Current scene was never saved, please save it prior to running."
+msgstr "Текущая сцена никогда не была сохранена, сохраните его до выполнения."
+
+#: tools/editor/editor_node.cpp
+msgid "Could not start subprocess!"
+msgstr "Не удаётся запустить подпроцесс!"
+
+#: tools/editor/editor_node.cpp
+msgid "Open Scene"
+msgstr "Открыть сцену"
+
+#: tools/editor/editor_node.cpp
+msgid "Open Base Scene"
+msgstr "Открыть основную сцену"
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Open Scene.."
+msgstr "Быстро открыть сцену.."
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Open Script.."
+msgstr "Быстро открыть скрипт.."
+
+#: tools/editor/editor_node.cpp
+msgid "Yes"
+msgstr "Да"
+
+#: tools/editor/editor_node.cpp
+msgid "Close scene? (Unsaved changes will be lost)"
+msgstr "Закрыть сцену? (Несохранённые изменения будут потеряны.)"
+
+#: tools/editor/editor_node.cpp
+msgid "Save Scene As.."
+msgstr "Сохранить сцену как.."
+
+#: tools/editor/editor_node.cpp
+msgid "This scene has never been saved. Save before running?"
+msgstr "Эта сцена никогда не была сохранена. Сохранить перед запуском?"
+
+#: tools/editor/editor_node.cpp
+msgid "Please save the scene first."
+msgstr "Пожалуйста сначала сохраните сцену."
+
+#: tools/editor/editor_node.cpp
+msgid "Save Translatable Strings"
+msgstr "Сохранить переводимые строки"
+
+#: tools/editor/editor_node.cpp
+msgid "Export Mesh Library"
+msgstr "Экспортировать библиотеку полисеток"
+
+#: tools/editor/editor_node.cpp
+msgid "Export Tile Set"
+msgstr "Экспортировать набор тайлов"
+
+#: tools/editor/editor_node.cpp
+msgid "Quit"
+msgstr "Выйти"
+
+#: tools/editor/editor_node.cpp
+msgid "Exit the editor?"
+msgstr "Выйти из редактора?"
+
+#: tools/editor/editor_node.cpp
+msgid "Current scene not saved. Open anyway?"
+msgstr "Текущая сцена не сохранена. Открыть в любом случае?"
+
+#: tools/editor/editor_node.cpp
+msgid "Can't reload a scene that was never saved."
+msgstr "Не возможно загрузить сцену, которая не была сохранена."
+
+#: tools/editor/editor_node.cpp
+msgid "Revert"
+msgstr "Откатить"
+
+#: tools/editor/editor_node.cpp
+msgid "This action cannot be undone. Revert anyway?"
+msgstr "Это действие нельзя отменить. Восстановить в любом случае?"
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Run Scene.."
+msgstr "Быстро запустить сцену.."
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Open Project Manager? \n"
+"(Unsaved changes will be lost)"
+msgstr ""
+"Открыть менеджер проектов? \n"
+"(Несохранённые изменения будут потеряны.)"
+
+#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
+msgid "Ugh"
+msgstr "Ясно"
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Error loading scene, it must be inside the project path. Use 'Import' to open "
+"the scene, then save it inside the project path."
+msgstr ""
+"Ошибка при загрузке сцены, она должна быть внутри каталога проекта. "
+"Используйте \"Импорт\", чтобы открыть сцену, а затем сохраните её в каталоге "
+"проекта."
+
+#: tools/editor/editor_node.cpp
+msgid "Error loading scene."
+msgstr "Ошибка загрузки сцены."
+
+#: tools/editor/editor_node.cpp
+msgid "Scene '%s' has broken dependencies:"
+msgstr "Сцена '%s' имеет испорченные зависимости:"
+
+#: tools/editor/editor_node.cpp
+msgid "Save Layout"
+msgstr "Сохранить макет"
+
+#: tools/editor/editor_node.cpp
+msgid "Delete Layout"
+msgstr "Удалить макет"
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Default"
+msgstr "По-умолчанию"
+
+#: tools/editor/editor_node.cpp
+msgid "Switch Scene Tab"
+msgstr "Смена вкладки со сценой"
+
+#: tools/editor/editor_node.cpp
+msgid "%d more file(s)"
+msgstr "Ещё %d файла(ов)"
+
+#: tools/editor/editor_node.cpp
+msgid "%d more file(s) or folder(s)"
+msgstr "Ещё %d файла(ов) или папка(ок)"
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Scene"
+msgstr "Сцена"
+
+#: tools/editor/editor_node.cpp
+msgid "Go to previously opened scene."
+msgstr "Перейти к предыдущей открытой сцене."
+
+#: tools/editor/editor_node.cpp
+msgid "Operations with scene files."
+msgstr "Операции с файлами сцены."
+
+#: tools/editor/editor_node.cpp
+msgid "New Scene"
+msgstr "Новая сцена"
+
+#: tools/editor/editor_node.cpp
+msgid "New Inherited Scene.."
+msgstr "Новая унаследованная Сцена.."
+
+#: tools/editor/editor_node.cpp
+msgid "Open Scene.."
+msgstr "Открыть сцену.."
+
+#: tools/editor/editor_node.cpp
+msgid "Save Scene"
+msgstr "Сохранить сцену"
+
+#: tools/editor/editor_node.cpp
+msgid "Close Scene"
+msgstr "Закрыть сцену"
+
+#: tools/editor/editor_node.cpp
+msgid "Close Goto Prev. Scene"
+msgstr "Закрыть и перейти к предыдущей сцене"
+
+#: tools/editor/editor_node.cpp
+msgid "Open Recent"
+msgstr "Открыть последнее"
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Search File.."
+msgstr "Быстрый поиск файлов.."
+
+#: tools/editor/editor_node.cpp
+msgid "Convert To.."
+msgstr "Конвертировать в.."
+
+#: tools/editor/editor_node.cpp
+msgid "Translatable Strings.."
+msgstr "Переводимые строки.."
+
+#: tools/editor/editor_node.cpp
+msgid "MeshLibrary.."
+msgstr "Библиотека полисеток.."
+
+#: tools/editor/editor_node.cpp
+msgid "TileSet.."
+msgstr "Набор тайлов.."
+
+#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Redo"
+msgstr "Повторить"
+
+#: tools/editor/editor_node.cpp
+msgid "Run Script"
+msgstr "Запустить скрипт"
+
+#: tools/editor/editor_node.cpp
+msgid "Project Settings"
+msgstr "Параметры проекта"
+
+#: tools/editor/editor_node.cpp
+msgid "Revert Scene"
+msgstr "Восстановить сцену"
+
+#: tools/editor/editor_node.cpp
+msgid "Quit to Project List"
+msgstr "Выйти в список проектов"
+
+#: tools/editor/editor_node.cpp
+msgid "Import assets to the project."
+msgstr "Импортировать ассеты в проект."
+
+#: tools/editor/editor_node.cpp
+msgid "Miscellaneous project or scene-wide tools."
+msgstr "Прочие инструменты."
+
+#: tools/editor/editor_node.cpp
+msgid "Tools"
+msgstr "Инструменты"
+
+#: tools/editor/editor_node.cpp
+msgid "Export the project to many platforms."
+msgstr "Экспортировать проект на многие платформы."
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Export"
+msgstr "Экспорт"
+
+#: tools/editor/editor_node.cpp
+msgid "Play the project (F5)."
+msgstr "Запустить проект (F5)."
+
+#: tools/editor/editor_node.cpp
+msgid "Pause the scene"
+msgstr "Приостановить сцену"
+
+#: tools/editor/editor_node.cpp
+msgid "Stop the scene (F8)."
+msgstr "Остановить проект (F8)."
+
+#: tools/editor/editor_node.cpp
+msgid "Play the edited scene (F6)."
+msgstr "Запустить текущую сцену (F6)."
+
+#: tools/editor/editor_node.cpp
+msgid "Play custom scene"
+msgstr "Запустить выборочную сцену"
+
+#: tools/editor/editor_node.cpp
+msgid "Debug options"
+msgstr "Параметры отладки"
+
+#: tools/editor/editor_node.cpp
+msgid "Live Editing"
+msgstr "Редактирование в реальном времени"
+
+#: tools/editor/editor_node.cpp
+msgid "File Server"
+msgstr "Файловый сервер"
+
+#: tools/editor/editor_node.cpp
+msgid "Deploy Remote Debug"
+msgstr "Развернуть удалённую отладку"
+
+#: tools/editor/editor_node.cpp
+msgid "Deploy File Server Clients"
+msgstr "Развернуть файловый сервер для клиентов"
+
+#: tools/editor/editor_node.cpp
+msgid "Visible Collision Shapes"
+msgstr "Видимые области соприкосновения"
+
+#: tools/editor/editor_node.cpp
+msgid "Visible Navigation"
+msgstr "Видимые области навигации"
+
+#: tools/editor/editor_node.cpp
+msgid "Reload Scripts"
+msgstr "Перезагрузить скрипты"
+
+#: tools/editor/editor_node.cpp tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Settings"
+msgstr "Настройки"
+
+#: tools/editor/editor_node.cpp tools/editor/settings_config_dialog.cpp
+msgid "Editor Settings"
+msgstr "Настройки редактора"
+
+#: tools/editor/editor_node.cpp
+msgid "Editor Layout"
+msgstr "Макет редактора"
+
+#: tools/editor/editor_node.cpp
+msgid "Install Export Templates"
+msgstr "Установить шаблоны экспорта"
+
+#: tools/editor/editor_node.cpp
+msgid "About"
+msgstr "О движке"
+
+#: tools/editor/editor_node.cpp
+msgid "Alerts when an external resource has changed."
+msgstr "Оповещения, когда внешний ресурс был изменён."
+
+#: tools/editor/editor_node.cpp
+msgid "Spins when the editor window repaints!"
+msgstr "Вращается, когда окно редактора перерисовывается!"
+
+#: tools/editor/editor_node.cpp
+msgid "Update Always"
+msgstr "Обновлять всегда"
+
+#: tools/editor/editor_node.cpp
+msgid "Update Changes"
+msgstr "Обновлять при изменениях"
+
+#: tools/editor/editor_node.cpp
+msgid "Inspector"
+msgstr "Инспектор"
+
+#: tools/editor/editor_node.cpp
+msgid "Create a new resource in memory and edit it."
+msgstr "Создать новый ресурс в памяти, и редактировать его."
+
+#: tools/editor/editor_node.cpp
+msgid "Load an existing resource from disk and edit it."
+msgstr "Загрузить существующий ресурс с диска и редактировать его."
+
+#: tools/editor/editor_node.cpp
+msgid "Save the currently edited resource."
+msgstr "Сохранить текущий редактируемый ресурс."
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save As.."
+msgstr "Сохранить как.."
+
+#: tools/editor/editor_node.cpp
+msgid "Go to the previous edited object in history."
+msgstr "Перейти к предыдущему редактируемому объекту в истории."
+
+#: tools/editor/editor_node.cpp
+msgid "Go to the next edited object in history."
+msgstr "Перейти к следующему редактируемому объекту в истории."
+
+#: tools/editor/editor_node.cpp
+msgid "History of recently edited objects."
+msgstr "История последних отредактированных объектов."
+
+#: tools/editor/editor_node.cpp
+msgid "Object properties."
+msgstr "Свойства объекта."
+
+#: tools/editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "Файловая система"
+
+#: tools/editor/editor_node.cpp
+msgid "Output"
+msgstr "Вывод"
+
+#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
+#: tools/editor/import_settings.cpp
+msgid "Re-Import"
+msgstr "Импортировать снова"
+
+#: tools/editor/editor_node.cpp tools/editor/editor_plugin_settings.cpp
+msgid "Update"
+msgstr "Обновление"
+
+#: tools/editor/editor_node.cpp
+msgid "Thanks from the Godot community!"
+msgstr "Спасибо от сообщества Godot!"
+
+#: tools/editor/editor_node.cpp
+msgid "Thanks!"
+msgstr "Спасибо!"
+
+#: tools/editor/editor_node.cpp
+msgid "Import Templates From ZIP File"
+msgstr "Импортировать шаблоны из ZIP файла"
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Export Project"
+msgstr "Экспортировать проект"
+
+#: tools/editor/editor_node.cpp
+msgid "Export Library"
+msgstr "Экспортировать библиотеку"
+
+#: tools/editor/editor_node.cpp
+msgid "Merge With Existing"
+msgstr "Объединить с существующей"
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Password:"
+msgstr "Пароль:"
+
+#: tools/editor/editor_node.cpp
+msgid "Open & Run a Script"
+msgstr "Открыть и запустить скрипт"
+
+#: tools/editor/editor_node.cpp
+msgid "Load Errors"
+msgstr "Ошибки загрузки"
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Installed Plugins:"
+msgstr "Установленные плагины:"
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr "Версия:"
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Author:"
+msgstr "Автор:"
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Status:"
+msgstr "Статус:"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Stop Profiling"
+msgstr "Остановить профилирование"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Start Profiling"
+msgstr "Запустить профилирование"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Measure:"
+msgstr "Единица измерения:"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame Time (sec)"
+msgstr "Время кадра (сек.)"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Average Time (sec)"
+msgstr "Среднее время (сек.)"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame %"
+msgstr "Кадр %"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Fixed Frame %"
+msgstr "Фиксированный кадр %"
+
+#: tools/editor/editor_profiler.cpp tools/editor/script_editor_debugger.cpp
+msgid "Time:"
+msgstr "Время:"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Inclusive"
+msgstr "Включительно"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Self"
+msgstr "Сущность"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame #:"
+msgstr "Кадр #:"
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Please wait for scan to complete."
+msgstr "Пожалуйста дождитесь окончания сканирования."
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Current scene must be saved to re-import."
+msgstr "Текущая сцена должна быть сохранена для повторного импорта."
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Save & Re-Import"
+msgstr "Сохранить и переимпортировать"
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Re-Import Changed Resources"
+msgstr "Переимпортировать изменённые ресурсы"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Write your logic in the _run() method."
+msgstr "Пишите ваш код в методе _run()."
+
+#: tools/editor/editor_run_script.cpp
+msgid "There is an edited scene already."
+msgstr "Уже существует отредактированная сцена."
+
+#: tools/editor/editor_run_script.cpp
+msgid "Couldn't instance script:"
+msgstr "Скрипт не соответствует требованиям:"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Did you forget the 'tool' keyword?"
+msgstr "Быть может вы забыли слово \"tool\" в начале?"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Couldn't run script:"
+msgstr "Невозможно запустить скрипт:"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Did you forget the '_run' method?"
+msgstr "Быть может вы забыли метод _run()?"
+
+#: tools/editor/editor_settings.cpp
+msgid "Default (Same as Editor)"
+msgstr "По-умолчанию (как редактор)"
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Select Node(s) to Import"
+msgstr "Выберите нод(ы) для импорта"
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Scene Path:"
+msgstr "Путь к сцене:"
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Import From Node:"
+msgstr "Импортировать из нода:"
+
+#: tools/editor/file_type_cache.cpp
+msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
+msgstr ""
+"Невозможно открыть file_type_cache.cch для записи. Не будет сохранён кэш "
+"типов файлов!"
+
+#: tools/editor/groups_editor.cpp
+msgid "Add to Group"
+msgstr "Добавить в группу"
+
+#: tools/editor/groups_editor.cpp
+msgid "Remove from Group"
+msgstr "Удалить из группы"
+
+#: tools/editor/groups_editor.cpp
+msgid "Group Editor"
+msgstr "Редактор групп"
+
+#: tools/editor/groups_editor.cpp tools/editor/project_export.cpp
+msgid "Group"
+msgstr "Группа"
+
+#: tools/editor/groups_editor.cpp
+msgid "Node Group(s)"
+msgstr "Группа(ы) нода"
+
+#: tools/editor/import_settings.cpp
+msgid "Imported Resources"
+msgstr "Импортированные ресурсы"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "No source font file!"
+msgstr "Нет исходного файл шрифта!"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "No target font resource!"
+msgstr "Нет целевого ресурса шрифта!"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Can't load/process source font."
+msgstr "Не удалось загрузить/исполнить исходный шрифт."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Couldn't save font."
+msgstr "Невозможно сохранить шрифт."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Source Font:"
+msgstr "Исходный шрифт:"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Source Font Size:"
+msgstr "Исходный размер шрифта:"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Dest Resource:"
+msgstr "Ресурс назначения:"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "The quick brown fox jumps over the lazy dog."
+msgstr ""
+"Съешь ещё этих мягких французских булок да выпей чаю. \n"
+"The quick brown fox jumps over the lazy dog.\n"
+"0123456789`!@#$%^&*()_+-=\\/"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Test:"
+msgstr "Проверка:"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Options:"
+msgstr "Параметры:"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Font Import"
+msgstr "Импортирование шрифта"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Accept"
+msgstr "Принять"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid ""
+"This file is already a Godot font file, please supply a BMFont type file "
+"instead."
+msgstr ""
+"Это уже файл шрифта Godot, пожалуйста используйте BitMapFont за место него."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Failed opening as BMFont file."
+msgstr "Ошибка открытия BitMapFont файла."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Invalid font custom source."
+msgstr "Недопустимый шрифт пользовательского источника."
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Font"
+msgstr "Шрифт"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "No meshes to import!"
+msgstr "Нет полисетки для импортирования!"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Save path is empty!"
+msgstr "Путь сохранения пуст!"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Single Mesh Import"
+msgstr "Импорт одиночной полисетки"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Source Mesh(es):"
+msgstr "Исходная полисетка(и):"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Target Path:"
+msgstr "Целевой путь:"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Mesh"
+msgstr "Полисетка"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Surface %d"
+msgstr "Поверхностей %d"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "No samples to import!"
+msgstr "Нет сэмплов для импорта!"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path is empty."
+msgstr "Конечный путь пуст."
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path must be a complete resource path."
+msgstr "Конечный путь должен быть полным путём к ресурсу."
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path must exist."
+msgstr "Конечный путь должен существовать."
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Import Audio Samples"
+msgstr "Импорт аудио сэмплов"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Source Sample(s):"
+msgstr "Исходный сэмпл(ы):"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Audio Sample"
+msgstr "Аудио сэмпл"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "New Clip"
+msgstr "Новый клип"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Animation Options"
+msgstr "Параметры анимации"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Flags"
+msgstr "Флаги"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Bake FPS:"
+msgstr "FPS:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Optimizer"
+msgstr "Оптимизатор"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Linear Error"
+msgstr "Макс. линейная погрешность"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Angular Error"
+msgstr "Макс. угловая погрешность"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Angle"
+msgstr "Макс. угол"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Clips"
+msgstr "Клипы"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/project_manager.cpp tools/editor/project_settings.cpp
+msgid "Name"
+msgstr "Имя"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Start(s)"
+msgstr "Нач(с.)"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "End(s)"
+msgstr "Кон(с.)"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Loop"
+msgstr "Зациклить"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Filters"
+msgstr "Фильтры"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Source path is empty."
+msgstr "Путь к источнику пуст."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't load post-import script."
+msgstr "Не могу загрузить скрипт пост-процесса."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Invalid/broken script for post-import."
+msgstr "Поврежденный/сломанный сценарий для пост-импорта."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Error importing scene."
+msgstr "Ошибка импортирования сцены."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import 3D Scene"
+msgstr "Импорт 3D сцены"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Source Scene:"
+msgstr "Исходная сцена:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Same as Target Scene"
+msgstr "Та же, что и у сцены"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Shared"
+msgstr "Раздельно"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Target Texture Folder:"
+msgstr "Целевая папка текстуры:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Post-Process Script:"
+msgstr "Скрипт пост-процесса:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Custom Root Node Type:"
+msgstr "Настраиваемый тип корневого нода:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Auto"
+msgstr "Авто"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "The Following Files are Missing:"
+msgstr "Отсутствуют следующие файлы:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import Anyway"
+msgstr "Импорт в любом случае"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import & Open"
+msgstr "Импортировать и Открыть"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Edited scene has not been saved, open imported scene anyway?"
+msgstr ""
+"Редактируемая сцена не была сохранена, открыть импортированную сцену в любом "
+"случае?"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import Scene"
+msgstr "Импортировать сцену"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Importing Scene.."
+msgstr "Импортирование сцены.."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Running Custom Script.."
+msgstr "Запуск пользовательского скрипта.."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't load post-import script:"
+msgstr "Не могу загрузить скрипт для пост-импорта:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Invalid/broken script for post-import:"
+msgstr "Повреждённый/сломанный скрипт для пост-импорта:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Error running post-import script:"
+msgstr "Ошибка запуска пост-импорт скрипта:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import Image:"
+msgstr "Импорт изображения:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Can't import a file over itself:"
+msgstr "Невозможно импортировать файл поверх негоже:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't localize path: %s (already local)"
+msgstr "Невозможно локализовать путь: %s (уже локальный)"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Saving.."
+msgstr "Сохранение.."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "3D Scene Animation"
+msgstr "Анимация 3D сцены"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Uncompressed"
+msgstr "Несжатый"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress Lossless (PNG)"
+msgstr "Сжатие без потери качества (PNG)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress Lossy (WebP)"
+msgstr "Сжатие с потерями (WebP)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress (VRAM)"
+msgstr "Сжатие (VRAM)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Format"
+msgstr "Формат текстуры"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Compression Quality (WebP):"
+msgstr "Качество сжатия текстур (WebP):"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Options"
+msgstr "Параметры текстуры"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Please specify some files!"
+msgstr "Пожалуйста, укажите некоторые файлы!"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "At least one file needed for Atlas."
+msgstr "Для атласа нужен хотя бы 1 файл."
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Error importing:"
+msgstr "Ошибка импортирования:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Only one file is required for large texture."
+msgstr "Только один файл необходим для большой текстуры."
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Max Texture Size:"
+msgstr "Максимальный размер текстуры:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for Atlas (2D)"
+msgstr "Импортировать текстуры для атласа (2D)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Cell Size:"
+msgstr "Размер ячейки:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Large Texture"
+msgstr "Большая текстура"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Large Textures (2D)"
+msgstr "Импорт больших текстур (2D)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture"
+msgstr "Исходная текстура"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Base Atlas Texture"
+msgstr "Базовая текстура атласа"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture(s)"
+msgstr "Исходная текстура(ы)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for 2D"
+msgstr "Импорт текстур для 2D"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for 3D"
+msgstr "Импорт текстур для 3D"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures"
+msgstr "Импорт текстур"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "2D Texture"
+msgstr "2D текстура"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "3D Texture"
+msgstr "3D текстура"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Atlas Texture"
+msgstr "Текстура атласа"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid ""
+"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to "
+"the project."
+msgstr ""
+"ВНИМАНИЕ: Импортирование 2D текстур не обязательно. Просто скопируйте png/jpg "
+"файлы в папку проекта."
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture(s):"
+msgstr "Исходные текстура(ы):"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Crop empty space."
+msgstr "Обрезать пустое пространство."
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture"
+msgstr "Текстура"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Large Texture"
+msgstr "Импорт большой текстуры"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Load Source Image"
+msgstr "Загрузка исходного изображения"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Slicing"
+msgstr "Нарезка"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Inserting"
+msgstr "Вставка"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Saving"
+msgstr "Сохранение"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save large texture:"
+msgstr "Невозможно сохранить большую текстуру:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Build Atlas For:"
+msgstr "Построение атласа для:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Loading Image:"
+msgstr "Загрузка изображения:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't load image:"
+msgstr "Невозможно загрузить изображение:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Converting Images"
+msgstr "Преобразование изображений"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Cropping Images"
+msgstr "Обрезка изображений"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Blitting Images"
+msgstr "Блитирование Изображений"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save atlas image:"
+msgstr "Невозможно сохранить изображение атласа:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save converted texture:"
+msgstr "Невозможно сохранить конвертированную текстуру:"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Invalid source!"
+msgstr "Неверный источник!"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Invalid translation source!"
+msgstr "Неверный источник перевода!"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Column"
+msgstr "Колонка"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#: tools/editor/script_create_dialog.cpp
+msgid "Language"
+msgstr "Язык"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "No items to import!"
+msgstr "Нет элементов для импорта!"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "No target path!"
+msgstr "Нет конечного пути!"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Translations"
+msgstr "Импорт переводов"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Couldn't import!"
+msgstr "Не удалось импортировать!"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Translation"
+msgstr "Импортирование перевода"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Source CSV:"
+msgstr "Исходный CSV:"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Ignore First Row"
+msgstr "Игнорировать первую строку"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Compress"
+msgstr "Сжимать"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Add to Project (engine.cfg)"
+msgstr "Добавить в проект (engine.cfg)"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Languages:"
+msgstr "Импортировать языки:"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Translation"
+msgstr "Перевод"
+
+#: tools/editor/multi_node_edit.cpp
+msgid "MultiNode Set"
+msgstr "Мульти нодовый набор"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Toggle Autoplay"
+msgstr "Переключено автовоспроизведение"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Animation Name:"
+msgstr "Новое имя анимации:"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Anim"
+msgstr "Новая анимация"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Animation Name:"
+msgstr "Изменить имя анимации:"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Remove Animation"
+msgstr "Удалить анимацию"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Invalid animation name!"
+msgstr "ОШИБКА: Недопустимое название анимации!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Animation name already exists!"
+msgstr "ОШИБКА: Такое название анимации уже существует!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Переименовать анимацию"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Animation"
+msgstr "Добавить анимацию"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Next Changed"
+msgstr "изменена последующая анимация"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Blend Time"
+msgstr "Изменено время \"смешивания\""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load Animation"
+msgstr "Загрузить анимацию"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Дублировать анимацию"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to copy!"
+msgstr "ОШИБКА: Нет анимации для копирования!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation resource on clipboard!"
+msgstr "ОШИБКА: Нет анимации в буфере обмена!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Pasted Animation"
+msgstr "Вставленная анимация"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Paste Animation"
+msgstr "Вставить анимацию"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to edit!"
+msgstr "ОШИБКА: Нет анимации для редактирования!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from current pos. (A)"
+msgstr ""
+"Воспроизвести выбранную анимацию в обратном направлении с текущей позиции. (A)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from end. (Shift+A)"
+msgstr ""
+"Воспроизвести выбранную анимацию в обратном направлении с конца. (Shift+A)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Stop animation playback. (S)"
+msgstr "Остановить воспроизведение анимации. (S)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from start. (Shift+D)"
+msgstr "Воспроизвести выбранную анимацию сначала. (Shift+D)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from current pos. (D)"
+msgstr "Воспроизвести выбранную анимацию с текущей позиции. (D)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation position (in seconds)."
+msgstr "Текущий кадр анимации (в секундах)."
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Scale animation playback globally for the node."
+msgstr "Скорость воспроизведения анимации."
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create new animation in player."
+msgstr "Создать новую анимацию."
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load an animation from disk."
+msgstr "Загрузить анимацию с диска."
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save the current animation"
+msgstr "Сохранить текущую анимацию."
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Display list of animations in player."
+msgstr "Показать список анимаций."
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Autoplay on Load"
+msgstr "Автовоспроизведение"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Edit Target Blend Times"
+msgstr "Редактировать время \"смешивания\""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Tools"
+msgstr "Инструменты анимации"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Copy Animation"
+msgstr "Копировать анимацию"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Создать новую анимацию"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Name:"
+msgstr "Название анимации:"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/script_create_dialog.cpp
+msgid "Error!"
+msgstr "Ошибка!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Times:"
+msgstr "Время смешивания:"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Next (Auto Queue):"
+msgstr "Следующая анимация (автоматический переход):"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Cross-Animation Blend Times"
+msgstr "Межанимационный инструмент смешивания"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation"
+msgstr "Анимация"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "New name:"
+msgstr "Новое имя:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Scale:"
+msgstr "Масштаб:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade In (s):"
+msgstr "Проявление (сек.):"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade Out (s):"
+msgstr "Исчезновение (сек.):"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend"
+msgstr "Смешивание"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix"
+msgstr "Сочетание"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Auto Restart:"
+msgstr "Авто перезапуск:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Restart (s):"
+msgstr "Перезапуск (сек.):"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Random Restart (s):"
+msgstr "Случайность рестарта (сек.):"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Start!"
+msgstr "Запуск!"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Amount:"
+msgstr "Величина:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend:"
+msgstr "Смешивание:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 0:"
+msgstr "Смешивание 0:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 1:"
+msgstr "Смешивание 1:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "X-Fade Time (s):"
+msgstr "Время X-Fade (сек.):"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Current:"
+msgstr "Выбранный:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Add Input"
+msgstr "Добавить вход"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Clear Auto-Advance"
+msgstr "Автоматическая очистка"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Set Auto-Advance"
+msgstr "Автоматическая установка"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Delete Input"
+msgstr "Удалить вход"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Rename"
+msgstr "Переименовать"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is valid."
+msgstr "Дерево анимации действительно."
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is invalid."
+msgstr "Дерево анимации не действительно."
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation Node"
+msgstr "Animation Node"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "OneShot Node"
+msgstr "OneShot Node"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix Node"
+msgstr "Mix Node"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend2 Node"
+msgstr "Blend2 Node"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend3 Node"
+msgstr "Blend3 Node"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend4 Node"
+msgstr "Blend4 Node"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeScale Node"
+msgstr "TimeScale Node"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeSeek Node"
+msgstr "TimeSeek Node"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Transition Node"
+msgstr "Transition Node"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Import Animations.."
+msgstr "Импортировать анимации.."
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Edit Node Filters"
+msgstr "Редактировать фильтры нода"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Filters.."
+msgstr "Фильтры.."
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Parsing %d Triangles:"
+msgstr "Парсинг %d треугольников:"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Triangle #"
+msgstr "Треугольник #"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Light Baker Setup:"
+msgstr "Параметры запекания света:"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Parsing Geometry"
+msgstr "Парсинг геометрии"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Fixing Lights"
+msgstr "Исправление света"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Making BVH"
+msgstr "Создание BVH"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Creating Light Octree"
+msgstr "Создание октодерева света"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Creating Octree Texture"
+msgstr "Создание текстуры октодерева"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Transfer to Lightmaps:"
+msgstr "Передача в карты освещения:"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Allocating Texture #"
+msgstr "Выделение текстуры #"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Baking Triangle #"
+msgstr "Запекание треугольников #"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Post-Processing Texture #"
+msgstr "Пост-обработка текстуры #"
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "BakedLightInstance does not contain a BakedLight resource."
+msgstr "BakedLightInstance не содержит BakedLight ресурс."
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "Bake!"
+msgstr "Запечь!"
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "Reset the lightmap octree baking process (start over)."
+msgstr "Сброс запекания света (начать сначала)."
+
+#: tools/editor/plugins/camera_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Preview"
+msgstr "Предпросмотр"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Configure Snap"
+msgstr "Настроить привязку"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid Offset:"
+msgstr "Отступ сетку:"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid Step:"
+msgstr "Шаг сетки:"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Offset:"
+msgstr "Отступ поворота:"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Step:"
+msgstr "Шаг поворота:"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Pivot"
+msgstr "Переместить точку вращения"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Action"
+msgstr "Переместить действие"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit IK Chain"
+msgstr "Редактировать цепь ИК"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit CanvasItem"
+msgstr "Редактировать CanvasItem"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors"
+msgstr "Изменить привязку"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom (%):"
+msgstr "Масштаб (%):"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Paste Pose"
+msgstr "Вставить позу"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Select Mode (Q)"
+msgstr "Режим выделения (Q)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Drag: Rotate"
+msgstr "Тащить: Поворот"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+Drag: Move"
+msgstr "Alt+Тащить: Перемещение"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)."
+msgstr ""
+"Нажмите 'V' чтобы изменить точку вращения, 'Shift+V' чтобы перемещать точку "
+"вращения."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+RMB: Depth list selection"
+msgstr "Alt+ПКМ: Список выбора глубины"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Move Mode (W)"
+msgstr "Режим перемещения (W)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Mode (E)"
+msgstr "Режим поворота (E)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid ""
+"Show a list of all objects at the position clicked\n"
+"(same as Alt+RMB in select mode)."
+msgstr ""
+"Показывает список всех объектов нажатой позиции,\n"
+"так же как и Alt+ПКМ в режиме выделения."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Click to change object's rotation pivot."
+msgstr "При клике изменяет точку вращения объекта."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Pan Mode"
+msgstr "Режим осмотра"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Lock the selected object in place (can't be moved)."
+msgstr "Зафиксировать выбранный объект."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Unlock the selected object (can be moved)."
+msgstr "Разблокировать выбранный объект."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Makes sure the object's children are not selectable."
+msgstr "Делает потомков объекта невыбираемыми."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Restores the object's children's ability to be selected."
+msgstr "Восстанавливает возможность выбора потомков объекта."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Edit"
+msgstr "Редактировать"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Snap"
+msgstr "Использовать привязку"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Show Grid"
+msgstr "Показать сетку"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Rotation Snap"
+msgstr "Использовать привязку вращения"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap Relative"
+msgstr "Относительная привязка"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Configure Snap.."
+msgstr "Настроить привязку.."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Pixel Snap"
+msgstr "Использовать попиксельную привязку"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Expand to Parent"
+msgstr "Растянуть до размера родителей"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Skeleton.."
+msgstr "Скелет.."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make Bones"
+msgstr "Создать кости"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Bones"
+msgstr "Очистить кости"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make IK Chain"
+msgstr "Создать цепь ИК"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear IK Chain"
+msgstr "Очистить цепь ИК"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View"
+msgstr "Обзор"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom In"
+msgstr "Приблизить"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Out"
+msgstr "Отдалить"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Reset"
+msgstr "Сбросить масштаб"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Set.."
+msgstr "Установить масштаб.."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center Selection"
+msgstr "Центрировать на выбранном"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Frame Selection"
+msgstr "Кадрировать выбранное"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Anchor"
+msgstr "Привязка"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Keys (Ins)"
+msgstr "Вставить ключи (Ins)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key"
+msgstr "Вставить ключ"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key (Existing Tracks)"
+msgstr "Вставить ключ (существующие треки)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Copy Pose"
+msgstr "Копировать позу"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Pose"
+msgstr "Очистить позу"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Set a Value"
+msgstr "Установить значение"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap (Pixels):"
+msgstr "Привязка (пиксели):"
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create Poly"
+msgstr "Создан полигон"
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Edit Poly"
+msgstr "Изменён полигон"
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Edit Poly (Remove Point)"
+msgstr "Удалена точка полигона"
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr "Создать новый полигон с нуля."
+
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+msgid "Create Poly3D"
+msgstr "Создан Poly3D"
+
+#: tools/editor/plugins/collision_shape_2d_editor_plugin.cpp
+msgid "Set Handle"
+msgstr "Установить обработчик"
+
+#: tools/editor/plugins/color_ramp_editor_plugin.cpp
+msgid "Add/Remove Color Ramp Point"
+msgstr "Добавить/Удалить точку Color Ramp"
+
+#: tools/editor/plugins/color_ramp_editor_plugin.cpp
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Color Ramp"
+msgstr "Изменена Color Ramp"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Creating Mesh Library"
+msgstr "Создание библиотеки полисеток"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Thumbnail.."
+msgstr "Миниатюра.."
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove item %d?"
+msgstr "Удалить элемент %d?"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Add Item"
+msgstr "Добавить элемент"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove Selected Item"
+msgstr "Удалить выбранный элемент"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import from Scene"
+msgstr "Импортировать из сцены"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Update from Scene"
+msgstr "Обновить из сцены"
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Item %d"
+msgstr "Элемент %d"
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Items"
+msgstr "Элементы"
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Item List Editor"
+msgstr "Редактор списка элементов"
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Occluder Polygon"
+msgstr "Создан затеняющий полигон"
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Edit existing polygon:"
+msgstr "Редактировать существующий полигон:"
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "LMB: Move Point."
+msgstr "ЛКМ: Передвинуть точку."
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Ctrl+LMB: Split Segment."
+msgstr "Ctrl+ЛКМ: Разделить сегмент."
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "RMB: Erase Point."
+msgstr "ПКМ: Удалить точку."
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh is empty!"
+msgstr "Полисетка пуста!"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Trimesh Body"
+msgstr "Создано вогнутое статичное тело"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Convex Body"
+msgstr "Создано выпуклое статичное тело"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "This doesn't work on scene root!"
+msgstr "Это не работает на корне сцены!"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Shape"
+msgstr "Создана вогнутая форма"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Shape"
+msgstr "Создана выгнутая форма"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Navigation Mesh"
+msgstr "Создать полисетку навигации"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "MeshInstance lacks a Mesh!"
+msgstr "В MeshInstance нет полисетки!"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Could not create outline!"
+msgstr "Невозможно создать контур!"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline"
+msgstr "Создать контур"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Static Body"
+msgstr "Создать вогнутое статичное тело"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Static Body"
+msgstr "Создать выпуклое статичное тело"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Collision Sibling"
+msgstr "Создать вогнутую область столкновения"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Collision Sibling"
+msgstr "Создать выпуклую область столкновения"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh.."
+msgstr "Создать полисетку обводки.."
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh"
+msgstr "Создать полисетку обводки"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Outline Size:"
+msgstr "Размер обводки:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and no MultiMesh set in node)."
+msgstr "Не указана исходная полисетка (и мульти полисетка не указана в ноде)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and MultiMesh contains no Mesh)."
+msgstr "Не указана исходная полисетка (и в мульти полисетке нет полисетки)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (invalid path)."
+msgstr "Источник полисетки является недействительным (неверный путь)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (not a MeshInstance)."
+msgstr "Источник полисетки является недействительным (не MeshInstance)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (contains no Mesh resource)."
+msgstr "Источник полисетки является недействительным (нет ресурса полисетки)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No surface source specified."
+msgstr "Поверхность источника не определена."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (invalid path)."
+msgstr "Поверхность источника недопустима (неверный путь)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no geometry)."
+msgstr "Поверхность источника недопустима (нет геометрии)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no faces)."
+msgstr "Поверхность источника недопустима (нет граней)."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Parent has no solid faces to populate."
+msgstr "Родитель не имеет твёрдых граней для заполнения."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Couldn't map area."
+msgstr "Не удалось отобразить область."
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Source Mesh:"
+msgstr "Выберите источник полисетки:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Target Surface:"
+msgstr "Выберите целевую поверхность:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate Surface"
+msgstr "Заполнить поверхность"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate MultiMesh"
+msgstr "Заполнить мульти полисетку"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Target Surface:"
+msgstr "Целевая поверхность:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Source Mesh:"
+msgstr "Исходная полисетка:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "X-Axis"
+msgstr "Ось X"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Y-Axis"
+msgstr "Ось Y"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Z-Axis"
+msgstr "Ось Z"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh Up Axis:"
+msgstr "Сетка до оси:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Rotation:"
+msgstr "Случайный поворот:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Tilt:"
+msgstr "Случайный наклон:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Scale:"
+msgstr "Случайный размер:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate"
+msgstr "Заполнить"
+
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create Navigation Polygon"
+msgstr "Создать Navigation Polygon"
+
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Remove Poly And Point"
+msgstr "Удалить полигон и точку"
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Error loading image:"
+msgstr "Ошибка при загрузке изображения:"
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "No pixels with transparency > 128 in image.."
+msgstr "Никаких пикселей с прозрачностью > 128 в изображении.."
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Set Emission Mask"
+msgstr "Установлена маска выброса"
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Clear Emission Mask"
+msgstr "Маска выброса очищена"
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Load Emission Mask"
+msgstr "Маска выброса загружена"
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generated Point Count:"
+msgstr "Количество создаваемых точек:"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry."
+msgstr "Нод не содержит геометрии."
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry (faces)."
+msgstr "Нод не содержит геометрии (грани)."
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Faces contain no area!"
+msgstr "Грани не содержат зоны!"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "No faces!"
+msgstr "Нет граней!"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Generate AABB"
+msgstr "Сгенерировать AABB"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter From Mesh"
+msgstr "Создать излучатель из полисетки"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter From Node"
+msgstr "Создать излучатель из нода"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Clear Emitter"
+msgstr "Очистить излучатель"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter"
+msgstr "Создать излучатель"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Positions:"
+msgstr "Количество выбросов:"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Fill:"
+msgstr "Заполнение излучателя:"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Surface"
+msgstr "Поверхность"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Volume"
+msgstr "Объём"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Point from Curve"
+msgstr "Удалена точка с кривой"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Add Point to Curve"
+msgstr "Добавить точку к кривой"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Point in Curve"
+msgstr "Точка кривой передвинута"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move In-Control in Curve"
+msgstr "Передвинут входной луч у кривой"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Out-Control in Curve"
+msgstr "Передвинут выходной луч у кривой"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr "Выбрать точки"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr "Shift+Тащить: Выбрать точки управления"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr "ЛКМ: Добавить точку"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr "ПКМ: Удалить точку"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Select Control Points (Shift+Drag)"
+msgstr "Выбор точек управления (Shift+Тащить)"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr "Добавить точку (в пустом пространстрве)"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Split Segment (in curve)"
+msgstr "Разделить сегмент (в кривой)"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr "Удалить точку"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Close Curve"
+msgstr "Сомкнуть кривую"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Curve Point #"
+msgstr "Точка Кривой #"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Point Pos"
+msgstr "Установить позицию точки кривой"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve In Pos"
+msgstr "Установить позицию входа кривой"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Out Pos"
+msgstr "Установить позицию выхода кривой"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Split Path"
+msgstr "Разделить путь"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Remove Path Point"
+msgstr "Удалить точку пути"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create UV Map"
+msgstr "Создать UV карту"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Transform UV Map"
+msgstr "Преобразовать UV карту"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon 2D UV Editor"
+msgstr "Polygon 2D UV редактор"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Point"
+msgstr "Передвинуть точку"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Ctrl: Rotate"
+msgstr "Ctrl: Поворот"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift: Move All"
+msgstr "Shift: Передвинуть все"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift+Ctrl: Scale"
+msgstr "Shift+Ctrl: Масштаб"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Polygon"
+msgstr "Передвинуть полигон"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Rotate Polygon"
+msgstr "Повернуть полигон"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Scale Polygon"
+msgstr "Масштабировать полигон"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon->UV"
+msgstr "Полигон -> UV"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "UV->Polygon"
+msgstr "UV -> Полигон"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Clear UV"
+msgstr "Очистить UV"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Snap"
+msgstr "Привязка"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Enable Snap"
+msgstr "Активировать привязку"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid"
+msgstr "Сетка"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "ERROR: Couldn't load resource!"
+msgstr "ОШИБКА: Невозможно загрузить ресурс!"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Add Resource"
+msgstr "Добавить ресурс"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Rename Resource"
+msgstr "Переименовать ресурс"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Delete Resource"
+msgstr "Удалить ресурс"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Resource clipboard is empty!"
+msgstr "Нет ресурса в буфере обмена!"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Load Resource"
+msgstr "Загрузить ресурс"
+
+#: tools/editor/plugins/rich_text_editor_plugin.cpp
+msgid "Parse BBCode"
+msgstr "Парсить BB Код"
+
+#: tools/editor/plugins/sample_editor_plugin.cpp
+msgid "Length:"
+msgstr "Длинна:"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Open Sample File(s)"
+msgstr "Открыть сэмпл(ы)"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "ERROR: Couldn't load sample!"
+msgstr "ОШИБКА: Не удалось загрузить сэмпл!"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Add Sample"
+msgstr "Добавить сэмпл"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Stop"
+msgstr "Остановить"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Play"
+msgstr "Воспроизвести"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Rename Sample"
+msgstr "Переименовать сэмпл"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Delete Sample"
+msgstr "Удалить сэмпл"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "16 Bits"
+msgstr "16 Бит"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "8 Bits"
+msgstr "8 Бит"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Stereo"
+msgstr "Стерео"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Mono"
+msgstr "Моно"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Format"
+msgstr "Формат"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Pitch"
+msgstr "Высота"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error while saving theme"
+msgstr "Ошибка во время сохранения темы"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error saving"
+msgstr "Ошибка сохранения"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error importing theme"
+msgstr "Ошибка импортирования темы"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error importing"
+msgstr "Ошибка импортирования"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Import Theme"
+msgstr "Импортировать тему"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As.."
+msgstr "Сохранить тему как.."
+
+#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/project_export.cpp
+msgid "File"
+msgstr "Файл"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_editor.cpp
+msgid "New"
+msgstr "Новый"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save All"
+msgstr "Сохранить всё"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "History Prev"
+msgstr "Предыдущий файл"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "History Next"
+msgstr "Следующий файл"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Reload Theme"
+msgstr "Перезагрузить тему"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme"
+msgstr "Сохранить тему"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As"
+msgstr "Сохранить тему как"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr "Переместить вверх"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr "Переместить вниз"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Indent Left"
+msgstr "Убрать отступ слева"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Indent Right"
+msgstr "Добавить отступ"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Toggle Comment"
+msgstr "Переключить комментарий"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Clone Down"
+msgstr "Копировать вниз"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Complete Symbol"
+msgstr "Список автозавершения"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Trim Trailing Whitespace"
+msgstr "Удаление пробелов в конце строк"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Auto Indent"
+msgstr "Автоотступ"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find.."
+msgstr "Найти.."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find Next"
+msgstr "Найти следующее"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find Previous"
+msgstr "Найти предыдущее"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Replace.."
+msgstr "Заменить.."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Goto Function.."
+msgstr "Перейти к функции.."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Goto Line.."
+msgstr "Перейти к строке.."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Debug"
+msgstr "Отладка"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Toggle Breakpoint"
+msgstr "Точка остановки"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Remove All Breakpoints"
+msgstr "Удалить все точки остановок"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Goto Next Breakpoint"
+msgstr "Перейти к следующей точке остановки"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Goto Previous Breakpoint"
+msgstr "Перейти к предыдущей точке остановки"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Step Over"
+msgstr "Шаг через"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Step Into"
+msgstr "Шаг в"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Break"
+msgstr "Пауза"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Continue"
+msgstr "Продолжить"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Keep Debugger Open"
+msgstr "Оставить отладчик открытым"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Window"
+msgstr "Окно"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Left"
+msgstr "Двигать влево"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Right"
+msgstr "Двигать вправо"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Help"
+msgstr "Справка"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Contextual"
+msgstr "Контекстная"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Tutorials"
+msgstr "Уроки"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Open https://godotengine.org at tutorials section."
+msgstr "Открыть https://godotengine.org с разделом уроков."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Classes"
+msgstr "Классы"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search the class hierarchy."
+msgstr "Поиск в классовой иерархии."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search Help"
+msgstr "Поиск внутри классов"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search the reference documentation."
+msgstr "Поиск справочной документации."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Go to previous edited document."
+msgstr "Перейти к предыдущему редактируемому документу."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Go to next edited document."
+msgstr "Перейти к следующему редактируемому документу."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Create Script"
+msgstr "Создать скрипт"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid ""
+"The following files are newer on disk.\n"
+"What action should be taken?:"
+msgstr ""
+"Следующие файлы новее на диске.\n"
+"Какие меры должны быть приняты?:"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Reload"
+msgstr "Перезагрузить"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Resave"
+msgstr "Пересохранить"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Debugger"
+msgstr "Отладчик"
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Vertex"
+msgstr "Вертекс"
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Fragment"
+msgstr "Фрагмент"
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Lighting"
+msgstr "Освещение"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Constant"
+msgstr "Изменена числовая константа"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Constant"
+msgstr "Изменена векторная константа"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Constant"
+msgstr "Изменён RGB"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Operator"
+msgstr "Изменён числовой оператор"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Operator"
+msgstr "Изменён векторный оператор"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Scalar Operator"
+msgstr "Изменён векторно числовой оператор"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Operator"
+msgstr "Изменён RGB оператор"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Toggle Rot Only"
+msgstr "Переключён - только поворот"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Function"
+msgstr "Изменена числовая функция"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Function"
+msgstr "Изменена векторная функция"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Uniform"
+msgstr "Изменена числовая единица"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Uniform"
+msgstr "Изменена векторная единица"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Uniform"
+msgstr "Изменена RGB единица"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Default Value"
+msgstr "Изменено стандартное значение"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change XForm Uniform"
+msgstr "Изменена XForm единица"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Texture Uniform"
+msgstr "Изменена тектурная единица"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Cubemap Uniform"
+msgstr "Изменена единица кубической карты"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Comment"
+msgstr "Изменён комментарий"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Color Ramp"
+msgstr "Добавлено/удалено с Color Ramp"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Curve Map"
+msgstr "Добавлено/удалено с Curve Map"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Curve Map"
+msgstr "Изменена карта кривой"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Input Name"
+msgstr "Изменено входное имя"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Connect Graph Nodes"
+msgstr "Изменено имя графа"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Disconnect Graph Nodes"
+msgstr "Графы разъединены"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Remove Shader Graph Node"
+msgstr "Удалён граф шейдера"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Move Shader Graph Node"
+msgstr "Передвинут граф шейдера"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Duplicate Graph Node(s)"
+msgstr "Граф(ы) дублированы"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Delete Shader Graph Node(s)"
+msgstr "Удалён(ы) графы шейдера"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Cyclic Connection Link"
+msgstr "Ошибка: Циклическая подключение"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Missing Input Connections"
+msgstr "Ошибка: Отсутствует входное подключение"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add Shader Graph Node"
+msgstr "Добавлен граф шейдера"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal"
+msgstr "Ортогональность"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective"
+msgstr "Перспектива"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Aborted."
+msgstr "Преобразования прерывается."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Plane Transform."
+msgstr "Вид преобразования плоскости."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "X-Axis Transform."
+msgstr "Преобразование по X."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Y-Axis Transform."
+msgstr "Преобразование по Y."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Z-Axis Transform."
+msgstr "Преобразование по Z."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling to %s%%."
+msgstr "Масштабирование до %s%%."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotating %s degrees."
+msgstr "Поворот на %s градусов."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View."
+msgstr "Вид Снизу."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom"
+msgstr "Низ"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View."
+msgstr "Вид сверху."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top"
+msgstr "Верх"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View."
+msgstr "Вид сзади."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear"
+msgstr "Зад"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View."
+msgstr "Вид спереди."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front"
+msgstr "Перед"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View."
+msgstr "Вид слева."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left"
+msgstr "Лево"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View."
+msgstr "Вид справа."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right"
+msgstr "Право"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Keying is disabled (no key inserted)."
+msgstr "Манипуляция отключена (без вставленного ключа)."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Animation Key Inserted."
+msgstr "Ключ анимации вставлен."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Align with view"
+msgstr "Совместить с видом"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top (Num7)"
+msgstr "Вид сверху (Num 7)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom (Shift+Num7)"
+msgstr "Вид снизу (Shift+Num7)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left (Num3)"
+msgstr "Вид слева (Num3)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right (Shift+Num3)"
+msgstr "Вид справа (Shift+)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front (Num1)"
+msgstr "Вид спереди (Num1)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear (Shift+Num1)"
+msgstr "Вид сзади (Shift+Num1)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective (Num5)"
+msgstr "Перспектива (Num5)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal (Num5)"
+msgstr "Ортогонально (Num5)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Environment"
+msgstr "Окружение"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Audio Listener"
+msgstr "Прослушиватель звука"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Gizmos"
+msgstr "Вещицы"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Selection (F)"
+msgstr "Показать выбранный нод (F)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Align with view (Ctrl+Shift+F)"
+msgstr "Совместите с видом (Ctrl+Shift+F)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "XForm Dialog"
+msgstr "XForm диалоговое окно"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "No scene selected to instance!"
+msgstr "Не выбрана сцена!"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Instance at Cursor"
+msgstr "Экземпляр на курсор"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Could not instance scene!"
+msgstr "Не возможно добавить сцену!"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Mode (R)"
+msgstr "Режим масштабирования (R)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform"
+msgstr "Преобразование"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Local Coords"
+msgstr "Локальные координаты"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Dialog.."
+msgstr "Окно преобразования.."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Default Light"
+msgstr "Использовать стандартный свет"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Default sRGB"
+msgstr "Использовать sRGB"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "1 Viewport"
+msgstr "1 Окно"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports"
+msgstr "2 Окна"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports (Alt)"
+msgstr "2 Окна (другой)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports"
+msgstr "3 Окна"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports (Alt)"
+msgstr "3 Окна (другой)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "4 Viewports"
+msgstr "4 Окна"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Normal"
+msgstr "Режим нормалей"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Wireframe"
+msgstr "Режим сетки"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Overdraw"
+msgstr "Режим просвечивания"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Shadeless"
+msgstr "Режим без теней"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Origin"
+msgstr "Отображать начало координат"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Grid"
+msgstr "Отображать сетку"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap Settings"
+msgstr "Параметры привязки"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate Snap:"
+msgstr "Привязка преобразований:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Snap (deg.):"
+msgstr "Привязка поворота (градусы):"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Snap (%):"
+msgstr "Привязка масштабирования (%):"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Viewport Settings"
+msgstr "Настройки окна просмотра"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Default Light Normal:"
+msgstr "Образец стандартного освещения:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Ambient Light Color:"
+msgstr "Цвет окружающего света:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective FOV (deg.):"
+msgstr "FOV перспективы (градусы):"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Near:"
+msgstr "Ближний Z отображения:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Far:"
+msgstr "Дальний Z отображения:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Change"
+msgstr "Изменение преобразования"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate:"
+msgstr "Преобразования:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate (deg.):"
+msgstr "Поворот (градусы):"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale (ratio):"
+msgstr "Масштаб (соотношение):"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Type"
+msgstr "Тип преобразования"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Pre"
+msgstr "До"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Post"
+msgstr "После"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "ERROR: Couldn't load frame resource!"
+msgstr "ОШИБКА: Невозможно загрузить кадр!"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Frame"
+msgstr "Добавить кадр"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Resource clipboard is empty or not a texture!"
+msgstr "Буфер обмена чист или не содержит текстуру!"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Paste Frame"
+msgstr "Вставить кадр"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Empty"
+msgstr "Добавить пустоту"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation Loop"
+msgstr "Изменить цикличность анимации"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation FPS"
+msgstr "Изменить FPS анимации"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "(empty)"
+msgstr "(пусто)"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animations"
+msgstr "Анимации"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Speed (FPS):"
+msgstr "Скорость (FPS):"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animation Frames"
+msgstr "Кадры анимации"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (Before)"
+msgstr "Вставить пустоту (До)"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (After)"
+msgstr "Вставить пустоту (После)"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Up"
+msgstr "Вверх"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Down"
+msgstr "Вниз"
+
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Set region_rect"
+msgstr "Установить прямоугольник региона"
+
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Sprite Region Editor"
+msgstr "Редактор Области Спрайта"
+
+#: tools/editor/plugins/style_box_editor_plugin.cpp
+msgid "StyleBox Preview:"
+msgstr "StyleBox предпросмотр:"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Can't save theme to file:"
+msgstr "Невозможно сохранить тему в файл:"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add All Items"
+msgstr "Добавить все элементы"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add All"
+msgstr "Добавить все"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove Item"
+msgstr "Удалить элемент"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add Class Items"
+msgstr "Добавить элемент класса"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Remove Class Items"
+msgstr "Удалить элемент класса"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Create Template"
+msgstr "Создать шаблон"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio1"
+msgstr "Чекбокс 1"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio2"
+msgstr "Чекбокс 2"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Item"
+msgstr "Элемент"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Check Item"
+msgstr "Проверить пункт"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Checked Item"
+msgstr "Проверенный пункт"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Has"
+msgstr "Имеет"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Many"
+msgstr "Много"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp tools/editor/project_export.cpp
+msgid "Options"
+msgstr "Параметры"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Have,Many,Several,Options!"
+msgstr "Имеет,Много,Разных,Опций!"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 1"
+msgstr "Вкладка 1"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 2"
+msgstr "Вкладка 2"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 3"
+msgstr "Вкладка 3"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/scene_tree_editor.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Type:"
+msgstr "Тип:"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Data Type:"
+msgstr "Тип информации:"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Icon"
+msgstr "Иконка"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Style"
+msgstr "Стиль"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Color"
+msgstr "Цвет"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint TileMap"
+msgstr "Рисовать карту тайлов"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Duplicate"
+msgstr "Дублировать"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase TileMap"
+msgstr "Стирать карту тайлов"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Bucket"
+msgstr "Заливка"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Pick Tile"
+msgstr "Выбрать тайл"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Select"
+msgstr "Выделение"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase Selection"
+msgstr "Очистить выделенное"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Transpose"
+msgstr "Транспонировать"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror X (A)"
+msgstr "Зеркально по X (A)"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror Y (S)"
+msgstr "Зеркально по Y (S)"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 0 degrees"
+msgstr "Поворот на 0 градусов"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 90 degrees"
+msgstr "Поворот на 90 градусов"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 180 degrees"
+msgstr "Поворот на 180 градусов"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 270 degrees"
+msgstr "Поворот на 270 градусов"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Could not find tile:"
+msgstr "Невозможно найти тайл:"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Item name or ID:"
+msgstr "ID или имя элемента:"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from scene?"
+msgstr "Создать из сцены?"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from scene?"
+msgstr "Слияние из сцены?"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from Scene"
+msgstr "Создать из сцены"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from Scene"
+msgstr "Слияние из сцены"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Error"
+msgstr "Ошибка"
+
+#: tools/editor/project_export.cpp
+msgid "Edit Script Options"
+msgstr "Редактировать параметры скрипта"
+
+#: tools/editor/project_export.cpp
+msgid "Please export outside the project folder!"
+msgstr "Пожалуйста экспортируйте вне папки проекта!"
+
+#: tools/editor/project_export.cpp
+msgid "Error exporting project!"
+msgstr "Ошибка экспортирования проекта!"
+
+#: tools/editor/project_export.cpp
+msgid "Error writing the project PCK!"
+msgstr "Ошибка записи PCK файла!"
+
+#: tools/editor/project_export.cpp
+msgid "No exporter for platform '%s' yet."
+msgstr "Платформа '%s' пока не поддерживается."
+
+#: tools/editor/project_export.cpp
+msgid "Include"
+msgstr "Включить"
+
+#: tools/editor/project_export.cpp
+msgid "Change Image Group"
+msgstr "Измените изображение группы"
+
+#: tools/editor/project_export.cpp
+msgid "Group name can't be empty!"
+msgstr "Название группы не может быть пустым!"
+
+#: tools/editor/project_export.cpp
+msgid "Invalid character in group name!"
+msgstr "Недопустимый символ в названии группы!"
+
+#: tools/editor/project_export.cpp
+msgid "Group name already exists!"
+msgstr "Название группы уже существует!"
+
+#: tools/editor/project_export.cpp
+msgid "Add Image Group"
+msgstr "Добавлено изображение группы"
+
+#: tools/editor/project_export.cpp
+msgid "Delete Image Group"
+msgstr "Удалено изображение группы"
+
+#: tools/editor/project_export.cpp
+msgid "Atlas Preview"
+msgstr "Предварительный просмотр атласа"
+
+#: tools/editor/project_export.cpp
+msgid "Project Export Settings"
+msgstr "Параметры экспорта проекта"
+
+#: tools/editor/project_export.cpp
+msgid "Target"
+msgstr "Цель"
+
+#: tools/editor/project_export.cpp
+msgid "Export to Platform"
+msgstr "Платформа для экспорта"
+
+#: tools/editor/project_export.cpp
+msgid "Resources"
+msgstr "Ресурсы"
+
+#: tools/editor/project_export.cpp
+msgid "Export selected resources (including dependencies)."
+msgstr "Экспортировать выбранные ресурсы (включая зависимости)."
+
+#: tools/editor/project_export.cpp
+msgid "Export all resources in the project."
+msgstr "Экспортировать все ресурсы проекта."
+
+#: tools/editor/project_export.cpp
+msgid "Export all files in the project directory."
+msgstr "Экспортировать все файлы в папке проекта."
+
+#: tools/editor/project_export.cpp
+msgid "Export Mode:"
+msgstr "Режим экспортирования:"
+
+#: tools/editor/project_export.cpp
+msgid "Resources to Export:"
+msgstr "Ресурсы для экспорта:"
+
+#: tools/editor/project_export.cpp
+msgid "Action"
+msgstr "Действие"
+
+#: tools/editor/project_export.cpp
+msgid ""
+"Filters to export non-resource files (comma-separated, e.g.: *.json, *.txt):"
+msgstr ""
+"Фильтр для экспорта не ресурсных файлов (через запятую, например: *.json, *."
+"txt):"
+
+#: tools/editor/project_export.cpp
+msgid "Filters to exclude from export (comma-separated, e.g.: *.json, *.txt):"
+msgstr "Фильтр для исключения (через запятую, например: *.json, *.txt):"
+
+#: tools/editor/project_export.cpp
+msgid "Convert text scenes to binary on export."
+msgstr "Преобразовать текстовые сцены в двоичные при экспорте."
+
+#: tools/editor/project_export.cpp
+msgid "Images"
+msgstr "Изображения"
+
+#: tools/editor/project_export.cpp
+msgid "Keep Original"
+msgstr "Оставить исходными"
+
+#: tools/editor/project_export.cpp
+msgid "Compress for Disk (Lossy, WebP)"
+msgstr "Сжать для диска (с потерями, WebP)"
+
+#: tools/editor/project_export.cpp
+msgid "Compress for RAM (BC/PVRTC/ETC)"
+msgstr "Сжать для RAM (BC/PVRTC/ETC)"
+
+#: tools/editor/project_export.cpp
+msgid "Convert Images (*.png):"
+msgstr "Преобразовать изображения (*.png):"
+
+#: tools/editor/project_export.cpp
+msgid "Compress for Disk (Lossy) Quality:"
+msgstr "Качество сжатия для диска (с потерями):"
+
+#: tools/editor/project_export.cpp
+msgid "Shrink All Images:"
+msgstr "Уменьшить все изображения (1 - оригинал, 2 - сжать в два раза...):"
+
+#: tools/editor/project_export.cpp
+msgid "Compress Formats:"
+msgstr "Формат для сжатия:"
+
+#: tools/editor/project_export.cpp
+msgid "Image Groups"
+msgstr "Группы изображений"
+
+#: tools/editor/project_export.cpp
+msgid "Groups:"
+msgstr "Группы:"
+
+#: tools/editor/project_export.cpp
+msgid "Compress Disk"
+msgstr "Сжать для Диска"
+
+#: tools/editor/project_export.cpp
+msgid "Compress RAM"
+msgstr "Сжать для RAM"
+
+#: tools/editor/project_export.cpp
+msgid "Compress Mode:"
+msgstr "Режим сжатия:"
+
+#: tools/editor/project_export.cpp
+msgid "Lossy Quality:"
+msgstr "Потеря качества:"
+
+#: tools/editor/project_export.cpp
+msgid "Atlas:"
+msgstr "Атласы:"
+
+#: tools/editor/project_export.cpp
+msgid "Shrink By:"
+msgstr "Степень сжатия:"
+
+#: tools/editor/project_export.cpp
+msgid "Preview Atlas"
+msgstr "Предпросмотр атласа"
+
+#: tools/editor/project_export.cpp
+msgid "Image Filter:"
+msgstr "Фильтр:"
+
+#: tools/editor/project_export.cpp
+msgid "Images:"
+msgstr "Изображения:"
+
+#: tools/editor/project_export.cpp
+msgid "Select None"
+msgstr "Сбросить выделение"
+
+#: tools/editor/project_export.cpp
+msgid "Samples"
+msgstr "Сэмплы"
+
+#: tools/editor/project_export.cpp
+msgid "Sample Conversion Mode: (.wav files):"
+msgstr "Режим преобразования сэмплов (.wav файлы):"
+
+#: tools/editor/project_export.cpp
+msgid "Keep"
+msgstr "Оставить оригинал"
+
+#: tools/editor/project_export.cpp
+msgid "Compress (RAM - IMA-ADPCM)"
+msgstr "Сжать (RAM - IMA-ADPCM)"
+
+#: tools/editor/project_export.cpp
+msgid "Sampling Rate Limit (Hz):"
+msgstr "Ограничение частоты сэмплов (Гц):"
+
+#: tools/editor/project_export.cpp
+msgid "Trim"
+msgstr "Обрезать"
+
+#: tools/editor/project_export.cpp
+msgid "Trailing Silence:"
+msgstr "Удаление тишины:"
+
+#: tools/editor/project_export.cpp
+msgid "Script"
+msgstr "Скрипт"
+
+#: tools/editor/project_export.cpp
+msgid "Script Export Mode:"
+msgstr "Режим экспортирования скриптов:"
+
+#: tools/editor/project_export.cpp
+msgid "Text"
+msgstr "Текстовый"
+
+#: tools/editor/project_export.cpp
+msgid "Compiled"
+msgstr "Компилированный"
+
+#: tools/editor/project_export.cpp
+msgid "Encrypted (Provide Key Below)"
+msgstr "Зашифрованный (Напишите ключ ниже)"
+
+#: tools/editor/project_export.cpp
+msgid "Script Encryption Key (256-bits as hex):"
+msgstr "Ключ шифрования скрипта (256-бит, а в шестнадцатеричном виде):"
+
+#: tools/editor/project_export.cpp
+msgid "Export PCK/Zip"
+msgstr "Экспортировать PCK/Zip"
+
+#: tools/editor/project_export.cpp
+msgid "Export Project PCK"
+msgstr "Экспортировать PCK проекта"
+
+#: tools/editor/project_export.cpp
+msgid "Export.."
+msgstr "Экспортировать.."
+
+#: tools/editor/project_export.cpp
+msgid "Project Export"
+msgstr "Экспортирование проекта"
+
+#: tools/editor/project_export.cpp
+msgid "Export Preset:"
+msgstr "Экспортировать настройки:"
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, the path must exist!"
+msgstr "Неверный путь к проекту, путь должен существовать!"
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, engine.cfg must not exist."
+msgstr "Недопустимый путь к проекту, engine.cfg не должен существовать."
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, engine.cfg must exist."
+msgstr "Недопустимый путь к проекту, engine.cfg должен существовать."
+
+#: tools/editor/project_manager.cpp
+msgid "Imported Project"
+msgstr "Импортированный проект"
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path (changed anything?)."
+msgstr "Неверный путь к проекту (Что-то изменили?)."
+
+#: tools/editor/project_manager.cpp
+msgid "Couldn't create engine.cfg in project path."
+msgstr "Не могу создать engine.cfg в папке проекта."
+
+#: tools/editor/project_manager.cpp
+msgid "Import Existing Project"
+msgstr "Импортировать существующий проект"
+
+#: tools/editor/project_manager.cpp
+msgid "Project Path (Must Exist):"
+msgstr "Путь к проекту (должен существовать):"
+
+#: tools/editor/project_manager.cpp
+msgid "Project Name:"
+msgstr "Название проекта:"
+
+#: tools/editor/project_manager.cpp
+msgid "Create New Project"
+msgstr "Создать новый проект"
+
+#: tools/editor/project_manager.cpp
+msgid "Project Path:"
+msgstr "Путь к проекту:"
+
+#: tools/editor/project_manager.cpp
+msgid "Browse"
+msgstr "Обзор"
+
+#: tools/editor/project_manager.cpp
+msgid "New Game Project"
+msgstr "Новый игровой проект"
+
+#: tools/editor/project_manager.cpp
+msgid "That's a BINGO!"
+msgstr "Бинго!"
+
+#: tools/editor/project_manager.cpp
+msgid "Unnamed Project"
+msgstr "Безымянный проект"
+
+#: tools/editor/project_manager.cpp
+msgid "Are you sure to open more than one projects?"
+msgstr "Вы уверены, что открыть несколько проектов?"
+
+#: tools/editor/project_manager.cpp
+msgid "Are you sure to run more than one projects?"
+msgstr "Вы уверены, что хотите запустить более одного проекта?"
+
+#: tools/editor/project_manager.cpp
+msgid "Remove project from the list? (Folder contents will not be modified)"
+msgstr "Удалить проект из списка? (Содержимое папки не будет изменено)"
+
+#: tools/editor/project_manager.cpp
+msgid "Recent Projects:"
+msgstr "Последние проекты:"
+
+#: tools/editor/project_manager.cpp
+msgid "Run"
+msgstr "Запустить"
+
+#: tools/editor/project_manager.cpp
+msgid "Scan"
+msgstr "Сканировать"
+
+#: tools/editor/project_manager.cpp
+msgid "New Project"
+msgstr "Новый проект"
+
+#: tools/editor/project_manager.cpp
+msgid "Exit"
+msgstr "Выход"
+
+#: tools/editor/project_settings.cpp
+msgid "Key "
+msgstr "Кнопка"
+
+#: tools/editor/project_settings.cpp
+msgid "Joy Button"
+msgstr "Кнопка геймпада"
+
+#: tools/editor/project_settings.cpp
+msgid "Joy Axis"
+msgstr "Ось геймпада"
+
+#: tools/editor/project_settings.cpp
+msgid "Mouse Button"
+msgstr "Кнопка мыши"
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid action (anything goes but '/' or ':')."
+msgstr "Недопустимое название действия (подойдёт всё кроме '/' или ':')."
+
+#: tools/editor/project_settings.cpp
+msgid "Action '%s' already exists!"
+msgstr "Действие '%s' уже существует!"
+
+#: tools/editor/project_settings.cpp
+msgid "Rename Input Action Event"
+msgstr "Переименовать действие"
+
+#: tools/editor/project_settings.cpp
+msgid "Add Input Action Event"
+msgstr "Добавить действие"
+
+#: tools/editor/project_settings.cpp
+msgid "Meta+"
+msgstr "Meta+"
+
+#: tools/editor/project_settings.cpp
+msgid "Shift+"
+msgstr "Shift+"
+
+#: tools/editor/project_settings.cpp
+msgid "Alt+"
+msgstr "Alt+"
+
+#: tools/editor/project_settings.cpp
+msgid "Control+"
+msgstr "Control+"
+
+#: tools/editor/project_settings.cpp
+msgid "Press a Key.."
+msgstr "Нажмите любую клавишу..."
+
+#: tools/editor/project_settings.cpp
+msgid "Mouse Button Index:"
+msgstr "Индекс клавиши мыши:"
+
+#: tools/editor/project_settings.cpp
+msgid "Left Button"
+msgstr "Левая кнопка мыши"
+
+#: tools/editor/project_settings.cpp
+msgid "Right Button"
+msgstr "Правая кнопка мыши"
+
+#: tools/editor/project_settings.cpp
+msgid "Middle Button"
+msgstr "Средняя кнопка мыши"
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Up Button"
+msgstr "Колёсико вверх"
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Down Button"
+msgstr "Колёсико вниз"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 6"
+msgstr "Кнопка 6"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 7"
+msgstr "Кнопка 7"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 8"
+msgstr "Кнопка 8"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 9"
+msgstr "Кнопка 9"
+
+#: tools/editor/project_settings.cpp
+msgid "Joystick Axis Index:"
+msgstr "Индекс оси джойстика:"
+
+#: tools/editor/project_settings.cpp
+msgid "Axis"
+msgstr "Ось"
+
+#: tools/editor/project_settings.cpp
+msgid "Joystick Button Index:"
+msgstr "Индекс кнопки джойстика:"
+
+#: tools/editor/project_settings.cpp
+msgid "Add Input Action"
+msgstr "Добавить действие"
+
+#: tools/editor/project_settings.cpp
+msgid "Erase Input Action Event"
+msgstr "Удалить действие"
+
+#: tools/editor/project_settings.cpp
+msgid "Device"
+msgstr "Устройство"
+
+#: tools/editor/project_settings.cpp
+msgid "Button"
+msgstr "Кнопка"
+
+#: tools/editor/project_settings.cpp
+msgid "Left Button."
+msgstr "Левая кнопка."
+
+#: tools/editor/project_settings.cpp
+msgid "Right Button."
+msgstr "Правая кнопка."
+
+#: tools/editor/project_settings.cpp
+msgid "Middle Button."
+msgstr "Средняя кнопка."
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Up."
+msgstr "Колёсико вверх."
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Down."
+msgstr "Колёсико вниз."
+
+#: tools/editor/project_settings.cpp
+msgid "Toggle Persisting"
+msgstr "Переключено настаивание"
+
+#: tools/editor/project_settings.cpp
+msgid "Error saving settings."
+msgstr "Ошибка сохранения настроек."
+
+#: tools/editor/project_settings.cpp
+msgid "Settings saved OK."
+msgstr "Настройки сохранены нормально."
+
+#: tools/editor/project_settings.cpp
+msgid "Add Translation"
+msgstr "Добавлен перевод"
+
+#: tools/editor/project_settings.cpp
+msgid "Toggle AutoLoad Globals"
+msgstr "Переключена автозагрузка глобальных скриптов"
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name."
+msgstr "Недопустимое имя."
+
+#: tools/editor/project_settings.cpp
+msgid "Valid characters:"
+msgstr "Допустимые символы:"
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing engine class name."
+msgstr ""
+"Недопустимое имя. Не должно конфликтовать с существующим именем класса движка."
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing buit-in type name."
+msgstr ""
+"Недопустимое имя. Не должно конфликтовать с существующим встроенным именем "
+"типа."
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing global constant name."
+msgstr ""
+"Недопустимое имя. Не должно конфликтовать с существующим глобальным именем "
+"константы."
+
+#: tools/editor/project_settings.cpp
+msgid "Add Autoload"
+msgstr "Добавлена автозагрузка"
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Autoload"
+msgstr "Удалена автозагрузка"
+
+#: tools/editor/project_settings.cpp
+msgid "Move Autoload"
+msgstr "Передвинута автозагрузка"
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Translation"
+msgstr "Перевод удалён"
+
+#: tools/editor/project_settings.cpp
+msgid "Add Remapped Path"
+msgstr "Добавлен путь перенаправления"
+
+#: tools/editor/project_settings.cpp
+msgid "Resource Remap Add Remap"
+msgstr "Перенаправлен ресурс перенаправления"
+
+#: tools/editor/project_settings.cpp
+msgid "Change Resource Remap Language"
+msgstr "Изменён язык перенаправления"
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Resource Remap"
+msgstr "Удалён ресурс перенаправления"
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Resource Remap Option"
+msgstr "Удалён параметр ресурса перенаправления"
+
+#: tools/editor/project_settings.cpp
+msgid "Enable"
+msgstr "Включить"
+
+#: tools/editor/project_settings.cpp
+msgid "Project Settings (engine.cfg)"
+msgstr "Настройки проекта (engine.cfg)"
+
+#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp
+msgid "General"
+msgstr "Основное"
+
+#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp
+msgid "Property:"
+msgstr "Параметр:"
+
+#: tools/editor/project_settings.cpp
+msgid "Del"
+msgstr "Удалить"
+
+#: tools/editor/project_settings.cpp
+msgid "Copy To Platform.."
+msgstr "Скопировать на платформу.."
+
+#: tools/editor/project_settings.cpp
+msgid "Input Map"
+msgstr "Список действий"
+
+#: tools/editor/project_settings.cpp
+msgid "Action:"
+msgstr "Действие:"
+
+#: tools/editor/project_settings.cpp
+msgid "Device:"
+msgstr "Девайс:"
+
+#: tools/editor/project_settings.cpp
+msgid "Index:"
+msgstr "Индекс:"
+
+#: tools/editor/project_settings.cpp
+msgid "Localization"
+msgstr "Локализация"
+
+#: tools/editor/project_settings.cpp
+msgid "Translations"
+msgstr "Переводы"
+
+#: tools/editor/project_settings.cpp
+msgid "Translations:"
+msgstr "Переводы:"
+
+#: tools/editor/project_settings.cpp
+msgid "Add.."
+msgstr "Добавить.."
+
+#: tools/editor/project_settings.cpp
+msgid "Remaps"
+msgstr "Переназначения"
+
+#: tools/editor/project_settings.cpp
+msgid "Resources:"
+msgstr "Ресурсы:"
+
+#: tools/editor/project_settings.cpp
+msgid "Remaps by Locale:"
+msgstr "Заменить на язык:"
+
+#: tools/editor/project_settings.cpp
+msgid "Locale"
+msgstr "Язык"
+
+#: tools/editor/project_settings.cpp
+msgid "AutoLoad"
+msgstr "Автозагрузка"
+
+#: tools/editor/project_settings.cpp
+msgid "Node Name:"
+msgstr "Имя Нода:"
+
+#: tools/editor/project_settings.cpp
+msgid "List:"
+msgstr "Список:"
+
+#: tools/editor/project_settings.cpp
+msgid "Singleton"
+msgstr "Синглтон"
+
+#: tools/editor/property_editor.cpp
+msgid "Preset.."
+msgstr "Предустановка.."
+
+#: tools/editor/property_editor.cpp
+msgid "Ease In"
+msgstr "Легко в"
+
+#: tools/editor/property_editor.cpp
+msgid "Ease Out"
+msgstr "Легко из"
+
+#: tools/editor/property_editor.cpp
+msgid "Zero"
+msgstr "Ноль"
+
+#: tools/editor/property_editor.cpp
+msgid "Easing In-Out"
+msgstr "Легко в-из"
+
+#: tools/editor/property_editor.cpp
+msgid "Easing Out-In"
+msgstr "Легко из-в"
+
+#: tools/editor/property_editor.cpp
+msgid "File.."
+msgstr "Файл.."
+
+#: tools/editor/property_editor.cpp
+msgid "Dir.."
+msgstr "Папка.."
+
+#: tools/editor/property_editor.cpp
+msgid "Load"
+msgstr "Загрузить"
+
+#: tools/editor/property_editor.cpp
+msgid "Assign"
+msgstr "Назначить"
+
+#: tools/editor/property_editor.cpp
+msgid "Error loading file: Not a resource!"
+msgstr "Ошибка загрузки файла: Это не ресурс!"
+
+#: tools/editor/property_editor.cpp
+msgid "Couldn't load image"
+msgstr "Невозможно загрузить изображение"
+
+#: tools/editor/property_editor.cpp
+msgid "Bit %d, val %d."
+msgstr "Бит %d, значение %d."
+
+#: tools/editor/property_editor.cpp
+msgid "On"
+msgstr "Вкл"
+
+#: tools/editor/property_editor.cpp
+msgid "Set"
+msgstr "Задан"
+
+#: tools/editor/property_editor.cpp
+msgid "Properties:"
+msgstr "Свойства:"
+
+#: tools/editor/property_editor.cpp
+msgid "Global"
+msgstr "Глобальные"
+
+#: tools/editor/property_editor.cpp
+msgid "Sections:"
+msgstr "Разделы:"
+
+#: tools/editor/pvrtc_compress.cpp
+msgid "Could not execute PVRTC tool:"
+msgstr "Невозможно запустить PVRTC инструмент:"
+
+#: tools/editor/pvrtc_compress.cpp
+msgid "Can't load back converted image using PVRTC tool:"
+msgstr ""
+"Не возможно загрузить обратно конвертированное изображение используя PVRTC "
+"инструмент:"
+
+#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp
+msgid "Reparent Node"
+msgstr "Переподчинить нод"
+
+#: tools/editor/reparent_dialog.cpp
+msgid "Reparent Location (Select new Parent):"
+msgstr "Новое место (выберите нового Родителя):"
+
+#: tools/editor/reparent_dialog.cpp
+msgid "Keep Global Transform"
+msgstr "Сохранить глобальные преобразования"
+
+#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp
+msgid "Reparent"
+msgstr "Переподчинить"
+
+#: tools/editor/resources_dock.cpp
+msgid "Create New Resource"
+msgstr "Создать новый ресурс"
+
+#: tools/editor/resources_dock.cpp
+msgid "Open Resource"
+msgstr "Открыть ресурс"
+
+#: tools/editor/resources_dock.cpp
+msgid "Save Resource"
+msgstr "Сохранить ресурс"
+
+#: tools/editor/resources_dock.cpp
+msgid "Resource Tools"
+msgstr "Инструменты ресурсов"
+
+#: tools/editor/resources_dock.cpp
+msgid "Make Local"
+msgstr "Сделать локальным"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Run Mode:"
+msgstr "Режим запуска:"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Current Scene"
+msgstr "Текущая сцена"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Main Scene"
+msgstr "Главная сцена"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Main Scene Arguments:"
+msgstr "Аргументы главной сцены:"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Scene Run Settings"
+msgstr "Параметры запуска сцены"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "OK :("
+msgstr "Ок :("
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "No parent to instance a child at."
+msgstr "Нет родителя для добавления потомка."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error loading scene from %s"
+msgstr "Ошибка при загрузке сцены из %s"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error instancing scene from %s"
+msgstr "Ошибка добавления сцены из %s"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Ok"
+msgstr "Ок"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Cannot instance the scene '%s' because the current scene exists within one of "
+"its nodes."
+msgstr ""
+"Невозможно добавить сцену %s, потому что текущая сцена существует в одном из "
+"его нодов."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Instance Scene(s)"
+msgstr "Дополнить сценой(ами)"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done on the tree root."
+msgstr "Эта операция не может быть произведена над корнем дерева."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Node In Parent"
+msgstr "Перемещение нода в Родительский"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Nodes In Parent"
+msgstr "Перемещение нодов в родительский"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Duplicate Node(s)"
+msgstr "Дублирован нод(ы)"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete Node(s)?"
+msgstr "Удалить нод(ы)?"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done without a scene."
+msgstr "Эта операция не может быть выполнена без сцены."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation requires a single selected node."
+msgstr "Эта операция требует одного выбранного нода."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done on instanced scenes."
+msgstr "Эта операция не может быть сделана на редактируемой сцене."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Save New Scene As.."
+msgstr "Сохранить новую Сцену как.."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Makes Sense!"
+msgstr "Уууу круто!"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes from a foreign scene!"
+msgstr "Не могу работать с нодами из внешней сцены!"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes the current scene inherits from!"
+msgstr ""
+"Не могу работать с нодами текущей сцены, наследуемой откуда-то!\n"
+"Очистите наследование, чтобы продолжить работу с ними."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Remove Node(s)"
+msgstr "Удалён нод(ы)"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Create Node"
+msgstr "Создан нод"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Couldn't save new scene. Likely dependencies (instances) couldn't be "
+"satisfied."
+msgstr ""
+"Не возможно сохранить новую сцену. Вероятно, зависимости (экземпляры) не "
+"могли быть удовлетворены."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error saving scene."
+msgstr "Ошибка сохранения сцены."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error duplicating scene to save it."
+msgstr "Ошибка дублирования сцены, чтобы сохранить её."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "New Scene Root"
+msgstr "Новый корень сцены"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Inherit Scene"
+msgstr "Унаследовать сцену"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add Child Node"
+msgstr "Добавить дочерний нод"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Instance Child Scene"
+msgstr "Добавить дочернюю сцену"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Change Type"
+msgstr "Изменить тип"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Edit Groups"
+msgstr "Редактировать группы"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Edit Connections"
+msgstr "Редактировать связи"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add Script"
+msgstr "Добавить скрипт"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Merge From Scene"
+msgstr "Соединить со сценой"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Save Branch as Scene"
+msgstr "Сохранить ветку, как сцену"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete Node(s)"
+msgstr "Удалить нод(ы)"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add/Create a New Node"
+msgstr "Добавить/создать новый узел"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Instance a scene file as a Node. Creates an inherited scene if no root node "
+"exists."
+msgstr ""
+"Добавить файл сцены как нод. Создаёт наследуемую сцену, если корневой узел не "
+"существует."
+
+#: tools/editor/scene_tree_editor.cpp
+msgid ""
+"This item cannot be made visible because the parent is hidden. Unhide the "
+"parent first."
+msgstr ""
+"Этот объект не может быть отображён, потому что его родитель скрыт. "
+"Отобразите сначала родительский нод."
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Toggle Spatial Visible"
+msgstr "Переключена видимость Spatial"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Toggle CanvasItem Visible"
+msgstr "Переключена видимость CanvasItem"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Instance:"
+msgstr "Экземпляр:"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Invalid node name, the following characters are not allowed:"
+msgstr "Недопустимые символы в названии нода:"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Rename Node"
+msgstr "Нод переименован"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Scene Tree (Nodes):"
+msgstr "Дерево сцены (ноды):"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Editable Children"
+msgstr "Редактируемые потомки"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Load As Placeholder"
+msgstr "Загрузить как заполнитель"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Open in Editor"
+msgstr "Открыть в редакторе"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear Inheritance"
+msgstr "Очистить наследование"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear Inheritance? (No Undo!)"
+msgstr "Очистить наследование? (Нельзя отменить!)"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear!"
+msgstr "Очистить!"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Select a Node"
+msgstr "Выберете нод"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Same source and destination files, doing nothing."
+msgstr "Файл назначения и исходный файлы совпадают, нечего делать."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Same source and destination paths, doing nothing."
+msgstr "Путь назначения и исходный пути совпадают, нечего делать."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Can't move directories to within themselves."
+msgstr "Невозможно переместить каталоги внутрь себя."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Can't operate on '..'"
+msgstr "Невозможно работать с '..'"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Pick New Name and Location For:"
+msgstr "Выберете новое имя и расположение для:"
+
+#: tools/editor/scenes_dock.cpp
+msgid "No files selected!"
+msgstr "Файлы не выбраны!"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Instance"
+msgstr "Экземпляр"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Edit Dependencies.."
+msgstr "Редактировать зависимости.."
+
+#: tools/editor/scenes_dock.cpp
+msgid "View Owners.."
+msgstr "Просмотреть владельцев.."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Rename or Move.."
+msgstr "Переименовать или Переместить.."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Move To.."
+msgstr "Переместить в.."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Info"
+msgstr "Информация"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Show In File Manager"
+msgstr "Просмотреть в проводнике"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Previous Directory"
+msgstr "Предыдущий каталог"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Next Directory"
+msgstr "Следующий каталог"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Re-Scan Filesystem"
+msgstr "Повторное сканирование файловой системы"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Toggle folder status as Favorite"
+msgstr "Переключить статус папки как избранной"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Instance the selected scene(s) as child of the selected node."
+msgstr "Добавить выбранную сцену(сцены), как потомка выбранного нода."
+
+#: tools/editor/scenes_dock.cpp
+msgid "Move"
+msgstr "Переместить"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid parent class name"
+msgstr "Недопустимое имя вышестоящего класса"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid chars:"
+msgstr "Допустимые символы:"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid class name"
+msgstr "Недопустимое имя класса"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid name"
+msgstr "Допустимое имя"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "N/A"
+msgstr "Н/Д"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Class name is invalid!"
+msgstr "Имя класса является недействительным!"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Parent class name is invalid!"
+msgstr "Имя вышестоящего класса является недействительным!"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid path!"
+msgstr "Недопустимый путь!"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Could not create script in filesystem."
+msgstr "Не удалось создать скрипт в файловой системе."
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Path is empty"
+msgstr "Путь не назначен"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Path is not local"
+msgstr "Путь не локальный"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid base path"
+msgstr "Недопустимый базовый путь"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "File exists"
+msgstr "Файл существует"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid extension"
+msgstr "Недопустимое расширение"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid path"
+msgstr "Допустимый путь"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Class Name:"
+msgstr "Имя Класса:"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Built-In Script"
+msgstr "Встроенный Скрипт"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Create Node Script"
+msgstr "Создать скрипт для нода"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Bytes:"
+msgstr "Байты:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Warning"
+msgstr "Предупреждение"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Error:"
+msgstr "Ошибка:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Source:"
+msgstr "Источник:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Function:"
+msgstr "Функция:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Errors"
+msgstr "Ошибки"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Child Process Connected"
+msgstr "Дочерний процесс связан"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Inspect Previous Instance"
+msgstr "Осмотреть предыдущий экземпляр"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Inspect Next Instance"
+msgstr "Осмотреть следующий экземпляр"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Stack Frames"
+msgstr "Стек"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Variable"
+msgstr "Переменная"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Errors:"
+msgstr "Ошибки:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Stack Trace (if applicable):"
+msgstr "Трассировка стека (если применимо):"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Remote Inspector"
+msgstr "Удалённый отладчик"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Live Scene Tree:"
+msgstr "Дерево сцены в реальном времени:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Remote Object Properties: "
+msgstr "Параметры объекта:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Profiler"
+msgstr "Профайлер"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Monitor"
+msgstr "Параметр"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Value"
+msgstr "Значение"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Monitors"
+msgstr "Мониторинг"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "List of Video Memory Usage by Resource:"
+msgstr "Список использования видеопамяти ресурсами:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Total:"
+msgstr "Всего:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Video Mem"
+msgstr "Видео память"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Resource Path"
+msgstr "Путь ресурса"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Type"
+msgstr "Тип"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Usage"
+msgstr "Использует"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Misc"
+msgstr "Прочее"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Clicked Control:"
+msgstr "Нажатый нод:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Clicked Control Type:"
+msgstr "Тип нажатого нода:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Live Edit Root:"
+msgstr "Редактирование корня в реальном времени:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Set From Tree"
+msgstr "Установить из дерева нодов"
+
+#: tools/editor/settings_config_dialog.cpp
+msgid "Plugin List:"
+msgstr "Список плагинов:"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Light Radius"
+msgstr "Изменён радиус света"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Camera FOV"
+msgstr "Изменён FOV камеры"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Camera Size"
+msgstr "Изменён размер камеры"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Sphere Shape Radius"
+msgstr "Изменён радиус сферы"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Box Shape Extents"
+msgstr "Изменены границы прямоугольника"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Radius"
+msgstr "Изменён радиус капсулы"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Height"
+msgstr "Изменена высота капуслы"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Ray Shape Length"
+msgstr "Изменена длинна луча"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Notifier Extents"
+msgstr "Изменены границы уведомителя"
+
+#~ msgid "Overwrite Existing Scene"
+#~ msgstr "Перезаписать существующую сцену"
+
+#~ msgid "Overwrite Existing, Keep Materials"
+#~ msgstr "Перезаписать существующую сцену с сохранением материалов"
+
+#~ msgid "Keep Existing, Merge with New"
+#~ msgstr "Сохранить существующую сцену и объединить с новой"
+
+#~ msgid "Keep Existing, Ignore New"
+#~ msgstr "Сохранить существующую и игнорировать новую"
+
+#~ msgid "This Time:"
+#~ msgstr "В этот раз:"
+
+#~ msgid "Next Time:"
+#~ msgstr "В следующий раз:"
diff --git a/tools/translations/tools.pot b/tools/translations/tools.pot
index dee16a6a96..7a8d062538 100644
--- a/tools/translations/tools.pot
+++ b/tools/translations/tools.pot
@@ -1,5728 +1,5828 @@
+# LANGUAGE translation of the Godot Engine editor
+# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community
+# This file is distributed under the same license as the Godot source code.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Godot Engine editor\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
-#: scene/audio/sample_player.cpp:606
-msgid "A SampleLibrary resource must be created or set in the 'samples' property in order for SamplePlayer to play sound."
+#: scene/2d/animated_sprite.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the 'Frames' property in "
+"order for AnimatedSprite to display frames."
msgstr ""
-#: scene/3d/body_shape.cpp:404
-msgid "CollisionShape only serves to provide a collision shape to a CollisionObject derived node. Please only use it as a child of Area, StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
+#: scene/2d/canvas_modulate.cpp
+msgid ""
+"Only one visible CanvasModulate is allowed per scene (or set of instanced "
+"scenes). The first created one will work, while the rest will be ignored."
msgstr ""
-#: scene/3d/body_shape.cpp:408
-msgid "A shape must be provided for CollisionShape to function. Please create a shape resource for it!"
+#: scene/2d/collision_polygon_2d.cpp
+msgid ""
+"CollisionPolygon2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
msgstr ""
-#: scene/3d/collision_polygon.cpp:237
-msgid "CollisionPolygon only serves to provide a collision shape to a CollisionObject derived node. Please only use it as a child of Area, StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
+#: scene/2d/collision_polygon_2d.cpp
+msgid "An empty CollisionPolygon2D has no effect on collision."
msgstr ""
-#: scene/3d/collision_polygon.cpp:241
-msgid "An empty CollisionPolygon has no effect on collision."
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"CollisionShape2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
msgstr ""
-#: scene/3d/scenario_fx.cpp:93
-msgid "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)."
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"A shape must be provided for CollisionShape2D to function. Please create a "
+"shape resource for it!"
msgstr ""
-#: scene/3d/spatial_sample_player.cpp:197
-msgid "A SampleLibrary resource must be created or set in the 'samples' property in order for SpatialSamplePlayer to play sound."
+#: scene/2d/light_2d.cpp
+msgid ""
+"A texture with the shape of the light must be supplied to the 'texture' "
+"property."
msgstr ""
-#: scene/3d/navigation_mesh.cpp:347
-msgid "A NavigationMesh resource must be set or created for this node to work."
+#: scene/2d/light_occluder_2d.cpp
+msgid ""
+"An occluder polygon must be set (or drawn) for this occluder to take effect."
+msgstr ""
+
+#: scene/2d/light_occluder_2d.cpp
+msgid "The occluder polygon for this occluder is empty. Please draw a polygon!"
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"A NavigationPolygon resource must be set or created for this node to work. "
+"Please set a property or draw a polygon."
msgstr ""
-#: scene/3d/navigation_mesh.cpp:358
-msgid "NavigationMeshInstance must be a child or grandchild to a Navigation node. It only provides navigation data."
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
+"node. It only provides navigation data."
msgstr ""
-#: scene/2d/particles_2d.cpp:211
+#: scene/2d/parallax_layer.cpp
+msgid ""
+"ParallaxLayer node only works when set as child of a ParallaxBackground node."
+msgstr ""
+
+#: scene/2d/particles_2d.cpp
msgid "Path property must point to a valid Particles2D node to work."
msgstr ""
-#: scene/2d/parallax_layer.cpp:125
-msgid "ParallaxLayer node only works when set as child of a ParallaxBackground node."
+#: scene/2d/path_2d.cpp
+msgid "PathFollow2D only works when set as a child of a Path2D node."
msgstr ""
-#: scene/2d/visibility_notifier_2d.cpp:352
-msgid "VisibilityEnable2D works best when used with the edited scene root directly as parent."
+#: scene/2d/remote_transform_2d.cpp
+msgid "Path property must point to a valid Node2D node to work."
msgstr ""
-#: scene/2d/light_occluder_2d.cpp:187
-msgid "An occluder polygon must be set (or drawn) for this occluder to take effect."
+#: scene/2d/sample_player_2d.cpp scene/audio/sample_player.cpp
+msgid ""
+"A SampleLibrary resource must be created or set in the 'samples' property in "
+"order for SamplePlayer to play sound."
msgstr ""
-#: scene/2d/light_occluder_2d.cpp:191
-msgid "The occluder polygon for this occluder is empty. Please draw a polygon!"
+#: scene/2d/sprite.cpp
+msgid ""
+"Path property must point to a valid Viewport node to work. Such Viewport must "
+"be set to 'render target' mode."
msgstr ""
-#: scene/2d/navigation_polygon.cpp:438
-msgid "A NavigationPolygon resource must be set or created for this node to work. Please set a property or draw a polygon."
+#: scene/2d/sprite.cpp
+msgid ""
+"The Viewport set in the path property must be set as 'render target' in order "
+"for this sprite to work."
msgstr ""
-#: scene/2d/navigation_polygon.cpp:450
-msgid "NavigationPolygonInstance must be a child or grandchild to a Navigation2D node. It only provides navigation data."
+#: scene/2d/visibility_notifier_2d.cpp
+msgid ""
+"VisibilityEnable2D works best when used with the edited scene root directly "
+"as parent."
msgstr ""
-#: scene/2d/sprite.cpp:535
-msgid "Path property must point to a valid Viewport node to work. Such Viewport must be set to 'render target' mode."
+#: scene/3d/body_shape.cpp
+msgid ""
+"CollisionShape only serves to provide a collision shape to a CollisionObject "
+"derived node. Please only use it as a child of Area, StaticBody, RigidBody, "
+"KinematicBody, etc. to give them a shape."
msgstr ""
-#: scene/2d/sprite.cpp:543
-msgid "The Viewport set in the path property must be set as 'render taget' in order for this sprite to work"
+#: scene/3d/body_shape.cpp
+msgid ""
+"A shape must be provided for CollisionShape to function. Please create a "
+"shape resource for it!"
msgstr ""
-#: scene/2d/collision_polygon_2d.cpp:303
-msgid "CollisionPolygon2D only serves to provide a collision shape to a CollisionObject2D derived node. Please only use it as a child of Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+#: scene/3d/collision_polygon.cpp
+msgid ""
+"CollisionPolygon only serves to provide a collision shape to a "
+"CollisionObject derived node. Please only use it as a child of Area, "
+"StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
msgstr ""
-#: scene/2d/collision_polygon_2d.cpp:307
-msgid "An empty CollisionPolygon2D has no effect on collision."
+#: scene/3d/collision_polygon.cpp
+msgid "An empty CollisionPolygon has no effect on collision."
msgstr ""
-#: scene/2d/path_2d.cpp:246
-msgid "PathFolow2D only works when set as a child of a Path2D node."
+#: scene/3d/navigation_mesh.cpp
+msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
-#: scene/2d/canvas_modulate.cpp:65
-msgid "Only one visible CanvasModulate is allowed per scene (or set of instanced scenes). The first one created will work, while the rest will be ignored."
+#: scene/3d/navigation_mesh.cpp
+msgid ""
+"NavigationMeshInstance must be a child or grandchild to a Navigation node. It "
+"only provides navigation data."
msgstr ""
-#: scene/2d/animated_sprite.cpp:655
-msgid "A SpriteFrames resource must be created or set in the 'Frames' property in order for AnimatedSprite to display frames."
+#: scene/3d/scenario_fx.cpp
+msgid ""
+"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)."
msgstr ""
-#: scene/2d/remote_transform_2d.cpp:113
-msgid "Path property must point to a valid Node2D node to work."
+#: scene/3d/spatial_sample_player.cpp
+msgid ""
+"A SampleLibrary resource must be created or set in the 'samples' property in "
+"order for SpatialSamplePlayer to play sound."
msgstr ""
-#: scene/2d/collision_shape_2d.cpp:207
-msgid "CollisionShape2D only serves to provide a collision shape to a CollisionObject2D derived node. Please only use it as a child of Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+#: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Cancel"
msgstr ""
-#: scene/2d/collision_shape_2d.cpp:211
-msgid "A shape must be provided for CollisionShape2D to function. Please create a shape resource for it!"
+#: scene/gui/dialogs.cpp
+msgid "OK"
msgstr ""
-#: scene/2d/light_2d.cpp:290
-msgid "A texture with the shape of the light must be supplied to the 'texture' property."
+#: scene/gui/dialogs.cpp
+msgid "Alert!"
msgstr ""
-#: scene/gui/popup.cpp:290
-msgid "Popups will hide by default unless you call popup() or any of the popup*() functions. Making them visible for editing is fine though, but they will hide upon running."
+#: scene/gui/dialogs.cpp
+msgid "Please Confirm..."
msgstr ""
-#: scene/gui/text_edit.cpp:4401
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
msgid "Cut"
msgstr ""
-#: scene/gui/text_edit.cpp:4402
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp
msgid "Copy"
msgstr ""
-#: scene/gui/text_edit.cpp:4403
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp
msgid "Paste"
msgstr ""
-#: scene/gui/text_edit.cpp:4405
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp tools/editor/project_export.cpp
msgid "Select All"
msgstr ""
-#: scene/gui/text_edit.cpp:4406
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_log.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/rich_text_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/script_editor_debugger.cpp
msgid "Clear"
msgstr ""
-#: scene/gui/text_edit.cpp:4408
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
msgid "Undo"
msgstr ""
-#: scene/main/viewport.cpp:2410
-msgid "This viewport is not set as render target. If you intend for it to display it's contents directly to the screen, make it a child of a Control so it can obtain a size. Otherwise, make it a RenderTarget and assign it's internal texture to some node for display."
-msgstr ""
-
-#: tools/editor/project_export.cpp:261
-msgid "Edit Script Options"
+#: scene/gui/popup.cpp
+msgid ""
+"Popups will hide by default unless you call popup() or any of the popup*() "
+"functions. Making them visible for editing is fine though, but they will hide "
+"upon running."
msgstr ""
-#: tools/editor/project_export.cpp:460
-msgid "Please export outside the project folder!"
+#: scene/main/viewport.cpp
+msgid ""
+"This viewport is not set as render target. If you intend for it to display "
+"its contents directly to the screen, make it a child of a Control so it can "
+"obtain a size. Otherwise, make it a RenderTarget and assign its internal "
+"texture to some node for display."
msgstr ""
-#: tools/editor/project_export.cpp:487
-msgid "Error exporting project!"
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Error initializing FreeType."
msgstr ""
-#: tools/editor/project_export.cpp:508
-msgid "Error exporting project PCK! Can't write"
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Unknown font format."
msgstr ""
-#: tools/editor/project_export.cpp:589
-msgid "No exporter for platform '"
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Error loading font."
msgstr ""
-#: tools/editor/project_export.cpp:718
-msgid "Include"
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Invalid font size."
msgstr ""
-#: tools/editor/project_export.cpp:808
-msgid "Change Image Group"
+#: tools/editor/addon_editor_plugin.cpp tools/editor/call_dialog.cpp
+#: tools/editor/connections_dialog.cpp tools/editor/groups_editor.cpp
+#: tools/editor/import_settings.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp
+#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp
+msgid "Close"
msgstr ""
-#: tools/editor/project_export.cpp:861
-msgid "Group Name Can't be Empty!"
+#: tools/editor/addon_editor_plugin.cpp tools/editor/create_dialog.cpp
+#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/settings_config_dialog.cpp
+msgid "Search:"
msgstr ""
-#: tools/editor/project_export.cpp:865
-msgid "Invalid Character in Group Name!"
+#: tools/editor/addon_editor_plugin.cpp tools/editor/code_editor.cpp
+#: tools/editor/editor_help.cpp tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/project_settings.cpp
+msgid "Search"
msgstr ""
-#: tools/editor/project_export.cpp:871
-msgid "Group Name Already Exists!"
+#: tools/editor/addon_editor_plugin.cpp tools/editor/editor_node.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Import"
msgstr ""
-#: tools/editor/project_export.cpp:880
-msgid "Add Image Group"
+#: tools/editor/addon_editor_plugin.cpp tools/editor/project_settings.cpp
+#: tools/editor/settings_config_dialog.cpp
+msgid "Plugins"
msgstr ""
-#: tools/editor/project_export.cpp:906
-msgid "Delete Image Group"
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Sort:"
msgstr ""
-#: tools/editor/project_export.cpp:1064
-msgid "Error saving atlas! "
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Reverse"
msgstr ""
-#: tools/editor/project_export.cpp:1070
-msgid "Atlas Preview ("
+#: tools/editor/addon_editor_plugin.cpp tools/editor/project_settings.cpp
+msgid "Category:"
msgstr ""
-#: tools/editor/project_export.cpp:1139
-msgid "Project Export Settings"
+#: tools/editor/addon_editor_plugin.cpp
+msgid "All"
msgstr ""
-#: tools/editor/project_export.cpp:1147
-msgid "Target"
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Site:"
msgstr ""
-#: tools/editor/project_export.cpp:1165
-msgid "Export to Platform"
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Assets ZIP File"
msgstr ""
-#: tools/editor/project_export.cpp:1176
-msgid "Options"
+#: tools/editor/animation_editor.cpp
+msgid "Disabled"
msgstr ""
-#: tools/editor/project_export.cpp:1184
-msgid "Resources"
+#: tools/editor/animation_editor.cpp
+msgid "All Selection"
msgstr ""
-#: tools/editor/project_export.cpp:1188
-msgid "Export selected resources (including dependencies)."
+#: tools/editor/animation_editor.cpp
+msgid "Move Add Key"
msgstr ""
-#: tools/editor/project_export.cpp:1189
-msgid "Export all resources in the project."
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Transition"
msgstr ""
-#: tools/editor/project_export.cpp:1190
-msgid "Export all files in the project directory."
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Transform"
msgstr ""
-#: tools/editor/project_export.cpp:1193
-msgid "Export Mode:"
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Value"
msgstr ""
-#: tools/editor/project_export.cpp:1202
-msgid "Resources to Export:"
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Call"
msgstr ""
-#: tools/editor/project_export.cpp:1208
-msgid "File"
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Track"
msgstr ""
-#: tools/editor/project_export.cpp:1209
-msgid "Action"
+#: tools/editor/animation_editor.cpp
+msgid "Move Anim Track Up"
msgstr ""
-#: tools/editor/project_export.cpp:1214
-msgid "Filters to export non-resource files (Comma Separated, eg: *.json, *.txt):"
+#: tools/editor/animation_editor.cpp
+msgid "Move Anim Track Down"
msgstr ""
-#: tools/editor/project_export.cpp:1217
-msgid "Filters to exclude from export (Comma Separated, eg: *.json, *.txt):"
+#: tools/editor/animation_editor.cpp
+msgid "Remove Anim Track"
msgstr ""
-#: tools/editor/project_export.cpp:1221
-msgid "Convert text scenes to binary on export"
+#: tools/editor/animation_editor.cpp
+msgid "Anim Duplicate Keys"
msgstr ""
-#: tools/editor/project_export.cpp:1226
-msgid "Images"
+#: tools/editor/animation_editor.cpp
+msgid "Set Transitions to:"
msgstr ""
-#: tools/editor/project_export.cpp:1228
-msgid "Keep Original"
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Rename"
msgstr ""
-#: tools/editor/project_export.cpp:1229
-msgid "Compress for Disk (Lossy, WebP)"
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Change Interpolation"
msgstr ""
-#: tools/editor/project_export.cpp:1230
-msgid "Compress for RAM (BC/PVRTC/ETC)"
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Change Value Mode"
msgstr ""
-#: tools/editor/project_export.cpp:1231
-msgid "Convert Images (*.png):"
+#: tools/editor/animation_editor.cpp
+msgid "Edit Node Curve"
msgstr ""
-#: tools/editor/project_export.cpp:1242
-msgid "Compress for Disk (Lossy) Quality:"
+#: tools/editor/animation_editor.cpp
+msgid "Edit Selection Curve"
msgstr ""
-#: tools/editor/project_export.cpp:1247
-msgid "Shrink All Images:"
+#: tools/editor/animation_editor.cpp
+msgid "Anim Delete Keys"
msgstr ""
-#: tools/editor/project_export.cpp:1263
-msgid "Compress Formats: "
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Key"
msgstr ""
-#: tools/editor/project_export.cpp:1267
-msgid "Image Groups"
+#: tools/editor/animation_editor.cpp
+msgid "Anim Move Keys"
msgstr ""
-#: tools/editor/project_export.cpp:1296
-msgid "Groups:"
+#: tools/editor/animation_editor.cpp
+msgid "Scale Selection"
msgstr ""
-#: tools/editor/project_export.cpp:1303
-msgid "Default"
+#: tools/editor/animation_editor.cpp
+msgid "Scale From Cursor"
msgstr ""
-#: tools/editor/project_export.cpp:1304
-msgid "Compress Disk"
+#: tools/editor/animation_editor.cpp
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Duplicate Selection"
msgstr ""
-#: tools/editor/project_export.cpp:1305
-msgid "Compress RAM"
+#: tools/editor/animation_editor.cpp
+msgid "Duplicate Transposed"
msgstr ""
-#: tools/editor/project_export.cpp:1307
-msgid "Compress Mode:"
+#: tools/editor/animation_editor.cpp
+msgid "Goto Next Step"
msgstr ""
-#: tools/editor/project_export.cpp:1323
-msgid "Lossy Quality:"
+#: tools/editor/animation_editor.cpp
+msgid "Goto Prev Step"
msgstr ""
-#: tools/editor/project_export.cpp:1327
-msgid "Atlas:"
+#: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp
+msgid "Linear"
msgstr ""
-#: tools/editor/project_export.cpp:1335
-msgid "Shrink By:"
+#: tools/editor/animation_editor.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Constant"
msgstr ""
-#: tools/editor/project_export.cpp:1339
-msgid "Preview Atlas"
+#: tools/editor/animation_editor.cpp
+msgid "In"
msgstr ""
-#: tools/editor/project_export.cpp:1354
-msgid "Image Filter:"
+#: tools/editor/animation_editor.cpp
+msgid "Out"
msgstr ""
-#: tools/editor/project_export.cpp:1360
-msgid "Images:"
+#: tools/editor/animation_editor.cpp
+msgid "In-Out"
msgstr ""
-#: tools/editor/project_export.cpp:1368
-msgid "Select None"
+#: tools/editor/animation_editor.cpp
+msgid "Out-In"
msgstr ""
-#: tools/editor/project_export.cpp:1388
-msgid "Group"
+#: tools/editor/animation_editor.cpp
+msgid "Transitions"
msgstr ""
-#: tools/editor/project_export.cpp:1415
-msgid "Samples"
+#: tools/editor/animation_editor.cpp
+msgid "Optimize Animation"
msgstr ""
-#: tools/editor/project_export.cpp:1418
-msgid "Sample Conversion Mode: (.wav files):"
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up Animation"
msgstr ""
-#: tools/editor/project_export.cpp:1419
-msgid "Keep"
+#: tools/editor/animation_editor.cpp
+msgid "Create NEW track for %s and insert key?"
msgstr ""
-#: tools/editor/project_export.cpp:1420
-msgid "Compress (RAM - IMA-ADPCM)"
+#: tools/editor/animation_editor.cpp
+msgid "Create %d NEW tracks and insert keys?"
msgstr ""
-#: tools/editor/project_export.cpp:1424
-msgid "Sampling Rate Limit: (hz)"
+#: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/particles_editor_plugin.cpp
+#: tools/editor/project_manager.cpp tools/editor/script_create_dialog.cpp
+msgid "Create"
msgstr ""
-#: tools/editor/project_export.cpp:1426
-msgid "Trim"
+#: tools/editor/animation_editor.cpp
+msgid "Anim Create & Insert"
msgstr ""
-#: tools/editor/project_export.cpp:1427
-msgid "Trailing Silence:"
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert Track & Key"
msgstr ""
-#: tools/editor/project_export.cpp:1433
-msgid "Script Export Mode:"
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert Key"
msgstr ""
-#: tools/editor/project_export.cpp:1434
-msgid "Text"
+#: tools/editor/animation_editor.cpp
+msgid "Change Anim Len"
msgstr ""
-#: tools/editor/project_export.cpp:1435
-msgid "Compiled"
+#: tools/editor/animation_editor.cpp
+msgid "Change Anim Loop"
msgstr ""
-#: tools/editor/project_export.cpp:1436
-msgid "Encrypted (Provide Key Below)"
+#: tools/editor/animation_editor.cpp
+msgid "Anim Create Typed Value Key"
msgstr ""
-#: tools/editor/project_export.cpp:1438
-msgid "Script Encryption Key (256-bits as hex):"
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert"
msgstr ""
-#: tools/editor/project_export.cpp:1451
-msgid "Export PCK/Zip"
+#: tools/editor/animation_editor.cpp
+msgid "Anim Scale Keys"
msgstr ""
-#: tools/editor/project_export.cpp:1461
-msgid "Export Project"
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Call Track"
msgstr ""
-#: tools/editor/project_export.cpp:1467
-msgid "Password:"
+#: tools/editor/animation_editor.cpp
+msgid "Animation zoom."
msgstr ""
-#: tools/editor/project_export.cpp:1472
-msgid "Export Project PCK"
+#: tools/editor/animation_editor.cpp
+msgid "Length (s):"
msgstr ""
-#: tools/editor/project_export.cpp:1478
-msgid "Export.."
+#: tools/editor/animation_editor.cpp
+msgid "Animation length (in seconds)."
msgstr ""
-#: tools/editor/project_export.cpp:1532
-msgid "Export path empty, see export options"
+#: tools/editor/animation_editor.cpp
+msgid "Step (s):"
msgstr ""
-#: tools/editor/project_export.cpp:1554
-msgid "Corrupted export data.."
+#: tools/editor/animation_editor.cpp
+msgid "Cursor step snap (in seconds)."
msgstr ""
-#: tools/editor/project_export.cpp:1556
-msgid "Corrupted export data..."
+#: tools/editor/animation_editor.cpp
+msgid "Enable/Disable looping in animation."
msgstr ""
-#: tools/editor/project_export.cpp:1709
-msgid "Cannot make dir: "
+#: tools/editor/animation_editor.cpp
+msgid "Add new tracks."
msgstr ""
-#: tools/editor/project_export.cpp:1717
-msgid "Cannot change to dir: "
+#: tools/editor/animation_editor.cpp
+msgid "Move current track up."
msgstr ""
-#: tools/editor/project_export.cpp:1745
-msgid "Unknown optimizer preset: "
+#: tools/editor/animation_editor.cpp
+msgid "Move current track down."
msgstr ""
-#: tools/editor/project_export.cpp:1766
-msgid "Preset '"
+#: tools/editor/animation_editor.cpp
+msgid "Remove selected track."
msgstr ""
-#: tools/editor/project_export.cpp:1810
-msgid "Errr loading resource to optimize: "
+#: tools/editor/animation_editor.cpp
+msgid "Track tools"
msgstr ""
-#: tools/editor/project_export.cpp:1833
-msgid "Errr saving optimized resource: "
+#: tools/editor/animation_editor.cpp
+msgid "Enable editing of individual keys by clicking them."
msgstr ""
-#: tools/editor/project_export.cpp:1856
-msgid "Error copying from: "
+#: tools/editor/animation_editor.cpp
+msgid "Anim. Optimizer"
msgstr ""
-#: tools/editor/project_export.cpp:1908
-msgid "Project Export"
+#: tools/editor/animation_editor.cpp
+msgid "Max. Linear Error:"
msgstr ""
-#: tools/editor/project_export.cpp:1910
-msgid "Export Preset:"
+#: tools/editor/animation_editor.cpp
+msgid "Max. Angular Error:"
msgstr ""
-#: tools/editor/project_export.cpp:1914
-msgid "Export"
+#: tools/editor/animation_editor.cpp
+msgid "Max Optimizable Angle:"
msgstr ""
-#: tools/editor/code_editor.cpp:61
-msgid "Go to Line"
+#: tools/editor/animation_editor.cpp
+msgid "Optimize"
msgstr ""
-#: tools/editor/code_editor.cpp:63
-msgid "Line Number:"
+#: tools/editor/animation_editor.cpp
+msgid "Key"
msgstr ""
-#: tools/editor/code_editor.cpp:81
-msgid "Search"
+#: tools/editor/animation_editor.cpp
+msgid "Transition"
msgstr ""
-#: tools/editor/code_editor.cpp:87
-msgid "Find"
+#: tools/editor/animation_editor.cpp
+msgid "Scale Ratio:"
msgstr ""
-#: tools/editor/code_editor.cpp:101
-msgid "Replace"
+#: tools/editor/animation_editor.cpp
+msgid "Call Functions in Which Node?"
msgstr ""
-#: tools/editor/code_editor.cpp:124
-msgid "Next"
+#: tools/editor/animation_editor.cpp
+msgid "Remove invalid keys"
msgstr ""
-#: tools/editor/code_editor.cpp:219
-msgid "Replaced "
+#: tools/editor/animation_editor.cpp
+msgid "Remove unresolved and empty tracks"
msgstr ""
-#: tools/editor/code_editor.cpp:219
-msgid " ocurrence(s)."
+#: tools/editor/animation_editor.cpp
+msgid "Clean-up all animations"
msgstr ""
-#: tools/editor/code_editor.cpp:277
-msgid "Not Found!"
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up Animation(s) (NO UNDO!)"
msgstr ""
-#: tools/editor/code_editor.cpp:414
-msgid "Replace By"
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up"
msgstr ""
-#: tools/editor/code_editor.cpp:439
-msgid "Whole Words"
+#: tools/editor/array_property_edit.cpp
+msgid "Resize Array"
msgstr ""
-#: tools/editor/code_editor.cpp:443
-msgid "Case Sensitive"
+#: tools/editor/array_property_edit.cpp
+msgid "Change Array Value Type"
msgstr ""
-#: tools/editor/code_editor.cpp:447
-msgid "Backwards"
+#: tools/editor/array_property_edit.cpp
+msgid "Change Array Value"
msgstr ""
-#: tools/editor/code_editor.cpp:459
-msgid "Prompt On Replace"
+#: tools/editor/call_dialog.cpp
+msgid "Method List For '%s':"
msgstr ""
-#: tools/editor/code_editor.cpp:464
-msgid "Selection Only"
+#: tools/editor/call_dialog.cpp
+msgid "Call"
msgstr ""
-#: tools/editor/code_editor.cpp:478
-msgid "Skip"
+#: tools/editor/call_dialog.cpp
+msgid "Method List:"
msgstr ""
-#: tools/editor/code_editor.cpp:501
-msgid "Line: "
+#: tools/editor/call_dialog.cpp
+msgid "Arguments:"
msgstr ""
-#: tools/editor/code_editor.cpp:501
-msgid ", Col: "
+#: tools/editor/call_dialog.cpp
+msgid "Return:"
msgstr ""
-#: tools/editor/connections_dialog.cpp:179
-msgid "Method in target Node must be specified!"
+#: tools/editor/code_editor.cpp
+msgid "Go to Line"
msgstr ""
-#: tools/editor/connections_dialog.cpp:297
-msgid "Dialogs"
+#: tools/editor/code_editor.cpp
+msgid "Line Number:"
msgstr ""
-#: tools/editor/connections_dialog.cpp:303
-msgid "Connect To Node:"
+#: tools/editor/code_editor.cpp
+msgid "No Matches"
msgstr ""
-#: tools/editor/connections_dialog.cpp:310
-msgid "Binds (Extra Params):"
+#: tools/editor/code_editor.cpp
+msgid "Replaced %d Ocurrence(s)."
msgstr ""
-#: tools/editor/connections_dialog.cpp:363
-msgid "Add"
+#: tools/editor/code_editor.cpp
+msgid "Replace"
msgstr ""
-#: tools/editor/connections_dialog.cpp:372
-msgid "Remove"
+#: tools/editor/code_editor.cpp
+msgid "Replace All"
msgstr ""
-#: tools/editor/connections_dialog.cpp:381
-msgid "Path To Node:"
+#: tools/editor/code_editor.cpp
+msgid "Match Case"
msgstr ""
-#: tools/editor/connections_dialog.cpp:400
-msgid "Method In Node:"
+#: tools/editor/code_editor.cpp
+msgid "Whole Words"
msgstr ""
-#: tools/editor/connections_dialog.cpp:419
-msgid "List.."
+#: tools/editor/code_editor.cpp
+msgid "Selection Only"
msgstr ""
-#: tools/editor/connections_dialog.cpp:432
-msgid "Make Function "
+#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp
+msgid "Find"
msgstr ""
-#: tools/editor/connections_dialog.cpp:436
-msgid "Deferred"
+#: tools/editor/code_editor.cpp
+msgid "Next"
msgstr ""
-#: tools/editor/connections_dialog.cpp:440
-msgid "Oneshot"
+#: tools/editor/code_editor.cpp
+msgid "Replaced %d ocurrence(s)."
msgstr ""
-#: tools/editor/connections_dialog.cpp:450
-msgid "Realtime"
+#: tools/editor/code_editor.cpp
+msgid "Not found!"
msgstr ""
-#: tools/editor/connections_dialog.cpp:466
-msgid "Close"
+#: tools/editor/code_editor.cpp
+msgid "Replace By"
msgstr ""
-#: tools/editor/connections_dialog.cpp:467
-msgid "Connect"
+#: tools/editor/code_editor.cpp
+msgid "Case Sensitive"
msgstr ""
-#: tools/editor/connections_dialog.cpp:514
-msgid "Connect '"
+#: tools/editor/code_editor.cpp
+msgid "Backwards"
msgstr ""
-#: tools/editor/connections_dialog.cpp:575
-msgid "Create Subscription"
+#: tools/editor/code_editor.cpp
+msgid "Prompt On Replace"
msgstr ""
-#: tools/editor/connections_dialog.cpp:613
-msgid "Remove Subscription"
+#: tools/editor/code_editor.cpp
+msgid "Skip"
msgstr ""
-#: tools/editor/connections_dialog.cpp:792
-msgid "Connect.."
+#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp
+msgid "Line:"
msgstr ""
-#: tools/editor/connections_dialog.cpp:802
-msgid "Disconnect"
+#: tools/editor/code_editor.cpp
+msgid "Col:"
msgstr ""
-#: tools/editor/connections_dialog.cpp:823
-msgid "Edit Connections.."
+#: tools/editor/connections_dialog.cpp
+msgid "Method in target Node must be specified!"
msgstr ""
-#: tools/editor/connections_dialog.cpp:836
-msgid "Connections:"
+#: tools/editor/connections_dialog.cpp
+msgid "Connect To Node:"
msgstr ""
-#: tools/editor/editor_sub_scene.cpp:201
-msgid "Select Sub-Scene.."
+#: tools/editor/connections_dialog.cpp
+msgid "Binds (Extra Params):"
msgstr ""
-#: tools/editor/editor_sub_scene.cpp:217
-msgid "Scene Path:"
+#: tools/editor/connections_dialog.cpp tools/editor/groups_editor.cpp
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/project_settings.cpp
+msgid "Add"
msgstr ""
-#: tools/editor/editor_sub_scene.cpp:221
-msgid "Import From Node:"
+#: tools/editor/connections_dialog.cpp tools/editor/dependency_editor.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp tools/editor/project_manager.cpp
+msgid "Remove"
msgstr ""
-#: tools/editor/settings_config_dialog.cpp:110
-msgid "Editor Settings"
+#: tools/editor/connections_dialog.cpp
+msgid "Path To Node:"
msgstr ""
-#: tools/editor/settings_config_dialog.cpp:118
-msgid "General"
+#: tools/editor/connections_dialog.cpp
+msgid "Method In Node:"
msgstr ""
-#: tools/editor/settings_config_dialog.cpp:125
-msgid "Search: "
+#: tools/editor/connections_dialog.cpp
+msgid "Make Function"
msgstr ""
-#: tools/editor/settings_config_dialog.cpp:145
-msgid "Plugins"
+#: tools/editor/connections_dialog.cpp
+msgid "Deferred"
msgstr ""
-#: tools/editor/settings_config_dialog.cpp:149
-msgid "Plugin List: "
+#: tools/editor/connections_dialog.cpp
+msgid "Oneshot"
msgstr ""
-#: tools/editor/settings_config_dialog.cpp:152
-msgid "Load.."
+#: tools/editor/connections_dialog.cpp
+msgid "Connect"
msgstr ""
-#: tools/editor/settings_config_dialog.cpp:156
-msgid "Apply"
+#: tools/editor/connections_dialog.cpp
+msgid "Connect '%s' to '%s'"
msgstr ""
-#: tools/editor/editor_dir_dialog.cpp:211
-msgid "Choose a Directory"
+#: tools/editor/connections_dialog.cpp
+msgid "Create Subscription"
msgstr ""
-#: tools/editor/editor_dir_dialog.cpp:219
-msgid "Create Folder"
+#: tools/editor/connections_dialog.cpp
+msgid "Connect.."
msgstr ""
-#: tools/editor/editor_dir_dialog.cpp:231
-msgid "Name:"
+#: tools/editor/connections_dialog.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Disconnect"
msgstr ""
-#: tools/editor/editor_dir_dialog.cpp:236
-msgid "Could not create folder."
+#: tools/editor/connections_dialog.cpp
+msgid "Edit Connections.."
msgstr ""
-#: tools/editor/editor_dir_dialog.cpp:239
-msgid "Choose"
+#: tools/editor/connections_dialog.cpp
+msgid "Connections:"
msgstr ""
-#: tools/editor/editor_file_system.cpp:317
-msgid "ScanFS"
+#: tools/editor/create_dialog.cpp
+msgid "Create New"
msgstr ""
-#: tools/editor/editor_file_system.cpp:612
-msgid "Can't go into subdir: "
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+msgid "Matches:"
msgstr ""
-#: tools/editor/editor_file_system.cpp:826
-msgid "ScanSources"
+#: tools/editor/dependency_editor.cpp
+msgid "Search Replacement For:"
msgstr ""
-#: tools/editor/dependency_editor.cpp:30
-msgid "Search Replacement For: "
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies For:"
msgstr ""
-#: tools/editor/dependency_editor.cpp:183
-msgid "EditorIcons"
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"Scene '%s' is currently being edited.\n"
+"Changes will not take effect unless reloaded."
msgstr ""
-#: tools/editor/dependency_editor.cpp:212
-msgid "Dependencies For: "
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"Resource '%s' is in use.\n"
+"Changes will take effect when reloaded."
msgstr ""
-#: tools/editor/dependency_editor.cpp:218
-msgid "Scene '"
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies"
msgstr ""
-#: tools/editor/dependency_editor.cpp:220
-msgid "Resource '"
+#: tools/editor/dependency_editor.cpp
+msgid "Resource"
msgstr ""
-#: tools/editor/dependency_editor.cpp:236
-msgid "Dependencies"
+#: tools/editor/dependency_editor.cpp tools/editor/project_manager.cpp
+#: tools/editor/project_settings.cpp
+msgid "Path"
msgstr ""
-#: tools/editor/dependency_editor.cpp:249
+#: tools/editor/dependency_editor.cpp
msgid "Dependencies:"
msgstr ""
-#: tools/editor/dependency_editor.cpp:252
+#: tools/editor/dependency_editor.cpp
msgid "Fix Broken"
msgstr ""
-#: tools/editor/dependency_editor.cpp:264
+#: tools/editor/dependency_editor.cpp
msgid "Dependency Editor"
msgstr ""
-#: tools/editor/dependency_editor.cpp:268
+#: tools/editor/dependency_editor.cpp
msgid "Search Replacement Resource:"
msgstr ""
-#: tools/editor/dependency_editor.cpp:322
-msgid "Owners Of: "
+#: tools/editor/dependency_editor.cpp
+msgid "Owners Of:"
msgstr ""
-#: tools/editor/dependency_editor.cpp:408
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"The files being removed are required by other resources in order for them to "
+"work.\n"
+"Remove them anyway? (no undo)"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
msgid "Remove selected files from the project? (no undo)"
msgstr ""
-#: tools/editor/dependency_editor.cpp:451
-msgid "Error loading: "
+#: tools/editor/dependency_editor.cpp
+msgid "Error loading:"
msgstr ""
-#: tools/editor/dependency_editor.cpp:499
+#: tools/editor/dependency_editor.cpp
msgid "Scene failed to load due to missing dependencies:"
msgstr ""
-#: tools/editor/dependency_editor.cpp:501
+#: tools/editor/dependency_editor.cpp
msgid "Open Anyway"
msgstr ""
-#: tools/editor/dependency_editor.cpp:505
+#: tools/editor/dependency_editor.cpp
msgid "Which action should be taken?"
msgstr ""
-#: tools/editor/dependency_editor.cpp:508
+#: tools/editor/dependency_editor.cpp
msgid "Fix Dependencies"
msgstr ""
-#: tools/editor/dependency_editor.cpp:510
+#: tools/editor/dependency_editor.cpp
msgid "Errors loading!"
msgstr ""
-#: tools/editor/dependency_editor.cpp:526
-msgid "Permanently Delete "
+#: tools/editor/dependency_editor.cpp
+msgid "Permanently delete %d item(s)? (No undo!)"
msgstr ""
-#: tools/editor/dependency_editor.cpp:679
+#: tools/editor/dependency_editor.cpp
msgid "Owns"
msgstr ""
-#: tools/editor/dependency_editor.cpp:681
+#: tools/editor/dependency_editor.cpp
msgid "Resources Without Explicit Ownership:"
msgstr ""
-#: tools/editor/dependency_editor.cpp:682
+#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
msgid "Orphan Resource Explorer"
msgstr ""
-#: tools/editor/dependency_editor.cpp:684
+#: tools/editor/dependency_editor.cpp
msgid "Delete selected files?"
msgstr ""
-#: tools/editor/dependency_editor.cpp:685
+#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/item_list_editor_plugin.cpp tools/editor/scenes_dock.cpp
msgid "Delete"
msgstr ""
-#: tools/editor/spatial_editor_gizmos.cpp:734
-msgid "Radius"
-msgstr ""
-
-#: tools/editor/spatial_editor_gizmos.cpp:736
-msgid "Aperture"
-msgstr ""
-
-#: tools/editor/spatial_editor_gizmos.cpp:833
-msgid "Change Light Radius"
-msgstr ""
-
-#: tools/editor/spatial_editor_gizmos.cpp:1033
-msgid "FOV"
-msgstr ""
-
-#: tools/editor/spatial_editor_gizmos.cpp:1035
-msgid "Size"
-msgstr ""
-
-#: tools/editor/spatial_editor_gizmos.cpp:1083
-msgid "Change Camera FOV"
-msgstr ""
-
-#: tools/editor/spatial_editor_gizmos.cpp:1096
-msgid "Change Camera Size"
-msgstr ""
-
-#: tools/editor/spatial_editor_gizmos.cpp:1703
-msgid "Extents"
-msgstr ""
-
-#: tools/editor/spatial_editor_gizmos.cpp:1713
-msgid "Length"
-msgstr ""
-
-#: tools/editor/spatial_editor_gizmos.cpp:1841
-msgid "Change Sphere Shape Radius"
-msgstr ""
-
-#: tools/editor/spatial_editor_gizmos.cpp:1857
-msgid "Change Box Shape Extents"
-msgstr ""
-
-#: tools/editor/spatial_editor_gizmos.cpp:1876
-msgid "Change Capsule Shape Radius"
-msgstr ""
-
-#: tools/editor/spatial_editor_gizmos.cpp:1880
-msgid "Change Capsule Shape Height"
-msgstr ""
-
-#: tools/editor/spatial_editor_gizmos.cpp:1899
-msgid "Change Ray Shape Length"
-msgstr ""
-
-#: tools/editor/spatial_editor_gizmos.cpp:2246
-msgid "Change Notifier Extents"
-msgstr ""
-
-#: tools/editor/script_create_dialog.cpp:77
-msgid "Invaild parent class name"
-msgstr ""
-
-#: tools/editor/script_create_dialog.cpp:81
-msgid "Valid Chars: a-z A-Z 0-9 _"
-msgstr ""
-
-#: tools/editor/script_create_dialog.cpp:84
-msgid "Invalid class name"
-msgstr ""
-
-#: tools/editor/script_create_dialog.cpp:87
-msgid "Valid Name"
-msgstr ""
-
-#: tools/editor/script_create_dialog.cpp:92
-msgid "N/A"
-msgstr ""
-
-#: tools/editor/script_create_dialog.cpp:101
-msgid "Class Name is Invalid!"
-msgstr ""
-
-#: tools/editor/script_create_dialog.cpp:106
-msgid "Parent Class Name is Invalid!"
+#: tools/editor/editor_data.cpp
+msgid "Updating Scene"
msgstr ""
-#: tools/editor/script_create_dialog.cpp:136
-msgid "Path is Invalid!"
+#: tools/editor/editor_data.cpp
+msgid "Storing local changes.."
msgstr ""
-#: tools/editor/script_create_dialog.cpp:144
-msgid "Could not create script in filesystem: "
+#: tools/editor/editor_data.cpp
+msgid "Updating scene.."
msgstr ""
-#: tools/editor/script_create_dialog.cpp:218
-msgid "Path is Empty"
+#: tools/editor/editor_dir_dialog.cpp
+msgid "Choose a Directory"
msgstr ""
-#: tools/editor/script_create_dialog.cpp:227
-msgid "Path is not local"
+#: tools/editor/editor_dir_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Create Folder"
msgstr ""
-#: tools/editor/script_create_dialog.cpp:237
-msgid "Base Path Invalid"
+#: tools/editor/editor_dir_dialog.cpp tools/editor/editor_file_dialog.cpp
+#: tools/editor/editor_plugin_settings.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Name:"
msgstr ""
-#: tools/editor/script_create_dialog.cpp:252
-msgid "File Exists"
+#: tools/editor/editor_dir_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Could not create folder."
msgstr ""
-#: tools/editor/script_create_dialog.cpp:276
-msgid "Invalid Extension"
+#: tools/editor/editor_dir_dialog.cpp
+msgid "Choose"
msgstr ""
-#: tools/editor/script_create_dialog.cpp:282
-msgid "Path is Valid"
+#: tools/editor/editor_file_dialog.cpp
+msgid "File Exists, Overwrite?"
msgstr ""
-#: tools/editor/script_create_dialog.cpp:318
-msgid "Class Name:"
+#: tools/editor/editor_file_dialog.cpp
+msgid "All Recognized"
msgstr ""
-#: tools/editor/script_create_dialog.cpp:321
-msgid "Inherits:"
+#: tools/editor/editor_file_dialog.cpp
+msgid "All Files (*)"
msgstr ""
-#: tools/editor/script_create_dialog.cpp:325
-msgid "Language"
+#: tools/editor/editor_file_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/quick_open.cpp tools/editor/scenes_dock.cpp
+msgid "Open"
msgstr ""
-#: tools/editor/script_create_dialog.cpp:353
-msgid "Error!"
+#: tools/editor/editor_file_dialog.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save"
msgstr ""
-#: tools/editor/script_create_dialog.cpp:358
-msgid "Built-In Script"
+#: tools/editor/editor_file_dialog.cpp
+msgid "Save a File"
msgstr ""
-#: tools/editor/script_create_dialog.cpp:362
+#: tools/editor/editor_file_dialog.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/script_create_dialog.cpp
msgid "Path:"
msgstr ""
-#: tools/editor/script_create_dialog.cpp:366
-msgid "Create Script for Node"
-msgstr ""
-
-#: tools/editor/script_create_dialog.cpp:371
-msgid "Create"
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:151
-msgid "Disabled"
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:153
-msgid "All Selection"
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:320
-msgid "Move Add Key"
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:348
-msgid "Anim Change Transition"
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:369
-msgid "Anim Change Transform"
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:391
-msgid "Anim Change Value"
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:467
-msgid "Anim Change Call"
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:686
-msgid "Anim Add Track"
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:714
-msgid "Move Anim Track Up"
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:727
-msgid "Move Anim Track Down"
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:739
-msgid "Remove Anim Track"
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:795
-msgid "Anim Duplicate Keys"
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:892
-msgid "Set Transitions to: "
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:1602
-msgid "Anim Track Rename"
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:1618
-msgid "Anim Track Change Interpolation"
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:1628
-msgid "Anim Track Change Value Mode"
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:1720
-msgid "Edit Node Curve"
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:1722
-msgid "Edit Selection Curve"
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:1865
-msgid "Anim Delete Keys"
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:2257
-msgid "Anim Add Key"
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:2422
-msgid "Anim Move Keys"
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:2875
-msgid "Scale Selection"
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:2876
-msgid "Scale From Cursor"
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:2878
-msgid "Duplicate Selection"
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:2879
-msgid "Duplicate Transposed"
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:2881
-msgid "Goto Next Step"
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:2882
-msgid "Goto Prev Step"
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:2885
-msgid "Linear"
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:2886
-msgid "Constant"
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:2887
-msgid "In"
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:2888
-msgid "Out"
-msgstr ""
-
-#: tools/editor/animation_editor.cpp:2889
-msgid "In-Out"
+#: tools/editor/editor_file_dialog.cpp tools/editor/scenes_dock.cpp
+msgid "Favorites:"
msgstr ""
-#: tools/editor/animation_editor.cpp:2890
-msgid "Out-In"
+#: tools/editor/editor_file_dialog.cpp
+msgid "Recent:"
msgstr ""
-#: tools/editor/animation_editor.cpp:2891
-msgid "Transitions"
+#: tools/editor/editor_file_dialog.cpp
+msgid "Directories & Files:"
msgstr ""
-#: tools/editor/animation_editor.cpp:2896
-msgid "Set Transitions.."
+#: tools/editor/editor_file_dialog.cpp
+msgid "Preview:"
msgstr ""
-#: tools/editor/animation_editor.cpp:2898
-msgid "Optimize Animation"
+#: tools/editor/editor_file_dialog.cpp tools/editor/script_editor_debugger.cpp
+msgid "File:"
msgstr ""
-#: tools/editor/animation_editor.cpp:2899
-msgid "Clean-Up Animation"
+#: tools/editor/editor_file_dialog.cpp
+msgid "Filter:"
msgstr ""
-#: tools/editor/animation_editor.cpp:3116
-msgid "Create NEW track for "
+#: tools/editor/editor_file_dialog.cpp
+msgid "Must use a valid extension."
msgstr ""
-#: tools/editor/animation_editor.cpp:3116
-msgid " and insert key?"
+#: tools/editor/editor_file_system.cpp
+msgid "Cannot go into subdir:"
msgstr ""
-#: tools/editor/animation_editor.cpp:3118
-msgid "Create "
+#: tools/editor/editor_file_system.cpp
+msgid "ScanSources"
msgstr ""
-#: tools/editor/animation_editor.cpp:3118
-msgid " NEW tracks and insert keys?"
+#: tools/editor/editor_help.cpp
+msgid "Search Classes"
msgstr ""
-#: tools/editor/animation_editor.cpp:3292
-msgid "Anim Create & Insert"
+#: tools/editor/editor_help.cpp
+msgid "Class List:"
msgstr ""
-#: tools/editor/animation_editor.cpp:3313
-msgid "Anim Insert Track & Key"
+#: tools/editor/editor_help.cpp tools/editor/property_editor.cpp
+msgid "Class:"
msgstr ""
-#: tools/editor/animation_editor.cpp:3348
-msgid "Anim Insert Key"
+#: tools/editor/editor_help.cpp tools/editor/scene_tree_editor.cpp
+#: tools/editor/script_create_dialog.cpp
+msgid "Inherits:"
msgstr ""
-#: tools/editor/animation_editor.cpp:3425
-msgid "Change Anim Len"
+#: tools/editor/editor_help.cpp
+msgid "Inherited by:"
msgstr ""
-#: tools/editor/animation_editor.cpp:3454
-msgid "Change Anim Loop"
+#: tools/editor/editor_help.cpp
+msgid "Brief Description:"
msgstr ""
-#: tools/editor/animation_editor.cpp:3465
-msgid "Anim Create Typed Value Key"
+#: tools/editor/editor_help.cpp
+msgid "Public Methods:"
msgstr ""
-#: tools/editor/animation_editor.cpp:3513
-msgid "Anim Insert"
+#: tools/editor/editor_help.cpp
+msgid "Members:"
msgstr ""
-#: tools/editor/animation_editor.cpp:3592
-msgid "Anim Scale Keys"
+#: tools/editor/editor_help.cpp
+msgid "GUI Theme Items:"
msgstr ""
-#: tools/editor/animation_editor.cpp:3701
-msgid "Anim Add Call Track"
+#: tools/editor/editor_help.cpp
+msgid "Signals:"
msgstr ""
-#: tools/editor/animation_editor.cpp:3804
-msgid "Animation zoom."
+#: tools/editor/editor_help.cpp
+msgid "Constants:"
msgstr ""
-#: tools/editor/animation_editor.cpp:3821
-msgid "Len(s):"
+#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
msgstr ""
-#: tools/editor/animation_editor.cpp:3830
-msgid "Animation length (in seconds)."
+#: tools/editor/editor_help.cpp
+msgid "Method Description:"
msgstr ""
-#: tools/editor/animation_editor.cpp:3836
-msgid "Step(s):"
+#: tools/editor/editor_help.cpp
+msgid "Search Text"
msgstr ""
-#: tools/editor/animation_editor.cpp:3846
-msgid "Cursor step snap (in seconds)."
+#: tools/editor/editor_import_export.cpp
+msgid "Added:"
msgstr ""
-#: tools/editor/animation_editor.cpp:3855
-msgid "Enable/Disable looping in animation."
+#: tools/editor/editor_import_export.cpp
+msgid "Removed:"
msgstr ""
-#: tools/editor/animation_editor.cpp:3862
-msgid "Add new tracks."
+#: tools/editor/editor_import_export.cpp tools/editor/project_export.cpp
+msgid "Error saving atlas:"
msgstr ""
-#: tools/editor/animation_editor.cpp:3869
-msgid "Move current track up."
+#: tools/editor/editor_import_export.cpp
+msgid "Could not save atlas subtexture:"
msgstr ""
-#: tools/editor/animation_editor.cpp:3876
-msgid "Move current track down."
+#: tools/editor/editor_import_export.cpp
+msgid "Storing File:"
msgstr ""
-#: tools/editor/animation_editor.cpp:3883
-msgid "Remove selected track."
+#: tools/editor/editor_import_export.cpp
+msgid "Packing"
msgstr ""
-#: tools/editor/animation_editor.cpp:3890
-msgid "Track tools"
+#: tools/editor/editor_import_export.cpp
+msgid "Exporting for %s"
msgstr ""
-#: tools/editor/animation_editor.cpp:3898
-msgid "Enable editing of individual keys by clicking them."
+#: tools/editor/editor_import_export.cpp
+msgid "Setting Up.."
msgstr ""
-#: tools/editor/animation_editor.cpp:3902
-msgid "Anim. Optimizer"
+#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
+msgid "Re-Importing"
msgstr ""
-#: tools/editor/animation_editor.cpp:3911
-msgid "Max. Linear Error:"
+#: tools/editor/editor_node.cpp
+msgid "Importing:"
msgstr ""
-#: tools/editor/animation_editor.cpp:3918
-msgid "Max. Angular Error:"
+#: tools/editor/editor_node.cpp
+msgid "Node From Scene"
msgstr ""
-#: tools/editor/animation_editor.cpp:3920
-msgid "Max Optimizable Angle:"
+#: tools/editor/editor_node.cpp tools/editor/scenes_dock.cpp
+msgid "Re-Import.."
msgstr ""
-#: tools/editor/animation_editor.cpp:3926
-msgid "Optimize"
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/resources_dock.cpp
+msgid "Error saving resource!"
msgstr ""
-#: tools/editor/animation_editor.cpp:3932
-msgid "Keys"
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/resources_dock.cpp
+msgid "Save Resource As.."
msgstr ""
-#: tools/editor/animation_editor.cpp:3942
-msgid "Base: "
+#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
+msgid "I see.."
msgstr ""
-#: tools/editor/animation_editor.cpp:3981
-msgid "Key"
+#: tools/editor/editor_node.cpp
+msgid "Can't open file for writing:"
msgstr ""
-#: tools/editor/animation_editor.cpp:3995
-msgid "Transition"
+#: tools/editor/editor_node.cpp
+msgid "Requested file format unknown:"
msgstr ""
-#: tools/editor/animation_editor.cpp:4068
-msgid "Scale Ratio:"
+#: tools/editor/editor_node.cpp
+msgid "Error while saving."
msgstr ""
-#: tools/editor/animation_editor.cpp:4074
-msgid "Call Functions in Which Node?"
+#: tools/editor/editor_node.cpp
+msgid "Saving Scene"
msgstr ""
-#: tools/editor/animation_editor.cpp:4082
-msgid "Remove invalid keys"
+#: tools/editor/editor_node.cpp
+msgid "Analyzing"
msgstr ""
-#: tools/editor/animation_editor.cpp:4087
-msgid "Remove unresolved and empty tracks"
+#: tools/editor/editor_node.cpp
+msgid "Creating Thumbnail"
msgstr ""
-#: tools/editor/animation_editor.cpp:4092
-msgid "Clean-Up all animations"
+#: tools/editor/editor_node.cpp
+msgid ""
+"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied."
msgstr ""
-#: tools/editor/animation_editor.cpp:4095
-msgid "Clean up Animation(s) (NO UNDO!)"
+#: tools/editor/editor_node.cpp
+msgid "Failed to load resource."
msgstr ""
-#: tools/editor/animation_editor.cpp:4096
-msgid "Clean-Up"
+#: tools/editor/editor_node.cpp
+msgid "Can't load MeshLibrary for merging!"
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:282
-msgid "Bytes: "
+#: tools/editor/editor_node.cpp
+msgid "Error saving MeshLibrary!"
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:402
-msgid "Type:"
+#: tools/editor/editor_node.cpp
+msgid "Can't load TileSet for merging!"
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:556
-msgid "Errors"
+#: tools/editor/editor_node.cpp
+msgid "Error saving TileSet!"
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:557
-msgid "Debugger"
+#: tools/editor/editor_node.cpp
+msgid "Can't open export templates zip."
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:561
-msgid "Errors ("
+#: tools/editor/editor_node.cpp
+msgid "Loading Export Templates"
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:562
-msgid "Debugger ("
+#: tools/editor/editor_node.cpp
+msgid "Error trying to save layout!"
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:587
-msgid "Child Process Connected"
+#: tools/editor/editor_node.cpp
+msgid "Default editor layout overridden."
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:1154
-msgid "File: "
+#: tools/editor/editor_node.cpp
+msgid "Layout name not found!"
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:1240
-msgid "Step Into"
+#: tools/editor/editor_node.cpp
+msgid "Restored default layout to base settings."
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:1245
-msgid "Step Over"
+#: tools/editor/editor_node.cpp
+msgid "Copy Params"
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:1252
-msgid "Break"
+#: tools/editor/editor_node.cpp
+msgid "Set Params"
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:1257
-msgid "Continue"
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Paste Resource"
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:1264
-msgid "Inspect Previous Instance"
+#: tools/editor/editor_node.cpp
+msgid "Copy Resource"
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:1268
-msgid "Inspect Next Instance"
+#: tools/editor/editor_node.cpp
+msgid "Make Built-In"
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:1278
-msgid "Stack Frames"
+#: tools/editor/editor_node.cpp
+msgid "Make Sub-Resources Unique"
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:1287
-msgid "Variable"
+#: tools/editor/editor_node.cpp
+msgid "There is no defined scene to run."
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:1311
-msgid "Errors:"
+#: tools/editor/editor_node.cpp
+msgid "Current scene was never saved, please save it prior to running."
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:1317
-msgid "Stack Trace (if applies):"
+#: tools/editor/editor_node.cpp
+msgid "Could not start subprocess!"
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:1328
-msgid "Monitor"
+#: tools/editor/editor_node.cpp
+msgid "Open Scene"
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:1329
-msgid "Value"
+#: tools/editor/editor_node.cpp
+msgid "Open Base Scene"
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:1369
-msgid "List of Video Memory Usage by Resource: "
+#: tools/editor/editor_node.cpp
+msgid "Quick Open Scene.."
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:1372
-msgid "Total: "
+#: tools/editor/editor_node.cpp
+msgid "Quick Open Script.."
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:1390
-msgid "Video Mem"
+#: tools/editor/editor_node.cpp
+msgid "Yes"
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:1393
-msgid "Resource Path"
+#: tools/editor/editor_node.cpp
+msgid "Close scene? (Unsaved changes will be lost)"
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:1396
-msgid "Type"
+#: tools/editor/editor_node.cpp
+msgid "Save Scene As.."
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:1399
-msgid "Format"
+#: tools/editor/editor_node.cpp
+msgid "This scene has never been saved. Save before running?"
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:1402
-msgid "Usage"
+#: tools/editor/editor_node.cpp
+msgid "Please save the scene first."
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:1409
-msgid "Info"
+#: tools/editor/editor_node.cpp
+msgid "Save Translatable Strings"
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:1416
-msgid "Clicked Control:"
+#: tools/editor/editor_node.cpp
+msgid "Export Mesh Library"
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:1418
-msgid "Clicked Control Type:"
+#: tools/editor/editor_node.cpp
+msgid "Export Tile Set"
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:1424
-msgid "Live Edit Root:"
+#: tools/editor/editor_node.cpp
+msgid "Quit"
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:1427
-msgid "Set From Tree"
+#: tools/editor/editor_node.cpp
+msgid "Exit the editor?"
msgstr ""
-#: tools/editor/script_editor_debugger.cpp:1444
-msgid "Scene Tree:"
+#: tools/editor/editor_node.cpp
+msgid "Current scene not saved. Open anyway?"
msgstr ""
-#: tools/editor/import_settings.cpp:279
-msgid "Imported Resources"
+#: tools/editor/editor_node.cpp
+msgid "Can't reload a scene that was never saved."
msgstr ""
-#: tools/editor/import_settings.cpp:281
-msgid "Keep,None,Disk,VRAM"
+#: tools/editor/editor_node.cpp
+msgid "Revert"
msgstr ""
-#: tools/editor/import_settings.cpp:291
-msgid "Re-Import"
+#: tools/editor/editor_node.cpp
+msgid "This action cannot be undone. Revert anyway?"
msgstr ""
-#: tools/editor/multi_node_edit.cpp:12
-msgid "MultiNode Set "
+#: tools/editor/editor_node.cpp
+msgid "Quick Run Scene.."
msgstr ""
-#: tools/editor/run_settings_dialog.cpp:82
-msgid "Run Mode:"
+#: tools/editor/editor_node.cpp
+msgid ""
+"Open Project Manager? \n"
+"(Unsaved changes will be lost)"
msgstr ""
-#: tools/editor/run_settings_dialog.cpp:83
-msgid "Current Scene"
+#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
+msgid "Ugh"
msgstr ""
-#: tools/editor/run_settings_dialog.cpp:84
-msgid "Main Scene"
+#: tools/editor/editor_node.cpp
+msgid ""
+"Error loading scene, it must be inside the project path. Use 'Import' to open "
+"the scene, then save it inside the project path."
msgstr ""
-#: tools/editor/run_settings_dialog.cpp:87
-msgid "Main Scene Arguments:"
+#: tools/editor/editor_node.cpp
+msgid "Error loading scene."
msgstr ""
-#: tools/editor/run_settings_dialog.cpp:95
-msgid "Scene Run Settings"
+#: tools/editor/editor_node.cpp
+msgid "Scene '%s' has broken dependencies:"
msgstr ""
-#: tools/editor/project_settings.cpp:142
-msgid "Invalid Action (Anything goes but / or :)."
+#: tools/editor/editor_node.cpp
+msgid "Save Layout"
msgstr ""
-#: tools/editor/project_settings.cpp:154
-msgid "Action '"
+#: tools/editor/editor_node.cpp
+msgid "Delete Layout"
msgstr ""
-#: tools/editor/project_settings.cpp:164
-msgid "Rename Input Action Event"
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Default"
msgstr ""
-#: tools/editor/project_settings.cpp:248
-msgid "Add Input Action Event"
+#: tools/editor/editor_node.cpp
+msgid "Switch Scene Tab"
msgstr ""
-#: tools/editor/project_settings.cpp:307
-msgid "Meta+"
+#: tools/editor/editor_node.cpp
+msgid "%d more file(s)"
msgstr ""
-#: tools/editor/project_settings.cpp:309
-msgid "Shift+"
+#: tools/editor/editor_node.cpp
+msgid "%d more file(s) or folder(s)"
msgstr ""
-#: tools/editor/project_settings.cpp:311
-msgid "Alt+"
+#: tools/editor/editor_node.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Scene"
msgstr ""
-#: tools/editor/project_settings.cpp:313
-msgid "Control+"
+#: tools/editor/editor_node.cpp
+msgid "Go to previously opened scene."
msgstr ""
-#: tools/editor/project_settings.cpp:331
-msgid "Press a Key.."
+#: tools/editor/editor_node.cpp
+msgid "Operations with scene files."
msgstr ""
-#: tools/editor/project_settings.cpp:339
-msgid "Mouse Button Index:"
+#: tools/editor/editor_node.cpp
+msgid "New Scene"
msgstr ""
-#: tools/editor/project_settings.cpp:341
-msgid "Left Button"
+#: tools/editor/editor_node.cpp
+msgid "New Inherited Scene.."
msgstr ""
-#: tools/editor/project_settings.cpp:342
-msgid "Right Button"
+#: tools/editor/editor_node.cpp
+msgid "Open Scene.."
msgstr ""
-#: tools/editor/project_settings.cpp:343
-msgid "Middle Button"
+#: tools/editor/editor_node.cpp
+msgid "Save Scene"
msgstr ""
-#: tools/editor/project_settings.cpp:344
-msgid "Wheel Up Button"
+#: tools/editor/editor_node.cpp
+msgid "Close Scene"
msgstr ""
-#: tools/editor/project_settings.cpp:345
-msgid "Wheel Down Button"
+#: tools/editor/editor_node.cpp
+msgid "Close Goto Prev. Scene"
msgstr ""
-#: tools/editor/project_settings.cpp:346
-msgid "Button 6"
+#: tools/editor/editor_node.cpp
+msgid "Open Recent"
msgstr ""
-#: tools/editor/project_settings.cpp:347
-msgid "Button 7"
+#: tools/editor/editor_node.cpp
+msgid "Quick Search File.."
msgstr ""
-#: tools/editor/project_settings.cpp:348
-msgid "Button 8"
+#: tools/editor/editor_node.cpp
+msgid "Convert To.."
msgstr ""
-#: tools/editor/project_settings.cpp:349
-msgid "Button 9"
+#: tools/editor/editor_node.cpp
+msgid "Translatable Strings.."
msgstr ""
-#: tools/editor/project_settings.cpp:355
-msgid "Joystick Axis Index:"
+#: tools/editor/editor_node.cpp
+msgid "MeshLibrary.."
msgstr ""
-#: tools/editor/project_settings.cpp:360
-msgid "Axis "
+#: tools/editor/editor_node.cpp
+msgid "TileSet.."
msgstr ""
-#: tools/editor/project_settings.cpp:368
-msgid "Joystick Button Index:"
+#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Redo"
msgstr ""
-#: tools/editor/project_settings.cpp:412
-msgid "Add Input Action"
+#: tools/editor/editor_node.cpp
+msgid "Run Script"
msgstr ""
-#: tools/editor/project_settings.cpp:441
-msgid "Erase Input Action Event"
+#: tools/editor/editor_node.cpp
+msgid "Project Settings"
msgstr ""
-#: tools/editor/project_settings.cpp:520
-msgid "Device "
+#: tools/editor/editor_node.cpp
+msgid "Revert Scene"
msgstr ""
-#: tools/editor/project_settings.cpp:533
-msgid "Left Button."
+#: tools/editor/editor_node.cpp
+msgid "Quit to Project List"
msgstr ""
-#: tools/editor/project_settings.cpp:534
-msgid "Right Button."
+#: tools/editor/editor_node.cpp
+msgid "Import assets to the project."
msgstr ""
-#: tools/editor/project_settings.cpp:535
-msgid "Middle Button."
+#: tools/editor/editor_node.cpp
+msgid "Miscellaneous project or scene-wide tools."
msgstr ""
-#: tools/editor/project_settings.cpp:536
-msgid "Wheel Up."
+#: tools/editor/editor_node.cpp
+msgid "Tools"
msgstr ""
-#: tools/editor/project_settings.cpp:537
-msgid "Wheel Down."
+#: tools/editor/editor_node.cpp
+msgid "Export the project to many platforms."
msgstr ""
-#: tools/editor/project_settings.cpp:538
-msgid "Button "
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Export"
msgstr ""
-#: tools/editor/project_settings.cpp:696
-msgid "Toggle Persisting"
+#: tools/editor/editor_node.cpp
+msgid "Play the project (F5)."
msgstr ""
-#: tools/editor/project_settings.cpp:713
-msgid "Error saving settings."
+#: tools/editor/editor_node.cpp
+msgid "Pause the scene"
msgstr ""
-#: tools/editor/project_settings.cpp:797
-msgid "Add Translation"
+#: tools/editor/editor_node.cpp
+msgid "Stop the scene (F8)."
msgstr ""
-#: tools/editor/project_settings.cpp:854
-msgid "Toggle Autoload GlobalVar"
+#: tools/editor/editor_node.cpp
+msgid "Play the edited scene (F6)."
msgstr ""
-#: tools/editor/project_settings.cpp:880
-msgid "Invalid Name.Must not collide with an existing engine class name."
+#: tools/editor/editor_node.cpp
+msgid "Play custom scene"
msgstr ""
-#: tools/editor/project_settings.cpp:889
-msgid "Invalid Name.Must not collide with an existing buit-in type name."
+#: tools/editor/editor_node.cpp
+msgid "Debug options"
msgstr ""
-#: tools/editor/project_settings.cpp:900
-msgid "Invalid Name.Must not collide with an existing global constant name."
+#: tools/editor/editor_node.cpp
+msgid "Live Editing"
msgstr ""
-#: tools/editor/project_settings.cpp:921
-msgid "Add Autoload"
+#: tools/editor/editor_node.cpp
+msgid "File Server"
msgstr ""
-#: tools/editor/project_settings.cpp:951
-msgid "Remove Autoload"
+#: tools/editor/editor_node.cpp
+msgid "Deploy Remote Debug"
msgstr ""
-#: tools/editor/project_settings.cpp:978
-msgid "Move Autoload"
+#: tools/editor/editor_node.cpp
+msgid "Deploy File Server Clients"
msgstr ""
-#: tools/editor/project_settings.cpp:1007
-msgid "Remove Translation"
+#: tools/editor/editor_node.cpp
+msgid "Visible Collision Shapes"
msgstr ""
-#: tools/editor/project_settings.cpp:1040
-msgid "Add Remapped Path"
+#: tools/editor/editor_node.cpp
+msgid "Visible Navigation"
msgstr ""
-#: tools/editor/project_settings.cpp:1074
-msgid "Resource Remap Add Remap"
+#: tools/editor/editor_node.cpp tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Settings"
msgstr ""
-#: tools/editor/project_settings.cpp:1129
-msgid "Change Resource Remap Language"
+#: tools/editor/editor_node.cpp tools/editor/settings_config_dialog.cpp
+msgid "Editor Settings"
msgstr ""
-#: tools/editor/project_settings.cpp:1161
-msgid "Remove Resource Remap"
+#: tools/editor/editor_node.cpp
+msgid "Editor Layout"
msgstr ""
-#: tools/editor/project_settings.cpp:1197
-msgid "Remove Resource Remap Option"
+#: tools/editor/editor_node.cpp
+msgid "Install Export Templates"
msgstr ""
-#: tools/editor/project_settings.cpp:1354
-msgid "Enable"
+#: tools/editor/editor_node.cpp
+msgid "About"
msgstr ""
-#: tools/editor/project_settings.cpp:1449
-msgid "Project Settings (engine.cfg)"
+#: tools/editor/editor_node.cpp
+msgid "Alerts when an external resource has changed."
msgstr ""
-#: tools/editor/project_settings.cpp:1488
-msgid "Category:"
+#: tools/editor/editor_node.cpp
+msgid "Spins when the editor window repaints!"
msgstr ""
-#: tools/editor/project_settings.cpp:1497
-msgid "Property:"
+#: tools/editor/editor_node.cpp
+msgid "Update Always"
msgstr ""
-#: tools/editor/project_settings.cpp:1523
-msgid "Del"
+#: tools/editor/editor_node.cpp
+msgid "Update Changes"
msgstr ""
-#: tools/editor/project_settings.cpp:1559
-msgid "Save"
+#: tools/editor/editor_node.cpp
+msgid "Inspector"
msgstr ""
-#: tools/editor/project_settings.cpp:1567
-msgid "Copy To Platform.."
+#: tools/editor/editor_node.cpp
+msgid "Create a new resource in memory and edit it."
msgstr ""
-#: tools/editor/project_settings.cpp:1593
-msgid "Input Map"
+#: tools/editor/editor_node.cpp
+msgid "Load an existing resource from disk and edit it."
msgstr ""
-#: tools/editor/project_settings.cpp:1600
-msgid "Action:"
+#: tools/editor/editor_node.cpp
+msgid "Save the currently edited resource."
msgstr ""
-#: tools/editor/project_settings.cpp:1654
-msgid "Device:"
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save As.."
msgstr ""
-#: tools/editor/project_settings.cpp:1659
-msgid "Index:"
+#: tools/editor/editor_node.cpp
+msgid "Go to the previous edited object in history."
msgstr ""
-#: tools/editor/project_settings.cpp:1694
-msgid "Localization"
+#: tools/editor/editor_node.cpp
+msgid "Go to the next edited object in history."
msgstr ""
-#: tools/editor/project_settings.cpp:1701
-msgid "Translations"
+#: tools/editor/editor_node.cpp
+msgid "History of recently edited objects."
msgstr ""
-#: tools/editor/project_settings.cpp:1704
-msgid "Translations:"
+#: tools/editor/editor_node.cpp
+msgid "Object properties."
msgstr ""
-#: tools/editor/project_settings.cpp:1706
-msgid "Add.."
+#: tools/editor/editor_node.cpp
+msgid "FileSystem"
msgstr ""
-#: tools/editor/project_settings.cpp:1726
-msgid "Remaps"
+#: tools/editor/editor_node.cpp
+msgid "Output"
msgstr ""
-#: tools/editor/project_settings.cpp:1729
-msgid "Resources:"
+#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
+#: tools/editor/import_settings.cpp
+msgid "Re-Import"
msgstr ""
-#: tools/editor/project_settings.cpp:1750
-msgid "Remaps by Locale:"
+#: tools/editor/editor_node.cpp tools/editor/editor_plugin_settings.cpp
+msgid "Update"
msgstr ""
-#: tools/editor/project_settings.cpp:1765
-msgid "Locale"
+#: tools/editor/editor_node.cpp
+msgid "Thanks from the Godot community!"
msgstr ""
-#: tools/editor/project_settings.cpp:1784
-msgid "AutoLoad"
+#: tools/editor/editor_node.cpp
+msgid "Thanks!"
msgstr ""
-#: tools/editor/project_settings.cpp:1809
-msgid "Node Name:"
+#: tools/editor/editor_node.cpp
+msgid "Import Templates From ZIP File"
msgstr ""
-#: tools/editor/project_settings.cpp:1818
-msgid "List:"
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Export Project"
msgstr ""
-#: tools/editor/project_settings.cpp:1827
-msgid "Name"
+#: tools/editor/editor_node.cpp
+msgid "Export Library"
msgstr ""
-#: tools/editor/project_settings.cpp:1833
-msgid "Singleton"
+#: tools/editor/editor_node.cpp
+msgid "Merge With Existing"
msgstr ""
-#: tools/editor/scene_tree_editor.cpp:171
-msgid "This item cannot be made visible because the parent is hidden. Unhide the parent first."
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Password:"
msgstr ""
-#: tools/editor/scene_tree_editor.cpp:177
-msgid "Toggle Spatial Visible"
+#: tools/editor/editor_node.cpp
+msgid "Open & Run a Script"
msgstr ""
-#: tools/editor/scene_tree_editor.cpp:190
-msgid "Toggle CanvasItem Visible"
+#: tools/editor/editor_node.cpp
+msgid "Load Errors"
msgstr ""
-#: tools/editor/scene_tree_editor.cpp:296
-msgid "Inherits: "
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Installed Plugins:"
msgstr ""
-#: tools/editor/scene_tree_editor.cpp:300
-msgid "Instance: "
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Version:"
msgstr ""
-#: tools/editor/scene_tree_editor.cpp:687
-msgid "Invalid node name, the following characters are not allowed:\n \".\", \"/\""
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Author:"
msgstr ""
-#: tools/editor/scene_tree_editor.cpp:700
-msgid "Rename Node"
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Status:"
msgstr ""
-#: tools/editor/scene_tree_editor.cpp:1035
-msgid "Scene Tree (Nodes):"
+#: tools/editor/editor_profiler.cpp
+msgid "Stop Profiling"
msgstr ""
-#: tools/editor/scene_tree_editor.cpp:1077
-msgid "Editable Children"
+#: tools/editor/editor_profiler.cpp
+msgid "Start Profiling"
msgstr ""
-#: tools/editor/scene_tree_editor.cpp:1078
-msgid "Load As Placeholder"
+#: tools/editor/editor_profiler.cpp
+msgid "Measure:"
msgstr ""
-#: tools/editor/scene_tree_editor.cpp:1080
-msgid "Open in Editor"
+#: tools/editor/editor_profiler.cpp
+msgid "Frame Time (sec)"
msgstr ""
-#: tools/editor/scene_tree_editor.cpp:1085
-msgid "Clear Inheritance"
+#: tools/editor/editor_profiler.cpp
+msgid "Average Time (sec)"
msgstr ""
-#: tools/editor/scene_tree_editor.cpp:1093
-msgid "Clear Inheritance? (No Undo!)"
+#: tools/editor/editor_profiler.cpp
+msgid "Frame %"
msgstr ""
-#: tools/editor/scene_tree_editor.cpp:1094
-msgid "Clear!"
+#: tools/editor/editor_profiler.cpp
+msgid "Fixed Frame %"
msgstr ""
-#: tools/editor/scene_tree_editor.cpp:1165
-msgid "Select a Node"
+#: tools/editor/editor_profiler.cpp tools/editor/script_editor_debugger.cpp
+msgid "Time:"
msgstr ""
-#: tools/editor/quick_open.cpp:219
-msgid "Search:"
+#: tools/editor/editor_profiler.cpp
+msgid "Inclusive"
msgstr ""
-#: tools/editor/quick_open.cpp:223
-msgid "Matches:"
+#: tools/editor/editor_profiler.cpp
+msgid "Self"
msgstr ""
-#: tools/editor/quick_open.cpp:224
-msgid "Open"
+#: tools/editor/editor_profiler.cpp
+msgid "Frame #:"
msgstr ""
-#: tools/editor/editor_reimport_dialog.cpp:35
-msgid "Please wait for scan to complete"
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Please wait for scan to complete."
msgstr ""
-#: tools/editor/editor_reimport_dialog.cpp:72
+#: tools/editor/editor_reimport_dialog.cpp
msgid "Current scene must be saved to re-import."
msgstr ""
-#: tools/editor/editor_reimport_dialog.cpp:80
+#: tools/editor/editor_reimport_dialog.cpp
msgid "Save & Re-Import"
msgstr ""
-#: tools/editor/editor_reimport_dialog.cpp:102
-msgid "Re-Importing"
-msgstr ""
-
-#: tools/editor/editor_reimport_dialog.cpp:139
+#: tools/editor/editor_reimport_dialog.cpp
msgid "Re-Import Changed Resources"
msgstr ""
-#: tools/editor/resources_dock.cpp:136
-msgid "Error saving resource!"
+#: tools/editor/editor_run_script.cpp
+msgid "Write your logic in the _run() method."
msgstr ""
-#: tools/editor/resources_dock.cpp:354
-msgid "Create New Resource"
+#: tools/editor/editor_run_script.cpp
+msgid "There is an edited scene already."
msgstr ""
-#: tools/editor/resources_dock.cpp:360
-msgid "Open Resource"
-msgstr ""
-
-#: tools/editor/resources_dock.cpp:366
-msgid "Save Resource"
-msgstr ""
-
-#: tools/editor/resources_dock.cpp:368
-msgid "Save Resource As.."
-msgstr ""
-
-#: tools/editor/resources_dock.cpp:376
-msgid "Resource Tools"
+#: tools/editor/editor_run_script.cpp
+msgid "Couldn't instance script:"
msgstr ""
-#: tools/editor/resources_dock.cpp:377
-msgid "Make Local"
+#: tools/editor/editor_run_script.cpp
+msgid "Did you forget the 'tool' keyword?"
msgstr ""
-#: tools/editor/editor_run_script.cpp:12
-msgid "EditorScript::add_root_node : Write your logic in the _run() method."
+#: tools/editor/editor_run_script.cpp
+msgid "Couldn't run script:"
msgstr ""
-#: tools/editor/editor_run_script.cpp:17
-msgid "EditorScript::add_root_node : There is an edited scene already."
+#: tools/editor/editor_run_script.cpp
+msgid "Did you forget the '_run' method?"
msgstr ""
-#: tools/editor/editor_run_script.cpp:27
-msgid "EditorScript::get_scene : Write your logic in the _run() method."
+#: tools/editor/editor_settings.cpp
+msgid "Default (Same as Editor)"
msgstr ""
-#: tools/editor/editor_data.cpp:572
-msgid "Updating Scene"
+#: tools/editor/editor_sub_scene.cpp
+msgid "Select Node(s) to Import"
msgstr ""
-#: tools/editor/editor_data.cpp:573
-msgid "Storing local changes.."
+#: tools/editor/editor_sub_scene.cpp
+msgid "Scene Path:"
msgstr ""
-#: tools/editor/editor_data.cpp:577
-msgid "Updating scene.."
+#: tools/editor/editor_sub_scene.cpp
+msgid "Import From Node:"
msgstr ""
-#: tools/editor/file_type_cache.cpp:88
+#: tools/editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
-#: tools/editor/reparent_dialog.cpp:87
-msgid "Reparent Node"
-msgstr ""
-
-#: tools/editor/reparent_dialog.cpp:96
-msgid "Reparent Location (Select new Parent):"
-msgstr ""
-
-#: tools/editor/reparent_dialog.cpp:105
-msgid "Keep Global Transform"
-msgstr ""
-
-#: tools/editor/reparent_dialog.cpp:110
-msgid "Options:"
-msgstr ""
-
-#: tools/editor/reparent_dialog.cpp:114
-msgid "Reparent"
-msgstr ""
-
-#: tools/editor/editor_plugin_settings.cpp:155
-msgid "Update"
+#: tools/editor/groups_editor.cpp
+msgid "Add to Group"
msgstr ""
-#: tools/editor/scenes_dock.cpp:126
-msgid "Favorites:"
+#: tools/editor/groups_editor.cpp
+msgid "Remove from Group"
msgstr ""
-#: tools/editor/scenes_dock.cpp:805
-msgid "Same source and destination files, doing nothing."
+#: tools/editor/groups_editor.cpp
+msgid "Group Editor"
msgstr ""
-#: tools/editor/scenes_dock.cpp:852
-msgid "Same source and destination paths, doing nothing."
+#: tools/editor/groups_editor.cpp tools/editor/project_export.cpp
+msgid "Group"
msgstr ""
-#: tools/editor/scenes_dock.cpp:862
-msgid "Can't move directories to within themselves"
+#: tools/editor/groups_editor.cpp
+msgid "Node Group(s)"
msgstr ""
-#: tools/editor/scenes_dock.cpp:1020
-msgid "Can't operate on '..'"
+#: tools/editor/import_settings.cpp
+msgid "Imported Resources"
msgstr ""
-#: tools/editor/scenes_dock.cpp:1039
-msgid "Pick New Name and Location For: "
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "No source font file!"
msgstr ""
-#: tools/editor/scenes_dock.cpp:1062
-msgid "No files selected!"
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "No target font resource!"
msgstr ""
-#: tools/editor/scenes_dock.cpp:1400
-msgid "Instance"
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Can't load/process source font."
msgstr ""
-#: tools/editor/scenes_dock.cpp:1406
-msgid "Edit Dependencies.."
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Couldn't save font."
msgstr ""
-#: tools/editor/scenes_dock.cpp:1407
-msgid "View Owners.."
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Source Font:"
msgstr ""
-#: tools/editor/scenes_dock.cpp:1412
-msgid "Rename or Move.."
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Source Font Size:"
msgstr ""
-#: tools/editor/scenes_dock.cpp:1414
-msgid "Move To.."
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Dest Resource:"
msgstr ""
-#: tools/editor/scenes_dock.cpp:1470
-msgid "Previous Directory"
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "The quick brown fox jumps over the lazy dog."
msgstr ""
-#: tools/editor/scenes_dock.cpp:1477
-msgid "Next Directory"
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Test:"
msgstr ""
-#: tools/editor/scenes_dock.cpp:1484
-msgid "Re-Scan Filesystem"
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Options:"
msgstr ""
-#: tools/editor/scenes_dock.cpp:1493
-msgid "Move Favorite Up"
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Font Import"
msgstr ""
-#: tools/editor/scenes_dock.cpp:1500
-msgid "Move Favorite Down"
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Accept"
msgstr ""
-#: tools/editor/scenes_dock.cpp:1507
-msgid "Toggle folder status as Favorite"
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid ""
+"This file is already a Godot font file, please supply a BMFont type file "
+"instead."
msgstr ""
-#: tools/editor/scenes_dock.cpp:1529
-msgid "Instance the selected scene(s) as child of the selected node."
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Failed opening as BMFont file."
msgstr ""
-#: tools/editor/scenes_dock.cpp:1615
-msgid "Move"
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Invalid font custom source."
msgstr ""
-#: tools/editor/editor_import_export.cpp:243
-msgid "Added: "
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Font"
msgstr ""
-#: tools/editor/editor_import_export.cpp:248
-msgid "Removed: "
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "No meshes to import!"
msgstr ""
-#: tools/editor/editor_import_export.cpp:919
-msgid "Could not save atlas subtexture: "
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Save path is empty!"
msgstr ""
-#: tools/editor/editor_import_export.cpp:1160
-msgid "Storing File: "
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Single Mesh Import"
msgstr ""
-#: tools/editor/editor_import_export.cpp:1206
-msgid "Packing"
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Source Mesh(es):"
msgstr ""
-#: tools/editor/editor_import_export.cpp:1312
-msgid "Exporting for "
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Target Path:"
msgstr ""
-#: tools/editor/editor_import_export.cpp:1318
-msgid "Setting Up.."
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Mesh"
msgstr ""
-#: tools/editor/editor_settings.cpp:266
-msgid "EditorSettings"
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Surface %d"
msgstr ""
-#: tools/editor/editor_settings.cpp:472
-msgid "Default (Same as Editor)"
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "No samples to import!"
msgstr ""
-#: tools/editor/editor_settings.cpp:508
-msgid "PVRTC/fast_conversion"
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path is empty."
msgstr ""
-#: tools/editor/editor_file_dialog.cpp:356
-msgid "File Exists, Overwrite?"
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path must be a complete resource path."
msgstr ""
-#: tools/editor/editor_file_dialog.cpp:680
-msgid "All Recognized ( "
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path must exist."
msgstr ""
-#: tools/editor/editor_file_dialog.cpp:692
-msgid "All Files (*)"
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Import Audio Samples"
msgstr ""
-#: tools/editor/editor_file_dialog.cpp:1215
-msgid "Save a File"
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Source Sample(s):"
msgstr ""
-#: tools/editor/editor_file_dialog.cpp:1295
-msgid "Recent:"
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Audio Sample"
msgstr ""
-#: tools/editor/editor_file_dialog.cpp:1304
-msgid "Directories & Files:"
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "New Clip"
msgstr ""
-#: tools/editor/editor_file_dialog.cpp:1316
-msgid "Preview:"
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Animation Options"
msgstr ""
-#: tools/editor/editor_file_dialog.cpp:1324
-msgid "File:"
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Flags"
msgstr ""
-#: tools/editor/editor_file_dialog.cpp:1329
-msgid "Filter:"
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Bake FPS:"
msgstr ""
-#: tools/editor/editor_file_dialog.cpp:1368
-msgid "Must use a valid extension."
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Optimizer"
msgstr ""
-#: tools/editor/groups_editor.cpp:46
-msgid "Add to Group"
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Linear Error"
msgstr ""
-#: tools/editor/groups_editor.cpp:69
-msgid "Remove from Group"
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Angular Error"
msgstr ""
-#: tools/editor/groups_editor.cpp:128
-msgid "Group Editor"
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Angle"
msgstr ""
-#: tools/editor/groups_editor.cpp:150
-msgid "Node Group(s)"
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Clips"
msgstr ""
-#: tools/editor/property_editor.cpp:355
-msgid "Preset.."
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/project_manager.cpp tools/editor/project_settings.cpp
+msgid "Name"
msgstr ""
-#: tools/editor/property_editor.cpp:358
-msgid "Ease In"
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Start(s)"
msgstr ""
-#: tools/editor/property_editor.cpp:359
-msgid "Ease Out"
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "End(s)"
msgstr ""
-#: tools/editor/property_editor.cpp:361
-msgid "Zero"
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Loop"
msgstr ""
-#: tools/editor/property_editor.cpp:362
-msgid "Easing In-Out"
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Filters"
msgstr ""
-#: tools/editor/property_editor.cpp:363
-msgid "Easing Out-In"
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Source path is empty."
msgstr ""
-#: tools/editor/property_editor.cpp:401
-msgid "File.."
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't load post-import script."
msgstr ""
-#: tools/editor/property_editor.cpp:408
-msgid "Dir.."
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Invalid/broken script for post-import."
msgstr ""
-#: tools/editor/property_editor.cpp:642
-msgid "New"
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Error importing scene."
msgstr ""
-#: tools/editor/property_editor.cpp:643
-msgid "Load"
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import 3D Scene"
msgstr ""
-#: tools/editor/property_editor.cpp:651
-msgid "Assign"
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Source Scene:"
msgstr ""
-#: tools/editor/property_editor.cpp:697
-msgid "New "
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Same as Target Scene"
msgstr ""
-#: tools/editor/property_editor.cpp:838
-msgid "Error loading file: Not a resource!"
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Shared"
msgstr ""
-#: tools/editor/property_editor.cpp:850
-msgid "Couldn't load image"
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Target Texture Folder:"
msgstr ""
-#: tools/editor/property_editor.cpp:939
-msgid "ArrayPropertyEdit"
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Post-Process Script:"
msgstr ""
-#: tools/editor/property_editor.cpp:1735
-msgid "Bit "
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Custom Root Node Type:"
msgstr ""
-#: tools/editor/property_editor.cpp:2661
-msgid "Property"
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Auto"
msgstr ""
-#: tools/editor/property_editor.cpp:2770
-msgid "Class: "
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "The Following Files are Missing:"
msgstr ""
-#: tools/editor/property_editor.cpp:2867
-msgid "Property: "
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import Anyway"
msgstr ""
-#: tools/editor/property_editor.cpp:2898
-msgid "On"
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import & Open"
msgstr ""
-#: tools/editor/property_editor.cpp:3436
-msgid "Set "
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Edited scene has not been saved, open imported scene anyway?"
msgstr ""
-#: tools/editor/property_editor.cpp:3952
-msgid "Properties:"
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import Scene"
msgstr ""
-#: tools/editor/property_editor.cpp:4205
-msgid "Global"
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Importing Scene.."
msgstr ""
-#: tools/editor/property_editor.cpp:4228
-msgid "Sections:"
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Running Custom Script.."
msgstr ""
-#: tools/editor/addon_editor_plugin.cpp:1100
-msgid "Import"
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't load post-import script:"
msgstr ""
-#: tools/editor/addon_editor_plugin.cpp:1145
-msgid "Godot"
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Invalid/broken script for post-import:"
msgstr ""
-#: tools/editor/editor_node.cpp:435
-msgid "Node from scene"
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Error running post-import script:"
msgstr ""
-#: tools/editor/editor_node.cpp:441
-msgid "Re-Import.."
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import Image:"
msgstr ""
-#: tools/editor/editor_node.cpp:603
-msgid "I see.."
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Can't import a file over itself:"
msgstr ""
-#: tools/editor/editor_node.cpp:609
-msgid "Can't open file for writing: "
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't localize path: %s (already local)"
msgstr ""
-#: tools/editor/editor_node.cpp:613
-msgid "File format requested unknown: "
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Saving.."
msgstr ""
-#: tools/editor/editor_node.cpp:617
-msgid "Error Saving."
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "3D Scene Animation"
msgstr ""
-#: tools/editor/editor_node.cpp:913
-msgid "Saving Scene"
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Uncompressed"
msgstr ""
-#: tools/editor/editor_node.cpp:914
-msgid "Analyzing"
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress Lossless (PNG)"
msgstr ""
-#: tools/editor/editor_node.cpp:927
-msgid "Creating Thumbnail"
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress Lossy (WebP)"
msgstr ""
-#: tools/editor/editor_node.cpp:1024
-msgid "Couldn't save scene. Likely dependencies (instances) couldn't be satisfied."
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress (VRAM)"
msgstr ""
-#: tools/editor/editor_node.cpp:1074
-msgid "Ugh"
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Format"
msgstr ""
-#: tools/editor/editor_node.cpp:1075
-msgid "Error importing scene."
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Compression Quality (WebP):"
msgstr ""
-#: tools/editor/editor_node.cpp:1091
-msgid "Error load scene to update."
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Options"
msgstr ""
-#: tools/editor/editor_node.cpp:1173
-msgid "Failed to load resource."
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Please specify some files!"
msgstr ""
-#: tools/editor/editor_node.cpp:1254
-msgid "Can't load MeshLibrary for merging!."
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "At least one file needed for Atlas."
msgstr ""
-#: tools/editor/editor_node.cpp:1271
-msgid "Error saving MeshLibrary!."
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Error importing:"
msgstr ""
-#: tools/editor/editor_node.cpp:1289
-msgid "Can't load TileSet for merging!."
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Only one file is required for large texture."
msgstr ""
-#: tools/editor/editor_node.cpp:1307
-msgid "Error saving TileSet!."
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Max Texture Size:"
msgstr ""
-#: tools/editor/editor_node.cpp:1324
-msgid "Can't open export templates zip."
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for Atlas (2D)"
msgstr ""
-#: tools/editor/editor_node.cpp:1341
-msgid "Loading Export Templates"
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Cell Size:"
msgstr ""
-#: tools/editor/editor_node.cpp:1371
-msgid "Importing: "
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Large Texture"
msgstr ""
-#: tools/editor/editor_node.cpp:1414
-msgid "Error trying to save layout!"
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Large Textures (2D)"
msgstr ""
-#: tools/editor/editor_node.cpp:1426
-msgid "Default editor layout overridden."
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture"
msgstr ""
-#: tools/editor/editor_node.cpp:1440
-msgid "Layout name not found!"
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Base Atlas Texture"
msgstr ""
-#: tools/editor/editor_node.cpp:1457
-msgid "Restored Default layout to base settings."
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture(s)"
msgstr ""
-#: tools/editor/editor_node.cpp:1736
-msgid "Copy Params"
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for 2D"
msgstr ""
-#: tools/editor/editor_node.cpp:1737
-msgid "Set Params"
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for 3D"
msgstr ""
-#: tools/editor/editor_node.cpp:1739
-msgid "Paste Resource"
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures"
msgstr ""
-#: tools/editor/editor_node.cpp:1741
-msgid "Copy Resource"
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "2D Texture"
msgstr ""
-#: tools/editor/editor_node.cpp:1742
-msgid "Make Built-In"
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "3D Texture"
msgstr ""
-#: tools/editor/editor_node.cpp:1745
-msgid "Make Sub-Resources Unique"
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Atlas Texture"
msgstr ""
-#: tools/editor/editor_node.cpp:1772
-msgid "All Methods"
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid ""
+"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to "
+"the project."
msgstr ""
-#: tools/editor/editor_node.cpp:1835
-msgid "No scene to run exists."
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture(s):"
msgstr ""
-#: tools/editor/editor_node.cpp:1899
-msgid "Current scene was never saved, please save scene before running."
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Crop empty space."
msgstr ""
-#: tools/editor/editor_node.cpp:1927
-msgid "Could not start subprocess!"
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture"
msgstr ""
-#: tools/editor/editor_node.cpp:2003
-msgid "Yes"
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Large Texture"
msgstr ""
-#: tools/editor/editor_node.cpp:2005
-msgid "Start a New Scene? (Current will be lost)"
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Load Source Image"
msgstr ""
-#: tools/editor/editor_node.cpp:2040
-msgid "Open Scene"
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Slicing"
msgstr ""
-#: tools/editor/editor_node.cpp:2040
-msgid "Open Base Scene"
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Inserting"
msgstr ""
-#: tools/editor/editor_node.cpp:2047
-msgid "Quick Open Scene.."
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Saving"
msgstr ""
-#: tools/editor/editor_node.cpp:2054
-msgid "Quick Open Script.."
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save large texture:"
msgstr ""
-#: tools/editor/editor_node.cpp:2061
-msgid "Quick Search File.."
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Build Atlas For:"
msgstr ""
-#: tools/editor/editor_node.cpp:2082
-msgid "Close scene? (Unsaved changes will be lost)"
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Loading Image:"
msgstr ""
-#: tools/editor/editor_node.cpp:2159
-msgid "Save Scene As.."
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't load image:"
msgstr ""
-#: tools/editor/editor_node.cpp:2166
-msgid "This scene has never been saved. Save before running?"
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Converting Images"
msgstr ""
-#: tools/editor/editor_node.cpp:2202
-msgid "Please save the scene first."
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Cropping Images"
msgstr ""
-#: tools/editor/editor_node.cpp:2213
-msgid "Save Translatable Strings"
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Blitting Images"
msgstr ""
-#: tools/editor/editor_node.cpp:2299
-msgid "Export Mesh Library"
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save atlas image:"
msgstr ""
-#: tools/editor/editor_node.cpp:2313
-msgid "Export Tile Set"
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save converted texture:"
msgstr ""
-#: tools/editor/editor_node.cpp:2344
-msgid "Quit"
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Invalid source!"
msgstr ""
-#: tools/editor/editor_node.cpp:2346
-msgid "Exit the Editor?"
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Invalid translation source!"
msgstr ""
-#: tools/editor/editor_node.cpp:2362
-msgid "Current scene not saved. Open anyway?"
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Column"
msgstr ""
-#: tools/editor/editor_node.cpp:2414
-msgid "Can't reload a scene that was never saved.."
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#: tools/editor/script_create_dialog.cpp
+msgid "Language"
msgstr ""
-#: tools/editor/editor_node.cpp:2419
-msgid "Revert"
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "No items to import!"
msgstr ""
-#: tools/editor/editor_node.cpp:2420
-msgid "This action cannot be undone. Revert anyway?"
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "No target path!"
msgstr ""
-#: tools/editor/editor_node.cpp:2468
-msgid "Error loading scene from "
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Translations"
msgstr ""
-#: tools/editor/editor_node.cpp:2476
-msgid "Instance Scene"
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Couldn't import!"
msgstr ""
-#: tools/editor/editor_node.cpp:2630
-msgid "Quick Run Scene.."
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Translation"
msgstr ""
-#: tools/editor/editor_node.cpp:2711
-msgid "Enable File Server"
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Source CSV:"
msgstr ""
-#: tools/editor/editor_node.cpp:2715
-msgid "Disable File Server"
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Ignore First Row"
msgstr ""
-#: tools/editor/editor_node.cpp:2829
-msgid "Current scene changed, save and re-import ?"
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Compress"
msgstr ""
-#: tools/editor/editor_node.cpp:2843
-msgid "Can't import if edited scene was not saved."
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Add to Project (engine.cfg)"
msgstr ""
-#: tools/editor/editor_node.cpp:3259
-msgid "No scene to optimize (loading failed?"
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Languages:"
msgstr ""
-#: tools/editor/editor_node.cpp:3285
-msgid "Optimizer preset not found: "
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Translation"
msgstr ""
-#: tools/editor/editor_node.cpp:3354
-msgid "Error saving optimized scene: "
+#: tools/editor/multi_node_edit.cpp
+msgid "MultiNode Set"
msgstr ""
-#: tools/editor/editor_node.cpp:3581
-msgid "Error loading scene, it must be inside the project path. Use 'Import' to open the scene, then save it inside the project path."
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Toggle Autoplay"
msgstr ""
-#: tools/editor/editor_node.cpp:3610
-msgid "Error loading scene."
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Animation Name:"
msgstr ""
-#: tools/editor/editor_node.cpp:4603
-msgid "Save Layout"
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Anim"
msgstr ""
-#: tools/editor/editor_node.cpp:4604
-msgid "Delete Layout"
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Animation Name:"
msgstr ""
-#: tools/editor/editor_node.cpp:4716
-msgid "Switch Scene Tab"
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Remove Animation"
msgstr ""
-#: tools/editor/editor_node.cpp:4957
-msgid "More File(s)"
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Invalid animation name!"
msgstr ""
-#: tools/editor/editor_node.cpp:4988
-msgid "More File(s) and/or Directory(s)"
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Animation name already exists!"
msgstr ""
-#: tools/editor/editor_node.cpp:5159
-msgid "BodyVolumeConvexPolygon"
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
msgstr ""
-#: tools/editor/editor_node.cpp:5432
-msgid "Scene"
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Animation"
msgstr ""
-#: tools/editor/editor_node.cpp:5438
-msgid "Go to previously opened scene."
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Next Changed"
msgstr ""
-#: tools/editor/editor_node.cpp:5449
-msgid "Operations with scene files."
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Blend Time"
msgstr ""
-#: tools/editor/editor_node.cpp:5451
-msgid "New Scene"
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load Animation"
msgstr ""
-#: tools/editor/editor_node.cpp:5452
-msgid "New Inherited Scene.."
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
msgstr ""
-#: tools/editor/editor_node.cpp:5453
-msgid "Open Scene.."
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to copy!"
msgstr ""
-#: tools/editor/editor_node.cpp:5455
-msgid "Save Scene"
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation resource on clipboard!"
msgstr ""
-#: tools/editor/editor_node.cpp:5458
-msgid "Close Scene"
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Pasted Animation"
msgstr ""
-#: tools/editor/editor_node.cpp:5460
-msgid "Close Goto Prev. Scene"
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Paste Animation"
msgstr ""
-#: tools/editor/editor_node.cpp:5461
-msgid "Open Recent"
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to edit!"
msgstr ""
-#: tools/editor/editor_node.cpp:5471
-msgid "Convert To.."
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from current pos. (A)"
msgstr ""
-#: tools/editor/editor_node.cpp:5472
-msgid "Translatable Strings.."
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from end. (Shift+A)"
msgstr ""
-#: tools/editor/editor_node.cpp:5474
-msgid "MeshLibrary.."
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Stop animation playback. (S)"
msgstr ""
-#: tools/editor/editor_node.cpp:5475
-msgid "TileSet.."
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from start. (Shift+D)"
msgstr ""
-#: tools/editor/editor_node.cpp:5480
-msgid "Redo"
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from current pos. (D)"
msgstr ""
-#: tools/editor/editor_node.cpp:5482
-msgid "Run Script"
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation position (in seconds)."
msgstr ""
-#: tools/editor/editor_node.cpp:5484
-msgid "Project Settings"
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Scale animation playback globally for the node."
msgstr ""
-#: tools/editor/editor_node.cpp:5486
-msgid "Revert Scene"
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create new animation in player."
msgstr ""
-#: tools/editor/editor_node.cpp:5489
-msgid "Quit to Project List"
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load an animation from disk."
msgstr ""
-#: tools/editor/editor_node.cpp:5524
-msgid "Move Up"
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save the current animation"
msgstr ""
-#: tools/editor/editor_node.cpp:5525
-msgid "Move Down"
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Display list of animations in player."
msgstr ""
-#: tools/editor/editor_node.cpp:5527
-msgid "Duplicate"
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Autoplay on Load"
msgstr ""
-#: tools/editor/editor_node.cpp:5529
-msgid "Remove (Branch)"
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Edit Target Blend Times"
msgstr ""
-#: tools/editor/editor_node.cpp:5530
-msgid "Remove (Element)"
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Tools"
msgstr ""
-#: tools/editor/editor_node.cpp:5532
-msgid "Edit Subscriptions.."
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Copy Animation"
msgstr ""
-#: tools/editor/editor_node.cpp:5533
-msgid "Edit Groups.."
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
msgstr ""
-#: tools/editor/editor_node.cpp:5542
-msgid "Import assets to the project."
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Name:"
msgstr ""
-#: tools/editor/editor_node.cpp:5551
-msgid "Miscelaneous project or scene wide tools."
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/script_create_dialog.cpp
+msgid "Error!"
msgstr ""
-#: tools/editor/editor_node.cpp:5552
-msgid "Tools"
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Times:"
msgstr ""
-#: tools/editor/editor_node.cpp:5562
-msgid "Export the project to many platforms."
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Next (Auto Queue):"
msgstr ""
-#: tools/editor/editor_node.cpp:5596
-msgid "Play the project (F5)."
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Cross-Animation Blend Times"
msgstr ""
-#: tools/editor/editor_node.cpp:5606
-msgid "Pause the scene (F7)."
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation"
msgstr ""
-#: tools/editor/editor_node.cpp:5614
-msgid "Stop the scene (F8)."
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "New name:"
msgstr ""
-#: tools/editor/editor_node.cpp:5634
-msgid "Play the edited scene (F6)."
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Scale:"
msgstr ""
-#: tools/editor/editor_node.cpp:5642
-msgid "Play custom scene ("
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade In (s):"
msgstr ""
-#: tools/editor/editor_node.cpp:5651
-msgid "Debug Options"
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade Out (s):"
msgstr ""
-#: tools/editor/editor_node.cpp:5654
-msgid "Live Editing"
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend"
msgstr ""
-#: tools/editor/editor_node.cpp:5655
-msgid "File Server"
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix"
msgstr ""
-#: tools/editor/editor_node.cpp:5657
-msgid "Deploy Remote Debug"
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Auto Restart:"
msgstr ""
-#: tools/editor/editor_node.cpp:5658
-msgid "Deploy File Server Clients"
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Restart (s):"
msgstr ""
-#: tools/editor/editor_node.cpp:5660
-msgid "Visible Collision Shapes"
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Random Restart (s):"
msgstr ""
-#: tools/editor/editor_node.cpp:5661
-msgid "Visible Navigation"
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Start!"
msgstr ""
-#: tools/editor/editor_node.cpp:5724
-msgid "Settings"
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Amount:"
msgstr ""
-#: tools/editor/editor_node.cpp:5729
-msgid "Export Settings"
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend:"
msgstr ""
-#: tools/editor/editor_node.cpp:5731
-msgid "Optimization Presets"
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 0:"
msgstr ""
-#: tools/editor/editor_node.cpp:5737
-msgid "Editor Layout"
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 1:"
msgstr ""
-#: tools/editor/editor_node.cpp:5739
-msgid "Install Export Templates"
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "X-Fade Time (s):"
msgstr ""
-#: tools/editor/editor_node.cpp:5741
-msgid "About"
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Current:"
msgstr ""
-#: tools/editor/editor_node.cpp:5753
-msgid "Alerts when an external resource has changed."
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Add Input"
msgstr ""
-#: tools/editor/editor_node.cpp:5756
-msgid "Spins when the editor window repaints!"
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Clear Auto-Advance"
msgstr ""
-#: tools/editor/editor_node.cpp:5760
-msgid "Update Always"
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Set Auto-Advance"
msgstr ""
-#: tools/editor/editor_node.cpp:5761
-msgid "Update Changes"
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Delete Input"
msgstr ""
-#: tools/editor/editor_node.cpp:5815
-msgid "Inspector"
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Rename"
msgstr ""
-#: tools/editor/editor_node.cpp:5823
-msgid "Create a new resource in memory and edit it"
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is valid."
msgstr ""
-#: tools/editor/editor_node.cpp:5830
-msgid "Load an existing resource from disk and edit it"
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is invalid."
msgstr ""
-#: tools/editor/editor_node.cpp:5837
-msgid "Save the currently edited resource"
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation Node"
msgstr ""
-#: tools/editor/editor_node.cpp:5841
-msgid "Save As.."
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "OneShot Node"
msgstr ""
-#: tools/editor/editor_node.cpp:5851
-msgid "Go to the previous edited object in history."
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix Node"
msgstr ""
-#: tools/editor/editor_node.cpp:5859
-msgid "Go to the next edited object in history."
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend2 Node"
msgstr ""
-#: tools/editor/editor_node.cpp:5866
-msgid "History of recently edited objects"
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend3 Node"
msgstr ""
-#: tools/editor/editor_node.cpp:5890
-msgid "Object properties."
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend4 Node"
msgstr ""
-#: tools/editor/editor_node.cpp:5928
-msgid "FileSystem"
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeScale Node"
msgstr ""
-#: tools/editor/editor_node.cpp:5966
-msgid "Output"
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeSeek Node"
msgstr ""
-#: tools/editor/editor_node.cpp:6087
-msgid "Thanks so Much!"
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Transition Node"
msgstr ""
-#: tools/editor/editor_node.cpp:6089
-msgid "Thanks!"
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Import Animations.."
msgstr ""
-#: tools/editor/editor_node.cpp:6107
-msgid "Import Templates from ZIP file"
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Edit Node Filters"
msgstr ""
-#: tools/editor/editor_node.cpp:6127
-msgid "Export Library"
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Filters.."
msgstr ""
-#: tools/editor/editor_node.cpp:6131
-msgid "Merge With Existing"
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Parsing %d Triangles:"
msgstr ""
-#: tools/editor/editor_node.cpp:6146
-msgid "Open & Run a Script"
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Triangle #"
msgstr ""
-#: tools/editor/editor_node.cpp:6343
-msgid "Load Errors"
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Light Baker Setup:"
msgstr ""
-#: tools/editor/call_dialog.cpp:242
-msgid "Method List For ' "
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Parsing Geometry"
msgstr ""
-#: tools/editor/call_dialog.cpp:256
-msgid "Call"
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Fixing Lights"
msgstr ""
-#: tools/editor/call_dialog.cpp:294
-msgid "Method List:"
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Making BVH"
msgstr ""
-#: tools/editor/call_dialog.cpp:301
-msgid "Arguments:"
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Creating Light Octree"
msgstr ""
-#: tools/editor/call_dialog.cpp:308
-msgid "Return:"
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Creating Octree Texture"
msgstr ""
-#: tools/editor/call_dialog.cpp:326
-msgid "Parameters:"
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Transfer to Lightmaps:"
msgstr ""
-#: tools/editor/pvrtc_compress.cpp:96
-msgid "Could not execute PVRTC Tool: "
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Allocating Texture #"
msgstr ""
-#: tools/editor/pvrtc_compress.cpp:102
-msgid "Can't load back converted image using PVRTC Tool: "
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Baking Triangle #"
msgstr ""
-#: tools/editor/array_property_edit.cpp:67
-msgid "Resize Array"
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Post-Processing Texture #"
msgstr ""
-#: tools/editor/array_property_edit.cpp:112
-msgid "Change Array Value Type"
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "BakedLightInstance does not contain a BakedLight resource."
msgstr ""
-#: tools/editor/array_property_edit.cpp:129
-msgid "Change Array Value"
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "Bake!"
msgstr ""
-#: tools/editor/editor_help.cpp:334
-msgid "Search Classes"
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "Reset the lightmap octree baking process (start over)."
msgstr ""
-#: tools/editor/editor_help.cpp:522
-msgid "Class List: "
+#: tools/editor/plugins/camera_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Preview"
msgstr ""
-#: tools/editor/editor_help.cpp:790
-msgid "Brief Description:"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Configure Snap"
msgstr ""
-#: tools/editor/editor_help.cpp:813
-msgid "Public Methods:"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid Offset:"
msgstr ""
-#: tools/editor/editor_help.cpp:898
-msgid "Members:"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid Step:"
msgstr ""
-#: tools/editor/editor_help.cpp:942
-msgid "GUI Theme Items:"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Offset:"
msgstr ""
-#: tools/editor/editor_help.cpp:984
-msgid "Signals:"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Step:"
msgstr ""
-#: tools/editor/editor_help.cpp:1049
-msgid "Constants:"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Pivot"
msgstr ""
-#: tools/editor/editor_help.cpp:1094
-msgid "Description:"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Action"
msgstr ""
-#: tools/editor/editor_help.cpp:1115
-msgid "Method Description:"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit IK Chain"
msgstr ""
-#: tools/editor/editor_help.cpp:1653
-msgid "Search Text"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit CanvasItem"
msgstr ""
-#: tools/editor/project_manager.cpp:69
-msgid "Invalid Path for Project, Path Must Exist!"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors"
msgstr ""
-#: tools/editor/project_manager.cpp:78
-msgid "Invalid Project Path (engine.cfg must not exist)."
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom (%):"
msgstr ""
-#: tools/editor/project_manager.cpp:87
-msgid "Invalid Project Path (engine.cfg must exist)."
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Paste Pose"
msgstr ""
-#: tools/editor/project_manager.cpp:112
-msgid "Imported Project"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Select Mode (Q)"
msgstr ""
-#: tools/editor/project_manager.cpp:173
-msgid "Invalid Path for Project (changed anything?)"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Drag: Rotate"
msgstr ""
-#: tools/editor/project_manager.cpp:183
-msgid "Couldn't create engine.cfg in project path"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+Drag: Move"
msgstr ""
-#: tools/editor/project_manager.cpp:248
-msgid "Import Existing Project"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)."
msgstr ""
-#: tools/editor/project_manager.cpp:250
-msgid "Project Path: (Must exist)"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+RMB: Depth list selection"
msgstr ""
-#: tools/editor/project_manager.cpp:251
-msgid "Project Name:"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Move Mode (W)"
msgstr ""
-#: tools/editor/project_manager.cpp:258
-msgid "Create New Project"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Mode (E)"
msgstr ""
-#: tools/editor/project_manager.cpp:260
-msgid "Project Path:"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid ""
+"Show a list of all objects at the position clicked\n"
+"(same as Alt+RMB in select mode)."
msgstr ""
-#: tools/editor/project_manager.cpp:295
-msgid "Browse"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Click to change object's rotation pivot."
msgstr ""
-#: tools/editor/project_manager.cpp:308
-msgid "New Game Project"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Pan Mode"
msgstr ""
-#: tools/editor/project_manager.cpp:312
-msgid "That's a BINGO!"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Lock the selected object in place (can't be moved)."
msgstr ""
-#: tools/editor/project_manager.cpp:539
-msgid "Unnamed Project"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Unlock the selected object (can be moved)."
msgstr ""
-#: tools/editor/project_manager.cpp:651
-msgid "Are you sure to open more than one projects?"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Makes sure the object's children are not selectable."
msgstr ""
-#: tools/editor/project_manager.cpp:691
-msgid "Are you sure to run more than one projects?"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Restores the object's children's ability to be selected."
msgstr ""
-#: tools/editor/project_manager.cpp:791
-msgid "Remove project from list?? (Folder contents will not be modified)"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Edit"
msgstr ""
-#: tools/editor/project_manager.cpp:873
-msgid "Recent Projects:"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Snap"
msgstr ""
-#: tools/editor/project_manager.cpp:906
-msgid "Edit"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Show Grid"
msgstr ""
-#: tools/editor/project_manager.cpp:912
-msgid "Run"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Rotation Snap"
msgstr ""
-#: tools/editor/project_manager.cpp:920
-msgid "Scan"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap Relative"
msgstr ""
-#: tools/editor/project_manager.cpp:935
-msgid "New Project"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Configure Snap.."
msgstr ""
-#: tools/editor/project_manager.cpp:955
-msgid "Exit"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Pixel Snap"
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:69
-msgid "Ok :( "
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Expand to Parent"
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:70
-msgid "No parent to instance a child at."
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Skeleton.."
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:113
-msgid "Error instancing scene from "
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make Bones"
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:124
-msgid "Ok"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Bones"
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:125
-msgid "Cannot instance the scene '"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make IK Chain"
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:125
-msgid "' because the current scene exists within one of its' nodes."
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear IK Chain"
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:148
-msgid "Instance Scene(s)"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View"
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:344
-msgid "Move Node In Parent"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom In"
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:345
-msgid "Move Nodes In Parent"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Out"
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:391
-msgid "Duplicate Node(s)"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Reset"
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:540
-msgid "Delete Node(s)?"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Set.."
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:560
-msgid "This operation requires a single selected node."
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center Selection"
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:591
-msgid "Save New Scene As.."
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Frame Selection"
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:959
-msgid "Makes Sense!"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Anchor"
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:960
-msgid "Can't operate on nodes from a foreign scene!"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Keys (Ins)"
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:969
-msgid "Can't operate on nodes the current scene inherits from!"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key"
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:1163
-msgid "Remove Node(s)"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key (Existing Tracks)"
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:1276
-msgid "Create Node"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Copy Pose"
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:1414
-msgid "Import Subscene"
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Pose"
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:1448
-msgid "Couldn't save new scene. Likely dependencies (instances) couldn't be satisfied."
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Set a Value"
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:1463
-msgid "Error saving scene."
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap (Pixels):"
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:1470
-msgid "Error duplicating scene to save it."
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create Poly"
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:1661
-msgid "New Scene Root"
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Edit Poly"
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:1662
-msgid "Inherit Scene"
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Edit Poly (Remove Point)"
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:1679
-msgid "Add Child Node"
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:1680
-msgid "Instance Child Scene"
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+msgid "Create Poly3D"
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:1682
-msgid "Change Type"
+#: tools/editor/plugins/collision_shape_2d_editor_plugin.cpp
+msgid "Set Handle"
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:1684
-msgid "Edit Groups"
+#: tools/editor/plugins/color_ramp_editor_plugin.cpp
+msgid "Add/Remove Color Ramp Point"
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:1685
-msgid "Edit Connections"
+#: tools/editor/plugins/color_ramp_editor_plugin.cpp
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Color Ramp"
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:1687
-msgid "Add Script"
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Creating Mesh Library"
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:1698
-msgid "Save Branch as Scene"
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Thumbnail.."
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:1702
-msgid "Delete Node(s)"
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove item %d?"
msgstr ""
-#: tools/editor/scene_tree_dock.cpp:1777
-msgid "Instance a scene file as a Node. Creates an inherited scene if no root node exists."
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Add Item"
msgstr ""
-#: tools/editor/create_dialog.cpp:254
-msgid "Create New "
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove Selected Item"
msgstr ""
-#: tools/editor/plugins/rich_text_editor_plugin.cpp:109
-msgid "RichText"
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import from Scene"
msgstr ""
-#: tools/editor/plugins/rich_text_editor_plugin.cpp:110
-msgid "Parse BBCODE"
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Update from Scene"
msgstr ""
-#: tools/editor/plugins/sample_library_editor_plugin.cpp:56
-msgid "Open Sample File(s)"
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Item %d"
msgstr ""
-#: tools/editor/plugins/sample_library_editor_plugin.cpp:77
-msgid "ERROR: Couldn't load sample!"
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Items"
msgstr ""
-#: tools/editor/plugins/sample_library_editor_plugin.cpp:92
-msgid "Add Sample"
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Item List Editor"
msgstr ""
-#: tools/editor/plugins/sample_library_editor_plugin.cpp:117
-msgid "Stop"
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Occluder Polygon"
msgstr ""
-#: tools/editor/plugins/sample_library_editor_plugin.cpp:130
-msgid "Play"
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Edit existing polygon:"
msgstr ""
-#: tools/editor/plugins/sample_library_editor_plugin.cpp:172
-msgid "Rename Sample"
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "LMB: Move Point."
msgstr ""
-#: tools/editor/plugins/sample_library_editor_plugin.cpp:202
-msgid "Delete Sample"
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Ctrl+LMB: Split Segment."
msgstr ""
-#: tools/editor/plugins/sample_library_editor_plugin.cpp:251
-msgid "IMA-ADPCM,"
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "RMB: Erase Point."
msgstr ""
-#: tools/editor/plugins/sample_library_editor_plugin.cpp:457
-msgid "Preview"
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh is empty!"
msgstr ""
-#: tools/editor/plugins/collision_polygon_editor_plugin.cpp:95
-msgid "Create Poly3D"
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Trimesh Body"
msgstr ""
-#: tools/editor/plugins/collision_polygon_editor_plugin.cpp:203
-msgid "Edit Poly"
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Convex Body"
msgstr ""
-#: tools/editor/plugins/collision_polygon_editor_plugin.cpp:319
-msgid "Edit Poly (Remove Point)"
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "This doesn't work on scene root!"
msgstr ""
-#: tools/editor/plugins/collision_polygon_editor_plugin.cpp:562
-msgid "Polygon"
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Shape"
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:147
-msgid "Toggle Autoplay"
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Shape"
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:320
-msgid "New Animation Name:"
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Navigation Mesh"
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:323
-msgid "New Anim"
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "MeshInstance lacks a Mesh!"
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:348
-msgid "Change Animation Name:"
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Could not create outline!"
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:452
-msgid "Remove Animation"
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline"
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:488
-msgid "ERROR: Invalid animation name!"
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Static Body"
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:499
-msgid "ERROR: Animation Name Already Exists!"
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Static Body"
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:508
-msgid "Rename Animation"
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Collision Sibling"
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:524
-msgid "Add Animation"
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Collision Sibling"
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:546
-msgid "Blend Next Changed"
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh.."
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:629
-msgid "Change Blend Time"
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh"
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:741
-msgid "Load Animation"
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Outline Size:"
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:934
-msgid "Duplicate Animation"
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and no MultiMesh set in node)."
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:1025
-msgid "Store anim in editor"
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and MultiMesh contains no Mesh)."
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:1066
-msgid "Add Animation From Editor"
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (invalid path)."
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:1133
-msgid "ERROR: No animation to copy!"
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (not a MeshInstance)."
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:1148
-msgid "ERROR: No animation resource on clipboard!"
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (contains no Mesh resource)."
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:1155
-msgid "Pasted Animation"
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No surface source specified."
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:1166
-msgid "Paste Animation"
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (invalid path)."
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:1180
-msgid "ERROR: No animation to edit!"
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no geometry)."
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:1301
-msgid "Animation Player:"
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no faces)."
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:1309
-msgid "Play backwards selected animation from current pos. (A)"
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Parent has no solid faces to populate."
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:1313
-msgid "Play backwards selected animation from end. (Shift+A)"
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Couldn't map area."
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:1319
-msgid "Stop animation playback. (S)"
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Source Mesh:"
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:1322
-msgid "Play selected animation from start. (Shift+D)"
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Target Surface:"
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:1327
-msgid "Play selected animation from current pos. (D)"
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate Surface"
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:1340
-msgid "Animation position (in seconds)."
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate MultiMesh"
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:1348
-msgid "Scale animation playback globally for the node."
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Target Surface:"
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:1353
-msgid "Create new animation in player."
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Source Mesh:"
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:1359
-msgid "Load an animation from disk."
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "X-Axis"
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:1363
-msgid "Save the current animation"
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Y-Axis"
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:1390
-msgid "Display list of animations in player."
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Z-Axis"
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:1394
-msgid "Autoplay On Load"
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh Up Axis:"
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:1400
-msgid "Edit Target Blend Times"
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Rotation:"
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:1404
-msgid "Animation Tools"
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Tilt:"
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:1405
-msgid "Copy Animation"
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Scale:"
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:1408
-msgid "Edit Anim Resource"
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate"
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:1428
-msgid "Create New Animation"
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create Navigation Polygon"
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:1439
-msgid "Animation Name:"
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Remove Poly And Point"
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:1462
-msgid "Blend Times: "
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Error loading image:"
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:1464
-msgid "Next (Auto Queue):"
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "No pixels with transparency > 128 in image.."
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.cpp:1465
-msgid "Cross-Animation Blend Times"
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Set Emission Mask"
msgstr ""
-#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp:60
-msgid "Create Poly"
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Clear Emission Mask"
msgstr ""
-#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp:396
-msgid "Create Occluder Polygon"
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Load Emission Mask"
msgstr ""
-#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp:424
-msgid "Create a new polygon from scratch"
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generated Point Count:"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:65
-msgid "Configure Snap"
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry."
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:77
-msgid "Grid Offset:"
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry (faces)."
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:94
-msgid "Grid Step:"
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Faces contain no area!"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:117
-msgid "Rotation Offset:"
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "No faces!"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:128
-msgid "Rotation Step:"
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Generate AABB"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:161
-msgid "Move Pivot"
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter From Mesh"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:650
-msgid "Move Action"
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter From Node"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:1198
-msgid "Edit IK Chain"
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Clear Emitter"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:1214
-msgid "Edit CanvasItem"
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:1909
-msgid "EditorFocus"
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Positions:"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:2232
-msgid "Align Top Left"
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Fill:"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:2467
-msgid "Change Anchors"
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Surface"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:2546
-msgid "Zoom (%):"
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Volume"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:2901
-msgid "Paste Pose"
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Point from Curve"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3295
-msgid "Move Mode (W)"
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Add Point to Curve"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3301
-msgid "Rotate Mode (E)"
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Point in Curve"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3315
-msgid "Click to change object's rotation pivot"
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move In-Control in Curve"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3321
-msgid "Pan Mode"
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Out-Control in Curve"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3334
-msgid "Unlock the selected object (can be moved)."
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3355
-msgid "Use Snap"
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3356
-msgid "Show Grid"
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3357
-msgid "Use Rotation Snap"
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3358
-msgid "Snap Relative"
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Select Control Points (Shift+Drag)"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3359
-msgid "Configure Snap.."
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3361
-msgid "Use Pixel Snap"
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Split Segment (in curve)"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3363
-msgid "Expand to Parent"
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3365
-msgid "Skeleton.."
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Close Curve"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3369
-msgid "Make Bones"
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Curve Point #"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3370
-msgid "Clear Bones"
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Point Pos"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3372
-msgid "Make IK Chain"
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve In Pos"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3373
-msgid "Clear IK Chain"
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Out Pos"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3378
-msgid "Align Horizontal"
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Split Path"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3379
-msgid "Align Vertical"
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Remove Path Point"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3380
-msgid "Space Horizontal"
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create UV Map"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3381
-msgid "Space Vertical"
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Transform UV Map"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3384
-msgid "View"
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon 2D UV Editor"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3390
-msgid "Zoom In"
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Point"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3391
-msgid "Zoom Out"
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Ctrl: Rotate"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3392
-msgid "Zoom Reset"
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift: Move All"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3393
-msgid "Zoom Set.."
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift+Ctrl: Scale"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3395
-msgid "Center Selection"
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Polygon"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3396
-msgid "Frame Selection"
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Rotate Polygon"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3399
-msgid "Anchor"
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Scale Polygon"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3439
-msgid "Insert Keys (Insert)"
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon->UV"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3450
-msgid "Insert Key"
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "UV->Polygon"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3451
-msgid "Insert Key (Existing Tracks)"
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Clear UV"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3453
-msgid "Copy Pose"
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Snap"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3455
-msgid "Clear Pose"
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Enable Snap"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3462
-msgid "Set a Value"
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid"
msgstr ""
-#: tools/editor/plugins/canvas_item_editor_plugin.cpp:3467
-msgid "Snap (Pixels):"
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "ERROR: Couldn't load resource!"
msgstr ""
-#: tools/editor/plugins/tile_map_editor_plugin.cpp:584
-msgid "Paint TileMap"
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Add Resource"
msgstr ""
-#: tools/editor/plugins/tile_map_editor_plugin.cpp:728
-msgid "Erase TileMap"
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Rename Resource"
msgstr ""
-#: tools/editor/plugins/tile_map_editor_plugin.cpp:1337
-msgid "Transpose"
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Delete Resource"
msgstr ""
-#: tools/editor/plugins/tile_map_editor_plugin.cpp:1343
-msgid "Mirror X (A)"
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Resource clipboard is empty!"
msgstr ""
-#: tools/editor/plugins/tile_map_editor_plugin.cpp:1349
-msgid "Mirror Y (S)"
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Load Resource"
msgstr ""
-#: tools/editor/plugins/tile_map_editor_plugin.cpp:1358
-msgid "Rotate 0 degrees"
+#: tools/editor/plugins/rich_text_editor_plugin.cpp
+msgid "Parse BBCode"
msgstr ""
-#: tools/editor/plugins/tile_map_editor_plugin.cpp:1364
-msgid "Rotate 90 degrees"
+#: tools/editor/plugins/sample_editor_plugin.cpp
+msgid "Length:"
msgstr ""
-#: tools/editor/plugins/tile_map_editor_plugin.cpp:1370
-msgid "Rotate 180 degrees"
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Open Sample File(s)"
msgstr ""
-#: tools/editor/plugins/tile_map_editor_plugin.cpp:1376
-msgid "Rotate 270 degrees"
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "ERROR: Couldn't load sample!"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:277
-msgid "New name:"
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Add Sample"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:317
-msgid "Scale:"
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Stop"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:326
-msgid "Fade In (s):"
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Play"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:332
-msgid "Fade Out (s):"
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Rename Sample"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:340
-msgid "Blend"
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Delete Sample"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:341
-msgid "Mix"
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "16 Bits"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:347
-msgid "Auto Restart:"
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "8 Bits"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:352
-msgid "Restart (s):"
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Stereo"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:358
-msgid "Random Restart (s):"
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Mono"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:369
-msgid "Start!"
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Format"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:379
-msgid "Amount:"
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Pitch"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:391
-msgid "Blend:"
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error while saving theme"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:419
-msgid "Blend 0:"
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error saving"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:427
-msgid "Blend 1:"
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error importing theme"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:442
-msgid "X-Fade Time (s):"
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error importing"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:449
-msgid "Current:"
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Import Theme"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:817
-msgid "Add Input"
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As.."
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:820
-msgid "Clear Auto-Advance"
+#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/project_export.cpp
+msgid "File"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:822
-msgid "Set Auto-Advance"
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_editor.cpp
+msgid "New"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:823
-msgid "Delete Input"
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save All"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:835
-msgid "Rename"
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "History Prev"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:993
-msgid "Animation Tree is Valid."
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "History Next"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:998
-msgid "Animation Tree is Invalid."
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Reload Theme"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:1362
-msgid "Animation Node"
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:1363
-msgid "OneShot Node"
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:1364
-msgid "Mix Node"
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Up"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:1365
-msgid "Blend2 Node"
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Down"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:1366
-msgid "Blend3 Node"
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Indent Left"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:1367
-msgid "Blend4 Node"
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Indent Right"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:1368
-msgid "TimeScale Node"
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Toggle Comment"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:1369
-msgid "TimeSeek Node"
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Clone Down"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:1370
-msgid "Transition Node"
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Complete Symbol"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:1372
-msgid "Import Animations..."
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Trim Trailing Whitespace"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:1474
-msgid "Edit Node Filters"
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Auto Indent"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:1487
-msgid "Filters.."
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find.."
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.cpp:1527
-msgid "AnimationTree"
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find Next"
msgstr ""
-#: tools/editor/plugins/multimesh_editor_plugin.cpp:58
-msgid "No mesh source specified (and no MultiMesh set in node)."
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find Previous"
msgstr ""
-#: tools/editor/plugins/multimesh_editor_plugin.cpp:64
-msgid "No mesh source specified (and MultiMesh contains no Mesh)."
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Replace.."
msgstr ""
-#: tools/editor/plugins/multimesh_editor_plugin.cpp:76
-msgid "Mesh source is invalid (Invalid Path)."
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Goto Function.."
msgstr ""
-#: tools/editor/plugins/multimesh_editor_plugin.cpp:85
-msgid "Mesh source is invalid (Not a MeshInstance)."
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Goto Line.."
msgstr ""
-#: tools/editor/plugins/multimesh_editor_plugin.cpp:94
-msgid "Mesh source is invalid (Contains no Mesh resource)."
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Debug"
msgstr ""
-#: tools/editor/plugins/multimesh_editor_plugin.cpp:103
-msgid "No surface source specified."
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Toggle Breakpoint"
msgstr ""
-#: tools/editor/plugins/multimesh_editor_plugin.cpp:112
-msgid "Surface source is invalid (Invalid Path)."
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Remove All Breakpoints"
msgstr ""
-#: tools/editor/plugins/multimesh_editor_plugin.cpp:121
-msgid "Surface source is invalid (Not Geometry)."
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Goto Next Breakpoint"
msgstr ""
-#: tools/editor/plugins/multimesh_editor_plugin.cpp:132
-msgid "Surface source is invalid (No Faces)."
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Goto Previous Breakpoint"
msgstr ""
-#: tools/editor/plugins/multimesh_editor_plugin.cpp:156
-msgid "Parent is not of type VisualInstance."
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Step Over"
msgstr ""
-#: tools/editor/plugins/multimesh_editor_plugin.cpp:159
-msgid "Multimesh not present"
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Step Into"
msgstr ""
-#: tools/editor/plugins/multimesh_editor_plugin.cpp:168
-msgid "Parent has no solid faces to populate."
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Break"
msgstr ""
-#: tools/editor/plugins/multimesh_editor_plugin.cpp:187
-msgid "Couldn't map area"
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Continue"
msgstr ""
-#: tools/editor/plugins/multimesh_editor_plugin.cpp:311
-msgid "Select a Source Mesh:"
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Keep Debugger Open"
msgstr ""
-#: tools/editor/plugins/multimesh_editor_plugin.cpp:313
-msgid "Select a Target Surface:"
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Window"
msgstr ""
-#: tools/editor/plugins/multimesh_editor_plugin.cpp:333
-msgid "Populate Surface"
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Left"
msgstr ""
-#: tools/editor/plugins/multimesh_editor_plugin.cpp:337
-msgid "Populate MultiMesh"
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Right"
msgstr ""
-#: tools/editor/plugins/multimesh_editor_plugin.cpp:354
-msgid "Target Surface:"
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Help"
msgstr ""
-#: tools/editor/plugins/multimesh_editor_plugin.cpp:363
-msgid "Source Mesh:"
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Contextual"
msgstr ""
-#: tools/editor/plugins/multimesh_editor_plugin.cpp:368
-msgid "X-Axis"
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Tutorials"
msgstr ""
-#: tools/editor/plugins/multimesh_editor_plugin.cpp:369
-msgid "Y-Axis"
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Open https://godotengine.org at tutorials section."
msgstr ""
-#: tools/editor/plugins/multimesh_editor_plugin.cpp:370
-msgid "Z-Axis"
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Classes"
msgstr ""
-#: tools/editor/plugins/multimesh_editor_plugin.cpp:372
-msgid "Mesh Up Axis:"
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search the class hierarchy."
msgstr ""
-#: tools/editor/plugins/multimesh_editor_plugin.cpp:377
-msgid "Random Rotation:"
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search Help"
msgstr ""
-#: tools/editor/plugins/multimesh_editor_plugin.cpp:382
-msgid "Random Tilt:"
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search the reference documentation."
msgstr ""
-#: tools/editor/plugins/multimesh_editor_plugin.cpp:390
-msgid "Random Scale:"
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Go to previous edited document."
msgstr ""
-#: tools/editor/plugins/multimesh_editor_plugin.cpp:409
-msgid "Populate"
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Go to next edited document."
msgstr ""
-#: tools/editor/plugins/shader_editor_plugin.cpp:506
-msgid "Find.."
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Create Script"
msgstr ""
-#: tools/editor/plugins/shader_editor_plugin.cpp:507
-msgid "Find Next"
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid ""
+"The following files are newer on disk.\n"
+"What action should be taken?:"
msgstr ""
-#: tools/editor/plugins/shader_editor_plugin.cpp:508
-msgid "Replace.."
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Reload"
msgstr ""
-#: tools/editor/plugins/shader_editor_plugin.cpp:510
-msgid "Locate Symbol.."
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Resave"
msgstr ""
-#: tools/editor/plugins/shader_editor_plugin.cpp:511
-msgid "Goto Line.."
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Debugger"
msgstr ""
-#: tools/editor/plugins/shader_editor_plugin.cpp:530
+#: tools/editor/plugins/shader_editor_plugin.cpp
msgid "Vertex"
msgstr ""
-#: tools/editor/plugins/shader_editor_plugin.cpp:534
+#: tools/editor/plugins/shader_editor_plugin.cpp
msgid "Fragment"
msgstr ""
-#: tools/editor/plugins/shader_editor_plugin.cpp:538
+#: tools/editor/plugins/shader_editor_plugin.cpp
msgid "Lighting"
msgstr ""
-#: tools/editor/plugins/theme_editor_plugin.cpp:202
-msgid "Can't save theme to file: "
-msgstr ""
-
-#: tools/editor/plugins/theme_editor_plugin.cpp:476
-msgid "Add Item"
-msgstr ""
-
-#: tools/editor/plugins/theme_editor_plugin.cpp:484
-msgid "Add All Items"
-msgstr ""
-
-#: tools/editor/plugins/theme_editor_plugin.cpp:485
-msgid "Add All"
-msgstr ""
-
-#: tools/editor/plugins/theme_editor_plugin.cpp:498
-msgid "Remove Item"
-msgstr ""
-
-#: tools/editor/plugins/theme_editor_plugin.cpp:600
-msgid "Add Class Items"
-msgstr ""
-
-#: tools/editor/plugins/theme_editor_plugin.cpp:604
-msgid "Create Template"
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Constant"
msgstr ""
-#: tools/editor/plugins/theme_editor_plugin.cpp:643
-msgid "CheckBox Radio1"
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Constant"
msgstr ""
-#: tools/editor/plugins/theme_editor_plugin.cpp:647
-msgid "CheckBox Radio2"
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Constant"
msgstr ""
-#: tools/editor/plugins/theme_editor_plugin.cpp:654
-msgid "Item"
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Operator"
msgstr ""
-#: tools/editor/plugins/theme_editor_plugin.cpp:656
-msgid "Check Item"
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Operator"
msgstr ""
-#: tools/editor/plugins/theme_editor_plugin.cpp:657
-msgid "Checked Item"
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Scalar Operator"
msgstr ""
-#: tools/editor/plugins/theme_editor_plugin.cpp:664
-msgid "Has"
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Operator"
msgstr ""
-#: tools/editor/plugins/theme_editor_plugin.cpp:665
-msgid "Many"
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Toggle Rot Only"
msgstr ""
-#: tools/editor/plugins/theme_editor_plugin.cpp:717
-msgid "Have,Many,Several,Options!"
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Function"
msgstr ""
-#: tools/editor/plugins/theme_editor_plugin.cpp:737
-msgid "Tab 1"
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Function"
msgstr ""
-#: tools/editor/plugins/theme_editor_plugin.cpp:740
-msgid "Tab 2"
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Uniform"
msgstr ""
-#: tools/editor/plugins/theme_editor_plugin.cpp:743
-msgid "Tab 3"
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Uniform"
msgstr ""
-#: tools/editor/plugins/theme_editor_plugin.cpp:760
-msgid "Line Edit"
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Uniform"
msgstr ""
-#: tools/editor/plugins/theme_editor_plugin.cpp:794
-msgid "Open File Dialog"
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Default Value"
msgstr ""
-#: tools/editor/plugins/theme_editor_plugin.cpp:849
-msgid "Data Type:"
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change XForm Uniform"
msgstr ""
-#: tools/editor/plugins/theme_editor_plugin.cpp:853
-msgid "Icon"
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Texture Uniform"
msgstr ""
-#: tools/editor/plugins/theme_editor_plugin.cpp:854
-msgid "Style"
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Cubemap Uniform"
msgstr ""
-#: tools/editor/plugins/baked_light_editor_plugin.cpp:182
-msgid "BakedLightInstance does not contain a BakedLight resource."
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Comment"
msgstr ""
-#: tools/editor/plugins/baked_light_editor_plugin.cpp:267
-msgid "Bake!"
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Color Ramp"
msgstr ""
-#: tools/editor/plugins/baked_light_editor_plugin.cpp:292
-msgid "Reset the lightmap octree baking process (start over)."
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Curve Map"
msgstr ""
-#: tools/editor/plugins/baked_light_baker.cpp:731
-msgid "Parsing "
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Curve Map"
msgstr ""
-#: tools/editor/plugins/baked_light_baker.cpp:738
-msgid "Triangle# "
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Input Name"
msgstr ""
-#: tools/editor/plugins/baked_light_baker.cpp:1719
-msgid "Light Baker Setup:"
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Connect Graph Nodes"
msgstr ""
-#: tools/editor/plugins/baked_light_baker.cpp:1746
-msgid "Parsing Geometry"
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Disconnect Graph Nodes"
msgstr ""
-#: tools/editor/plugins/baked_light_baker.cpp:1751
-msgid "Fixing Lights"
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Remove Shader Graph Node"
msgstr ""
-#: tools/editor/plugins/baked_light_baker.cpp:1753
-msgid "Making BVH"
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Move Shader Graph Node"
msgstr ""
-#: tools/editor/plugins/baked_light_baker.cpp:1755
-msgid "Creating Light Octree"
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Duplicate Graph Node(s)"
msgstr ""
-#: tools/editor/plugins/baked_light_baker.cpp:1757
-msgid "Creating Octree Texture"
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Delete Shader Graph Node(s)"
msgstr ""
-#: tools/editor/plugins/baked_light_baker.cpp:2360
-msgid "Transfer to Lightmaps:"
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Cyclic Connection Link"
msgstr ""
-#: tools/editor/plugins/baked_light_baker.cpp:2368
-msgid "Allocating Texture #"
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Missing Input Connections"
msgstr ""
-#: tools/editor/plugins/baked_light_baker.cpp:2385
-msgid "Baking Triangle #"
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add Shader Graph Node"
msgstr ""
-#: tools/editor/plugins/baked_light_baker.cpp:2508
-msgid "Post-Processing Texture #"
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:564
-msgid "Orthogonal"
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:987
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:999
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "View Plane Transform."
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:1006
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "X-Axis Transform."
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:1012
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Y-Axis Transform."
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:1018
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Z-Axis Transform."
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:1356
-msgid "Scaling to "
-msgstr ""
-
-#: tools/editor/plugins/spatial_editor_plugin.cpp:1434
-msgid "Translating: "
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling to %s%%."
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:1496
-msgid "Rotating "
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotating %s degrees."
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:1684
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Bottom View."
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:1685
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Bottom"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:1690
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Top View."
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:1691
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Top"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:1703
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:1704
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Rear"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:1709
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:1710
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Front"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:1723
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:1724
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Left"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:1728
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:1729
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Right"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:1752
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Keying is disabled (no key inserted)."
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:1768
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Animation Key Inserted."
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:2126
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:2474
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Top (Num7)"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:2475
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Bottom (Shift+Num7)"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:2476
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Left (Num3)"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:2477
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Right (Shift+Num3)"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:2478
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Front (Num1)"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:2479
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Rear (Shift+Num1)"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:2481
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Perspective (Num5)"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:2482
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Orthogonal (Num5)"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:2488
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Environment"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:2490
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Gizmos"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:2494
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Selection (F)"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:2495
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view (Ctrl+Shift+F)"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:2899
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "XForm Dialog"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:3548
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "No scene selected to instance!"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:3552
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Instance at Cursor"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:3557
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Could not instance scene!"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:3931
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Scale Mode (R)"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:3964
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Local Coords"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:3967
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Dialog.."
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:3978
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Use Default Light"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:3979
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Use Default sRGB"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:3990
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "1 Viewport"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports (Alt)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports (Alt)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "4 Viewports"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Display Normal"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:3991
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Display Wireframe"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:3992
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Display Overdraw"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:3993
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Display Shadeless"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:3995
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "View Origin"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:3996
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "View Grid"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:4036
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Snap Settings"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:4045
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Translate Snap:"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:4049
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Rotate Snap (deg.):"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:4053
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Scale Snap (%):"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:4058
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Viewport Settings"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:4070
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Default Light Normal:"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:4095
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Ambient Light Color:"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:4108
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Perspective FOV (deg.):"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:4115
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "View Z-Near:"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:4122
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "View Z-Far:"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:4128
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Change"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:4131
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Translate:"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:4144
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Rotate (deg.):"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:4156
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Scale (ratio):"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:4168
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Type"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:4176
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Pre"
msgstr ""
-#: tools/editor/plugins/spatial_editor_plugin.cpp:4177
+#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Post"
msgstr ""
-#: tools/editor/plugins/script_editor_plugin.cpp:2412
-msgid "Save All"
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "ERROR: Couldn't load frame resource!"
msgstr ""
-#: tools/editor/plugins/script_editor_plugin.cpp:2414
-msgid "History Prev"
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Frame"
msgstr ""
-#: tools/editor/plugins/script_editor_plugin.cpp:2415
-msgid "History Next"
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Resource clipboard is empty or not a texture!"
msgstr ""
-#: tools/editor/plugins/script_editor_plugin.cpp:2434
-msgid "Indent Left"
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Paste Frame"
msgstr ""
-#: tools/editor/plugins/script_editor_plugin.cpp:2435
-msgid "Indent Right"
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Empty"
msgstr ""
-#: tools/editor/plugins/script_editor_plugin.cpp:2436
-msgid "Toggle Comment"
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation Loop"
msgstr ""
-#: tools/editor/plugins/script_editor_plugin.cpp:2437
-msgid "Clone Down"
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation FPS"
msgstr ""
-#: tools/editor/plugins/script_editor_plugin.cpp:2440
-msgid "Complete Symbol"
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "(empty)"
msgstr ""
-#: tools/editor/plugins/script_editor_plugin.cpp:2445
-msgid "Auto Indent"
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animations"
msgstr ""
-#: tools/editor/plugins/script_editor_plugin.cpp:2456
-msgid "Goto Function.."
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Speed (FPS):"
msgstr ""
-#: tools/editor/plugins/script_editor_plugin.cpp:2471
-msgid "Debug"
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animation Frames"
msgstr ""
-#: tools/editor/plugins/script_editor_plugin.cpp:2472
-msgid "Toggle Breakpoint"
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (Before)"
msgstr ""
-#: tools/editor/plugins/script_editor_plugin.cpp:2480
-msgid "Show Debugger"
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (After)"
msgstr ""
-#: tools/editor/plugins/script_editor_plugin.cpp:2481
-msgid "Keep Debugger Open"
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Up"
msgstr ""
-#: tools/editor/plugins/script_editor_plugin.cpp:2493
-msgid "Window"
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Down"
msgstr ""
-#: tools/editor/plugins/script_editor_plugin.cpp:2496
-msgid "Move Left"
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Set region_rect"
msgstr ""
-#: tools/editor/plugins/script_editor_plugin.cpp:2497
-msgid "Move Right"
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Sprite Region Editor"
msgstr ""
-#: tools/editor/plugins/script_editor_plugin.cpp:2505
-msgid "Help"
+#: tools/editor/plugins/style_box_editor_plugin.cpp
+msgid "StyleBox Preview:"
msgstr ""
-#: tools/editor/plugins/script_editor_plugin.cpp:2506
-msgid "Contextual"
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Can't save theme to file:"
msgstr ""
-#: tools/editor/plugins/script_editor_plugin.cpp:2523
-msgid "Tutorials"
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add All Items"
msgstr ""
-#: tools/editor/plugins/script_editor_plugin.cpp:2526
-msgid "Open http://www.godotengine.org at tutorials section."
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add All"
msgstr ""
-#: tools/editor/plugins/script_editor_plugin.cpp:2529
-msgid "Classes"
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove Item"
msgstr ""
-#: tools/editor/plugins/script_editor_plugin.cpp:2532
-msgid "Search the class hierarchy."
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add Class Items"
msgstr ""
-#: tools/editor/plugins/script_editor_plugin.cpp:2535
-msgid "Search Help"
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Remove Class Items"
msgstr ""
-#: tools/editor/plugins/script_editor_plugin.cpp:2538
-msgid "Search the reference documentation."
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Create Template"
msgstr ""
-#: tools/editor/plugins/script_editor_plugin.cpp:2546
-msgid "Go to previous edited document."
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio1"
msgstr ""
-#: tools/editor/plugins/script_editor_plugin.cpp:2552
-msgid "Go to next edited document."
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio2"
msgstr ""
-#: tools/editor/plugins/script_editor_plugin.cpp:2566
-msgid "Create Script"
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Item"
msgstr ""
-#: tools/editor/plugins/script_editor_plugin.cpp:2592
-msgid "Reload"
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Check Item"
msgstr ""
-#: tools/editor/plugins/script_editor_plugin.cpp:2594
-msgid "Resave"
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Checked Item"
msgstr ""
-#: tools/editor/plugins/style_box_editor_plugin.cpp:64
-msgid "StyleBox Preview:"
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Has"
msgstr ""
-#: tools/editor/plugins/sample_editor_plugin.cpp:331
-msgid "Length: "
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Many"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:677
-msgid "Change Scalar Constant"
+#: tools/editor/plugins/theme_editor_plugin.cpp tools/editor/project_export.cpp
+msgid "Options"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:695
-msgid "Change Vec Constant"
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Have,Many,Several,Options!"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:708
-msgid "Change RGB Constant"
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 1"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:721
-msgid "Change Scalar Operator"
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 2"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:734
-msgid "Change Vec Operator"
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 3"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:746
-msgid "Change VecxScalar Operator"
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/scene_tree_editor.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Type:"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:759
-msgid "Change RGB Operator"
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Data Type:"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:771
-msgid "Toggle Rot Only"
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Icon"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:784
-msgid "Change Scalar Function"
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Style"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:796
-msgid "Change Vec Function"
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Color"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:809
-msgid "Change Scalar Uniform"
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint TileMap"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:827
-msgid "Change Vec Uniform"
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Duplicate"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:865
-msgid "Change RGB Uniform"
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase TileMap"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:905
-msgid "Change default value"
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Bucket"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:917
-msgid "Change XForm Uniform"
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Pick Tile"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:940
-msgid "Change Texture Uniform"
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Select"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:951
-msgid "Change Cubemap Uniform"
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase Selection"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:965
-msgid "Change Comment"
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Transpose"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1005
-msgid "Add/Remove to Color Ramp"
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror X (A)"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1007
-msgid "Modify Color Ramp"
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror Y (S)"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1041
-msgid "Add/Remove to Curve Map"
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 0 degrees"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1043
-msgid "Modify Curve Map"
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 90 degrees"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1061
-msgid "Change Input Name"
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 180 degrees"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1113
-msgid "Connect Graph Nodes"
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 270 degrees"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1155
-msgid "Disconnect Graph Nodes"
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Could not find tile:"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1173
-msgid "Remove Shader Graph Node"
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Item name or ID:"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1196
-msgid "Move Shader Graph Node"
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from scene?"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1238
-msgid "Duplicate Graph Node(s)"
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from scene?"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1275
-msgid "Delete Shader Graph Node(s)"
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from Scene"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1430
-msgid "Scalar"
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from Scene"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1443
-msgid "Vector"
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Error"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1472
-msgid "RGB"
+#: tools/editor/project_export.cpp
+msgid "Edit Script Options"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1476
-msgid "Alpha"
+#: tools/editor/project_export.cpp
+msgid "Please export outside the project folder!"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1485
-msgid "XForm"
+#: tools/editor/project_export.cpp
+msgid "Error exporting project!"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1495
-msgid "Time"
+#: tools/editor/project_export.cpp
+msgid "Error writing the project PCK!"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1505
-msgid "ScreenTex"
+#: tools/editor/project_export.cpp
+msgid "No exporter for platform '%s' yet."
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1510
-msgid "UV: "
+#: tools/editor/project_export.cpp
+msgid "Include"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1512
-msgid "UV"
+#: tools/editor/project_export.cpp
+msgid "Change Image Group"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1522
-msgid "ScalarOp"
+#: tools/editor/project_export.cpp
+msgid "Group name can't be empty!"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1570
-msgid "VecOp"
+#: tools/editor/project_export.cpp
+msgid "Invalid character in group name!"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1618
-msgid "VecScalarOp"
+#: tools/editor/project_export.cpp
+msgid "Group name already exists!"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1660
-msgid "RGB Op"
+#: tools/editor/project_export.cpp
+msgid "Add Image Group"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1705
-msgid "XFMult"
+#: tools/editor/project_export.cpp
+msgid "Delete Image Group"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1728
-msgid "XFVecMult"
+#: tools/editor/project_export.cpp
+msgid "Atlas Preview"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1730
-msgid "RotOnly"
+#: tools/editor/project_export.cpp
+msgid "Project Export Settings"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1761
-msgid "XFVecInvMult"
+#: tools/editor/project_export.cpp
+msgid "Target"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1796
-msgid "ScalarFunc"
+#: tools/editor/project_export.cpp
+msgid "Export to Platform"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1849
-msgid "VecFunc"
+#: tools/editor/project_export.cpp
+msgid "Resources"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1885
-msgid "VecLength"
+#: tools/editor/project_export.cpp
+msgid "Export selected resources (including dependencies)."
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1902
-msgid "DotProduct"
+#: tools/editor/project_export.cpp
+msgid "Export all resources in the project."
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1927
-msgid "Vec2Scalar"
+#: tools/editor/project_export.cpp
+msgid "Export all files in the project directory."
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1958
-msgid "Scalar2Vec"
+#: tools/editor/project_export.cpp
+msgid "Export Mode:"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:1989
-msgid "Vec2XForm"
+#: tools/editor/project_export.cpp
+msgid "Resources to Export:"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:2028
-msgid "XForm2Vec"
+#: tools/editor/project_export.cpp
+msgid "Action"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:2060
-msgid "ScalarInterp"
+#: tools/editor/project_export.cpp
+msgid ""
+"Filters to export non-resource files (comma-separated, e.g.: *.json, *.txt):"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:2093
-msgid "VecInterp"
+#: tools/editor/project_export.cpp
+msgid "Filters to exclude from export (comma-separated, e.g.: *.json, *.txt):"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:2177
-msgid "CurveMap"
+#: tools/editor/project_export.cpp
+msgid "Convert text scenes to binary on export."
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:2224
-msgid "ScalarUniform"
+#: tools/editor/project_export.cpp
+msgid "Images"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:2241
-msgid "VectorUniform"
+#: tools/editor/project_export.cpp
+msgid "Keep Original"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:2268
-msgid "ColorUniform"
+#: tools/editor/project_export.cpp
+msgid "Compress for Disk (Lossy, WebP)"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:2292
-msgid "XFUniform"
+#: tools/editor/project_export.cpp
+msgid "Compress for RAM (BC/PVRTC/ETC)"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:2306
-msgid "TexUniform"
+#: tools/editor/project_export.cpp
+msgid "Convert Images (*.png):"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:2381
-msgid "CanvasItemTex"
+#: tools/editor/project_export.cpp
+msgid "Compress for Disk (Lossy) Quality:"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:2415
-msgid "LightColor"
+#: tools/editor/project_export.cpp
+msgid "Shrink All Images:"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:2417
-msgid "Diffuse"
+#: tools/editor/project_export.cpp
+msgid "Compress Formats:"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:2418
-msgid "Specular"
+#: tools/editor/project_export.cpp
+msgid "Image Groups"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:2419
-msgid "Emmision"
+#: tools/editor/project_export.cpp
+msgid "Groups:"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:2422
-msgid "DiffuseAlpha"
+#: tools/editor/project_export.cpp
+msgid "Compress Disk"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:2423
-msgid "NormalMapDepth"
+#: tools/editor/project_export.cpp
+msgid "Compress RAM"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:2424
-msgid "SpecExp"
+#: tools/editor/project_export.cpp
+msgid "Compress Mode:"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:2425
-msgid "Glow"
+#: tools/editor/project_export.cpp
+msgid "Lossy Quality:"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:2426
-msgid "ShadeParam"
+#: tools/editor/project_export.cpp
+msgid "Atlas:"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:2427
-msgid "SpecularExp"
+#: tools/editor/project_export.cpp
+msgid "Shrink By:"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:2428
-msgid "LightAlpha"
+#: tools/editor/project_export.cpp
+msgid "Preview Atlas"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:2429
-msgid "PointSize"
+#: tools/editor/project_export.cpp
+msgid "Image Filter:"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:2430
-msgid "Discard"
+#: tools/editor/project_export.cpp
+msgid "Images:"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:2451
-msgid "Comment"
+#: tools/editor/project_export.cpp
+msgid "Select None"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:2515
-msgid "Error: Cyclic Connection Link"
+#: tools/editor/project_export.cpp
+msgid "Samples"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:2516
-msgid "Error: Missing Input Connections"
+#: tools/editor/project_export.cpp
+msgid "Sample Conversion Mode: (.wav files):"
msgstr ""
-#: tools/editor/plugins/shader_graph_editor_plugin.cpp:2576
-msgid "Add Shader Graph Node"
+#: tools/editor/project_export.cpp
+msgid "Keep"
msgstr ""
-#: tools/editor/plugins/polygon_2d_editor_plugin.cpp:108
-msgid "Create UV Map"
+#: tools/editor/project_export.cpp
+msgid "Compress (RAM - IMA-ADPCM)"
msgstr ""
-#: tools/editor/plugins/polygon_2d_editor_plugin.cpp:551
-msgid "Transform UV Map"
+#: tools/editor/project_export.cpp
+msgid "Sampling Rate Limit (Hz):"
msgstr ""
-#: tools/editor/plugins/polygon_2d_editor_plugin.cpp:854
-msgid "Polygon 2D UV Editor"
+#: tools/editor/project_export.cpp
+msgid "Trim"
msgstr ""
-#: tools/editor/plugins/polygon_2d_editor_plugin.cpp:872
-msgid "Move Polygon"
+#: tools/editor/project_export.cpp
+msgid "Trailing Silence:"
msgstr ""
-#: tools/editor/plugins/polygon_2d_editor_plugin.cpp:873
-msgid "Rotate Polygon"
+#: tools/editor/project_export.cpp
+msgid "Script"
msgstr ""
-#: tools/editor/plugins/polygon_2d_editor_plugin.cpp:874
-msgid "Scale Polygon"
+#: tools/editor/project_export.cpp
+msgid "Script Export Mode:"
msgstr ""
-#: tools/editor/plugins/polygon_2d_editor_plugin.cpp:886
-msgid "Polygon->UV"
+#: tools/editor/project_export.cpp
+msgid "Text"
msgstr ""
-#: tools/editor/plugins/polygon_2d_editor_plugin.cpp:887
-msgid "UV->Polygon"
+#: tools/editor/project_export.cpp
+msgid "Compiled"
msgstr ""
-#: tools/editor/plugins/polygon_2d_editor_plugin.cpp:889
-msgid "Clear UV"
+#: tools/editor/project_export.cpp
+msgid "Encrypted (Provide Key Below)"
msgstr ""
-#: tools/editor/plugins/polygon_2d_editor_plugin.cpp:896
-msgid "Snap"
+#: tools/editor/project_export.cpp
+msgid "Script Encryption Key (256-bits as hex):"
msgstr ""
-#: tools/editor/plugins/polygon_2d_editor_plugin.cpp:900
-msgid "Enable Snap"
+#: tools/editor/project_export.cpp
+msgid "Export PCK/Zip"
msgstr ""
-#: tools/editor/plugins/polygon_2d_editor_plugin.cpp:905
-msgid "Grid"
+#: tools/editor/project_export.cpp
+msgid "Export Project PCK"
msgstr ""
-#: tools/editor/plugins/sprite_region_editor_plugin.cpp:176
-msgid "Set region_rect"
+#: tools/editor/project_export.cpp
+msgid "Export.."
msgstr ""
-#: tools/editor/plugins/sprite_region_editor_plugin.cpp:423
-msgid "Sprite Region Editor"
+#: tools/editor/project_export.cpp
+msgid "Project Export"
msgstr ""
-#: tools/editor/plugins/resource_preloader_editor_plugin.cpp:73
-msgid "ERROR: Couldn't load resource!"
+#: tools/editor/project_export.cpp
+msgid "Export Preset:"
msgstr ""
-#: tools/editor/plugins/resource_preloader_editor_plugin.cpp:90
-msgid "Add Resource"
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, the path must exist!"
msgstr ""
-#: tools/editor/plugins/resource_preloader_editor_plugin.cpp:137
-msgid "Rename Resource"
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, engine.cfg must not exist."
msgstr ""
-#: tools/editor/plugins/resource_preloader_editor_plugin.cpp:157
-msgid "Delete Resource"
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, engine.cfg must exist."
msgstr ""
-#: tools/editor/plugins/resource_preloader_editor_plugin.cpp:170
-msgid "Resource clipboard is empty!"
+#: tools/editor/project_manager.cpp
+msgid "Imported Project"
msgstr ""
-#: tools/editor/plugins/resource_preloader_editor_plugin.cpp:209
-msgid "Confirm..."
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path (changed anything?)."
msgstr ""
-#: tools/editor/plugins/resource_preloader_editor_plugin.cpp:210
-msgid "Remove Resource '"
+#: tools/editor/project_manager.cpp
+msgid "Couldn't create engine.cfg in project path."
msgstr ""
-#: tools/editor/plugins/resource_preloader_editor_plugin.cpp:211
-msgid "Cancel"
+#: tools/editor/project_manager.cpp
+msgid "Import Existing Project"
msgstr ""
-#: tools/editor/plugins/resource_preloader_editor_plugin.cpp:412
-msgid "Load Resource"
+#: tools/editor/project_manager.cpp
+msgid "Project Path (Must Exist):"
msgstr ""
-#: tools/editor/plugins/sprite_frames_editor_plugin.cpp:79
-msgid "ERROR: Couldn't load frame resource!"
+#: tools/editor/project_manager.cpp
+msgid "Project Name:"
msgstr ""
-#: tools/editor/plugins/sprite_frames_editor_plugin.cpp:96
-msgid "Add Frame"
+#: tools/editor/project_manager.cpp
+msgid "Create New Project"
msgstr ""
-#: tools/editor/plugins/sprite_frames_editor_plugin.cpp:199
-msgid "Resource clipboard is empty or not a texture!"
+#: tools/editor/project_manager.cpp
+msgid "Project Path:"
msgstr ""
-#: tools/editor/plugins/sprite_frames_editor_plugin.cpp:208
-msgid "Paste Frame"
+#: tools/editor/project_manager.cpp
+msgid "Browse"
msgstr ""
-#: tools/editor/plugins/sprite_frames_editor_plugin.cpp:236
-msgid "Add Empty"
+#: tools/editor/project_manager.cpp
+msgid "New Game Project"
msgstr ""
-#: tools/editor/plugins/sprite_frames_editor_plugin.cpp:452
-msgid "Change Animation Loop"
+#: tools/editor/project_manager.cpp
+msgid "That's a BINGO!"
msgstr ""
-#: tools/editor/plugins/sprite_frames_editor_plugin.cpp:466
-msgid "Change Animation FPS"
+#: tools/editor/project_manager.cpp
+msgid "Unnamed Project"
msgstr ""
-#: tools/editor/plugins/sprite_frames_editor_plugin.cpp:533
-msgid ": (empty)"
+#: tools/editor/project_manager.cpp
+msgid "Are you sure to open more than one projects?"
msgstr ""
-#: tools/editor/plugins/sprite_frames_editor_plugin.cpp:736
-msgid "Animations"
+#: tools/editor/project_manager.cpp
+msgid "Are you sure to run more than one projects?"
msgstr ""
-#: tools/editor/plugins/sprite_frames_editor_plugin.cpp:763
-msgid "Speed (FPS):"
+#: tools/editor/project_manager.cpp
+msgid "Remove project from the list? (Folder contents will not be modified)"
msgstr ""
-#: tools/editor/plugins/sprite_frames_editor_plugin.cpp:770
-msgid "Loop"
+#: tools/editor/project_manager.cpp
+msgid "Recent Projects:"
msgstr ""
-#: tools/editor/plugins/sprite_frames_editor_plugin.cpp:779
-msgid "Animation Frames"
+#: tools/editor/project_manager.cpp
+msgid "Run"
msgstr ""
-#: tools/editor/plugins/sprite_frames_editor_plugin.cpp:797
-msgid "Insert Empty (Before)"
+#: tools/editor/project_manager.cpp
+msgid "Scan"
msgstr ""
-#: tools/editor/plugins/sprite_frames_editor_plugin.cpp:801
-msgid "Insert Empty (After)"
+#: tools/editor/project_manager.cpp
+msgid "New Project"
msgstr ""
-#: tools/editor/plugins/sprite_frames_editor_plugin.cpp:805
-msgid "Up"
+#: tools/editor/project_manager.cpp
+msgid "Exit"
msgstr ""
-#: tools/editor/plugins/sprite_frames_editor_plugin.cpp:809
-msgid "Down"
+#: tools/editor/project_settings.cpp
+msgid "Key "
msgstr ""
-#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp:42
-msgid "Create Navigation Polygon"
+#: tools/editor/project_settings.cpp
+msgid "Joy Button"
msgstr ""
-#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp:334
-msgid "Remove Poly And Point"
+#: tools/editor/project_settings.cpp
+msgid "Joy Axis"
msgstr ""
-#: tools/editor/plugins/collision_shape_2d_editor_plugin.cpp:183
-msgid "Set Handle"
+#: tools/editor/project_settings.cpp
+msgid "Mouse Button"
msgstr ""
-#: tools/editor/plugins/particles_2d_editor_plugin.cpp:69
-msgid "Error loading image: "
+#: tools/editor/project_settings.cpp
+msgid "Invalid action (anything goes but '/' or ':')."
msgstr ""
-#: tools/editor/plugins/particles_2d_editor_plugin.cpp:95
-msgid "No pixels with transparency > 128 in image.."
+#: tools/editor/project_settings.cpp
+msgid "Action '%s' already exists!"
msgstr ""
-#: tools/editor/plugins/particles_2d_editor_plugin.cpp:113
-msgid "Set Emission Mask"
+#: tools/editor/project_settings.cpp
+msgid "Rename Input Action Event"
msgstr ""
-#: tools/editor/plugins/particles_2d_editor_plugin.cpp:133
-msgid "Clear Emission Mask"
+#: tools/editor/project_settings.cpp
+msgid "Add Input Action Event"
msgstr ""
-#: tools/editor/plugins/particles_2d_editor_plugin.cpp:174
-msgid "Load Emission Mask"
+#: tools/editor/project_settings.cpp
+msgid "Meta+"
msgstr ""
-#: tools/editor/plugins/particles_2d_editor_plugin.cpp:193
-msgid "Generated Point Count:"
+#: tools/editor/project_settings.cpp
+msgid "Shift+"
msgstr ""
-#: tools/editor/plugins/control_editor_plugin.cpp:115
-msgid "Edit Control"
+#: tools/editor/project_settings.cpp
+msgid "Alt+"
msgstr ""
-#: tools/editor/plugins/control_editor_plugin.cpp:765
-msgid "Snap:"
+#: tools/editor/project_settings.cpp
+msgid "Control+"
msgstr ""
-#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp:168
-msgid "Creating Mesh Library"
+#: tools/editor/project_settings.cpp
+msgid "Press a Key.."
msgstr ""
-#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp:196
-msgid "Thumbnail.."
+#: tools/editor/project_settings.cpp
+msgid "Mouse Button Index:"
msgstr ""
-#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp:259
-msgid "Remove Item "
+#: tools/editor/project_settings.cpp
+msgid "Left Button"
msgstr ""
-#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp:291
-msgid "Import Scene"
+#: tools/editor/project_settings.cpp
+msgid "Right Button"
msgstr ""
-#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp:307
-msgid "Remove Selected Item"
+#: tools/editor/project_settings.cpp
+msgid "Middle Button"
msgstr ""
-#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp:309
-msgid "Import from Scene"
+#: tools/editor/project_settings.cpp
+msgid "Wheel Up Button"
msgstr ""
-#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp:310
-msgid "Update from Scene"
+#: tools/editor/project_settings.cpp
+msgid "Wheel Down Button"
msgstr ""
-#: tools/editor/plugins/particles_editor_plugin.cpp:60
-msgid "Node does not contain geometry."
+#: tools/editor/project_settings.cpp
+msgid "Button 6"
msgstr ""
-#: tools/editor/plugins/particles_editor_plugin.cpp:69
-msgid "Node does not contain geometry (faces)."
+#: tools/editor/project_settings.cpp
+msgid "Button 7"
msgstr ""
-#: tools/editor/plugins/particles_editor_plugin.cpp:222
-msgid "Faces contain no area!"
+#: tools/editor/project_settings.cpp
+msgid "Button 8"
msgstr ""
-#: tools/editor/plugins/particles_editor_plugin.cpp:252
-msgid "No Faces!"
+#: tools/editor/project_settings.cpp
+msgid "Button 9"
msgstr ""
-#: tools/editor/plugins/particles_editor_plugin.cpp:352
-msgid "Generate AABB"
+#: tools/editor/project_settings.cpp
+msgid "Joystick Axis Index:"
msgstr ""
-#: tools/editor/plugins/particles_editor_plugin.cpp:354
-msgid "Create Emitter From Mesh"
+#: tools/editor/project_settings.cpp
+msgid "Axis"
msgstr ""
-#: tools/editor/plugins/particles_editor_plugin.cpp:355
-msgid "Create Emitter From Node"
+#: tools/editor/project_settings.cpp
+msgid "Joystick Button Index:"
msgstr ""
-#: tools/editor/plugins/particles_editor_plugin.cpp:356
-msgid "Clear Emitter"
+#: tools/editor/project_settings.cpp
+msgid "Add Input Action"
msgstr ""
-#: tools/editor/plugins/particles_editor_plugin.cpp:361
-msgid "Create Emitter"
+#: tools/editor/project_settings.cpp
+msgid "Erase Input Action Event"
msgstr ""
-#: tools/editor/plugins/particles_editor_plugin.cpp:365
-msgid "Emission Positions:"
+#: tools/editor/project_settings.cpp
+msgid "Device"
msgstr ""
-#: tools/editor/plugins/particles_editor_plugin.cpp:382
-msgid "Emission Fill:"
+#: tools/editor/project_settings.cpp
+msgid "Button"
msgstr ""
-#: tools/editor/plugins/particles_editor_plugin.cpp:389
-msgid "Surface"
+#: tools/editor/project_settings.cpp
+msgid "Left Button."
msgstr ""
-#: tools/editor/plugins/particles_editor_plugin.cpp:390
-msgid "Volume"
+#: tools/editor/project_settings.cpp
+msgid "Right Button."
msgstr ""
-#: tools/editor/plugins/item_list_editor_plugin.cpp:132
-msgid "Item "
+#: tools/editor/project_settings.cpp
+msgid "Middle Button."
msgstr ""
-#: tools/editor/plugins/item_list_editor_plugin.cpp:302
-msgid "Items"
+#: tools/editor/project_settings.cpp
+msgid "Wheel Up."
msgstr ""
-#: tools/editor/plugins/item_list_editor_plugin.cpp:307
-msgid "Item List Editor"
+#: tools/editor/project_settings.cpp
+msgid "Wheel Down."
msgstr ""
-#: tools/editor/plugins/color_ramp_editor_plugin.cpp:66
-msgid "Add/Remove Color Ramp Point"
+#: tools/editor/project_settings.cpp
+msgid "Toggle Persisting"
msgstr ""
-#: tools/editor/plugins/path_editor_plugin.cpp:42
-msgid "Curve Point #"
+#: tools/editor/project_settings.cpp
+msgid "Error saving settings."
msgstr ""
-#: tools/editor/plugins/path_editor_plugin.cpp:151
-msgid "Set Curve Point Pos"
+#: tools/editor/project_settings.cpp
+msgid "Settings saved OK."
msgstr ""
-#: tools/editor/plugins/path_editor_plugin.cpp:182
-msgid "Set Curve In Pos"
+#: tools/editor/project_settings.cpp
+msgid "Add Translation"
msgstr ""
-#: tools/editor/plugins/path_editor_plugin.cpp:194
-msgid "Set Curve Out Pos"
+#: tools/editor/project_settings.cpp
+msgid "Toggle AutoLoad Globals"
msgstr ""
-#: tools/editor/plugins/path_editor_plugin.cpp:369
-msgid "Split Path"
+#: tools/editor/project_settings.cpp
+msgid "Invalid name."
msgstr ""
-#: tools/editor/plugins/path_editor_plugin.cpp:389
-msgid "Add Point to Curve"
+#: tools/editor/project_settings.cpp
+msgid "Valid characters:"
msgstr ""
-#: tools/editor/plugins/path_editor_plugin.cpp:414
-msgid "Remove Path Point"
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing engine class name."
msgstr ""
-#: tools/editor/plugins/path_editor_plugin.cpp:563
-msgid "Delete Point."
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing buit-in type name."
msgstr ""
-#: tools/editor/plugins/path_editor_plugin.cpp:569
-msgid "Close Curve"
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing global constant name."
msgstr ""
-#: tools/editor/plugins/mesh_editor_plugin.cpp:30
-msgid "Mesh is empty!"
+#: tools/editor/project_settings.cpp
+msgid "Add Autoload"
msgstr ""
-#: tools/editor/plugins/mesh_editor_plugin.cpp:59
-msgid "Create Static Trimesh Body"
+#: tools/editor/project_settings.cpp
+msgid "Remove Autoload"
msgstr ""
-#: tools/editor/plugins/mesh_editor_plugin.cpp:61
-msgid "Create Static Convex Body"
+#: tools/editor/project_settings.cpp
+msgid "Move Autoload"
msgstr ""
-#: tools/editor/plugins/mesh_editor_plugin.cpp:113
-msgid "This doesn't work on scene root!"
+#: tools/editor/project_settings.cpp
+msgid "Remove Translation"
msgstr ""
-#: tools/editor/plugins/mesh_editor_plugin.cpp:132
-msgid "Create Trimesh Shape"
+#: tools/editor/project_settings.cpp
+msgid "Add Remapped Path"
msgstr ""
-#: tools/editor/plugins/mesh_editor_plugin.cpp:134
-msgid "Create Convex Shape"
+#: tools/editor/project_settings.cpp
+msgid "Resource Remap Add Remap"
msgstr ""
-#: tools/editor/plugins/mesh_editor_plugin.cpp:159
-msgid "Create Navigation Mesh"
+#: tools/editor/project_settings.cpp
+msgid "Change Resource Remap Language"
msgstr ""
-#: tools/editor/plugins/mesh_editor_plugin.cpp:181
-msgid "MeshInstance lacks a Mesh!"
+#: tools/editor/project_settings.cpp
+msgid "Remove Resource Remap"
msgstr ""
-#: tools/editor/plugins/mesh_editor_plugin.cpp:189
-msgid "Could not create outline!"
+#: tools/editor/project_settings.cpp
+msgid "Remove Resource Remap Option"
msgstr ""
-#: tools/editor/plugins/mesh_editor_plugin.cpp:203
-msgid "Create Outline"
+#: tools/editor/project_settings.cpp
+msgid "Enable"
msgstr ""
-#: tools/editor/plugins/mesh_editor_plugin.cpp:228
-msgid "Create Trimesh Static Body"
+#: tools/editor/project_settings.cpp
+msgid "Project Settings (engine.cfg)"
msgstr ""
-#: tools/editor/plugins/mesh_editor_plugin.cpp:229
-msgid "Create Convex Static Body"
+#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp
+msgid "General"
msgstr ""
-#: tools/editor/plugins/mesh_editor_plugin.cpp:231
-msgid "Create Trimesh Collision Sibling"
+#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp
+msgid "Property:"
msgstr ""
-#: tools/editor/plugins/mesh_editor_plugin.cpp:232
-msgid "Create Convex Collision Sibling"
+#: tools/editor/project_settings.cpp
+msgid "Del"
msgstr ""
-#: tools/editor/plugins/mesh_editor_plugin.cpp:236
-msgid "Create Outline Mesh.."
+#: tools/editor/project_settings.cpp
+msgid "Copy To Platform.."
msgstr ""
-#: tools/editor/plugins/mesh_editor_plugin.cpp:241
-msgid "Create Outline Mesh"
+#: tools/editor/project_settings.cpp
+msgid "Input Map"
msgstr ""
-#: tools/editor/plugins/mesh_editor_plugin.cpp:253
-msgid "Outline Size:"
+#: tools/editor/project_settings.cpp
+msgid "Action:"
msgstr ""
-#: tools/editor/plugins/tile_set_editor_plugin.cpp:178
-msgid "Could not find tile: "
+#: tools/editor/project_settings.cpp
+msgid "Device:"
msgstr ""
-#: tools/editor/plugins/tile_set_editor_plugin.cpp:197
-msgid "Item name or ID:"
+#: tools/editor/project_settings.cpp
+msgid "Index:"
msgstr ""
-#: tools/editor/plugins/tile_set_editor_plugin.cpp:202
-msgid "Create from scene?"
+#: tools/editor/project_settings.cpp
+msgid "Localization"
msgstr ""
-#: tools/editor/plugins/tile_set_editor_plugin.cpp:207
-msgid "Merge from scene?"
+#: tools/editor/project_settings.cpp
+msgid "Translations"
msgstr ""
-#: tools/editor/plugins/tile_set_editor_plugin.cpp:241
-msgid "Create from Scene"
+#: tools/editor/project_settings.cpp
+msgid "Translations:"
msgstr ""
-#: tools/editor/plugins/tile_set_editor_plugin.cpp:242
-msgid "Merge from Scene"
+#: tools/editor/project_settings.cpp
+msgid "Add.."
msgstr ""
-#: tools/editor/plugins/tile_set_editor_plugin.cpp:257
-msgid "Error"
+#: tools/editor/project_settings.cpp
+msgid "Remaps"
msgstr ""
-#: tools/editor/plugins/path_2d_editor_plugin.cpp:116
-msgid "Remove Point from Curve"
+#: tools/editor/project_settings.cpp
+msgid "Resources:"
msgstr ""
-#: tools/editor/plugins/path_2d_editor_plugin.cpp:193
-msgid "Move Point in Curve"
+#: tools/editor/project_settings.cpp
+msgid "Remaps by Locale:"
msgstr ""
-#: tools/editor/plugins/path_2d_editor_plugin.cpp:203
-msgid "Move In-Control in Curve"
+#: tools/editor/project_settings.cpp
+msgid "Locale"
msgstr ""
-#: tools/editor/plugins/path_2d_editor_plugin.cpp:213
-msgid "Move Out-Control in Curve"
+#: tools/editor/project_settings.cpp
+msgid "AutoLoad"
msgstr ""
-#: tools/editor/plugins/path_2d_editor_plugin.cpp:646
-msgid "Select Control Points (Shift+Drag)"
+#: tools/editor/project_settings.cpp
+msgid "Node Name:"
msgstr ""
-#: tools/editor/plugins/animation_player_editor_plugin.h:206
-msgid "Anim"
+#: tools/editor/project_settings.cpp
+msgid "List:"
msgstr ""
-#: tools/editor/plugins/animation_tree_editor_plugin.h:183
-msgid "AnimTree"
+#: tools/editor/project_settings.cpp
+msgid "Singleton"
msgstr ""
-#: tools/editor/plugins/sprite_region_editor_plugin.h:122
-msgid "SpriteRegion"
+#: tools/editor/property_editor.cpp
+msgid "Preset.."
msgstr ""
-#: tools/editor/plugins/stream_editor_plugin.h:72
-msgid "Stream"
+#: tools/editor/property_editor.cpp
+msgid "Ease In"
msgstr ""
-#: tools/editor/plugins/control_editor_plugin.h:128
-msgid "GUI"
+#: tools/editor/property_editor.cpp
+msgid "Ease Out"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:57
-msgid "FixBorder"
+#: tools/editor/property_editor.cpp
+msgid "Zero"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:58
-msgid "AlphBit"
+#: tools/editor/property_editor.cpp
+msgid "Easing In-Out"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:59
-msgid "ExtComp"
+#: tools/editor/property_editor.cpp
+msgid "Easing Out-In"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:60
-msgid "NoMipMap"
+#: tools/editor/property_editor.cpp
+msgid "File.."
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:61
-msgid "Repeat"
+#: tools/editor/property_editor.cpp
+msgid "Dir.."
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:62
-msgid "Filter"
+#: tools/editor/property_editor.cpp
+msgid "Load"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:63
-msgid "PMAlpha"
+#: tools/editor/property_editor.cpp
+msgid "Assign"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:64
-msgid "ToLinear"
+#: tools/editor/property_editor.cpp
+msgid "Error loading file: Not a resource!"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:65
-msgid "ToRG"
+#: tools/editor/property_editor.cpp
+msgid "Couldn't load image"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:66
-msgid "Anisoropic"
+#: tools/editor/property_editor.cpp
+msgid "Bit %d, val %d."
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:176
-msgid "Uncompressed"
+#: tools/editor/property_editor.cpp
+msgid "On"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:177
-msgid "Compress Lossless (PNG)"
+#: tools/editor/property_editor.cpp
+msgid "Set"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:178
-msgid "Compress Lossy (WebP)"
+#: tools/editor/property_editor.cpp
+msgid "Properties:"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:179
-msgid "Compress (VRAM)"
+#: tools/editor/property_editor.cpp
+msgid "Global"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:182
-msgid "Texture Format"
+#: tools/editor/property_editor.cpp
+msgid "Sections:"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:202
-msgid "Texture Compression Quality (WebP):"
+#: tools/editor/pvrtc_compress.cpp
+msgid "Could not execute PVRTC tool:"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:224
-msgid "Texture Options"
+#: tools/editor/pvrtc_compress.cpp
+msgid "Can't load back converted image using PVRTC tool:"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:227
-msgid "NOTICE: You are not forced to import textures for 2D projects. Just copy your .jpg or .png files to your project, and change export options later. Atlases can be generated on export too."
+#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp
+msgid "Reparent Node"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:332
-msgid "Please specify some files!"
+#: tools/editor/reparent_dialog.cpp
+msgid "Reparent Location (Select new Parent):"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:340
-msgid "Target path is empty."
+#: tools/editor/reparent_dialog.cpp
+msgid "Keep Global Transform"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:346
-msgid "Target path must be full resource path."
+#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp
+msgid "Reparent"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:353
-msgid "Target path must exist."
+#: tools/editor/resources_dock.cpp
+msgid "Create New Resource"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:362
-msgid "At least one file needed for Atlas."
+#: tools/editor/resources_dock.cpp
+msgid "Open Resource"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:385
-msgid "Error importing: "
+#: tools/editor/resources_dock.cpp
+msgid "Save Resource"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:394
-msgid "Only one file is required for large texture"
+#: tools/editor/resources_dock.cpp
+msgid "Resource Tools"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:502
-msgid "PackedTexture"
+#: tools/editor/resources_dock.cpp
+msgid "Make Local"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:539
-msgid "Import Textures"
+#: tools/editor/run_settings_dialog.cpp
+msgid "Run Mode:"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:549
-msgid "Source Texture:"
+#: tools/editor/run_settings_dialog.cpp
+msgid "Current Scene"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:551
-msgid "Source Texture(s):"
+#: tools/editor/run_settings_dialog.cpp
+msgid "Main Scene"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:562
-msgid "Crop empty space."
+#: tools/editor/run_settings_dialog.cpp
+msgid "Main Scene Arguments:"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:574
-msgid "Target Path:"
+#: tools/editor/run_settings_dialog.cpp
+msgid "Scene Run Settings"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:582
-msgid "Max Texture size:"
+#: tools/editor/scene_tree_dock.cpp
+msgid "OK :("
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:585
-msgid "Cell Size:"
+#: tools/editor/scene_tree_dock.cpp
+msgid "No parent to instance a child at."
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:635
-msgid "Accept"
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error loading scene from %s"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:650
-msgid "Import Textures for Atlas (2D)"
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error instancing scene from %s"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:657
-msgid "Import Large Textures (2D)"
+#: tools/editor/scene_tree_dock.cpp
+msgid "Ok"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:665
-msgid "Import Textures for 2D"
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Cannot instance the scene '%s' because the current scene exists within one of "
+"its nodes."
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:672
-msgid "Import Textures for 3D"
+#: tools/editor/scene_tree_dock.cpp
+msgid "Instance Scene(s)"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:1003
-msgid "Import Large Texture"
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done on the tree root."
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:1005
-msgid "Load Source Image"
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Node In Parent"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:1012
-msgid "Slicing"
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Nodes In Parent"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:1041
-msgid "Inserting"
+#: tools/editor/scene_tree_dock.cpp
+msgid "Duplicate Node(s)"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:1056
-msgid "Saving"
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete Node(s)?"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:1060
-msgid "Couldn't save large texture: "
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done without a scene."
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:1075
-msgid "Build Atlas For: "
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation requires a single selected node."
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:1084
-msgid "Loading Image: "
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done on instanced scenes."
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:1089
-msgid "Couldn't load image: "
+#: tools/editor/scene_tree_dock.cpp
+msgid "Save New Scene As.."
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:1098
-msgid "Converting Images"
+#: tools/editor/scene_tree_dock.cpp
+msgid "Makes Sense!"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:1157
-msgid "Cropping Images"
+#: tools/editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes from a foreign scene!"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:1181
-msgid "Blitting Images"
+#: tools/editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes the current scene inherits from!"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:1294
-msgid "Couldn't save atlas image: "
+#: tools/editor/scene_tree_dock.cpp
+msgid "Remove Node(s)"
msgstr ""
-#: tools/editor/io_plugins/editor_texture_import_plugin.cpp:1436
-msgid "Couldn't save converted texture: "
+#: tools/editor/scene_tree_dock.cpp
+msgid "Create Node"
msgstr ""
-#: tools/editor/io_plugins/editor_translation_import_plugin.cpp:67
-msgid "Invalid source!"
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Couldn't save new scene. Likely dependencies (instances) couldn't be "
+"satisfied."
msgstr ""
-#: tools/editor/io_plugins/editor_translation_import_plugin.cpp:78
-msgid "Invalid translation source!"
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error saving scene."
msgstr ""
-#: tools/editor/io_plugins/editor_translation_import_plugin.cpp:89
-msgid "Column"
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error duplicating scene to save it."
msgstr ""
-#: tools/editor/io_plugins/editor_translation_import_plugin.cpp:234
-msgid "No items to import!"
+#: tools/editor/scene_tree_dock.cpp
+msgid "New Scene Root"
msgstr ""
-#: tools/editor/io_plugins/editor_translation_import_plugin.cpp:239
-msgid "No target path!!"
+#: tools/editor/scene_tree_dock.cpp
+msgid "Inherit Scene"
msgstr ""
-#: tools/editor/io_plugins/editor_translation_import_plugin.cpp:243
-msgid "Import Translations"
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add Child Node"
msgstr ""
-#: tools/editor/io_plugins/editor_translation_import_plugin.cpp:261
-msgid "Couldnt import!"
+#: tools/editor/scene_tree_dock.cpp
+msgid "Instance Child Scene"
msgstr ""
-#: tools/editor/io_plugins/editor_translation_import_plugin.cpp:298
-msgid "Import Translation"
+#: tools/editor/scene_tree_dock.cpp
+msgid "Change Type"
msgstr ""
-#: tools/editor/io_plugins/editor_translation_import_plugin.cpp:310
-msgid "Source CSV:"
+#: tools/editor/scene_tree_dock.cpp
+msgid "Edit Groups"
msgstr ""
-#: tools/editor/io_plugins/editor_translation_import_plugin.cpp:316
-msgid "Ignore First Row"
+#: tools/editor/scene_tree_dock.cpp
+msgid "Edit Connections"
msgstr ""
-#: tools/editor/io_plugins/editor_translation_import_plugin.cpp:342
-msgid "Compress"
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add Script"
msgstr ""
-#: tools/editor/io_plugins/editor_translation_import_plugin.cpp:347
-msgid "Add to Project (engine.cfg)"
+#: tools/editor/scene_tree_dock.cpp
+msgid "Merge From Scene"
msgstr ""
-#: tools/editor/io_plugins/editor_translation_import_plugin.cpp:374
-msgid "Import Languages:"
+#: tools/editor/scene_tree_dock.cpp
+msgid "Save Branch as Scene"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:320
-msgid "New Clip"
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete Node(s)"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:444
-msgid "Animation Options"
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add/Create a New Node"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:449
-msgid "Flags"
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Instance a scene file as a Node. Creates an inherited scene if no root node "
+"exists."
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:469
-msgid "Bake FPS:"
+#: tools/editor/scene_tree_editor.cpp
+msgid ""
+"This item cannot be made visible because the parent is hidden. Unhide the "
+"parent first."
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:480
-msgid "Optimizer"
+#: tools/editor/scene_tree_editor.cpp
+msgid "Toggle Spatial Visible"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:490
-msgid "Max Linear Error"
+#: tools/editor/scene_tree_editor.cpp
+msgid "Toggle CanvasItem Visible"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:497
-msgid "Max Angular Error"
+#: tools/editor/scene_tree_editor.cpp
+msgid "Instance:"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:504
-msgid "Max Angle"
+#: tools/editor/scene_tree_editor.cpp
+msgid "Invalid node name, the following characters are not allowed:"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:513
-msgid "Clips"
+#: tools/editor/scene_tree_editor.cpp
+msgid "Rename Node"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:525
-msgid "Start(s)"
+#: tools/editor/scene_tree_editor.cpp
+msgid "Scene Tree (Nodes):"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:526
-msgid "End(s)"
+#: tools/editor/scene_tree_editor.cpp
+msgid "Editable Children"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:536
-msgid "Filters"
+#: tools/editor/scene_tree_editor.cpp
+msgid "Load As Placeholder"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:677
-msgid "Source path is empty."
+#: tools/editor/scene_tree_editor.cpp
+msgid "Open in Editor"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:724
-msgid "Couldn't load Post-Import Script."
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear Inheritance"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:733
-msgid "Invalid/Broken Script for Post-Import."
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear Inheritance? (No Undo!)"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:1038
-msgid "Import 3D Scene"
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear!"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:1048
-msgid "Source Scene:"
+#: tools/editor/scene_tree_editor.cpp
+msgid "Select a Node"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:1074
-msgid "Same as Target Scene"
+#: tools/editor/scenes_dock.cpp
+msgid "Same source and destination files, doing nothing."
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:1075
-msgid "Shared"
+#: tools/editor/scenes_dock.cpp
+msgid "Same source and destination paths, doing nothing."
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:1077
-msgid "Target Texture Folder:"
+#: tools/editor/scenes_dock.cpp
+msgid "Can't move directories to within themselves."
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:1132
-msgid "Post-Process Script:"
+#: tools/editor/scenes_dock.cpp
+msgid "Can't operate on '..'"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:1166
-msgid "Overwrite Existing Scene"
+#: tools/editor/scenes_dock.cpp
+msgid "Pick New Name and Location For:"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:1168
-msgid "Keep Existing, Merge with New"
+#: tools/editor/scenes_dock.cpp
+msgid "No files selected!"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:1169
-msgid "Keep Existing, Ignore New"
+#: tools/editor/scenes_dock.cpp
+msgid "Instance"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:1170
-msgid "This Time:"
+#: tools/editor/scenes_dock.cpp
+msgid "Edit Dependencies.."
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:1177
-msgid "Next Time:"
+#: tools/editor/scenes_dock.cpp
+msgid "View Owners.."
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:1214
-msgid "The Following Files are Missing:"
+#: tools/editor/scenes_dock.cpp
+msgid "Rename or Move.."
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:1216
-msgid "Import Anyway"
+#: tools/editor/scenes_dock.cpp
+msgid "Move To.."
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:1222
-msgid "Import & Open"
+#: tools/editor/scenes_dock.cpp
+msgid "Info"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:1226
-msgid "Edited scene has not been saved, open imported scene anyway?"
+#: tools/editor/scenes_dock.cpp
+msgid "Show In File Manager"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:2343
-msgid "Importing Scene.."
+#: tools/editor/scenes_dock.cpp
+msgid "Previous Directory"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:2729
-msgid "Running Custom Script.."
+#: tools/editor/scenes_dock.cpp
+msgid "Next Directory"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:2738
-msgid "Couldn't load post-import script: '"
+#: tools/editor/scenes_dock.cpp
+msgid "Re-Scan Filesystem"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:2744
-msgid "Invalid/Broken Script for Post-Import: '"
+#: tools/editor/scenes_dock.cpp
+msgid "Toggle folder status as Favorite"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:2754
-msgid "Error running Post-Import script: '"
+#: tools/editor/scenes_dock.cpp
+msgid "Instance the selected scene(s) as child of the selected node."
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:2783
-msgid "Import Img: "
+#: tools/editor/scenes_dock.cpp
+msgid "Move"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:2789
-msgid "Can't import a file over itself: '"
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid parent class name"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:2794
-msgid "Couldn't localize path: '"
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid chars:"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:2854
-msgid "Merging.."
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid class name"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_import_plugin.cpp:2903
-msgid "Saving.."
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid name"
msgstr ""
-#: tools/editor/io_plugins/editor_font_import_plugin.cpp:512
-msgid "No source font file!"
+#: tools/editor/script_create_dialog.cpp
+msgid "N/A"
msgstr ""
-#: tools/editor/io_plugins/editor_font_import_plugin.cpp:518
-msgid "No target font resource!"
+#: tools/editor/script_create_dialog.cpp
+msgid "Class name is invalid!"
msgstr ""
-#: tools/editor/io_plugins/editor_font_import_plugin.cpp:530
-msgid "Can't load/process source font"
+#: tools/editor/script_create_dialog.cpp
+msgid "Parent class name is invalid!"
msgstr ""
-#: tools/editor/io_plugins/editor_font_import_plugin.cpp:538
-msgid "Couldn't save font."
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid path!"
msgstr ""
-#: tools/editor/io_plugins/editor_font_import_plugin.cpp:627
-msgid "Source Font:"
+#: tools/editor/script_create_dialog.cpp
+msgid "Could not create script in filesystem."
msgstr ""
-#: tools/editor/io_plugins/editor_font_import_plugin.cpp:629
-msgid "Source Font Size:"
+#: tools/editor/script_create_dialog.cpp
+msgid "Path is empty"
msgstr ""
-#: tools/editor/io_plugins/editor_font_import_plugin.cpp:644
-msgid "Dest Resource:"
+#: tools/editor/script_create_dialog.cpp
+msgid "Path is not local"
msgstr ""
-#: tools/editor/io_plugins/editor_font_import_plugin.cpp:647
-msgid "The quick brown fox jumps over the lazy dog."
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid base path"
msgstr ""
-#: tools/editor/io_plugins/editor_font_import_plugin.cpp:660
-msgid "Test: "
+#: tools/editor/script_create_dialog.cpp
+msgid "File exists"
msgstr ""
-#: tools/editor/io_plugins/editor_font_import_plugin.cpp:685
-msgid "Font Import"
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid extension"
msgstr ""
-#: tools/editor/io_plugins/editor_font_import_plugin.cpp:890
-msgid "Path: "
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid path"
msgstr ""
-#: tools/editor/io_plugins/editor_font_import_plugin.cpp:915
-msgid "Error initializing FreeType."
+#: tools/editor/script_create_dialog.cpp
+msgid "Class Name:"
msgstr ""
-#: tools/editor/io_plugins/editor_font_import_plugin.cpp:922
-msgid "Unknown font format."
+#: tools/editor/script_create_dialog.cpp
+msgid "Built-In Script"
msgstr ""
-#: tools/editor/io_plugins/editor_font_import_plugin.cpp:926
-msgid "Error loading font."
+#: tools/editor/script_create_dialog.cpp
+msgid "Create Node Script"
msgstr ""
-#: tools/editor/io_plugins/editor_font_import_plugin.cpp:942
-msgid "Invalid font size. "
+#: tools/editor/script_editor_debugger.cpp
+msgid "Bytes:"
msgstr ""
-#: tools/editor/io_plugins/editor_font_import_plugin.cpp:989
-msgid "Invalid font custom source. "
+#: tools/editor/script_editor_debugger.cpp
+msgid "Warning"
msgstr ""
-#: tools/editor/io_plugins/editor_sample_import_plugin.cpp:254
-msgid "No samples to import!"
+#: tools/editor/script_editor_debugger.cpp
+msgid "Error:"
msgstr ""
-#: tools/editor/io_plugins/editor_sample_import_plugin.cpp:295
-msgid "Save path is empty!"
+#: tools/editor/script_editor_debugger.cpp
+msgid "Source:"
msgstr ""
-#: tools/editor/io_plugins/editor_sample_import_plugin.cpp:334
-msgid "Import Audio Samples"
+#: tools/editor/script_editor_debugger.cpp
+msgid "Function:"
msgstr ""
-#: tools/editor/io_plugins/editor_sample_import_plugin.cpp:342
-msgid "Source Sample(s):"
+#: tools/editor/script_editor_debugger.cpp
+msgid "Errors"
msgstr ""
-#: tools/editor/io_plugins/editor_sample_import_plugin.cpp:409
-msgid "Audio Sample"
+#: tools/editor/script_editor_debugger.cpp
+msgid "Child Process Connected"
msgstr ""
-#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp:205
-msgid "No meshes to import!"
+#: tools/editor/script_editor_debugger.cpp
+msgid "Inspect Previous Instance"
msgstr ""
-#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp:264
-msgid "Single Mesh Import"
+#: tools/editor/script_editor_debugger.cpp
+msgid "Inspect Next Instance"
msgstr ""
-#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp:272
-msgid "Source Mesh(es):"
+#: tools/editor/script_editor_debugger.cpp
+msgid "Stack Frames"
msgstr ""
-#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp:365
-msgid "Surface "
+#: tools/editor/script_editor_debugger.cpp
+msgid "Variable"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_importer_fbxconv.cpp:510
-msgid "DIFFUSE"
+#: tools/editor/script_editor_debugger.cpp
+msgid "Errors:"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_importer_fbxconv.cpp:512
-msgid "SPECULAR"
+#: tools/editor/script_editor_debugger.cpp
+msgid "Stack Trace (if applicable):"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_importer_fbxconv.cpp:514
-msgid "SHININESS"
+#: tools/editor/script_editor_debugger.cpp
+msgid "Remote Inspector"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_importer_fbxconv.cpp:518
-msgid "EMISSIVE"
+#: tools/editor/script_editor_debugger.cpp
+msgid "Live Scene Tree:"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_importer_fbxconv.cpp:573
-msgid "COLORPACKED"
+#: tools/editor/script_editor_debugger.cpp
+msgid "Remote Object Properties: "
msgstr ""
-#: tools/editor/io_plugins/editor_scene_importer_fbxconv.cpp:575
-msgid "TANGENT"
+#: tools/editor/script_editor_debugger.cpp
+msgid "Profiler"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_importer_fbxconv.cpp:579
-msgid "BINORMAL"
+#: tools/editor/script_editor_debugger.cpp
+msgid "Monitor"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_importer_fbxconv.cpp:590
-msgid "TEXCOORD"
+#: tools/editor/script_editor_debugger.cpp
+msgid "Value"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_importer_fbxconv.cpp:592
-msgid "BLENDWEIGHT"
+#: tools/editor/script_editor_debugger.cpp
+msgid "Monitors"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_importer_fbxconv.cpp:802
-msgid "LINES"
+#: tools/editor/script_editor_debugger.cpp
+msgid "List of Video Memory Usage by Resource:"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_importer_fbxconv.cpp:804
-msgid "POINTS"
+#: tools/editor/script_editor_debugger.cpp
+msgid "Total:"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_importer_fbxconv.cpp:806
-msgid "TRIANGLE_STRIP"
+#: tools/editor/script_editor_debugger.cpp
+msgid "Video Mem"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_importer_fbxconv.cpp:808
-msgid "LINE_STRIP"
+#: tools/editor/script_editor_debugger.cpp
+msgid "Resource Path"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Type"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Usage"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Misc"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Clicked Control:"
msgstr ""
-#: tools/editor/io_plugins/editor_scene_importer_fbxconv.cpp:1059
-msgid "G3DJ"
+#: tools/editor/script_editor_debugger.cpp
+msgid "Clicked Control Type:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Live Edit Root:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Set From Tree"
+msgstr ""
+
+#: tools/editor/settings_config_dialog.cpp
+msgid "Plugin List:"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Light Radius"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Camera FOV"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Camera Size"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Sphere Shape Radius"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Box Shape Extents"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Radius"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Height"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Ray Shape Length"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Notifier Extents"
msgstr ""
diff --git a/tools/translations/zh_CN.po b/tools/translations/zh_CN.po
new file mode 100644
index 0000000000..54ab85f754
--- /dev/null
+++ b/tools/translations/zh_CN.po
@@ -0,0 +1,5883 @@
+# LANGUAGE translation of the Godot Engine editor
+# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community
+# This file is distributed under the same license as the Godot source code.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+# Geequlim <geequlim@gmail.com>, 2016.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Godot Engine editor\n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2016-05-31 23:28+0800\n"
+"Last-Translator: Geequlim <geequlim@gmail.com>\n"
+"Language-Team: 汉语 <geequlim@gmail.com>\n"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Gtranslator 2.91.7\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: scene/2d/animated_sprite.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the 'Frames' property in "
+"order for AnimatedSprite to display frames."
+msgstr ""
+"SpriteFrames资源必须是通过AnimatedSprite节点的frames属性创建的,否则无法显示动"
+"画帧。"
+
+#: scene/2d/canvas_modulate.cpp
+msgid ""
+"Only one visible CanvasModulate is allowed per scene (or set of instanced "
+"scenes). The first created one will work, while the rest will be ignored."
+msgstr ""
+"每个场景中只允许有一个CanvasModulate类型的节点,场景中的第一个CanvasModulate节"
+"点能正常工作,其余的将被忽略。"
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid ""
+"CollisionPolygon2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+"CollisionPolygon2D类型节点只能为CollisionObject2D的派生类提供碰撞形状数据,请"
+"将其放在Area2D、StaticBody2D、RigidBody2D或KinematicBody2D节点下。"
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid "An empty CollisionPolygon2D has no effect on collision."
+msgstr "空的CollisionPolygon2D不起任何碰撞检测作用。"
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"CollisionShape2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+"CollisionShape2D类型节点只能为CollisionObject2D的派生类提供碰撞形状数据,请将"
+"其放在Area2D、StaticBody2D、RigidBody2D或者是KinematicBody2D节点下。"
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"A shape must be provided for CollisionShape2D to function. Please create a "
+"shape resource for it!"
+msgstr "形状资源必须是通过CollisionShape2D节点的shape属性创建的!"
+
+#: scene/2d/light_2d.cpp
+msgid ""
+"A texture with the shape of the light must be supplied to the 'texture' "
+"property."
+msgstr ""
+
+#: scene/2d/light_occluder_2d.cpp
+msgid ""
+"An occluder polygon must be set (or drawn) for this occluder to take effect."
+msgstr "此遮光体必须设置遮光形状才能起到遮光作用。"
+
+#: scene/2d/light_occluder_2d.cpp
+msgid "The occluder polygon for this occluder is empty. Please draw a polygon!"
+msgstr "此遮光体的遮光形状为空,请为其绘制一个遮光形状!"
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"A NavigationPolygon resource must be set or created for this node to work. "
+"Please set a property or draw a polygon."
+msgstr ""
+"请为此节点设置一个NavigationPolygon类型的资源作为形状,这样它才能正常工作。"
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
+"node. It only provides navigation data."
+msgstr ""
+"NavigationPolygonInstance类型的节点必须作为Navigation2D的子孙才能为其提供导航"
+"数据。"
+
+#: scene/2d/parallax_layer.cpp
+msgid ""
+"ParallaxLayer node only works when set as child of a ParallaxBackground node."
+msgstr "ParallaxLayer类型的节点必须作为ParallaxBackground的子节点才能正常工作。"
+
+#: scene/2d/particles_2d.cpp
+msgid "Path property must point to a valid Particles2D node to work."
+msgstr "path属性必须指向一个合法的Particles2D节点才能正常工作。"
+
+#: scene/2d/path_2d.cpp
+msgid "PathFollow2D only works when set as a child of a Path2D node."
+msgstr "PathFollow2D类型的节点只有放在Path2D节点下才能正常工作。"
+
+#: scene/2d/remote_transform_2d.cpp
+msgid "Path property must point to a valid Node2D node to work."
+msgstr "path属性必须指向一个合法的Node2D节点才能正常工作。"
+
+#: scene/2d/sample_player_2d.cpp scene/audio/sample_player.cpp
+msgid ""
+"A SampleLibrary resource must be created or set in the 'samples' property in "
+"order for SamplePlayer to play sound."
+msgstr ""
+"SampleLibrary类型的资源必须是通过SamplePlayer类型节点的samples属性创建的,这样"
+"的资源才能用于播放声音。"
+
+#: scene/2d/sprite.cpp
+msgid ""
+"Path property must point to a valid Viewport node to work. Such Viewport must "
+"be set to 'render target' mode."
+msgstr ""
+"Path属性必须指向一个合法的Viewport节点才能工作,同时此Viewport还需要启"
+"用'render target'。"
+
+#: scene/2d/sprite.cpp
+msgid ""
+"The Viewport set in the path property must be set as 'render target' in order "
+"for this sprite to work."
+msgstr ""
+"为了让此精灵正常工作,它的path属性所指向的Viewport需要开启'render target'。"
+
+#: scene/2d/visibility_notifier_2d.cpp
+msgid ""
+"VisibilityEnable2D works best when used with the edited scene root directly "
+"as parent."
+msgstr "VisibilityEnable2D类型的节点用于场景的根节点才能获得最好的效果。"
+
+#: scene/3d/body_shape.cpp
+msgid ""
+"CollisionShape only serves to provide a collision shape to a CollisionObject "
+"derived node. Please only use it as a child of Area, StaticBody, RigidBody, "
+"KinematicBody, etc. to give them a shape."
+msgstr ""
+"CollisionShape类型节点只能为CollisionObject的派生类提供碰撞形状数据,请将其放"
+"在Area、StaticBody、RigidBody或KinematicBody节点下。"
+
+#: scene/3d/body_shape.cpp
+msgid ""
+"A shape must be provided for CollisionShape to function. Please create a "
+"shape resource for it!"
+msgstr ""
+"CollisionShape节点必须拥有一个形状才能进行碰撞检测工作,请为它创建一个形状资"
+"源!"
+
+#: scene/3d/collision_polygon.cpp
+msgid ""
+"CollisionPolygon only serves to provide a collision shape to a "
+"CollisionObject derived node. Please only use it as a child of Area, "
+"StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
+msgstr ""
+"CollisionPolygon类型节点只能为CollisionObject的派生类提供碰撞形状数据,请将其"
+"放在Area、StaticBody、RigidBody或KinematicBody节点下。"
+
+#: scene/3d/collision_polygon.cpp
+msgid "An empty CollisionPolygon has no effect on collision."
+msgstr "空CollisionPolygon节点不起碰撞检测作用。"
+
+#: scene/3d/navigation_mesh.cpp
+msgid "A NavigationMesh resource must be set or created for this node to work."
+msgstr "此节点需要设置NavigationMesh资源才能工作。"
+
+#: scene/3d/navigation_mesh.cpp
+msgid ""
+"NavigationMeshInstance must be a child or grandchild to a Navigation node. It "
+"only provides navigation data."
+msgstr ""
+"NavigationMeshInstance类型节点必须作为Navigation节点的子孙才能提供导航数据。"
+
+#: scene/3d/scenario_fx.cpp
+msgid ""
+"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)."
+msgstr "每个场景中只允许有一个WorldEnvironment类型的节点。"
+
+#: scene/3d/spatial_sample_player.cpp
+msgid ""
+"A SampleLibrary resource must be created or set in the 'samples' property in "
+"order for SpatialSamplePlayer to play sound."
+msgstr ""
+"SampleLibrary类型的资源必须通过SpatialSamplePlayer节点的'samples'属性创建才能"
+"正常播放声音。"
+
+#: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Cancel"
+msgstr "取消"
+
+#: scene/gui/dialogs.cpp
+msgid "OK"
+msgstr "好的"
+
+#: scene/gui/dialogs.cpp
+msgid "Alert!"
+msgstr "提示!"
+
+#: scene/gui/dialogs.cpp
+msgid "Please Confirm..."
+msgstr "请确认"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Cut"
+msgstr "剪切"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp
+msgid "Copy"
+msgstr "复制"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp
+msgid "Paste"
+msgstr "粘贴"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp tools/editor/project_export.cpp
+msgid "Select All"
+msgstr "全选"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_log.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/rich_text_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/script_editor_debugger.cpp
+msgid "Clear"
+msgstr "清除"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Undo"
+msgstr "撤销"
+
+#: scene/gui/popup.cpp
+msgid ""
+"Popups will hide by default unless you call popup() or any of the popup*() "
+"functions. Making them visible for editing is fine though, but they will hide "
+"upon running."
+msgstr ""
+"Popup对象在你调用popup()方法之前将保持隐藏,这里设置为可见并不代表执行场景时它"
+"会出现。"
+
+#: scene/main/viewport.cpp
+msgid ""
+"This viewport is not set as render target. If you intend for it to display "
+"its contents directly to the screen, make it a child of a Control so it can "
+"obtain a size. Otherwise, make it a RenderTarget and assign its internal "
+"texture to some node for display."
+msgstr ""
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Error initializing FreeType."
+msgstr "初始化FreeType出错。"
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Unknown font format."
+msgstr "未知的字体格式。"
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Error loading font."
+msgstr "加载字体出错。"
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Invalid font size."
+msgstr "字体大小非法。"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/call_dialog.cpp
+#: tools/editor/connections_dialog.cpp tools/editor/groups_editor.cpp
+#: tools/editor/import_settings.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp
+#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp
+msgid "Close"
+msgstr "关闭"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/create_dialog.cpp
+#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/settings_config_dialog.cpp
+msgid "Search:"
+msgstr "搜索:"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/code_editor.cpp
+#: tools/editor/editor_help.cpp tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/project_settings.cpp
+msgid "Search"
+msgstr "搜索"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/editor_node.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Import"
+msgstr "导入"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/project_settings.cpp
+#: tools/editor/settings_config_dialog.cpp
+msgid "Plugins"
+msgstr "插件"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Sort:"
+msgstr "排序:"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Reverse"
+msgstr "反选"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/project_settings.cpp
+msgid "Category:"
+msgstr "分类:"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "All"
+msgstr "全部"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Site:"
+msgstr "站点:"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Assets ZIP File"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Disabled"
+msgstr "已禁用"
+
+#: tools/editor/animation_editor.cpp
+msgid "All Selection"
+msgstr "所有选项"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Add Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Transition"
+msgstr "修改过度效果"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Transform"
+msgstr "修改变换"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Value"
+msgstr "修改动画值"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Call"
+msgstr "修改回调"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Track"
+msgstr "添加轨道"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Anim Track Up"
+msgstr "上移轨道"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Anim Track Down"
+msgstr "下移轨道"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove Anim Track"
+msgstr "移除轨道"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Duplicate Keys"
+msgstr "复制关键帧"
+
+#: tools/editor/animation_editor.cpp
+msgid "Set Transitions to:"
+msgstr "设置过渡效果:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Rename"
+msgstr "重命名轨道"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Change Interpolation"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Change Value Mode"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Edit Node Curve"
+msgstr "编辑节点曲线"
+
+#: tools/editor/animation_editor.cpp
+msgid "Edit Selection Curve"
+msgstr "编辑选项曲线"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Delete Keys"
+msgstr "删除关键帧"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Key"
+msgstr "添加关键帧"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Move Keys"
+msgstr "移动关键帧"
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale Selection"
+msgstr "缩放选中项"
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale From Cursor"
+msgstr "通过光标缩放"
+
+#: tools/editor/animation_editor.cpp
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Duplicate Selection"
+msgstr "复制选中项"
+
+#: tools/editor/animation_editor.cpp
+msgid "Duplicate Transposed"
+msgstr "复制并转置"
+
+#: tools/editor/animation_editor.cpp
+msgid "Goto Next Step"
+msgstr "前往下一步"
+
+#: tools/editor/animation_editor.cpp
+msgid "Goto Prev Step"
+msgstr "前往上一步"
+
+#: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp
+msgid "Linear"
+msgstr "线性"
+
+#: tools/editor/animation_editor.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Constant"
+msgstr "常量"
+
+#: tools/editor/animation_editor.cpp
+msgid "In"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Out"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "In-Out"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Out-In"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Transitions"
+msgstr "过渡"
+
+#: tools/editor/animation_editor.cpp
+msgid "Optimize Animation"
+msgstr "优化动画"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up Animation"
+msgstr "清理动画"
+
+#: tools/editor/animation_editor.cpp
+msgid "Create NEW track for %s and insert key?"
+msgstr "为%s创建新轨道并插入关键帧?"
+
+#: tools/editor/animation_editor.cpp
+msgid "Create %d NEW tracks and insert keys?"
+msgstr "创建%d个新轨道并插入关键帧?"
+
+#: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/particles_editor_plugin.cpp
+#: tools/editor/project_manager.cpp tools/editor/script_create_dialog.cpp
+msgid "Create"
+msgstr "创建"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Create & Insert"
+msgstr "创建|插入动画"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert Track & Key"
+msgstr "创建|插入 轨道和关键帧"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert Key"
+msgstr "插入关键帧"
+
+#: tools/editor/animation_editor.cpp
+msgid "Change Anim Len"
+msgstr "修改动画时长"
+
+#: tools/editor/animation_editor.cpp
+msgid "Change Anim Loop"
+msgstr "修改动画循环"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Create Typed Value Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert"
+msgstr "插入动画"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Scale Keys"
+msgstr "缩放键"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Call Track"
+msgstr "添加回调轨道"
+
+#: tools/editor/animation_editor.cpp
+msgid "Animation zoom."
+msgstr "动画时间缩放"
+
+#: tools/editor/animation_editor.cpp
+msgid "Length (s):"
+msgstr "时长(秒):"
+
+#: tools/editor/animation_editor.cpp
+msgid "Animation length (in seconds)."
+msgstr "动画时长(秒)"
+
+#: tools/editor/animation_editor.cpp
+msgid "Step (s):"
+msgstr "步长(秒)"
+
+#: tools/editor/animation_editor.cpp
+msgid "Cursor step snap (in seconds)."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Enable/Disable looping in animation."
+msgstr "启用/禁用循环"
+
+#: tools/editor/animation_editor.cpp
+msgid "Add new tracks."
+msgstr "新建轨道"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move current track up."
+msgstr "上移当前轨道"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move current track down."
+msgstr "下移当前轨道"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove selected track."
+msgstr "移除选中轨道"
+
+#: tools/editor/animation_editor.cpp
+msgid "Track tools"
+msgstr "轨道工具"
+
+#: tools/editor/animation_editor.cpp
+msgid "Enable editing of individual keys by clicking them."
+msgstr "允许通过单击启用各个键的编辑。"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim. Optimizer"
+msgstr "优化动画"
+
+#: tools/editor/animation_editor.cpp
+msgid "Max. Linear Error:"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Max. Angular Error:"
+msgstr "最大角错误:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Max Optimizable Angle:"
+msgstr "调整最大的角度:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Optimize"
+msgstr "优化"
+
+#: tools/editor/animation_editor.cpp
+msgid "Key"
+msgstr "键"
+
+#: tools/editor/animation_editor.cpp
+msgid "Transition"
+msgstr "过渡"
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale Ratio:"
+msgstr "缩放比率"
+
+#: tools/editor/animation_editor.cpp
+msgid "Call Functions in Which Node?"
+msgstr "在那个节点中调用函数?"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove invalid keys"
+msgstr "移除无效键"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove unresolved and empty tracks"
+msgstr "移除未分解的空轨道"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-up all animations"
+msgstr "清除所有动画"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up Animation(s) (NO UNDO!)"
+msgstr "清除所有动画吗(无法撤销)?"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up"
+msgstr "清理"
+
+#: tools/editor/array_property_edit.cpp
+msgid "Resize Array"
+msgstr "修改数组大小"
+
+#: tools/editor/array_property_edit.cpp
+msgid "Change Array Value Type"
+msgstr "修改数组类型"
+
+#: tools/editor/array_property_edit.cpp
+msgid "Change Array Value"
+msgstr "修改数组值"
+
+#: tools/editor/call_dialog.cpp
+msgid "Method List For '%s':"
+msgstr "%s的方法列表"
+
+#: tools/editor/call_dialog.cpp
+msgid "Call"
+msgstr "调用"
+
+#: tools/editor/call_dialog.cpp
+msgid "Method List:"
+msgstr "方法列表:"
+
+#: tools/editor/call_dialog.cpp
+msgid "Arguments:"
+msgstr "参数:"
+
+#: tools/editor/call_dialog.cpp
+msgid "Return:"
+msgstr "返回:"
+
+#: tools/editor/code_editor.cpp
+msgid "Go to Line"
+msgstr "转到行"
+
+#: tools/editor/code_editor.cpp
+msgid "Line Number:"
+msgstr "行号:"
+
+#: tools/editor/code_editor.cpp
+msgid "No Matches"
+msgstr "无匹配项"
+
+#: tools/editor/code_editor.cpp
+msgid "Replaced %d Ocurrence(s)."
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Replace"
+msgstr "替换"
+
+#: tools/editor/code_editor.cpp
+msgid "Replace All"
+msgstr "全部替换"
+
+#: tools/editor/code_editor.cpp
+msgid "Match Case"
+msgstr "大小写匹配"
+
+#: tools/editor/code_editor.cpp
+msgid "Whole Words"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Selection Only"
+msgstr "仅选中"
+
+#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp
+msgid "Find"
+msgstr "查找"
+
+#: tools/editor/code_editor.cpp
+msgid "Next"
+msgstr "下一项"
+
+#: tools/editor/code_editor.cpp
+msgid "Replaced %d ocurrence(s)."
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Not found!"
+msgstr "未找到!"
+
+#: tools/editor/code_editor.cpp
+msgid "Replace By"
+msgstr "替换"
+
+#: tools/editor/code_editor.cpp
+msgid "Case Sensitive"
+msgstr "区分大小写"
+
+#: tools/editor/code_editor.cpp
+msgid "Backwards"
+msgstr "向后"
+
+#: tools/editor/code_editor.cpp
+msgid "Prompt On Replace"
+msgstr "更换时提示"
+
+#: tools/editor/code_editor.cpp
+msgid "Skip"
+msgstr "跳过"
+
+#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp
+msgid "Line:"
+msgstr "行:"
+
+#: tools/editor/code_editor.cpp
+msgid "Col:"
+msgstr "列:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Method in target Node must be specified!"
+msgstr "必须设置方法的对象节点!"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect To Node:"
+msgstr "连接到节点:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Binds (Extra Params):"
+msgstr "绑定(附加参数):"
+
+#: tools/editor/connections_dialog.cpp tools/editor/groups_editor.cpp
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/project_settings.cpp
+msgid "Add"
+msgstr "添加"
+
+#: tools/editor/connections_dialog.cpp tools/editor/dependency_editor.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp tools/editor/project_manager.cpp
+msgid "Remove"
+msgstr "移除"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Path To Node:"
+msgstr "节点路径:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Method In Node:"
+msgstr "节点方法:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Make Function"
+msgstr "创建方法"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Deferred"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Oneshot"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect"
+msgstr "连接"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect '%s' to '%s'"
+msgstr "连接'%s'到'%s'"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Create Subscription"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect.."
+msgstr "连接事件"
+
+#: tools/editor/connections_dialog.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Disconnect"
+msgstr "删除事件连接"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Edit Connections.."
+msgstr "编辑事件连接"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connections:"
+msgstr "事件:"
+
+#: tools/editor/create_dialog.cpp
+msgid "Create New"
+msgstr "新建"
+
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+msgid "Matches:"
+msgstr "匹配项:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Search Replacement For:"
+msgstr "搜索替换:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies For:"
+msgstr "依赖项:"
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"Scene '%s' is currently being edited.\n"
+"Changes will not take effect unless reloaded."
+msgstr "场景%s已被修改,重新加载后生效。"
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"Resource '%s' is in use.\n"
+"Changes will take effect when reloaded."
+msgstr "资源%s正在使用中,修改将在重新加载后生效。"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies"
+msgstr "依赖"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Resource"
+msgstr "资源"
+
+#: tools/editor/dependency_editor.cpp tools/editor/project_manager.cpp
+#: tools/editor/project_settings.cpp
+msgid "Path"
+msgstr "路径"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies:"
+msgstr "依赖:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Fix Broken"
+msgstr "修复依赖"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependency Editor"
+msgstr "依赖编辑器"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Search Replacement Resource:"
+msgstr "查找替换资源:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Owners Of:"
+msgstr "拥有者:"
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"The files being removed are required by other resources in order for them to "
+"work.\n"
+"Remove them anyway? (no undo)"
+msgstr "要删除的文件被其他资源所依赖,仍然要删除吗(无法撤销)?"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Remove selected files from the project? (no undo)"
+msgstr "确定从项目中删除文件(此操作无法撤销)?"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Error loading:"
+msgstr "加载出错:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Scene failed to load due to missing dependencies:"
+msgstr "加载场景失败,找不到以下依赖项目:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Open Anyway"
+msgstr "仍然打开"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Which action should be taken?"
+msgstr "应采取哪项行动?"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Fix Dependencies"
+msgstr "修复依赖项"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Errors loading!"
+msgstr "加载出错!"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Permanently delete %d item(s)? (No undo!)"
+msgstr "永久删除选中的%d条项目吗(此操作无法撤销!)?"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Owns"
+msgstr "拥有对象"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Resources Without Explicit Ownership:"
+msgstr "没有指定所属关系的资源:"
+
+#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
+msgid "Orphan Resource Explorer"
+msgstr "查看孤立资源"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Delete selected files?"
+msgstr "删除选中的文件?"
+
+#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/item_list_editor_plugin.cpp tools/editor/scenes_dock.cpp
+msgid "Delete"
+msgstr "删除"
+
+#: tools/editor/editor_data.cpp
+msgid "Updating Scene"
+msgstr "更新场景"
+
+#: tools/editor/editor_data.cpp
+msgid "Storing local changes.."
+msgstr "保存修改中.."
+
+#: tools/editor/editor_data.cpp
+msgid "Updating scene.."
+msgstr "更新场景中.."
+
+#: tools/editor/editor_dir_dialog.cpp
+msgid "Choose a Directory"
+msgstr "选择目录"
+
+#: tools/editor/editor_dir_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Create Folder"
+msgstr "新建目录"
+
+#: tools/editor/editor_dir_dialog.cpp tools/editor/editor_file_dialog.cpp
+#: tools/editor/editor_plugin_settings.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Name:"
+msgstr "名称"
+
+#: tools/editor/editor_dir_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Could not create folder."
+msgstr "无法创建目录。"
+
+#: tools/editor/editor_dir_dialog.cpp
+msgid "Choose"
+msgstr "选择"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "File Exists, Overwrite?"
+msgstr "文件已存在,确定要覆盖它吗?"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "All Recognized"
+msgstr "所有可用类型"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "All Files (*)"
+msgstr "所有文件(*)"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/quick_open.cpp tools/editor/scenes_dock.cpp
+msgid "Open"
+msgstr "打开"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save"
+msgstr "保存"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Save a File"
+msgstr "保存文件"
+
+#: tools/editor/editor_file_dialog.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/script_create_dialog.cpp
+msgid "Path:"
+msgstr "路径:"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/scenes_dock.cpp
+msgid "Favorites:"
+msgstr "收藏:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Recent:"
+msgstr "最近文件:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Directories & Files:"
+msgstr "目录|文件:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Preview:"
+msgstr "预览"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/script_editor_debugger.cpp
+msgid "File:"
+msgstr "文件:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Filter:"
+msgstr "筛选:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Must use a valid extension."
+msgstr "必须使用合法的拓展名。"
+
+#: tools/editor/editor_file_system.cpp
+msgid "Cannot go into subdir:"
+msgstr "无法打开目录:"
+
+#: tools/editor/editor_file_system.cpp
+msgid "ScanSources"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Search Classes"
+msgstr "搜索类型"
+
+#: tools/editor/editor_help.cpp
+msgid "Class List:"
+msgstr "类型列表"
+
+#: tools/editor/editor_help.cpp tools/editor/property_editor.cpp
+msgid "Class:"
+msgstr "类:"
+
+#: tools/editor/editor_help.cpp tools/editor/scene_tree_editor.cpp
+#: tools/editor/script_create_dialog.cpp
+msgid "Inherits:"
+msgstr "基类:"
+
+#: tools/editor/editor_help.cpp
+msgid "Inherited by:"
+msgstr "派生类:"
+
+#: tools/editor/editor_help.cpp
+msgid "Brief Description:"
+msgstr "简介:"
+
+#: tools/editor/editor_help.cpp
+msgid "Public Methods:"
+msgstr "公共方法:"
+
+#: tools/editor/editor_help.cpp
+msgid "Members:"
+msgstr "成员:"
+
+#: tools/editor/editor_help.cpp
+msgid "GUI Theme Items:"
+msgstr "GUI主题:"
+
+#: tools/editor/editor_help.cpp
+msgid "Signals:"
+msgstr "事件:"
+
+#: tools/editor/editor_help.cpp
+msgid "Constants:"
+msgstr "常量:"
+
+#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "描述:"
+
+#: tools/editor/editor_help.cpp
+msgid "Method Description:"
+msgstr "方法描述:"
+
+#: tools/editor/editor_help.cpp
+msgid "Search Text"
+msgstr "搜索文本"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Added:"
+msgstr "已添加:"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Removed:"
+msgstr "已移除:"
+
+#: tools/editor/editor_import_export.cpp tools/editor/project_export.cpp
+msgid "Error saving atlas:"
+msgstr "保存贴图集出错:"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Could not save atlas subtexture:"
+msgstr "无法保存精灵集子贴图:"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Storing File:"
+msgstr "文件排序:"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Packing"
+msgstr "打包中"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Exporting for %s"
+msgstr "正在导出 %s"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Setting Up.."
+msgstr "配置.."
+
+#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
+msgid "Re-Importing"
+msgstr "重新导入"
+
+#: tools/editor/editor_node.cpp
+msgid "Importing:"
+msgstr "导入:"
+
+#: tools/editor/editor_node.cpp
+msgid "Node From Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/scenes_dock.cpp
+msgid "Re-Import.."
+msgstr "重新导入.."
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/resources_dock.cpp
+msgid "Error saving resource!"
+msgstr "保存资源出错!"
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/resources_dock.cpp
+msgid "Save Resource As.."
+msgstr "资源另存为.."
+
+#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
+msgid "I see.."
+msgstr "好吧.."
+
+#: tools/editor/editor_node.cpp
+msgid "Can't open file for writing:"
+msgstr "无法以可写模式打开文件:"
+
+#: tools/editor/editor_node.cpp
+msgid "Requested file format unknown:"
+msgstr "未知的文件类型请求:"
+
+#: tools/editor/editor_node.cpp
+msgid "Error while saving."
+msgstr "保存出错。"
+
+#: tools/editor/editor_node.cpp
+msgid "Saving Scene"
+msgstr "正在保存场景"
+
+#: tools/editor/editor_node.cpp
+msgid "Analyzing"
+msgstr "正在分析"
+
+#: tools/editor/editor_node.cpp
+msgid "Creating Thumbnail"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied."
+msgstr "无法保存场景,依赖项(实例)验证失败。"
+
+#: tools/editor/editor_node.cpp
+msgid "Failed to load resource."
+msgstr "加载资源失败。"
+
+#: tools/editor/editor_node.cpp
+msgid "Can't load MeshLibrary for merging!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Error saving MeshLibrary!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Can't load TileSet for merging!"
+msgstr "无法加载要合并的砖块集!"
+
+#: tools/editor/editor_node.cpp
+msgid "Error saving TileSet!"
+msgstr "保存砖块集失败!"
+
+#: tools/editor/editor_node.cpp
+msgid "Can't open export templates zip."
+msgstr "无法打开ZIP导出模板"
+
+#: tools/editor/editor_node.cpp
+msgid "Loading Export Templates"
+msgstr "正在加载导出模板"
+
+#: tools/editor/editor_node.cpp
+msgid "Error trying to save layout!"
+msgstr "保存布局出错!"
+
+#: tools/editor/editor_node.cpp
+msgid "Default editor layout overridden."
+msgstr "覆盖编辑器默认布局。"
+
+#: tools/editor/editor_node.cpp
+msgid "Layout name not found!"
+msgstr "布局名称未找到!"
+
+#: tools/editor/editor_node.cpp
+msgid "Restored default layout to base settings."
+msgstr "重置为默认布局设置。"
+
+#: tools/editor/editor_node.cpp
+msgid "Copy Params"
+msgstr "拷贝参数"
+
+#: tools/editor/editor_node.cpp
+msgid "Set Params"
+msgstr "设置参数"
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Paste Resource"
+msgstr "粘贴资源"
+
+#: tools/editor/editor_node.cpp
+msgid "Copy Resource"
+msgstr "拷贝资源"
+
+#: tools/editor/editor_node.cpp
+msgid "Make Built-In"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Make Sub-Resources Unique"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "There is no defined scene to run."
+msgstr "没有设置要执行的场景。"
+
+#: tools/editor/editor_node.cpp
+msgid "Current scene was never saved, please save it prior to running."
+msgstr "当前场景尚未保存,请保存后再尝试执行。"
+
+#: tools/editor/editor_node.cpp
+msgid "Could not start subprocess!"
+msgstr "无法启动子进程!"
+
+#: tools/editor/editor_node.cpp
+msgid "Open Scene"
+msgstr "打开场景"
+
+#: tools/editor/editor_node.cpp
+msgid "Open Base Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Open Scene.."
+msgstr "快速打开场景.."
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Open Script.."
+msgstr "快速打开脚本.."
+
+#: tools/editor/editor_node.cpp
+msgid "Yes"
+msgstr "是"
+
+#: tools/editor/editor_node.cpp
+msgid "Close scene? (Unsaved changes will be lost)"
+msgstr "确定要关闭场景吗,未保存的修改将丢失?"
+
+#: tools/editor/editor_node.cpp
+msgid "Save Scene As.."
+msgstr "场景另存为"
+
+#: tools/editor/editor_node.cpp
+msgid "This scene has never been saved. Save before running?"
+msgstr "此场景尚未保存,要在运行之前保存它吗?"
+
+#: tools/editor/editor_node.cpp
+msgid "Please save the scene first."
+msgstr "请先保存场景。"
+
+#: tools/editor/editor_node.cpp
+msgid "Save Translatable Strings"
+msgstr "保存可翻译字符串"
+
+#: tools/editor/editor_node.cpp
+msgid "Export Mesh Library"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Export Tile Set"
+msgstr "导出砖块集"
+
+#: tools/editor/editor_node.cpp
+msgid "Quit"
+msgstr "退出"
+
+#: tools/editor/editor_node.cpp
+msgid "Exit the editor?"
+msgstr "确定要退出编辑器吗?"
+
+#: tools/editor/editor_node.cpp
+msgid "Current scene not saved. Open anyway?"
+msgstr "当前场景尚未保存,仍要打开?"
+
+#: tools/editor/editor_node.cpp
+msgid "Can't reload a scene that was never saved."
+msgstr "无法重新加载未保存的场景。"
+
+#: tools/editor/editor_node.cpp
+msgid "Revert"
+msgstr "恢复"
+
+#: tools/editor/editor_node.cpp
+msgid "This action cannot be undone. Revert anyway?"
+msgstr "此操作无法撤销,确定要继续吗?"
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Run Scene.."
+msgstr "快速运行场景"
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Open Project Manager? \n"
+"(Unsaved changes will be lost)"
+msgstr "退出到项目管理窗口(未保存的修改将丢失)?"
+
+#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
+msgid "Ugh"
+msgstr "额"
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Error loading scene, it must be inside the project path. Use 'Import' to open "
+"the scene, then save it inside the project path."
+msgstr ""
+"加载场景出错,场景必须放在项目目录下。请尝试使用'导入'菜单导入此场景后再试。"
+
+#: tools/editor/editor_node.cpp
+msgid "Error loading scene."
+msgstr "加载场景出错。"
+
+#: tools/editor/editor_node.cpp
+msgid "Scene '%s' has broken dependencies:"
+msgstr "场景%s的依赖已被破坏:"
+
+#: tools/editor/editor_node.cpp
+msgid "Save Layout"
+msgstr "保存布局"
+
+#: tools/editor/editor_node.cpp
+msgid "Delete Layout"
+msgstr "删除布局"
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Default"
+msgstr "默认"
+
+#: tools/editor/editor_node.cpp
+msgid "Switch Scene Tab"
+msgstr "切换场景标签页"
+
+#: tools/editor/editor_node.cpp
+msgid "%d more file(s)"
+msgstr "更多的%d个文件"
+
+#: tools/editor/editor_node.cpp
+msgid "%d more file(s) or folder(s)"
+msgstr "更多的%d个文件或目录"
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Scene"
+msgstr "场景"
+
+#: tools/editor/editor_node.cpp
+msgid "Go to previously opened scene."
+msgstr "前往上一个打开的场景。"
+
+#: tools/editor/editor_node.cpp
+msgid "Operations with scene files."
+msgstr "操作场景文件。"
+
+#: tools/editor/editor_node.cpp
+msgid "New Scene"
+msgstr "新建场景"
+
+#: tools/editor/editor_node.cpp
+msgid "New Inherited Scene.."
+msgstr "从现有场景中创建.."
+
+#: tools/editor/editor_node.cpp
+msgid "Open Scene.."
+msgstr "打开场景"
+
+#: tools/editor/editor_node.cpp
+msgid "Save Scene"
+msgstr "保存场景"
+
+#: tools/editor/editor_node.cpp
+msgid "Close Scene"
+msgstr "关闭场景"
+
+#: tools/editor/editor_node.cpp
+msgid "Close Goto Prev. Scene"
+msgstr "关闭并前往上一个场景"
+
+#: tools/editor/editor_node.cpp
+msgid "Open Recent"
+msgstr "最近打开"
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Search File.."
+msgstr "快速查找文件.."
+
+#: tools/editor/editor_node.cpp
+msgid "Convert To.."
+msgstr "转换为.."
+
+#: tools/editor/editor_node.cpp
+msgid "Translatable Strings.."
+msgstr "可翻译字符串"
+
+#: tools/editor/editor_node.cpp
+msgid "MeshLibrary.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "TileSet.."
+msgstr "砖块集.."
+
+#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Redo"
+msgstr "重做"
+
+#: tools/editor/editor_node.cpp
+msgid "Run Script"
+msgstr "运行脚本"
+
+#: tools/editor/editor_node.cpp
+msgid "Project Settings"
+msgstr "项目设置"
+
+#: tools/editor/editor_node.cpp
+msgid "Revert Scene"
+msgstr "恢复场景"
+
+#: tools/editor/editor_node.cpp
+msgid "Quit to Project List"
+msgstr "退出到项目列表"
+
+#: tools/editor/editor_node.cpp
+msgid "Import assets to the project."
+msgstr "导入资源"
+
+#: tools/editor/editor_node.cpp
+msgid "Miscellaneous project or scene-wide tools."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Tools"
+msgstr "工具"
+
+#: tools/editor/editor_node.cpp
+msgid "Export the project to many platforms."
+msgstr "导出项目到多个平台。"
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Export"
+msgstr "导出"
+
+#: tools/editor/editor_node.cpp
+msgid "Play the project (F5)."
+msgstr "运行此项目(F5)"
+
+#: tools/editor/editor_node.cpp
+msgid "Pause the scene"
+msgstr "暂停运行场景"
+
+#: tools/editor/editor_node.cpp
+msgid "Stop the scene (F8)."
+msgstr "停止运行场景(F8)"
+
+#: tools/editor/editor_node.cpp
+msgid "Play the edited scene (F6)."
+msgstr "运行打开的场景(F6)"
+
+#: tools/editor/editor_node.cpp
+msgid "Play custom scene"
+msgstr "运行自定义场景"
+
+#: tools/editor/editor_node.cpp
+msgid "Debug options"
+msgstr "调试选项"
+
+#: tools/editor/editor_node.cpp
+msgid "Live Editing"
+msgstr "实时编辑"
+
+#: tools/editor/editor_node.cpp
+msgid "File Server"
+msgstr "文件服务"
+
+#: tools/editor/editor_node.cpp
+msgid "Deploy Remote Debug"
+msgstr "部署远程调试"
+
+#: tools/editor/editor_node.cpp
+msgid "Deploy File Server Clients"
+msgstr "部署文件服务客户端"
+
+#: tools/editor/editor_node.cpp
+msgid "Visible Collision Shapes"
+msgstr "碰撞区域可见"
+
+#: tools/editor/editor_node.cpp
+msgid "Visible Navigation"
+msgstr "Navigation可见"
+
+#: tools/editor/editor_node.cpp tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Settings"
+msgstr "设置"
+
+#: tools/editor/editor_node.cpp tools/editor/settings_config_dialog.cpp
+msgid "Editor Settings"
+msgstr "编辑器设置"
+
+#: tools/editor/editor_node.cpp
+msgid "Editor Layout"
+msgstr "编辑器布局"
+
+#: tools/editor/editor_node.cpp
+msgid "Install Export Templates"
+msgstr "安装导出模板"
+
+#: tools/editor/editor_node.cpp
+msgid "About"
+msgstr "关于"
+
+#: tools/editor/editor_node.cpp
+msgid "Alerts when an external resource has changed."
+msgstr "外部资源改变后弹出提示。"
+
+#: tools/editor/editor_node.cpp
+msgid "Spins when the editor window repaints!"
+msgstr "旋转时,重新绘制编辑器窗口!"
+
+#: tools/editor/editor_node.cpp
+msgid "Update Always"
+msgstr "持续更新UI"
+
+#: tools/editor/editor_node.cpp
+msgid "Update Changes"
+msgstr "有更改时更新UI"
+
+#: tools/editor/editor_node.cpp
+msgid "Inspector"
+msgstr "属性面板"
+
+#: tools/editor/editor_node.cpp
+msgid "Create a new resource in memory and edit it."
+msgstr "在内存中新建资源并编辑。"
+
+#: tools/editor/editor_node.cpp
+msgid "Load an existing resource from disk and edit it."
+msgstr "从磁盘中加载资源并编辑。"
+
+#: tools/editor/editor_node.cpp
+msgid "Save the currently edited resource."
+msgstr "保存当前编辑的资源。"
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save As.."
+msgstr "另存为"
+
+#: tools/editor/editor_node.cpp
+msgid "Go to the previous edited object in history."
+msgstr "前往上一个编辑对象。"
+
+#: tools/editor/editor_node.cpp
+msgid "Go to the next edited object in history."
+msgstr "前往下一个编辑对象。"
+
+#: tools/editor/editor_node.cpp
+msgid "History of recently edited objects."
+msgstr "最近编辑历史对象。"
+
+#: tools/editor/editor_node.cpp
+msgid "Object properties."
+msgstr "对象属性。"
+
+#: tools/editor/editor_node.cpp
+msgid "FileSystem"
+msgstr "文件系统"
+
+#: tools/editor/editor_node.cpp
+msgid "Output"
+msgstr "输出"
+
+#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
+#: tools/editor/import_settings.cpp
+msgid "Re-Import"
+msgstr "重新导入"
+
+#: tools/editor/editor_node.cpp tools/editor/editor_plugin_settings.cpp
+msgid "Update"
+msgstr "更新"
+
+#: tools/editor/editor_node.cpp
+msgid "Thanks from the Godot community!"
+msgstr "感谢Godot社区"
+
+#: tools/editor/editor_node.cpp
+msgid "Thanks!"
+msgstr "谢谢!"
+
+#: tools/editor/editor_node.cpp
+msgid "Import Templates From ZIP File"
+msgstr "从ZIP文件中导入模板"
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Export Project"
+msgstr "导出项目"
+
+#: tools/editor/editor_node.cpp
+msgid "Export Library"
+msgstr "导出库"
+
+#: tools/editor/editor_node.cpp
+msgid "Merge With Existing"
+msgstr "与现有合并"
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Password:"
+msgstr "密码"
+
+#: tools/editor/editor_node.cpp
+msgid "Open & Run a Script"
+msgstr "打开并运行脚本"
+
+#: tools/editor/editor_node.cpp
+msgid "Load Errors"
+msgstr "加载错误"
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Installed Plugins:"
+msgstr "已安装插件:"
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr "版本"
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Author:"
+msgstr "作者"
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Status:"
+msgstr "状态"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Stop Profiling"
+msgstr "停止"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Start Profiling"
+msgstr "开始"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Measure:"
+msgstr "测量:"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame Time (sec)"
+msgstr "帧时间(秒)"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Average Time (sec)"
+msgstr "平均帧时间(秒)"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame %"
+msgstr "渲染速度"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Fixed Frame %"
+msgstr "物理速度"
+
+#: tools/editor/editor_profiler.cpp tools/editor/script_editor_debugger.cpp
+msgid "Time:"
+msgstr "时间:"
+
+#: tools/editor/editor_profiler.cpp
+msgid "Inclusive"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Self"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame #:"
+msgstr "帧序号:"
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Please wait for scan to complete."
+msgstr "扫描中,请稍后..."
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Current scene must be saved to re-import."
+msgstr "需要先保存当前场景才能重新导入。"
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Save & Re-Import"
+msgstr "保存并重新导入"
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Re-Import Changed Resources"
+msgstr "重新导入改变的资源"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Write your logic in the _run() method."
+msgstr "在_run()方中填写您的逻辑代码。"
+
+#: tools/editor/editor_run_script.cpp
+msgid "There is an edited scene already."
+msgstr "已经存在一个正在编辑的场景。"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Couldn't instance script:"
+msgstr "无法实例化脚本:"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Did you forget the 'tool' keyword?"
+msgstr "您是否遗漏了tool关键字?"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Couldn't run script:"
+msgstr "无法执行脚本:"
+
+#: tools/editor/editor_run_script.cpp
+msgid "Did you forget the '_run' method?"
+msgstr "您是否遗漏了_run()方法?"
+
+#: tools/editor/editor_settings.cpp
+msgid "Default (Same as Editor)"
+msgstr "默认(与编辑器相同)"
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Select Node(s) to Import"
+msgstr "选择要导入的节点"
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Scene Path:"
+msgstr "场景路径:"
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Import From Node:"
+msgstr "从节点中导入:"
+
+#: tools/editor/file_type_cache.cpp
+msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
+msgstr "无法以可写方式打开file_type_cache.cch!"
+
+#: tools/editor/groups_editor.cpp
+msgid "Add to Group"
+msgstr "添加到分组"
+
+#: tools/editor/groups_editor.cpp
+msgid "Remove from Group"
+msgstr "从分组中移除"
+
+#: tools/editor/groups_editor.cpp
+msgid "Group Editor"
+msgstr "分组编辑"
+
+#: tools/editor/groups_editor.cpp tools/editor/project_export.cpp
+msgid "Group"
+msgstr "分组"
+
+#: tools/editor/groups_editor.cpp
+msgid "Node Group(s)"
+msgstr "节点分组"
+
+#: tools/editor/import_settings.cpp
+msgid "Imported Resources"
+msgstr "已导入的资源"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "No source font file!"
+msgstr "请设置源字体文件!"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "No target font resource!"
+msgstr "请设置目标字体资源!"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Can't load/process source font."
+msgstr "无法加载/处理源字体。"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Couldn't save font."
+msgstr "无法保存字体。"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Source Font:"
+msgstr "源字体文件:"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Source Font Size:"
+msgstr "源字体大小:"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Dest Resource:"
+msgstr "目标资源:"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "The quick brown fox jumps over the lazy dog."
+msgstr ""
+"The quick brown fox jumps over the lazy dog.\n"
+"我能吞下玻璃而不伤身体。"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Test:"
+msgstr "测试:"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Options:"
+msgstr "选项:"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Font Import"
+msgstr "导入字体"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Accept"
+msgstr "接受"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid ""
+"This file is already a Godot font file, please supply a BMFont type file "
+"instead."
+msgstr "此文件已经是一个Godot的字体文件,请提供一个位图字体(BMFont)文件。"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Failed opening as BMFont file."
+msgstr "打开位图字体失败。"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Invalid font custom source."
+msgstr "自定义字体文件非法。"
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Font"
+msgstr "字体"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "No meshes to import!"
+msgstr "没有要导入的Mesh"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Save path is empty!"
+msgstr "保存路径为空!"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Single Mesh Import"
+msgstr "导入单个Mesh"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Source Mesh(es):"
+msgstr "源Mesh:"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Target Path:"
+msgstr "目标路径:"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Mesh"
+msgstr "Mesh"
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Surface %d"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "No samples to import!"
+msgstr "没有音效要导入!"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path is empty."
+msgstr "目标路径为空。"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path must be a complete resource path."
+msgstr "目标路径必须是一个完整的资源文件路径。"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path must exist."
+msgstr "目标路径必须存在。"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Import Audio Samples"
+msgstr "导入声音文件"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Source Sample(s):"
+msgstr "源音效文件:"
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Audio Sample"
+msgstr "音效"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "New Clip"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Animation Options"
+msgstr "动画选项"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Flags"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Bake FPS:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Optimizer"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Linear Error"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Angular Error"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Angle"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Clips"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/project_manager.cpp tools/editor/project_settings.cpp
+msgid "Name"
+msgstr "名称"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Start(s)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "End(s)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Loop"
+msgstr "循环"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Filters"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Source path is empty."
+msgstr "源路径为空。"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't load post-import script."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Invalid/broken script for post-import."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Error importing scene."
+msgstr "导入场景出错。"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import 3D Scene"
+msgstr "导入3D场景"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Source Scene:"
+msgstr "源场景:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Same as Target Scene"
+msgstr "与目标场景相同"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Shared"
+msgstr "共享的"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Target Texture Folder:"
+msgstr "目标贴图目录:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Post-Process Script:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Custom Root Node Type:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Auto"
+msgstr "自动"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "The Following Files are Missing:"
+msgstr "找不到下列文件:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import Anyway"
+msgstr "仍然导入"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import & Open"
+msgstr "导入|打开"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Edited scene has not been saved, open imported scene anyway?"
+msgstr "正在编辑的场景尚未保存,仍然要打开导入的场景吗?"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import Scene"
+msgstr "导入场景"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Importing Scene.."
+msgstr "导入场景"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Running Custom Script.."
+msgstr "执行自定义脚本.."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't load post-import script:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Invalid/broken script for post-import:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Error running post-import script:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import Image:"
+msgstr "导入图片:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Can't import a file over itself:"
+msgstr "不允许导入文件本身:"
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't localize path: %s (already local)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Saving.."
+msgstr "保存中..."
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "3D Scene Animation"
+msgstr "3D场景动画"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Uncompressed"
+msgstr "不压缩"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress Lossless (PNG)"
+msgstr "无损压缩(PNG)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress Lossy (WebP)"
+msgstr "有损压缩(WebP)"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress (VRAM)"
+msgstr "VRAM压缩"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Format"
+msgstr "纹理格式"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Compression Quality (WebP):"
+msgstr "高质量(WebP)压缩方式:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Options"
+msgstr "纹理选项"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Please specify some files!"
+msgstr "请添加文件!"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "At least one file needed for Atlas."
+msgstr "精灵集至少需要一个文件。"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Error importing:"
+msgstr "导入出错:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Only one file is required for large texture."
+msgstr "大图导入仅支持一个输入文件。"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Max Texture Size:"
+msgstr "最大纹理尺寸:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for Atlas (2D)"
+msgstr "导入2D精灵集"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Cell Size:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Large Texture"
+msgstr "大图"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Large Textures (2D)"
+msgstr "导入2D大图"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture"
+msgstr "源贴图:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Base Atlas Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture(s)"
+msgstr "源贴图:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for 2D"
+msgstr "导入2D贴图"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for 3D"
+msgstr "导入3D贴图"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures"
+msgstr "导入贴图"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "2D Texture"
+msgstr "2D贴图"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "3D Texture"
+msgstr "3D贴图"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Atlas Texture"
+msgstr "精灵图集"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid ""
+"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to "
+"the project."
+msgstr ""
+"提示:大多数2D贴图并不需要导入操作,只要将png/jpg文件放到项目目录下即可。"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture(s):"
+msgstr "源贴图:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Crop empty space."
+msgstr "切除空白区域。"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture"
+msgstr "贴图"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Large Texture"
+msgstr "导入大图"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Load Source Image"
+msgstr "加载源图片"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Slicing"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Inserting"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Saving"
+msgstr "正在保存文件"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save large texture:"
+msgstr "无法保存大图:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Build Atlas For:"
+msgstr "使用以下图片生成精灵集:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Loading Image:"
+msgstr "加载图片中:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't load image:"
+msgstr "无法加载图片:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Converting Images"
+msgstr "正在转换图片"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Cropping Images"
+msgstr "剪裁图片"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Blitting Images"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save atlas image:"
+msgstr "无法保存精灵集图片:"
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save converted texture:"
+msgstr "无法保存转换的贴图:"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Invalid source!"
+msgstr "输入源非法!"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Invalid translation source!"
+msgstr "源语言文件非法!"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Column"
+msgstr "列"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#: tools/editor/script_create_dialog.cpp
+msgid "Language"
+msgstr "语言:"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "No items to import!"
+msgstr "没有要导入的项目!"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "No target path!"
+msgstr "目标路径为空!"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Translations"
+msgstr "导入多种语言翻译"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Couldn't import!"
+msgstr "无法导入!"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Translation"
+msgstr "导入语言翻译"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Source CSV:"
+msgstr "源CSV文件:"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Ignore First Row"
+msgstr "忽略第一行"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Compress"
+msgstr "压缩"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Add to Project (engine.cfg)"
+msgstr "添加到项目(engine.cfg)"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Languages:"
+msgstr "导入语言:"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Translation"
+msgstr "语言"
+
+#: tools/editor/multi_node_edit.cpp
+msgid "MultiNode Set"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Toggle Autoplay"
+msgstr "切换AutoPlay"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Animation Name:"
+msgstr "新动画名称:"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Anim"
+msgstr "新建动画"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Animation Name:"
+msgstr "重命名动画:"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Remove Animation"
+msgstr "移除动画"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Invalid animation name!"
+msgstr "错误:动画名不合法!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Animation name already exists!"
+msgstr "错误:已存在同名动画!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "重命名动画"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Animation"
+msgstr "添加动画"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Next Changed"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Blend Time"
+msgstr "更改混合时间"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load Animation"
+msgstr "加载动画"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "复制动画"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to copy!"
+msgstr "错误:没有拷贝的动画!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation resource on clipboard!"
+msgstr "错误:剪切板中没有动画资源!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Pasted Animation"
+msgstr "已粘贴的动画"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Paste Animation"
+msgstr "粘贴动画"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to edit!"
+msgstr "错误:没有选中要编辑的动画!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from current pos. (A)"
+msgstr "从当前位置倒放选中动画(A)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from end. (Shift+A)"
+msgstr "从结束时间倒放选中动画(Shift+A)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Stop animation playback. (S)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from start. (Shift+D)"
+msgstr "从头播放选中动画(Shift+D)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from current pos. (D)"
+msgstr "从当前位置播放选中动画(D)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation position (in seconds)."
+msgstr "动画位置(单位:秒)"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Scale animation playback globally for the node."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create new animation in player."
+msgstr "在播放中创建动画。"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load an animation from disk."
+msgstr "从磁盘中加载动画。"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save the current animation"
+msgstr "保存当前动画"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Display list of animations in player."
+msgstr "在播放器中显示动画列表。"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Autoplay on Load"
+msgstr "加载后自动播放"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Edit Target Blend Times"
+msgstr "编辑目标混合时间"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Tools"
+msgstr "动画工具"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Copy Animation"
+msgstr "拷贝动画"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "创建新动画"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Name:"
+msgstr "动画名称:"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/script_create_dialog.cpp
+msgid "Error!"
+msgstr "错误!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Times:"
+msgstr "混合时间:"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Next (Auto Queue):"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Cross-Animation Blend Times"
+msgstr "跨动画时间混合"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation"
+msgstr "动画"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "New name:"
+msgstr "新名称:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Scale:"
+msgstr "缩放"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade In (s):"
+msgstr "淡入(秒)"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade Out (s):"
+msgstr "淡出(秒)"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend"
+msgstr "混合"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix"
+msgstr "混合"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Auto Restart:"
+msgstr "自动重新开始:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Restart (s):"
+msgstr "重新开始(秒):"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Random Restart (s):"
+msgstr "随机开始(秒):"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Start!"
+msgstr "开始!"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Amount:"
+msgstr "数量:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend:"
+msgstr "混合:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 0:"
+msgstr "混合0:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 1:"
+msgstr "混合1:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "X-Fade Time (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Current:"
+msgstr "当前:"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Add Input"
+msgstr "添加输入事件"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Clear Auto-Advance"
+msgstr "清除Auto-Advance"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Set Auto-Advance"
+msgstr "设置清除Auto-Advance"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Delete Input"
+msgstr "删除输入事件"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Rename"
+msgstr "重命名"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is valid."
+msgstr "动画树可用。"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is invalid."
+msgstr "动画树不可用。"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation Node"
+msgstr "动画节点"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "OneShot Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend2 Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend3 Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend4 Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeScale Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeSeek Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Transition Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Import Animations.."
+msgstr "导入动画"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Edit Node Filters"
+msgstr "编辑节点筛选"
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Filters.."
+msgstr "筛选.."
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Parsing %d Triangles:"
+msgstr "正在解析第%d个三角形:"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Triangle #"
+msgstr "三角形 #"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Light Baker Setup:"
+msgstr "建立烘培:"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Parsing Geometry"
+msgstr "解析多边形中"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Fixing Lights"
+msgstr "修正光照"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Making BVH"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Creating Light Octree"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Creating Octree Texture"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Transfer to Lightmaps:"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Allocating Texture #"
+msgstr "分配纹理 #"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Baking Triangle #"
+msgstr "烘培三角形 #"
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Post-Processing Texture #"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "BakedLightInstance does not contain a BakedLight resource."
+msgstr ""
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "Bake!"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "Reset the lightmap octree baking process (start over)."
+msgstr ""
+
+#: tools/editor/plugins/camera_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Preview"
+msgstr "预览"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Configure Snap"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid Offset:"
+msgstr "网格偏移量:"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid Step:"
+msgstr "网格大小:"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Offset:"
+msgstr "旋转偏移量:"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Step:"
+msgstr "旋转步长:"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Pivot"
+msgstr "移动旋转中心位置"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Action"
+msgstr "移动动作"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit IK Chain"
+msgstr "编辑IK链"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit CanvasItem"
+msgstr "编辑CanvasItem"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors"
+msgstr "编辑锚点"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom (%):"
+msgstr "缩放(%)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Paste Pose"
+msgstr "粘贴姿势"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Select Mode (Q)"
+msgstr "选择模式(Q)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Drag: Rotate"
+msgstr "拖动来旋转"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+Drag: Move"
+msgstr "按住Alt拖动: 移动"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)."
+msgstr "按下V键修改旋转中心,在移动时按下Shift+V来拖动它。"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+RMB: Depth list selection"
+msgstr "Alt+鼠标右键:显示鼠标点击位置下的所有节点列表"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Move Mode (W)"
+msgstr "移动模式(W)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Mode (E)"
+msgstr "旋转模式(E)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid ""
+"Show a list of all objects at the position clicked\n"
+"(same as Alt+RMB in select mode)."
+msgstr "显示鼠标点击位置的所有节点(同Alt+鼠标右键)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Click to change object's rotation pivot."
+msgstr "点击设置对象的旋转中心。"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Pan Mode"
+msgstr "移动画布"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Lock the selected object in place (can't be moved)."
+msgstr "锁定选中对象的位置。"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Unlock the selected object (can be moved)."
+msgstr "解锁选中对象的位置。"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Makes sure the object's children are not selectable."
+msgstr "确保节点的子孙无法被选中。"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Restores the object's children's ability to be selected."
+msgstr "恢复节点的子孙能够被选中。"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Edit"
+msgstr "编辑"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Snap"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Show Grid"
+msgstr "显示网格"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Rotation Snap"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap Relative"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Configure Snap.."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Pixel Snap"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Expand to Parent"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Skeleton.."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make Bones"
+msgstr "添加骨骼"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Bones"
+msgstr "清除骨骼"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make IK Chain"
+msgstr "添加IK链"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear IK Chain"
+msgstr "清除IK链"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View"
+msgstr "视图"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom In"
+msgstr "放大"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Out"
+msgstr "缩小"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Reset"
+msgstr "重置缩放"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Set.."
+msgstr "设置缩放.."
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center Selection"
+msgstr "居中显示选中节点"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Frame Selection"
+msgstr "最大化显示选中节点"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Anchor"
+msgstr "锚点"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Keys (Ins)"
+msgstr "插入关键帧( 创建轨道)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key"
+msgstr "插入关键帧"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key (Existing Tracks)"
+msgstr "插入关键帧(已有轨道)"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Copy Pose"
+msgstr "拷贝姿势"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Pose"
+msgstr "清除姿势"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Set a Value"
+msgstr "设置值"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap (Pixels):"
+msgstr ""
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create Poly"
+msgstr "创建多边形"
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Edit Poly"
+msgstr "编辑多边形"
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Edit Poly (Remove Point)"
+msgstr "编辑多边形(移除顶点)"
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+msgid "Create Poly3D"
+msgstr ""
+
+#: tools/editor/plugins/collision_shape_2d_editor_plugin.cpp
+msgid "Set Handle"
+msgstr ""
+
+#: tools/editor/plugins/color_ramp_editor_plugin.cpp
+msgid "Add/Remove Color Ramp Point"
+msgstr ""
+
+#: tools/editor/plugins/color_ramp_editor_plugin.cpp
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Color Ramp"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Creating Mesh Library"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Thumbnail.."
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove item %d?"
+msgstr "确定要移除项目%d吗?"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Add Item"
+msgstr "添加项目"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove Selected Item"
+msgstr "移除选中项目"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import from Scene"
+msgstr "从场景中导入"
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Update from Scene"
+msgstr ""
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Item %d"
+msgstr "第%d项"
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Items"
+msgstr "项目"
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Item List Editor"
+msgstr "列表编辑器"
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Occluder Polygon"
+msgstr "添加遮光多边形"
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Edit existing polygon:"
+msgstr "编辑已存在的多边形:"
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "LMB: Move Point."
+msgstr "鼠标左键:移动点"
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Ctrl+LMB: Split Segment."
+msgstr "Ctrl+鼠标左键:分割视图块"
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "RMB: Erase Point."
+msgstr "鼠标右键:移除点"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh is empty!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Trimesh Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Convex Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "This doesn't work on scene root!"
+msgstr "此操作无法引用在根节点上!"
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Shape"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Shape"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Navigation Mesh"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "MeshInstance lacks a Mesh!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Could not create outline!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Static Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Static Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Collision Sibling"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Collision Sibling"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh.."
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Outline Size:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and no MultiMesh set in node)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and MultiMesh contains no Mesh)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (invalid path)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (not a MeshInstance)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (contains no Mesh resource)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No surface source specified."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (invalid path)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no geometry)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no faces)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Parent has no solid faces to populate."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Couldn't map area."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Source Mesh:"
+msgstr "选择源Mesh:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Target Surface:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate Surface"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate MultiMesh"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Target Surface:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Source Mesh:"
+msgstr "源Mesh:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "X-Axis"
+msgstr "X轴"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Y-Axis"
+msgstr "Y轴"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Z-Axis"
+msgstr "Z轴"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh Up Axis:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Rotation:"
+msgstr "随机旋转:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Tilt:"
+msgstr "随机砖块:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Scale:"
+msgstr "随机缩放:"
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate"
+msgstr ""
+
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create Navigation Polygon"
+msgstr "创建导航多边形"
+
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Remove Poly And Point"
+msgstr "移除多边形及顶点"
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Error loading image:"
+msgstr "加载图片出错:"
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "No pixels with transparency > 128 in image.."
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Set Emission Mask"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Clear Emission Mask"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Load Emission Mask"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generated Point Count:"
+msgstr "生成顶点计数:"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry."
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry (faces)."
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Faces contain no area!"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "No faces!"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Generate AABB"
+msgstr "生成AABB"
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter From Mesh"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter From Node"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Clear Emitter"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Positions:"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Fill:"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Surface"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Volume"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Point from Curve"
+msgstr "从曲线中移除顶点"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Add Point to Curve"
+msgstr "向曲线添加顶点"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Point in Curve"
+msgstr "在曲线中移动顶点"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move In-Control in Curve"
+msgstr "移动曲线内控制点"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Out-Control in Curve"
+msgstr "移动曲线外控制点"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr "选择顶点"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr "Shift+拖拽:选择控制点"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr "鼠标左键:添加点"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr "鼠标右键:删除点"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Select Control Points (Shift+Drag)"
+msgstr "选择控制点(Shift+拖动)"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Split Segment (in curve)"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr "删除顶点"
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Close Curve"
+msgstr "关闭曲线"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Curve Point #"
+msgstr "曲线定点 #"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Point Pos"
+msgstr "设置曲线顶点坐标"
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve In Pos"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Out Pos"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Split Path"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Remove Path Point"
+msgstr "移除路径顶点"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create UV Map"
+msgstr "创建UV贴图"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Transform UV Map"
+msgstr "变换UV贴图"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon 2D UV Editor"
+msgstr "2D多边形UV编辑器"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Point"
+msgstr "移动点"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Ctrl: Rotate"
+msgstr "Ctrl:旋转"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift: Move All"
+msgstr "Shift: 移动所有"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift+Ctrl: Scale"
+msgstr "Shift+Ctrl: 缩放"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Polygon"
+msgstr "移动多边形"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Rotate Polygon"
+msgstr "旋转多边形"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Scale Polygon"
+msgstr "缩放多边形"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon->UV"
+msgstr "多边形->UV"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "UV->Polygon"
+msgstr "UV->多边形"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Clear UV"
+msgstr "清除UV"
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Snap"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Enable Snap"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid"
+msgstr "网格"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "ERROR: Couldn't load resource!"
+msgstr "错误:无法加载资源!"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Add Resource"
+msgstr "添加资源"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Rename Resource"
+msgstr "重命名资源"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Delete Resource"
+msgstr "删除资源"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Resource clipboard is empty!"
+msgstr "资源剪切板中无内容!"
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Load Resource"
+msgstr "加载资源"
+
+#: tools/editor/plugins/rich_text_editor_plugin.cpp
+msgid "Parse BBCode"
+msgstr "解析BBCode"
+
+#: tools/editor/plugins/sample_editor_plugin.cpp
+msgid "Length:"
+msgstr "长度:"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Open Sample File(s)"
+msgstr "打开声音文件"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "ERROR: Couldn't load sample!"
+msgstr "错误:无法加载音效!"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Add Sample"
+msgstr "添加音效"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Stop"
+msgstr "停止"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Play"
+msgstr "播放"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Rename Sample"
+msgstr "重命名音效"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Delete Sample"
+msgstr "删除音效"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "16 Bits"
+msgstr "16位"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "8 Bits"
+msgstr "8位"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Stereo"
+msgstr "立体声"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Mono"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Format"
+msgstr "格式"
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Pitch"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error while saving theme"
+msgstr "保存主题出错。"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error saving"
+msgstr "保存出错"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error importing theme"
+msgstr "导入主题出错。"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error importing"
+msgstr "导入出错"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Import Theme"
+msgstr "导入主题"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As.."
+msgstr "主题另存为"
+
+#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/project_export.cpp
+msgid "File"
+msgstr "文件"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_editor.cpp
+msgid "New"
+msgstr "新建"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save All"
+msgstr "全部保存"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "History Prev"
+msgstr "后退"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "History Next"
+msgstr "前进"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Reload Theme"
+msgstr "重新加载主题"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme"
+msgstr "保存主题"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As"
+msgstr "主题另存为"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr "向上移动"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr "向下移动"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Indent Left"
+msgstr "向左缩进"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Indent Right"
+msgstr "向右缩进"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Toggle Comment"
+msgstr "切换注释"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Clone Down"
+msgstr "拷贝到下一行"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Complete Symbol"
+msgstr "代码补全"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Trim Trailing Whitespace"
+msgstr "修剪行后空白"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Auto Indent"
+msgstr "自动缩进"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find.."
+msgstr "查找.."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find Next"
+msgstr "查找下一项"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find Previous"
+msgstr "查找上一项"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Replace.."
+msgstr "替换.."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Goto Function.."
+msgstr "前往函数.."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Goto Line.."
+msgstr "前往行.."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Debug"
+msgstr "调试"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Toggle Breakpoint"
+msgstr "切换断点"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Remove All Breakpoints"
+msgstr "移除所有断点"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Goto Next Breakpoint"
+msgstr "前往下一个断点"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Goto Previous Breakpoint"
+msgstr "前往上一个断点"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Step Over"
+msgstr "单步跳过"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Step Into"
+msgstr "单步进入"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Break"
+msgstr "跳过"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Continue"
+msgstr "继续"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Keep Debugger Open"
+msgstr "保持调试器打开"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Window"
+msgstr "窗口"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Left"
+msgstr "向左移动"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Right"
+msgstr "向右移动"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Help"
+msgstr "帮助"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Contextual"
+msgstr "搜索光标位置"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Tutorials"
+msgstr "教程"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Open https://godotengine.org at tutorials section."
+msgstr "打开 https://godotengine.org 中的教程."
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Classes"
+msgstr "类型"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search the class hierarchy."
+msgstr "搜索类"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search Help"
+msgstr "搜索帮助"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search the reference documentation."
+msgstr "搜索文档"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Go to previous edited document."
+msgstr "前往上一个编辑文档"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Go to next edited document."
+msgstr "前往下一个编辑文档"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Create Script"
+msgstr "创建脚本"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid ""
+"The following files are newer on disk.\n"
+"What action should be taken?:"
+msgstr ""
+"磁盘中的下列文件已更新。\n"
+"请选择执行那项操作?:"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Reload"
+msgstr "重新加载"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Resave"
+msgstr "重新保存"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Debugger"
+msgstr "调试器"
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Vertex"
+msgstr "顶点"
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Fragment"
+msgstr "片段"
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Lighting"
+msgstr "光照"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Constant"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Constant"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Constant"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Operator"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Operator"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Scalar Operator"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Operator"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Toggle Rot Only"
+msgstr "切换旋转模式"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Function"
+msgstr "修改Function Scalar"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Function"
+msgstr "修改Function Vec"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Uniform"
+msgstr "修改Uniform Scalar"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Uniform"
+msgstr "修改Uniform Vec"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Uniform"
+msgstr "修改Uniform RGB"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Default Value"
+msgstr "修改默认值"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change XForm Uniform"
+msgstr "修改Uniform XForm "
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Texture Uniform"
+msgstr "修改Uniform Texture "
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Cubemap Uniform"
+msgstr "修改Uniform Cubemap "
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Comment"
+msgstr "修改注释"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Color Ramp"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Curve Map"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Curve Map"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Input Name"
+msgstr "更改输入名称"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Connect Graph Nodes"
+msgstr "连接Graph Node"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Disconnect Graph Nodes"
+msgstr "断开Graph Node连接"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Remove Shader Graph Node"
+msgstr "移除Graph Node节点"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Move Shader Graph Node"
+msgstr "移动Graph Node节点"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Duplicate Graph Node(s)"
+msgstr "复制Graph Node节点"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Delete Shader Graph Node(s)"
+msgstr "删除Graph Node节点"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Cyclic Connection Link"
+msgstr "错误:循环的连接"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Missing Input Connections"
+msgstr "错误:缺少输入连接"
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add Shader Graph Node"
+msgstr "添加着色器Graph Node"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal"
+msgstr "正交"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective"
+msgstr "透视"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Aborted."
+msgstr "已忽略变换。"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Plane Transform."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "X-Axis Transform."
+msgstr "X轴变换。"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Y-Axis Transform."
+msgstr "Y轴变换。"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Z-Axis Transform."
+msgstr "Z轴变换。"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling to %s%%."
+msgstr "缩放到%s%%"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotating %s degrees."
+msgstr "旋转%s度"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Keying is disabled (no key inserted)."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Animation Key Inserted."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Align with view"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top (Num7)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom (Shift+Num7)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left (Num3)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right (Shift+Num3)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front (Num1)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear (Shift+Num1)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective (Num5)"
+msgstr "透视(Num5)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal (Num5)"
+msgstr "正交(Num5)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Environment"
+msgstr "环境"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Audio Listener"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Gizmos"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Selection (F)"
+msgstr "选中项(F)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Align with view (Ctrl+Shift+F)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "XForm Dialog"
+msgstr "XForm对话框"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "No scene selected to instance!"
+msgstr "没有选用要实例化的场景!"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Instance at Cursor"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Could not instance scene!"
+msgstr "无法实例化场景!"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Mode (R)"
+msgstr "缩放模式(R)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform"
+msgstr "变换"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Local Coords"
+msgstr "本地坐标"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Dialog.."
+msgstr "变换对话框.."
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Default Light"
+msgstr "使用默认光照"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Default sRGB"
+msgstr "使用默认sRGB"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "1 Viewport"
+msgstr "1个视口"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports"
+msgstr "2个视口"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports (Alt)"
+msgstr "2个视口(Alt)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports"
+msgstr "3个视口(Alt)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports (Alt)"
+msgstr "3个视口(Alt)"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "4 Viewports"
+msgstr "4个视口"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Normal"
+msgstr "显示法线"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Wireframe"
+msgstr "显示线框"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Overdraw"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Shadeless"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Origin"
+msgstr "显示原点"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Grid"
+msgstr "显示网格"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap Settings"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate Snap:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Snap (deg.):"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Snap (%):"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Viewport Settings"
+msgstr "Viewport设置"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Default Light Normal:"
+msgstr "默认光照法线:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Ambient Light Color:"
+msgstr "环境光颜色:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective FOV (deg.):"
+msgstr "透视视角(角度):"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Near:"
+msgstr "查看Z-Near"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Far:"
+msgstr "查看Z-Far"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Change"
+msgstr "修改变换"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate:"
+msgstr "移动:"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate (deg.):"
+msgstr "旋转(角度):"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale (ratio):"
+msgstr "缩放(比率):"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Type"
+msgstr "变换类型"
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Pre"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Post"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "ERROR: Couldn't load frame resource!"
+msgstr "错误:无法加载帧资源!"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Frame"
+msgstr "添加帧"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Resource clipboard is empty or not a texture!"
+msgstr "资源剪切板中无内容,或内容不是纹理贴图!"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Paste Frame"
+msgstr "粘贴帧"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Empty"
+msgstr "添加空白帧"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation Loop"
+msgstr "修改循环"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation FPS"
+msgstr "修改FPS"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "(empty)"
+msgstr "(空)"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animations"
+msgstr "动画"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Speed (FPS):"
+msgstr "速度(FPS)"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animation Frames"
+msgstr "动画帧"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (Before)"
+msgstr "插入空白帧(之前)"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (After)"
+msgstr "插入空白帧(之后)"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Up"
+msgstr "向上"
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Down"
+msgstr "向下"
+
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Set region_rect"
+msgstr "设置纹理区域"
+
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Sprite Region Editor"
+msgstr "精灵纹理区域编辑"
+
+#: tools/editor/plugins/style_box_editor_plugin.cpp
+msgid "StyleBox Preview:"
+msgstr "StyleBox预览:"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Can't save theme to file:"
+msgstr "无法保存主题到文件:"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add All Items"
+msgstr "添加所有项目"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add All"
+msgstr "添加所有"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove Item"
+msgstr "移除项目"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add Class Items"
+msgstr "添加类项目"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Remove Class Items"
+msgstr "移除类项目"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Create Template"
+msgstr "创建模板"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio1"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio2"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Item"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Check Item"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Checked Item"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Has"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Many"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp tools/editor/project_export.cpp
+msgid "Options"
+msgstr "选项"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Have,Many,Several,Options!"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 1"
+msgstr "分页1"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 2"
+msgstr "分页2"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 3"
+msgstr "分页3"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/scene_tree_editor.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Type:"
+msgstr "类型:"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Data Type:"
+msgstr "数据类型:"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Icon"
+msgstr "图标"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Style"
+msgstr "样式"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Color"
+msgstr "颜色"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint TileMap"
+msgstr "绘制砖块地图"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Duplicate"
+msgstr "拷贝"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase TileMap"
+msgstr "擦除砖块地图"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Bucket"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Pick Tile"
+msgstr "选择砖块"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Select"
+msgstr "选择"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase Selection"
+msgstr "擦除选中"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Transpose"
+msgstr "转置"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror X (A)"
+msgstr "沿X轴翻转(A)"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror Y (S)"
+msgstr "沿Y轴翻转(S)"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 0 degrees"
+msgstr "旋转0度"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 90 degrees"
+msgstr "旋转90度"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 180 degrees"
+msgstr "旋转180度"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 270 degrees"
+msgstr "旋转270度"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Could not find tile:"
+msgstr "找不到砖块:"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Item name or ID:"
+msgstr "项目名称或ID"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from scene?"
+msgstr "从场景中创建?"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from scene?"
+msgstr "确定要合并场景?"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from Scene"
+msgstr "从场景中创建"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from Scene"
+msgstr "从场景中合并"
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Error"
+msgstr "错误"
+
+#: tools/editor/project_export.cpp
+msgid "Edit Script Options"
+msgstr "脚本编辑器选项"
+
+#: tools/editor/project_export.cpp
+msgid "Please export outside the project folder!"
+msgstr "请导出到项目目录之外!"
+
+#: tools/editor/project_export.cpp
+msgid "Error exporting project!"
+msgstr "导出项目出错!"
+
+#: tools/editor/project_export.cpp
+msgid "Error writing the project PCK!"
+msgstr "写入项目PCK文件出错!"
+
+#: tools/editor/project_export.cpp
+msgid "No exporter for platform '%s' yet."
+msgstr "没有针对'%s'平台的导出模板。"
+
+#: tools/editor/project_export.cpp
+msgid "Include"
+msgstr "包含"
+
+#: tools/editor/project_export.cpp
+msgid "Change Image Group"
+msgstr "修改图片分组"
+
+#: tools/editor/project_export.cpp
+msgid "Group name can't be empty!"
+msgstr "分组名称不能为空!"
+
+#: tools/editor/project_export.cpp
+msgid "Invalid character in group name!"
+msgstr "分组名称中包含非法字符!"
+
+#: tools/editor/project_export.cpp
+msgid "Group name already exists!"
+msgstr "分组名称已存在!"
+
+#: tools/editor/project_export.cpp
+msgid "Add Image Group"
+msgstr "添加图片分组"
+
+#: tools/editor/project_export.cpp
+msgid "Delete Image Group"
+msgstr "删除图片分组"
+
+#: tools/editor/project_export.cpp
+msgid "Atlas Preview"
+msgstr "预览精灵集"
+
+#: tools/editor/project_export.cpp
+msgid "Project Export Settings"
+msgstr "项目导出设置"
+
+#: tools/editor/project_export.cpp
+msgid "Target"
+msgstr "平台"
+
+#: tools/editor/project_export.cpp
+msgid "Export to Platform"
+msgstr "导出到平台"
+
+#: tools/editor/project_export.cpp
+msgid "Resources"
+msgstr "资源"
+
+#: tools/editor/project_export.cpp
+msgid "Export selected resources (including dependencies)."
+msgstr "导出选中的资源(包括其依赖资源)"
+
+#: tools/editor/project_export.cpp
+msgid "Export all resources in the project."
+msgstr "导出项目中的所有资源"
+
+#: tools/editor/project_export.cpp
+msgid "Export all files in the project directory."
+msgstr "导出项目目录下的所有文件"
+
+#: tools/editor/project_export.cpp
+msgid "Export Mode:"
+msgstr "导出模式:"
+
+#: tools/editor/project_export.cpp
+msgid "Resources to Export:"
+msgstr "导出的资源:"
+
+#: tools/editor/project_export.cpp
+msgid "Action"
+msgstr "动作"
+
+#: tools/editor/project_export.cpp
+msgid ""
+"Filters to export non-resource files (comma-separated, e.g.: *.json, *.txt):"
+msgstr "导出非资源文件筛选(使用英文逗号分隔,如:*.json,*.txt):"
+
+#: tools/editor/project_export.cpp
+msgid "Filters to exclude from export (comma-separated, e.g.: *.json, *.txt):"
+msgstr "排除导出的非资源文件筛选(使用英文逗号分隔,如:*.json,*.txt):"
+
+#: tools/editor/project_export.cpp
+msgid "Convert text scenes to binary on export."
+msgstr "导出时将文本场景写入二进制文件。"
+
+#: tools/editor/project_export.cpp
+msgid "Images"
+msgstr "图片"
+
+#: tools/editor/project_export.cpp
+msgid "Keep Original"
+msgstr "保持原样"
+
+#: tools/editor/project_export.cpp
+msgid "Compress for Disk (Lossy, WebP)"
+msgstr "节省磁盘空间(有损压缩,WebP)"
+
+#: tools/editor/project_export.cpp
+msgid "Compress for RAM (BC/PVRTC/ETC)"
+msgstr "节省内存(BC/PVRTC/ETC)"
+
+#: tools/editor/project_export.cpp
+msgid "Convert Images (*.png):"
+msgstr "转换图片(*.png):"
+
+#: tools/editor/project_export.cpp
+msgid "Compress for Disk (Lossy) Quality:"
+msgstr "高质量(有损)节省磁盘空间"
+
+#: tools/editor/project_export.cpp
+msgid "Shrink All Images:"
+msgstr "收缩所有图片:"
+
+#: tools/editor/project_export.cpp
+msgid "Compress Formats:"
+msgstr "压缩格式:"
+
+#: tools/editor/project_export.cpp
+msgid "Image Groups"
+msgstr "图片分组"
+
+#: tools/editor/project_export.cpp
+msgid "Groups:"
+msgstr "分组:"
+
+#: tools/editor/project_export.cpp
+msgid "Compress Disk"
+msgstr "节省磁盘空间"
+
+#: tools/editor/project_export.cpp
+msgid "Compress RAM"
+msgstr "节省内存"
+
+#: tools/editor/project_export.cpp
+msgid "Compress Mode:"
+msgstr "压缩方式:"
+
+#: tools/editor/project_export.cpp
+msgid "Lossy Quality:"
+msgstr "图片质量:"
+
+#: tools/editor/project_export.cpp
+msgid "Atlas:"
+msgstr "精灵集:"
+
+#: tools/editor/project_export.cpp
+msgid "Shrink By:"
+msgstr "收缩方式:"
+
+#: tools/editor/project_export.cpp
+msgid "Preview Atlas"
+msgstr "精灵集预览:"
+
+#: tools/editor/project_export.cpp
+msgid "Image Filter:"
+msgstr "纹理过滤:\t\t"
+
+#: tools/editor/project_export.cpp
+msgid "Images:"
+msgstr "图片"
+
+#: tools/editor/project_export.cpp
+msgid "Select None"
+msgstr "取消选择"
+
+#: tools/editor/project_export.cpp
+msgid "Samples"
+msgstr "音效"
+
+#: tools/editor/project_export.cpp
+msgid "Sample Conversion Mode: (.wav files):"
+msgstr "音效转换方式(.wav文件):"
+
+#: tools/editor/project_export.cpp
+msgid "Keep"
+msgstr "保持不变"
+
+#: tools/editor/project_export.cpp
+msgid "Compress (RAM - IMA-ADPCM)"
+msgstr "压缩(RAM - IMA-ADPCM)"
+
+#: tools/editor/project_export.cpp
+msgid "Sampling Rate Limit (Hz):"
+msgstr "采样率(Hz):"
+
+#: tools/editor/project_export.cpp
+msgid "Trim"
+msgstr "修剪"
+
+#: tools/editor/project_export.cpp
+msgid "Trailing Silence:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Script"
+msgstr "脚本"
+
+#: tools/editor/project_export.cpp
+msgid "Script Export Mode:"
+msgstr "脚本导出方式:"
+
+#: tools/editor/project_export.cpp
+msgid "Text"
+msgstr "文本"
+
+#: tools/editor/project_export.cpp
+msgid "Compiled"
+msgstr "编译"
+
+#: tools/editor/project_export.cpp
+msgid "Encrypted (Provide Key Below)"
+msgstr "使用下列密码加密"
+
+#: tools/editor/project_export.cpp
+msgid "Script Encryption Key (256-bits as hex):"
+msgstr "脚本密匙(256位16进制码)"
+
+#: tools/editor/project_export.cpp
+msgid "Export PCK/Zip"
+msgstr "导出 PCK/ZIP"
+
+#: tools/editor/project_export.cpp
+msgid "Export Project PCK"
+msgstr "导出项目PCK文件"
+
+#: tools/editor/project_export.cpp
+msgid "Export.."
+msgstr "导出.."
+
+#: tools/editor/project_export.cpp
+msgid "Project Export"
+msgstr "项目导出"
+
+#: tools/editor/project_export.cpp
+msgid "Export Preset:"
+msgstr "导出预设"
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, the path must exist!"
+msgstr "项目目录不存在!"
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, engine.cfg must not exist."
+msgstr "项目目录下必须包含engin.cfg文件。"
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, engine.cfg must exist."
+msgstr "项目目录下必须包含engin.cfg文件。"
+
+#: tools/editor/project_manager.cpp
+msgid "Imported Project"
+msgstr "已导入的项目"
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path (changed anything?)."
+msgstr "项目路径非法(被外部修改?)。"
+
+#: tools/editor/project_manager.cpp
+msgid "Couldn't create engine.cfg in project path."
+msgstr "无法在项目目录下创建engine.cfg文件。"
+
+#: tools/editor/project_manager.cpp
+msgid "Import Existing Project"
+msgstr "导入现有项目"
+
+#: tools/editor/project_manager.cpp
+msgid "Project Path (Must Exist):"
+msgstr "项目目录(必须存在)"
+
+#: tools/editor/project_manager.cpp
+msgid "Project Name:"
+msgstr "项目名称:"
+
+#: tools/editor/project_manager.cpp
+msgid "Create New Project"
+msgstr "新建项目"
+
+#: tools/editor/project_manager.cpp
+msgid "Project Path:"
+msgstr "项目目录"
+
+#: tools/editor/project_manager.cpp
+msgid "Browse"
+msgstr "浏览"
+
+#: tools/editor/project_manager.cpp
+msgid "New Game Project"
+msgstr "新建游戏项目"
+
+#: tools/editor/project_manager.cpp
+msgid "That's a BINGO!"
+msgstr "碉堡了!"
+
+#: tools/editor/project_manager.cpp
+msgid "Unnamed Project"
+msgstr "未命名项目"
+
+#: tools/editor/project_manager.cpp
+msgid "Are you sure to open more than one projects?"
+msgstr "您确定要打开多个项目吗?"
+
+#: tools/editor/project_manager.cpp
+msgid "Are you sure to run more than one projects?"
+msgstr "您确定要执行多个项目吗?"
+
+#: tools/editor/project_manager.cpp
+msgid "Remove project from the list? (Folder contents will not be modified)"
+msgstr "移除此项目(项目的文件不受影响)"
+
+#: tools/editor/project_manager.cpp
+msgid "Recent Projects:"
+msgstr "最近打开的项目:"
+
+#: tools/editor/project_manager.cpp
+msgid "Run"
+msgstr "运行"
+
+#: tools/editor/project_manager.cpp
+msgid "Scan"
+msgstr "扫描"
+
+#: tools/editor/project_manager.cpp
+msgid "New Project"
+msgstr "新建"
+
+#: tools/editor/project_manager.cpp
+msgid "Exit"
+msgstr "退出"
+
+#: tools/editor/project_settings.cpp
+msgid "Key "
+msgstr "键"
+
+#: tools/editor/project_settings.cpp
+msgid "Joy Button"
+msgstr "手柄按钮"
+
+#: tools/editor/project_settings.cpp
+msgid "Joy Axis"
+msgstr "摇杆轴"
+
+#: tools/editor/project_settings.cpp
+msgid "Mouse Button"
+msgstr "鼠标按键:"
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid action (anything goes but '/' or ':')."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Action '%s' already exists!"
+msgstr "动作%s已存在!"
+
+#: tools/editor/project_settings.cpp
+msgid "Rename Input Action Event"
+msgstr "重命名输入事件"
+
+#: tools/editor/project_settings.cpp
+msgid "Add Input Action Event"
+msgstr "添加输入事件"
+
+#: tools/editor/project_settings.cpp
+msgid "Meta+"
+msgstr "Meta+"
+
+#: tools/editor/project_settings.cpp
+msgid "Shift+"
+msgstr "Shift+"
+
+#: tools/editor/project_settings.cpp
+msgid "Alt+"
+msgstr "Alt+"
+
+#: tools/editor/project_settings.cpp
+msgid "Control+"
+msgstr "Ctrl+"
+
+#: tools/editor/project_settings.cpp
+msgid "Press a Key.."
+msgstr "按下一个键.."
+
+#: tools/editor/project_settings.cpp
+msgid "Mouse Button Index:"
+msgstr "鼠标按键:"
+
+#: tools/editor/project_settings.cpp
+msgid "Left Button"
+msgstr "左键"
+
+#: tools/editor/project_settings.cpp
+msgid "Right Button"
+msgstr "右键"
+
+#: tools/editor/project_settings.cpp
+msgid "Middle Button"
+msgstr "中键"
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Up Button"
+msgstr "滚轮向上"
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Down Button"
+msgstr "滚轮向下"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 6"
+msgstr "按键 6"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 7"
+msgstr "按键 7"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 8"
+msgstr "按键 8"
+
+#: tools/editor/project_settings.cpp
+msgid "Button 9"
+msgstr "按键 9"
+
+#: tools/editor/project_settings.cpp
+msgid "Joystick Axis Index:"
+msgstr "手柄摇杆"
+
+#: tools/editor/project_settings.cpp
+msgid "Axis"
+msgstr "轴"
+
+#: tools/editor/project_settings.cpp
+msgid "Joystick Button Index:"
+msgstr "手柄按钮"
+
+#: tools/editor/project_settings.cpp
+msgid "Add Input Action"
+msgstr "添加输入动作"
+
+#: tools/editor/project_settings.cpp
+msgid "Erase Input Action Event"
+msgstr "移除输入事件"
+
+#: tools/editor/project_settings.cpp
+msgid "Device"
+msgstr "设备"
+
+#: tools/editor/project_settings.cpp
+msgid "Button"
+msgstr "按钮"
+
+#: tools/editor/project_settings.cpp
+msgid "Left Button."
+msgstr "左键"
+
+#: tools/editor/project_settings.cpp
+msgid "Right Button."
+msgstr "右键"
+
+#: tools/editor/project_settings.cpp
+msgid "Middle Button."
+msgstr "中键(滚轮)"
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Up."
+msgstr "滚轮向上滚动"
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Down."
+msgstr "滚轮向下滚动"
+
+#: tools/editor/project_settings.cpp
+msgid "Toggle Persisting"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Error saving settings."
+msgstr "保存设置出错。"
+
+#: tools/editor/project_settings.cpp
+msgid "Settings saved OK."
+msgstr "保存设置成功。"
+
+#: tools/editor/project_settings.cpp
+msgid "Add Translation"
+msgstr "添加语言"
+
+#: tools/editor/project_settings.cpp
+msgid "Toggle AutoLoad Globals"
+msgstr "切换全局AutoLoad"
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name."
+msgstr "名称非法:"
+
+#: tools/editor/project_settings.cpp
+msgid "Valid characters:"
+msgstr "字符合法:"
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing engine class name."
+msgstr "名称非法,与引擎内置类型名称冲突。"
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing buit-in type name."
+msgstr "名称非法,与引擎内置类型名称冲突。"
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing global constant name."
+msgstr "名称非法,与已存在的全局常量名称冲突。"
+
+#: tools/editor/project_settings.cpp
+msgid "Add Autoload"
+msgstr "添加Autoload"
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Autoload"
+msgstr "移除Autoload"
+
+#: tools/editor/project_settings.cpp
+msgid "Move Autoload"
+msgstr "移动Autoload"
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Translation"
+msgstr "移除语言"
+
+#: tools/editor/project_settings.cpp
+msgid "Add Remapped Path"
+msgstr "添加重定向路径"
+
+#: tools/editor/project_settings.cpp
+msgid "Resource Remap Add Remap"
+msgstr "添加资源重定向"
+
+#: tools/editor/project_settings.cpp
+msgid "Change Resource Remap Language"
+msgstr "修改语言资源重定向"
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Resource Remap"
+msgstr "移除资源重定向"
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Resource Remap Option"
+msgstr "移除资源重定向选项"
+
+#: tools/editor/project_settings.cpp
+msgid "Enable"
+msgstr "启用"
+
+#: tools/editor/project_settings.cpp
+msgid "Project Settings (engine.cfg)"
+msgstr "项目设置(engine.cfg)"
+
+#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp
+msgid "General"
+msgstr "一般"
+
+#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp
+msgid "Property:"
+msgstr "属性:"
+
+#: tools/editor/project_settings.cpp
+msgid "Del"
+msgstr "删除"
+
+#: tools/editor/project_settings.cpp
+msgid "Copy To Platform.."
+msgstr "复制到平台.."
+
+#: tools/editor/project_settings.cpp
+msgid "Input Map"
+msgstr "事件表"
+
+#: tools/editor/project_settings.cpp
+msgid "Action:"
+msgstr "动作:"
+
+#: tools/editor/project_settings.cpp
+msgid "Device:"
+msgstr "设备:"
+
+#: tools/editor/project_settings.cpp
+msgid "Index:"
+msgstr "序号:"
+
+#: tools/editor/project_settings.cpp
+msgid "Localization"
+msgstr "本地化"
+
+#: tools/editor/project_settings.cpp
+msgid "Translations"
+msgstr "语言"
+
+#: tools/editor/project_settings.cpp
+msgid "Translations:"
+msgstr "语言:"
+
+#: tools/editor/project_settings.cpp
+msgid "Add.."
+msgstr "添加:"
+
+#: tools/editor/project_settings.cpp
+msgid "Remaps"
+msgstr "重定向"
+
+#: tools/editor/project_settings.cpp
+msgid "Resources:"
+msgstr "资源:"
+
+#: tools/editor/project_settings.cpp
+msgid "Remaps by Locale:"
+msgstr "地区重定向:"
+
+#: tools/editor/project_settings.cpp
+msgid "Locale"
+msgstr "地区"
+
+#: tools/editor/project_settings.cpp
+msgid "AutoLoad"
+msgstr "AutoLoad"
+
+#: tools/editor/project_settings.cpp
+msgid "Node Name:"
+msgstr "节点名称:"
+
+#: tools/editor/project_settings.cpp
+msgid "List:"
+msgstr "列表:"
+
+#: tools/editor/project_settings.cpp
+msgid "Singleton"
+msgstr "单例"
+
+#: tools/editor/property_editor.cpp
+msgid "Preset.."
+msgstr "预设.."
+
+#: tools/editor/property_editor.cpp
+msgid "Ease In"
+msgstr "慢速开始"
+
+#: tools/editor/property_editor.cpp
+msgid "Ease Out"
+msgstr "慢速结束"
+
+#: tools/editor/property_editor.cpp
+msgid "Zero"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Easing In-Out"
+msgstr "慢速开始和结束"
+
+#: tools/editor/property_editor.cpp
+msgid "Easing Out-In"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "File.."
+msgstr "文件.."
+
+#: tools/editor/property_editor.cpp
+msgid "Dir.."
+msgstr "目录.."
+
+#: tools/editor/property_editor.cpp
+msgid "Load"
+msgstr "加载"
+
+#: tools/editor/property_editor.cpp
+msgid "Assign"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Error loading file: Not a resource!"
+msgstr "加载文件出错:不是资源文件!"
+
+#: tools/editor/property_editor.cpp
+msgid "Couldn't load image"
+msgstr "无法加载图片"
+
+#: tools/editor/property_editor.cpp
+msgid "Bit %d, val %d."
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "On"
+msgstr "启用"
+
+#: tools/editor/property_editor.cpp
+msgid "Set"
+msgstr "设置"
+
+#: tools/editor/property_editor.cpp
+msgid "Properties:"
+msgstr "属性:"
+
+#: tools/editor/property_editor.cpp
+msgid "Global"
+msgstr "全局"
+
+#: tools/editor/property_editor.cpp
+msgid "Sections:"
+msgstr "选项:"
+
+#: tools/editor/pvrtc_compress.cpp
+msgid "Could not execute PVRTC tool:"
+msgstr "无法执行PVPTC工具:"
+
+#: tools/editor/pvrtc_compress.cpp
+msgid "Can't load back converted image using PVRTC tool:"
+msgstr "无法加载使用PVRTC工具转换的图片:"
+
+#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp
+msgid "Reparent Node"
+msgstr "重设父节点"
+
+#: tools/editor/reparent_dialog.cpp
+msgid "Reparent Location (Select new Parent):"
+msgstr "重设位置(选择父节点)"
+
+#: tools/editor/reparent_dialog.cpp
+msgid "Keep Global Transform"
+msgstr "保持全局变换"
+
+#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp
+msgid "Reparent"
+msgstr "重设父节点"
+
+#: tools/editor/resources_dock.cpp
+msgid "Create New Resource"
+msgstr "创建资源"
+
+#: tools/editor/resources_dock.cpp
+msgid "Open Resource"
+msgstr "打开资源"
+
+#: tools/editor/resources_dock.cpp
+msgid "Save Resource"
+msgstr "保存资源"
+
+#: tools/editor/resources_dock.cpp
+msgid "Resource Tools"
+msgstr "资源工具"
+
+#: tools/editor/resources_dock.cpp
+msgid "Make Local"
+msgstr ""
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Run Mode:"
+msgstr "运行模式:"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Current Scene"
+msgstr "当前场景"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Main Scene"
+msgstr "主场景"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Main Scene Arguments:"
+msgstr "主场景参数:"
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Scene Run Settings"
+msgstr "场景运行设置"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "OK :("
+msgstr "好吧"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "No parent to instance a child at."
+msgstr "没有选中节点来添加实例。"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error loading scene from %s"
+msgstr "从%s加载场景出错!"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error instancing scene from %s"
+msgstr "从%s实例化场景出错!"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Ok"
+msgstr "好的"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Cannot instance the scene '%s' because the current scene exists within one of "
+"its nodes."
+msgstr "无法实例化场景%s当前场景已存在于它的子节点中。"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Instance Scene(s)"
+msgstr "实例化场景"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done on the tree root."
+msgstr "此操作不能被用于根节点。"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Node In Parent"
+msgstr "在父节点中移动"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Nodes In Parent"
+msgstr "在父节点中移动多个节点"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Duplicate Node(s)"
+msgstr "复制节点"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete Node(s)?"
+msgstr "确定要删除节点吗?"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done without a scene."
+msgstr "此操作必须在打开一个场景后才能执行。"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation requires a single selected node."
+msgstr "此操作只能应用于单个选中节点。"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done on instanced scenes."
+msgstr "此操作不能应用于实例化的场景。"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Save New Scene As.."
+msgstr "将新场景另存为.."
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Makes Sense!"
+msgstr "有道理!"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes from a foreign scene!"
+msgstr "无法操作外部场景的节点!"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes the current scene inherits from!"
+msgstr "无法操作此节点,因为当前场景继承自该节点!"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Remove Node(s)"
+msgstr "移除节点"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Create Node"
+msgstr "新节点"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Couldn't save new scene. Likely dependencies (instances) couldn't be "
+"satisfied."
+msgstr "无法保存场景,场景或其实例的的依赖存在问题。"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error saving scene."
+msgstr "保存场景出错。"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error duplicating scene to save it."
+msgstr "复制场景出错。"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "New Scene Root"
+msgstr "创建场景根节点"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Inherit Scene"
+msgstr "继承场景"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add Child Node"
+msgstr "添加子节点"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Instance Child Scene"
+msgstr "实例化子场景"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Change Type"
+msgstr "更改类型"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Edit Groups"
+msgstr "编辑分组"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Edit Connections"
+msgstr "编辑事件连接"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add Script"
+msgstr "添加脚本"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Merge From Scene"
+msgstr "从场景中合并"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Save Branch as Scene"
+msgstr "将分支保存为场景"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete Node(s)"
+msgstr "删除节点"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add/Create a New Node"
+msgstr "添加/创建节点"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Instance a scene file as a Node. Creates an inherited scene if no root node "
+"exists."
+msgstr "实例化场景文件为一个节点,如果没有根节点则创建一个继承自该文件的场景。"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid ""
+"This item cannot be made visible because the parent is hidden. Unhide the "
+"parent first."
+msgstr "无法显示此节点,请先取消隐藏其父节点。"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Toggle Spatial Visible"
+msgstr "切换Spatial可见"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Toggle CanvasItem Visible"
+msgstr "切换CanvasItem可见"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Instance:"
+msgstr "实例:"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Invalid node name, the following characters are not allowed:"
+msgstr "节点名称非法,不允许包含以下字符:"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Rename Node"
+msgstr "重命名节点"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Scene Tree (Nodes):"
+msgstr "场景树:"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Editable Children"
+msgstr "允许编辑子孙节点"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Load As Placeholder"
+msgstr "加载为占位符"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Open in Editor"
+msgstr "在编辑器中打开"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear Inheritance"
+msgstr "清除继承"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear Inheritance? (No Undo!)"
+msgstr "确定要清除继承吗(无法撤销!)?"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear!"
+msgstr "清除!"
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Select a Node"
+msgstr "选择一个节点"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Same source and destination files, doing nothing."
+msgstr "源文件和目标文件相同,操作忽略。"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Same source and destination paths, doing nothing."
+msgstr "源路径和目标路径相同,操作忽略。"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Can't move directories to within themselves."
+msgstr "无法将目录移动到自身下。"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Can't operate on '..'"
+msgstr "无法对'..'引用操作。"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Pick New Name and Location For:"
+msgstr "选择新名称和路径:"
+
+#: tools/editor/scenes_dock.cpp
+msgid "No files selected!"
+msgstr "没有选中任何文件!"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Instance"
+msgstr "创建实例节点"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Edit Dependencies.."
+msgstr "编辑依赖.."
+
+#: tools/editor/scenes_dock.cpp
+msgid "View Owners.."
+msgstr "查看所有者"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Rename or Move.."
+msgstr "移动或重命名"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Move To.."
+msgstr "移动"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Info"
+msgstr "信息"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Show In File Manager"
+msgstr "在资源管理器中打开"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Previous Directory"
+msgstr "上一个目录:"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Next Directory"
+msgstr "下一个目录:"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Re-Scan Filesystem"
+msgstr "重新扫描文件系统"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Toggle folder status as Favorite"
+msgstr "收藏目录"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Instance the selected scene(s) as child of the selected node."
+msgstr "将选中的场景实例为选中节点的子节点。"
+
+#: tools/editor/scenes_dock.cpp
+msgid "Move"
+msgstr "移动"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid parent class name"
+msgstr "基类名称非法"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid chars:"
+msgstr "合法的字符:"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid class name"
+msgstr "类名非法"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid name"
+msgstr "名称可用"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "N/A"
+msgstr "N/A"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Class name is invalid!"
+msgstr "类名非法"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Parent class name is invalid!"
+msgstr "基类名称非法"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid path!"
+msgstr "路径非法!"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Could not create script in filesystem."
+msgstr "无法创建脚本。"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Path is empty"
+msgstr "文件路径为空"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Path is not local"
+msgstr "必须是项目路径"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid base path"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "File exists"
+msgstr "文件已存在"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid extension"
+msgstr "扩展名非法"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid path"
+msgstr "路径可用"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Class Name:"
+msgstr "类名:"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Built-In Script"
+msgstr "内置脚本"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Create Node Script"
+msgstr "创建脚本"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Bytes:"
+msgstr "字节:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Warning"
+msgstr "警告:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Error:"
+msgstr "错误:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Source:"
+msgstr "源:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Function:"
+msgstr "函数:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Errors"
+msgstr "错误"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Child Process Connected"
+msgstr "子进程已连接"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Inspect Previous Instance"
+msgstr "编辑上一个实例"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Inspect Next Instance"
+msgstr "编辑下一个实例"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Stack Frames"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Variable"
+msgstr "变量"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Errors:"
+msgstr "错误:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Stack Trace (if applicable):"
+msgstr "调用堆栈:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Remote Inspector"
+msgstr "远程属性面板"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Live Scene Tree:"
+msgstr "即时场景树:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Remote Object Properties: "
+msgstr "远程对象属性。"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Profiler"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Monitor"
+msgstr "显示"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Value"
+msgstr "值"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Monitors"
+msgstr "显示"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "List of Video Memory Usage by Resource:"
+msgstr "占用显存的资源列表:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Total:"
+msgstr "合计:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Video Mem"
+msgstr "显存"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Resource Path"
+msgstr "资源路径"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Type"
+msgstr "类型"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Usage"
+msgstr "用量"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Misc"
+msgstr "杂项"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Clicked Control:"
+msgstr "点击的控件:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Clicked Control Type:"
+msgstr "点击的控件类型:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Live Edit Root:"
+msgstr "实时编辑根节点:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Set From Tree"
+msgstr "从场景树设置"
+
+#: tools/editor/settings_config_dialog.cpp
+msgid "Plugin List:"
+msgstr "插件列表"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Light Radius"
+msgstr "设置光照半径"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Camera FOV"
+msgstr "更改摄像机视角"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Camera Size"
+msgstr "修改摄像机尺寸"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Sphere Shape Radius"
+msgstr "更改球体半径"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Box Shape Extents"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Radius"
+msgstr "更改胶囊半径"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Height"
+msgstr "更改胶囊高度"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Ray Shape Length"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Notifier Extents"
+msgstr ""
+
+#~ msgid "Keep Existing, Merge with New"
+#~ msgstr "保留已有,与新的合并。"
+
+#~ msgid "Keep Existing, Ignore New"
+#~ msgstr "保留已有,忽略新的。"
+
+#~ msgid ""
+#~ "NOTICE: You are not forced to import textures for 2D projects. Just copy "
+#~ "your .jpg or .png files to your project, and change export options later. "
+#~ "Atlases can be generated on export too."
+#~ msgstr ""
+#~ "注意:对于大多数2D纹理图片,一般不需要导入操作。只需要将.jpg或.png文件放到"
+#~ "项目目录下,并存导出选项即可。精灵集也可以在导出时生成。"
diff --git a/tools/translations/zh_HK.po b/tools/translations/zh_HK.po
new file mode 100644
index 0000000000..a78ced993b
--- /dev/null
+++ b/tools/translations/zh_HK.po
@@ -0,0 +1,5833 @@
+# LANGUAGE translation of the Godot Engine editor
+# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community
+# This file is distributed under the same license as the Godot source code.
+# Wesley <ZX_WT@ymail.com>, 2016.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Godot Engine editor\n"
+"PO-Revision-Date: 2016-05-30 16:42+0800\n"
+"Last-Translator: Wesley <ZX_WT@ymail.com>\n"
+"Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
+"Language: zh_HK\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: scene/2d/animated_sprite.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the 'Frames' property in "
+"order for AnimatedSprite to display frames."
+msgstr ""
+
+#: scene/2d/canvas_modulate.cpp
+msgid ""
+"Only one visible CanvasModulate is allowed per scene (or set of instanced "
+"scenes). The first created one will work, while the rest will be ignored."
+msgstr ""
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid ""
+"CollisionPolygon2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid "An empty CollisionPolygon2D has no effect on collision."
+msgstr ""
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"CollisionShape2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"A shape must be provided for CollisionShape2D to function. Please create a "
+"shape resource for it!"
+msgstr ""
+
+#: scene/2d/light_2d.cpp
+msgid ""
+"A texture with the shape of the light must be supplied to the 'texture' "
+"property."
+msgstr ""
+
+#: scene/2d/light_occluder_2d.cpp
+msgid ""
+"An occluder polygon must be set (or drawn) for this occluder to take effect."
+msgstr ""
+
+#: scene/2d/light_occluder_2d.cpp
+msgid "The occluder polygon for this occluder is empty. Please draw a polygon!"
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"A NavigationPolygon resource must be set or created for this node to work. "
+"Please set a property or draw a polygon."
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
+"node. It only provides navigation data."
+msgstr ""
+
+#: scene/2d/parallax_layer.cpp
+msgid ""
+"ParallaxLayer node only works when set as child of a ParallaxBackground node."
+msgstr ""
+
+#: scene/2d/particles_2d.cpp
+msgid "Path property must point to a valid Particles2D node to work."
+msgstr ""
+
+#: scene/2d/path_2d.cpp
+msgid "PathFollow2D only works when set as a child of a Path2D node."
+msgstr ""
+
+#: scene/2d/remote_transform_2d.cpp
+msgid "Path property must point to a valid Node2D node to work."
+msgstr ""
+
+#: scene/2d/sample_player_2d.cpp scene/audio/sample_player.cpp
+msgid ""
+"A SampleLibrary resource must be created or set in the 'samples' property in "
+"order for SamplePlayer to play sound."
+msgstr ""
+
+#: scene/2d/sprite.cpp
+msgid ""
+"Path property must point to a valid Viewport node to work. Such Viewport must "
+"be set to 'render target' mode."
+msgstr ""
+
+#: scene/2d/sprite.cpp
+msgid ""
+"The Viewport set in the path property must be set as 'render target' in order "
+"for this sprite to work."
+msgstr ""
+
+#: scene/2d/visibility_notifier_2d.cpp
+msgid ""
+"VisibilityEnable2D works best when used with the edited scene root directly "
+"as parent."
+msgstr ""
+
+#: scene/3d/body_shape.cpp
+msgid ""
+"CollisionShape only serves to provide a collision shape to a CollisionObject "
+"derived node. Please only use it as a child of Area, StaticBody, RigidBody, "
+"KinematicBody, etc. to give them a shape."
+msgstr ""
+
+#: scene/3d/body_shape.cpp
+msgid ""
+"A shape must be provided for CollisionShape to function. Please create a "
+"shape resource for it!"
+msgstr ""
+
+#: scene/3d/collision_polygon.cpp
+msgid ""
+"CollisionPolygon only serves to provide a collision shape to a "
+"CollisionObject derived node. Please only use it as a child of Area, "
+"StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
+msgstr ""
+
+#: scene/3d/collision_polygon.cpp
+msgid "An empty CollisionPolygon has no effect on collision."
+msgstr ""
+
+#: scene/3d/navigation_mesh.cpp
+msgid "A NavigationMesh resource must be set or created for this node to work."
+msgstr ""
+
+#: scene/3d/navigation_mesh.cpp
+msgid ""
+"NavigationMeshInstance must be a child or grandchild to a Navigation node. It "
+"only provides navigation data."
+msgstr ""
+
+#: scene/3d/scenario_fx.cpp
+msgid ""
+"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)."
+msgstr ""
+
+#: scene/3d/spatial_sample_player.cpp
+msgid ""
+"A SampleLibrary resource must be created or set in the 'samples' property in "
+"order for SpatialSamplePlayer to play sound."
+msgstr ""
+
+#: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Cancel"
+msgstr ""
+
+#: scene/gui/dialogs.cpp
+msgid "OK"
+msgstr ""
+
+#: scene/gui/dialogs.cpp
+msgid "Alert!"
+msgstr ""
+
+#: scene/gui/dialogs.cpp
+msgid "Please Confirm..."
+msgstr ""
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Cut"
+msgstr "剪下"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp
+msgid "Copy"
+msgstr "複製"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp
+msgid "Paste"
+msgstr "貼上"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp tools/editor/project_export.cpp
+msgid "Select All"
+msgstr "全選"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_log.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/rich_text_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/script_editor_debugger.cpp
+msgid "Clear"
+msgstr "清空"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Undo"
+msgstr "復原"
+
+#: scene/gui/popup.cpp
+msgid ""
+"Popups will hide by default unless you call popup() or any of the popup*() "
+"functions. Making them visible for editing is fine though, but they will hide "
+"upon running."
+msgstr ""
+
+#: scene/main/viewport.cpp
+msgid ""
+"This viewport is not set as render target. If you intend for it to display "
+"its contents directly to the screen, make it a child of a Control so it can "
+"obtain a size. Otherwise, make it a RenderTarget and assign its internal "
+"texture to some node for display."
+msgstr ""
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Error initializing FreeType."
+msgstr ""
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Unknown font format."
+msgstr "不明字形格式"
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Error loading font."
+msgstr "載入字形出現錯誤"
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Invalid font size."
+msgstr "無效字型"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/call_dialog.cpp
+#: tools/editor/connections_dialog.cpp tools/editor/groups_editor.cpp
+#: tools/editor/import_settings.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp
+#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp
+msgid "Close"
+msgstr "關閉"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/create_dialog.cpp
+#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/settings_config_dialog.cpp
+msgid "Search:"
+msgstr ""
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/code_editor.cpp
+#: tools/editor/editor_help.cpp tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/project_settings.cpp
+msgid "Search"
+msgstr ""
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/editor_node.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Import"
+msgstr "導入"
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/project_settings.cpp
+#: tools/editor/settings_config_dialog.cpp
+msgid "Plugins"
+msgstr "插件"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Sort:"
+msgstr ""
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Reverse"
+msgstr ""
+
+#: tools/editor/addon_editor_plugin.cpp tools/editor/project_settings.cpp
+msgid "Category:"
+msgstr ""
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "All"
+msgstr "全部"
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Site:"
+msgstr ""
+
+#: tools/editor/addon_editor_plugin.cpp
+msgid "Assets ZIP File"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Disabled"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "All Selection"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Add Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Transition"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Transform"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Value"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Call"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Track"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Anim Track Up"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Anim Track Down"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove Anim Track"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Duplicate Keys"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Set Transitions to:"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Rename"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Change Interpolation"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Change Value Mode"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Edit Node Curve"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Edit Selection Curve"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Delete Keys"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Move Keys"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale Selection"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale From Cursor"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Duplicate Selection"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Duplicate Transposed"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Goto Next Step"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Goto Prev Step"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp
+msgid "Linear"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Constant"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "In"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Out"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "In-Out"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Out-In"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Transitions"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Optimize Animation"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up Animation"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Create NEW track for %s and insert key?"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Create %d NEW tracks and insert keys?"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/particles_editor_plugin.cpp
+#: tools/editor/project_manager.cpp tools/editor/script_create_dialog.cpp
+msgid "Create"
+msgstr "新增"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Create & Insert"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert Track & Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Change Anim Len"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Change Anim Loop"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Create Typed Value Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Scale Keys"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Call Track"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Animation zoom."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Length (s):"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Animation length (in seconds)."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Step (s):"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Cursor step snap (in seconds)."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Enable/Disable looping in animation."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Add new tracks."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Move current track up."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Move current track down."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove selected track."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Track tools"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Enable editing of individual keys by clicking them."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim. Optimizer"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Max. Linear Error:"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Max. Angular Error:"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Max Optimizable Angle:"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Optimize"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Transition"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale Ratio:"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Call Functions in Which Node?"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove invalid keys"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove unresolved and empty tracks"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-up all animations"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up Animation(s) (NO UNDO!)"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up"
+msgstr ""
+
+#: tools/editor/array_property_edit.cpp
+msgid "Resize Array"
+msgstr ""
+
+#: tools/editor/array_property_edit.cpp
+msgid "Change Array Value Type"
+msgstr ""
+
+#: tools/editor/array_property_edit.cpp
+msgid "Change Array Value"
+msgstr ""
+
+#: tools/editor/call_dialog.cpp
+msgid "Method List For '%s':"
+msgstr ""
+
+#: tools/editor/call_dialog.cpp
+msgid "Call"
+msgstr ""
+
+#: tools/editor/call_dialog.cpp
+msgid "Method List:"
+msgstr ""
+
+#: tools/editor/call_dialog.cpp
+msgid "Arguments:"
+msgstr ""
+
+#: tools/editor/call_dialog.cpp
+msgid "Return:"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Go to Line"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Line Number:"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "No Matches"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Replaced %d Ocurrence(s)."
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Replace"
+msgstr "替換"
+
+#: tools/editor/code_editor.cpp
+msgid "Replace All"
+msgstr "全部替換"
+
+#: tools/editor/code_editor.cpp
+msgid "Match Case"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Whole Words"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Selection Only"
+msgstr "只限選中"
+
+#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp
+msgid "Find"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Next"
+msgstr "下一個"
+
+#: tools/editor/code_editor.cpp
+msgid "Replaced %d ocurrence(s)."
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Not found!"
+msgstr "找不到!"
+
+#: tools/editor/code_editor.cpp
+msgid "Replace By"
+msgstr "替換為"
+
+#: tools/editor/code_editor.cpp
+msgid "Case Sensitive"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Backwards"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Prompt On Replace"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Skip"
+msgstr "跳過"
+
+#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp
+msgid "Line:"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Col:"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Method in target Node must be specified!"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect To Node:"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Binds (Extra Params):"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp tools/editor/groups_editor.cpp
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/project_settings.cpp
+msgid "Add"
+msgstr "添加"
+
+#: tools/editor/connections_dialog.cpp tools/editor/dependency_editor.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp tools/editor/project_manager.cpp
+msgid "Remove"
+msgstr "移除"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Path To Node:"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Method In Node:"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Make Function"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Deferred"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Oneshot"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect"
+msgstr "連到"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect '%s' to '%s'"
+msgstr "由 '%s' 連到 '%s'"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Create Subscription"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect.."
+msgstr "連到..."
+
+#: tools/editor/connections_dialog.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Disconnect"
+msgstr "中斷"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Edit Connections.."
+msgstr "編輯連接"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connections:"
+msgstr "連接"
+
+#: tools/editor/create_dialog.cpp
+msgid "Create New"
+msgstr ""
+
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+msgid "Matches:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Search Replacement For:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies For:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"Scene '%s' is currently being edited.\n"
+"Changes will not take effect unless reloaded."
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"Resource '%s' is in use.\n"
+"Changes will take effect when reloaded."
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Resource"
+msgstr "資源"
+
+#: tools/editor/dependency_editor.cpp tools/editor/project_manager.cpp
+#: tools/editor/project_settings.cpp
+msgid "Path"
+msgstr "路徑"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Fix Broken"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependency Editor"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Search Replacement Resource:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Owners Of:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"The files being removed are required by other resources in order for them to "
+"work.\n"
+"Remove them anyway? (no undo)"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Remove selected files from the project? (no undo)"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Error loading:"
+msgstr "載入錯誤:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Scene failed to load due to missing dependencies:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Open Anyway"
+msgstr "照常開啓"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Which action should be taken?"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Fix Dependencies"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Errors loading!"
+msgstr "載入錯誤!"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Permanently delete %d item(s)? (No undo!)"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Owns"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Resources Without Explicit Ownership:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
+msgid "Orphan Resource Explorer"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Delete selected files?"
+msgstr "要刪除選中檔案?"
+
+#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/item_list_editor_plugin.cpp tools/editor/scenes_dock.cpp
+msgid "Delete"
+msgstr "刪除"
+
+#: tools/editor/editor_data.cpp
+msgid "Updating Scene"
+msgstr ""
+
+#: tools/editor/editor_data.cpp
+msgid "Storing local changes.."
+msgstr ""
+
+#: tools/editor/editor_data.cpp
+msgid "Updating scene.."
+msgstr ""
+
+#: tools/editor/editor_dir_dialog.cpp
+msgid "Choose a Directory"
+msgstr "選擇資料夾"
+
+#: tools/editor/editor_dir_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Create Folder"
+msgstr "新增資料夾"
+
+#: tools/editor/editor_dir_dialog.cpp tools/editor/editor_file_dialog.cpp
+#: tools/editor/editor_plugin_settings.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Name:"
+msgstr "名稱"
+
+#: tools/editor/editor_dir_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Could not create folder."
+msgstr "無法新增資料夾"
+
+#: tools/editor/editor_dir_dialog.cpp
+msgid "Choose"
+msgstr "選擇"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "File Exists, Overwrite?"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "All Recognized"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "All Files (*)"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/quick_open.cpp tools/editor/scenes_dock.cpp
+msgid "Open"
+msgstr "開啟"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save"
+msgstr "儲存"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Save a File"
+msgstr "儲存檔案"
+
+#: tools/editor/editor_file_dialog.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/script_create_dialog.cpp
+msgid "Path:"
+msgstr "路徑"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/scenes_dock.cpp
+msgid "Favorites:"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Recent:"
+msgstr "最近:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Directories & Files:"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Preview:"
+msgstr "預覽"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/script_editor_debugger.cpp
+msgid "File:"
+msgstr "檔案"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Filter:"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Must use a valid extension."
+msgstr ""
+
+#: tools/editor/editor_file_system.cpp
+msgid "Cannot go into subdir:"
+msgstr "無法進入次要資料夾"
+
+#: tools/editor/editor_file_system.cpp
+msgid "ScanSources"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Search Classes"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Class List:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp tools/editor/property_editor.cpp
+msgid "Class:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp tools/editor/scene_tree_editor.cpp
+#: tools/editor/script_create_dialog.cpp
+msgid "Inherits:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Inherited by:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Brief Description:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Public Methods:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Members:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "GUI Theme Items:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Signals:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Constants:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Method Description:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Search Text"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp
+msgid "Added:"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp
+msgid "Removed:"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp tools/editor/project_export.cpp
+msgid "Error saving atlas:"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp
+msgid "Could not save atlas subtexture:"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp
+msgid "Storing File:"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp
+msgid "Packing"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp
+msgid "Exporting for %s"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp
+msgid "Setting Up.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
+msgid "Re-Importing"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Importing:"
+msgstr "導入中"
+
+#: tools/editor/editor_node.cpp
+msgid "Node From Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/scenes_dock.cpp
+msgid "Re-Import.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/resources_dock.cpp
+msgid "Error saving resource!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/resources_dock.cpp
+msgid "Save Resource As.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
+msgid "I see.."
+msgstr "如來如此"
+
+#: tools/editor/editor_node.cpp
+msgid "Can't open file for writing:"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Requested file format unknown:"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Error while saving."
+msgstr "儲存時出現錯誤"
+
+#: tools/editor/editor_node.cpp
+msgid "Saving Scene"
+msgstr "場景儲存中"
+
+#: tools/editor/editor_node.cpp
+msgid "Analyzing"
+msgstr "分析中"
+
+#: tools/editor/editor_node.cpp
+msgid "Creating Thumbnail"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Failed to load resource."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Can't load MeshLibrary for merging!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Error saving MeshLibrary!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Can't load TileSet for merging!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Error saving TileSet!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Can't open export templates zip."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Loading Export Templates"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Error trying to save layout!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Default editor layout overridden."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Layout name not found!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Restored default layout to base settings."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Copy Params"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Set Params"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Paste Resource"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Copy Resource"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Make Built-In"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Make Sub-Resources Unique"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "There is no defined scene to run."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Current scene was never saved, please save it prior to running."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Could not start subprocess!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Open Scene"
+msgstr "開啓場景"
+
+#: tools/editor/editor_node.cpp
+msgid "Open Base Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Open Scene.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Open Script.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Yes"
+msgstr "是"
+
+#: tools/editor/editor_node.cpp
+msgid "Close scene? (Unsaved changes will be lost)"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Save Scene As.."
+msgstr "把場景另存為"
+
+#: tools/editor/editor_node.cpp
+msgid "This scene has never been saved. Save before running?"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Please save the scene first."
+msgstr "請先儲存場景"
+
+#: tools/editor/editor_node.cpp
+msgid "Save Translatable Strings"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Export Mesh Library"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Export Tile Set"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Quit"
+msgstr "離開"
+
+#: tools/editor/editor_node.cpp
+msgid "Exit the editor?"
+msgstr "要離開編輯器嗎?"
+
+#: tools/editor/editor_node.cpp
+msgid "Current scene not saved. Open anyway?"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Can't reload a scene that was never saved."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Revert"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "This action cannot be undone. Revert anyway?"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Run Scene.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Open Project Manager? \n"
+"(Unsaved changes will be lost)"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
+msgid "Ugh"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Error loading scene, it must be inside the project path. Use 'Import' to open "
+"the scene, then save it inside the project path."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Error loading scene."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Scene '%s' has broken dependencies:"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Save Layout"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Delete Layout"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Default"
+msgstr "預設"
+
+#: tools/editor/editor_node.cpp
+msgid "Switch Scene Tab"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "%d more file(s)"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "%d more file(s) or folder(s)"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Scene"
+msgstr "場景"
+
+#: tools/editor/editor_node.cpp
+msgid "Go to previously opened scene."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Operations with scene files."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "New Scene"
+msgstr "新增場景"
+
+#: tools/editor/editor_node.cpp
+msgid "New Inherited Scene.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Open Scene.."
+msgstr "開啓場景"
+
+#: tools/editor/editor_node.cpp
+msgid "Save Scene"
+msgstr "儲存場景"
+
+#: tools/editor/editor_node.cpp
+msgid "Close Scene"
+msgstr "關閉場景"
+
+#: tools/editor/editor_node.cpp
+msgid "Close Goto Prev. Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Open Recent"
+msgstr "開啓最近的"
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Search File.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Convert To.."
+msgstr "轉為..."
+
+#: tools/editor/editor_node.cpp
+msgid "Translatable Strings.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "MeshLibrary.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "TileSet.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Redo"
+msgstr "重製"
+
+#: tools/editor/editor_node.cpp
+msgid "Run Script"
+msgstr "運行腳本"
+
+#: tools/editor/editor_node.cpp
+msgid "Project Settings"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Revert Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Quit to Project List"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Import assets to the project."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Miscellaneous project or scene-wide tools."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Tools"
+msgstr "工具"
+
+#: tools/editor/editor_node.cpp
+msgid "Export the project to many platforms."
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Export"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Play the project (F5)."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Pause the scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Stop the scene (F8)."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Play the edited scene (F6)."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Play custom scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Debug options"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Live Editing"
+msgstr "即時編輯"
+
+#: tools/editor/editor_node.cpp
+msgid "File Server"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Deploy Remote Debug"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Deploy File Server Clients"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Visible Collision Shapes"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Visible Navigation"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Settings"
+msgstr "設定"
+
+#: tools/editor/editor_node.cpp tools/editor/settings_config_dialog.cpp
+msgid "Editor Settings"
+msgstr "編輯器設定"
+
+#: tools/editor/editor_node.cpp
+msgid "Editor Layout"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Install Export Templates"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "About"
+msgstr "關於"
+
+#: tools/editor/editor_node.cpp
+msgid "Alerts when an external resource has changed."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Spins when the editor window repaints!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Update Always"
+msgstr "不停更新"
+
+#: tools/editor/editor_node.cpp
+msgid "Update Changes"
+msgstr "當改變時更新"
+
+#: tools/editor/editor_node.cpp
+msgid "Inspector"
+msgstr "監視器"
+
+#: tools/editor/editor_node.cpp
+msgid "Create a new resource in memory and edit it."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Load an existing resource from disk and edit it."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Save the currently edited resource."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save As.."
+msgstr "另存為.."
+
+#: tools/editor/editor_node.cpp
+msgid "Go to the previous edited object in history."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Go to the next edited object in history."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "History of recently edited objects."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Object properties."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "FileSystem"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Output"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
+#: tools/editor/import_settings.cpp
+msgid "Re-Import"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/editor_plugin_settings.cpp
+msgid "Update"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Thanks from the Godot community!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Thanks!"
+msgstr "多謝!"
+
+#: tools/editor/editor_node.cpp
+msgid "Import Templates From ZIP File"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Export Project"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Export Library"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Merge With Existing"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Password:"
+msgstr "密碼:"
+
+#: tools/editor/editor_node.cpp
+msgid "Open & Run a Script"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Load Errors"
+msgstr ""
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Installed Plugins:"
+msgstr ""
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr ""
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Author:"
+msgstr ""
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Status:"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Stop Profiling"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Start Profiling"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Measure:"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame Time (sec)"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Average Time (sec)"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame %"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Fixed Frame %"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp tools/editor/script_editor_debugger.cpp
+msgid "Time:"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Inclusive"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Self"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame #:"
+msgstr ""
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Please wait for scan to complete."
+msgstr ""
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Current scene must be saved to re-import."
+msgstr ""
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Save & Re-Import"
+msgstr ""
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Re-Import Changed Resources"
+msgstr ""
+
+#: tools/editor/editor_run_script.cpp
+msgid "Write your logic in the _run() method."
+msgstr ""
+
+#: tools/editor/editor_run_script.cpp
+msgid "There is an edited scene already."
+msgstr ""
+
+#: tools/editor/editor_run_script.cpp
+msgid "Couldn't instance script:"
+msgstr ""
+
+#: tools/editor/editor_run_script.cpp
+msgid "Did you forget the 'tool' keyword?"
+msgstr ""
+
+#: tools/editor/editor_run_script.cpp
+msgid "Couldn't run script:"
+msgstr ""
+
+#: tools/editor/editor_run_script.cpp
+msgid "Did you forget the '_run' method?"
+msgstr ""
+
+#: tools/editor/editor_settings.cpp
+msgid "Default (Same as Editor)"
+msgstr ""
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Select Node(s) to Import"
+msgstr ""
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Scene Path:"
+msgstr "場景路徑"
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Import From Node:"
+msgstr ""
+
+#: tools/editor/file_type_cache.cpp
+msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
+msgstr ""
+
+#: tools/editor/groups_editor.cpp
+msgid "Add to Group"
+msgstr ""
+
+#: tools/editor/groups_editor.cpp
+msgid "Remove from Group"
+msgstr ""
+
+#: tools/editor/groups_editor.cpp
+msgid "Group Editor"
+msgstr ""
+
+#: tools/editor/groups_editor.cpp tools/editor/project_export.cpp
+msgid "Group"
+msgstr ""
+
+#: tools/editor/groups_editor.cpp
+msgid "Node Group(s)"
+msgstr ""
+
+#: tools/editor/import_settings.cpp
+msgid "Imported Resources"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "No source font file!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "No target font resource!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Can't load/process source font."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Couldn't save font."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Source Font:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Source Font Size:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Dest Resource:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "The quick brown fox jumps over the lazy dog."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Test:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Options:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Font Import"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Accept"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid ""
+"This file is already a Godot font file, please supply a BMFont type file "
+"instead."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Failed opening as BMFont file."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Invalid font custom source."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Font"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "No meshes to import!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Save path is empty!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Single Mesh Import"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Source Mesh(es):"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Target Path:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Mesh"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Surface %d"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "No samples to import!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path is empty."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path must be a complete resource path."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path must exist."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Import Audio Samples"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Source Sample(s):"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Audio Sample"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "New Clip"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Animation Options"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Flags"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Bake FPS:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Optimizer"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Linear Error"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Angular Error"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Angle"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Clips"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/project_manager.cpp tools/editor/project_settings.cpp
+msgid "Name"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Start(s)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "End(s)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Loop"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Filters"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Source path is empty."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't load post-import script."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Invalid/broken script for post-import."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Error importing scene."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import 3D Scene"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Source Scene:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Same as Target Scene"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Shared"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Target Texture Folder:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Post-Process Script:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Custom Root Node Type:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Auto"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "The Following Files are Missing:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import Anyway"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import & Open"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Edited scene has not been saved, open imported scene anyway?"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import Scene"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Importing Scene.."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Running Custom Script.."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't load post-import script:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Invalid/broken script for post-import:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Error running post-import script:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import Image:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Can't import a file over itself:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't localize path: %s (already local)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Saving.."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "3D Scene Animation"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Uncompressed"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress Lossless (PNG)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress Lossy (WebP)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress (VRAM)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Format"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Compression Quality (WebP):"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Options"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Please specify some files!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "At least one file needed for Atlas."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Error importing:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Only one file is required for large texture."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Max Texture Size:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for Atlas (2D)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Cell Size:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Large Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Large Textures (2D)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Base Atlas Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture(s)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for 2D"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for 3D"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "2D Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "3D Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Atlas Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid ""
+"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to "
+"the project."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture(s):"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Crop empty space."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Large Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Load Source Image"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Slicing"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Inserting"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Saving"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save large texture:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Build Atlas For:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Loading Image:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't load image:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Converting Images"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Cropping Images"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Blitting Images"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save atlas image:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save converted texture:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Invalid source!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Invalid translation source!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Column"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#: tools/editor/script_create_dialog.cpp
+msgid "Language"
+msgstr "語言"
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "No items to import!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "No target path!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Translations"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Couldn't import!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Translation"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Source CSV:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Ignore First Row"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Compress"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Add to Project (engine.cfg)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Languages:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Translation"
+msgstr ""
+
+#: tools/editor/multi_node_edit.cpp
+msgid "MultiNode Set"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Toggle Autoplay"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Animation Name:"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Anim"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Animation Name:"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Remove Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Invalid animation name!"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Animation name already exists!"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Next Changed"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Blend Time"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to copy!"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation resource on clipboard!"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Pasted Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Paste Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to edit!"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from current pos. (A)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from end. (Shift+A)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Stop animation playback. (S)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from start. (Shift+D)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from current pos. (D)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation position (in seconds)."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Scale animation playback globally for the node."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create new animation in player."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load an animation from disk."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save the current animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Display list of animations in player."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Autoplay on Load"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Edit Target Blend Times"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Tools"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Copy Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Name:"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/script_create_dialog.cpp
+msgid "Error!"
+msgstr "錯誤!"
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Times:"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Next (Auto Queue):"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Cross-Animation Blend Times"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "New name:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Scale:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade In (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade Out (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Auto Restart:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Restart (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Random Restart (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Start!"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Amount:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 0:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 1:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "X-Fade Time (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Current:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Add Input"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Clear Auto-Advance"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Set Auto-Advance"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Delete Input"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Rename"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is valid."
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is invalid."
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "OneShot Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend2 Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend3 Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend4 Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeScale Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeSeek Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Transition Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Import Animations.."
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Edit Node Filters"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Filters.."
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Parsing %d Triangles:"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Triangle #"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Light Baker Setup:"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Parsing Geometry"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Fixing Lights"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Making BVH"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Creating Light Octree"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Creating Octree Texture"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Transfer to Lightmaps:"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Allocating Texture #"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Baking Triangle #"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Post-Processing Texture #"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "BakedLightInstance does not contain a BakedLight resource."
+msgstr ""
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "Bake!"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "Reset the lightmap octree baking process (start over)."
+msgstr ""
+
+#: tools/editor/plugins/camera_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Preview"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Configure Snap"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid Offset:"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid Step:"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Offset:"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Step:"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Pivot"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Action"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit IK Chain"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit CanvasItem"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom (%):"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Paste Pose"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Select Mode (Q)"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Drag: Rotate"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+Drag: Move"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+RMB: Depth list selection"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Move Mode (W)"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Mode (E)"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid ""
+"Show a list of all objects at the position clicked\n"
+"(same as Alt+RMB in select mode)."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Click to change object's rotation pivot."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Pan Mode"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Lock the selected object in place (can't be moved)."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Unlock the selected object (can be moved)."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Makes sure the object's children are not selectable."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Restores the object's children's ability to be selected."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Edit"
+msgstr "編輯"
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Snap"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Show Grid"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Rotation Snap"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap Relative"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Configure Snap.."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Pixel Snap"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Expand to Parent"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Skeleton.."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make Bones"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Bones"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make IK Chain"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear IK Chain"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom In"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Out"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Reset"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Set.."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center Selection"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Frame Selection"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Anchor"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Keys (Ins)"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key (Existing Tracks)"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Copy Pose"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Pose"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Set a Value"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap (Pixels):"
+msgstr ""
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create Poly"
+msgstr ""
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Edit Poly"
+msgstr ""
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Edit Poly (Remove Point)"
+msgstr ""
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+msgid "Create Poly3D"
+msgstr ""
+
+#: tools/editor/plugins/collision_shape_2d_editor_plugin.cpp
+msgid "Set Handle"
+msgstr ""
+
+#: tools/editor/plugins/color_ramp_editor_plugin.cpp
+msgid "Add/Remove Color Ramp Point"
+msgstr ""
+
+#: tools/editor/plugins/color_ramp_editor_plugin.cpp
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Color Ramp"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Creating Mesh Library"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Thumbnail.."
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove item %d?"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Add Item"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove Selected Item"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import from Scene"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Update from Scene"
+msgstr ""
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Item %d"
+msgstr ""
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Items"
+msgstr ""
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Item List Editor"
+msgstr ""
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Occluder Polygon"
+msgstr ""
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Edit existing polygon:"
+msgstr ""
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "LMB: Move Point."
+msgstr ""
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Ctrl+LMB: Split Segment."
+msgstr ""
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "RMB: Erase Point."
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh is empty!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Trimesh Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Convex Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "This doesn't work on scene root!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Shape"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Shape"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Navigation Mesh"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "MeshInstance lacks a Mesh!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Could not create outline!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Static Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Static Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Collision Sibling"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Collision Sibling"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh.."
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Outline Size:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and no MultiMesh set in node)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and MultiMesh contains no Mesh)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (invalid path)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (not a MeshInstance)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (contains no Mesh resource)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No surface source specified."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (invalid path)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no geometry)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no faces)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Parent has no solid faces to populate."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Couldn't map area."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Source Mesh:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Target Surface:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate Surface"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate MultiMesh"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Target Surface:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Source Mesh:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "X-Axis"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Y-Axis"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Z-Axis"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh Up Axis:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Rotation:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Tilt:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Scale:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate"
+msgstr ""
+
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create Navigation Polygon"
+msgstr ""
+
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Remove Poly And Point"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Error loading image:"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "No pixels with transparency > 128 in image.."
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Set Emission Mask"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Clear Emission Mask"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Load Emission Mask"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generated Point Count:"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry."
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry (faces)."
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Faces contain no area!"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "No faces!"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Generate AABB"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter From Mesh"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter From Node"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Clear Emitter"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Positions:"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Fill:"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Surface"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Volume"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Point from Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Add Point to Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Point in Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move In-Control in Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Out-Control in Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Select Control Points (Shift+Drag)"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Split Segment (in curve)"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Close Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Curve Point #"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Point Pos"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve In Pos"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Out Pos"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Split Path"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Remove Path Point"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create UV Map"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Transform UV Map"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon 2D UV Editor"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Point"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Ctrl: Rotate"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift: Move All"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift+Ctrl: Scale"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Polygon"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Rotate Polygon"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Scale Polygon"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon->UV"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "UV->Polygon"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Clear UV"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Snap"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Enable Snap"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Grid"
+msgstr ""
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "ERROR: Couldn't load resource!"
+msgstr ""
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Add Resource"
+msgstr ""
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Rename Resource"
+msgstr ""
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Delete Resource"
+msgstr ""
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Resource clipboard is empty!"
+msgstr ""
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Load Resource"
+msgstr ""
+
+#: tools/editor/plugins/rich_text_editor_plugin.cpp
+msgid "Parse BBCode"
+msgstr ""
+
+#: tools/editor/plugins/sample_editor_plugin.cpp
+msgid "Length:"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Open Sample File(s)"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "ERROR: Couldn't load sample!"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Add Sample"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Stop"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Play"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Rename Sample"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Delete Sample"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "16 Bits"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "8 Bits"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Stereo"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Mono"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Format"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Pitch"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error while saving theme"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error saving"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error importing theme"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error importing"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Import Theme"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As.."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/project_export.cpp
+msgid "File"
+msgstr "檔案"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_editor.cpp
+msgid "New"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save All"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "History Prev"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "History Next"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Reload Theme"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr "上移"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr "下移"
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Indent Left"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Indent Right"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Toggle Comment"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Clone Down"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Complete Symbol"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Trim Trailing Whitespace"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Auto Indent"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find.."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find Next"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find Previous"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Replace.."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Goto Function.."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Goto Line.."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Debug"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Toggle Breakpoint"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Remove All Breakpoints"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Goto Next Breakpoint"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Goto Previous Breakpoint"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Step Over"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Step Into"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Break"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Continue"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Keep Debugger Open"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Window"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Left"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Right"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Help"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Contextual"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Tutorials"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Open https://godotengine.org at tutorials section."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Classes"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search the class hierarchy."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search Help"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search the reference documentation."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Go to previous edited document."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Go to next edited document."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Create Script"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid ""
+"The following files are newer on disk.\n"
+"What action should be taken?:"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Reload"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Resave"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Debugger"
+msgstr ""
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Vertex"
+msgstr ""
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Fragment"
+msgstr ""
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Lighting"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Constant"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Constant"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Constant"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Operator"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Operator"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Scalar Operator"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Operator"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Toggle Rot Only"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Function"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Function"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Default Value"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change XForm Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Texture Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Cubemap Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Comment"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Color Ramp"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Curve Map"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Curve Map"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Input Name"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Connect Graph Nodes"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Disconnect Graph Nodes"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Remove Shader Graph Node"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Move Shader Graph Node"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Duplicate Graph Node(s)"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Delete Shader Graph Node(s)"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Cyclic Connection Link"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Missing Input Connections"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add Shader Graph Node"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Aborted."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Plane Transform."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "X-Axis Transform."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Y-Axis Transform."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Z-Axis Transform."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling to %s%%."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotating %s degrees."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Keying is disabled (no key inserted)."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Animation Key Inserted."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Align with view"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top (Num7)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom (Shift+Num7)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left (Num3)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right (Shift+Num3)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front (Num1)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear (Shift+Num1)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective (Num5)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal (Num5)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Environment"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Audio Listener"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Gizmos"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Selection (F)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Align with view (Ctrl+Shift+F)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "XForm Dialog"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "No scene selected to instance!"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Instance at Cursor"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Could not instance scene!"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Mode (R)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Local Coords"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Dialog.."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Default Light"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Default sRGB"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "1 Viewport"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports (Alt)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports (Alt)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "4 Viewports"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Normal"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Wireframe"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Overdraw"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Shadeless"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Origin"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Grid"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap Settings"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate Snap:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Snap (deg.):"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Snap (%):"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Viewport Settings"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Default Light Normal:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Ambient Light Color:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective FOV (deg.):"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Near:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Far:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Change"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate (deg.):"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale (ratio):"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Type"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Pre"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Post"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "ERROR: Couldn't load frame resource!"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Frame"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Resource clipboard is empty or not a texture!"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Paste Frame"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Empty"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation Loop"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation FPS"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "(empty)"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animations"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Speed (FPS):"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animation Frames"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (Before)"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (After)"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Up"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Down"
+msgstr ""
+
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Set region_rect"
+msgstr ""
+
+#: tools/editor/plugins/sprite_region_editor_plugin.cpp
+msgid "Sprite Region Editor"
+msgstr ""
+
+#: tools/editor/plugins/style_box_editor_plugin.cpp
+msgid "StyleBox Preview:"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Can't save theme to file:"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add All Items"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add All"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove Item"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add Class Items"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Remove Class Items"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Create Template"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio1"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio2"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Item"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Check Item"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Checked Item"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Has"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Many"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp tools/editor/project_export.cpp
+msgid "Options"
+msgstr "選項"
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Have,Many,Several,Options!"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 1"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 2"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 3"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/scene_tree_editor.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Type:"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Data Type:"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Icon"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Style"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Color"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint TileMap"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Duplicate"
+msgstr "複製"
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase TileMap"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Bucket"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Pick Tile"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Select"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase Selection"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Transpose"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror X (A)"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror Y (S)"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 0 degrees"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 90 degrees"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 180 degrees"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 270 degrees"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Could not find tile:"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Item name or ID:"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from scene?"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from scene?"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from Scene"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from Scene"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Error"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Edit Script Options"
+msgstr "編輯腳本選項"
+
+#: tools/editor/project_export.cpp
+msgid "Please export outside the project folder!"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Error exporting project!"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Error writing the project PCK!"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "No exporter for platform '%s' yet."
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Include"
+msgstr "包括"
+
+#: tools/editor/project_export.cpp
+msgid "Change Image Group"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Group name can't be empty!"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Invalid character in group name!"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Group name already exists!"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Add Image Group"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Delete Image Group"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Atlas Preview"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Project Export Settings"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Target"
+msgstr "目標"
+
+#: tools/editor/project_export.cpp
+msgid "Export to Platform"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Resources"
+msgstr "資源"
+
+#: tools/editor/project_export.cpp
+msgid "Export selected resources (including dependencies)."
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export all resources in the project."
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export all files in the project directory."
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export Mode:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Resources to Export:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Action"
+msgstr "行為"
+
+#: tools/editor/project_export.cpp
+msgid ""
+"Filters to export non-resource files (comma-separated, e.g.: *.json, *.txt):"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Filters to exclude from export (comma-separated, e.g.: *.json, *.txt):"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Convert text scenes to binary on export."
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Images"
+msgstr "圖片"
+
+#: tools/editor/project_export.cpp
+msgid "Keep Original"
+msgstr "保持原貌"
+
+#: tools/editor/project_export.cpp
+msgid "Compress for Disk (Lossy, WebP)"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress for RAM (BC/PVRTC/ETC)"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Convert Images (*.png):"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress for Disk (Lossy) Quality:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Shrink All Images:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress Formats:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Image Groups"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Groups:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress Disk"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress RAM"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress Mode:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Lossy Quality:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Atlas:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Shrink By:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Preview Atlas"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Image Filter:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Images:"
+msgstr "圖片:"
+
+#: tools/editor/project_export.cpp
+msgid "Select None"
+msgstr "不選"
+
+#: tools/editor/project_export.cpp
+msgid "Samples"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Sample Conversion Mode: (.wav files):"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Keep"
+msgstr "保留"
+
+#: tools/editor/project_export.cpp
+msgid "Compress (RAM - IMA-ADPCM)"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Sampling Rate Limit (Hz):"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Trim"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Trailing Silence:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Script"
+msgstr "腳本"
+
+#: tools/editor/project_export.cpp
+msgid "Script Export Mode:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Text"
+msgstr "文字"
+
+#: tools/editor/project_export.cpp
+msgid "Compiled"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Encrypted (Provide Key Below)"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Script Encryption Key (256-bits as hex):"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export PCK/Zip"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export Project PCK"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export.."
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Project Export"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export Preset:"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, the path must exist!"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, engine.cfg must not exist."
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, engine.cfg must exist."
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Imported Project"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path (changed anything?)."
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Couldn't create engine.cfg in project path."
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Import Existing Project"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Project Path (Must Exist):"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Project Name:"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Create New Project"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Project Path:"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Browse"
+msgstr "瀏覽"
+
+#: tools/editor/project_manager.cpp
+msgid "New Game Project"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "That's a BINGO!"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Unnamed Project"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Are you sure to open more than one projects?"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Are you sure to run more than one projects?"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Remove project from the list? (Folder contents will not be modified)"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Recent Projects:"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Run"
+msgstr "運行"
+
+#: tools/editor/project_manager.cpp
+msgid "Scan"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "New Project"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Exit"
+msgstr "離開"
+
+#: tools/editor/project_settings.cpp
+msgid "Key "
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Joy Button"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Joy Axis"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Mouse Button"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid action (anything goes but '/' or ':')."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Action '%s' already exists!"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Rename Input Action Event"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Add Input Action Event"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Meta+"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Shift+"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Alt+"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Control+"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Press a Key.."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Mouse Button Index:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Left Button"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Right Button"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Middle Button"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Up Button"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Down Button"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Button 6"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Button 7"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Button 8"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Button 9"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Joystick Axis Index:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Axis"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Joystick Button Index:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Add Input Action"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Erase Input Action Event"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Device"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Button"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Left Button."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Right Button."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Middle Button."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Up."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Down."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Toggle Persisting"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Error saving settings."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Settings saved OK."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Add Translation"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Toggle AutoLoad Globals"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Valid characters:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing engine class name."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing buit-in type name."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid name. Must not collide with an existing global constant name."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Add Autoload"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Autoload"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Move Autoload"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Translation"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Add Remapped Path"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Resource Remap Add Remap"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Change Resource Remap Language"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Resource Remap"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Resource Remap Option"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Enable"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Project Settings (engine.cfg)"
+msgstr ""
+
+#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp
+msgid "General"
+msgstr ""
+
+#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp
+msgid "Property:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Del"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Copy To Platform.."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Input Map"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Action:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Device:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Index:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Localization"
+msgstr "本地化"
+
+#: tools/editor/project_settings.cpp
+msgid "Translations"
+msgstr "翻譯"
+
+#: tools/editor/project_settings.cpp
+msgid "Translations:"
+msgstr "翻譯:"
+
+#: tools/editor/project_settings.cpp
+msgid "Add.."
+msgstr "添加..."
+
+#: tools/editor/project_settings.cpp
+msgid "Remaps"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Resources:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Remaps by Locale:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Locale"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "AutoLoad"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Node Name:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "List:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Singleton"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Preset.."
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Ease In"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Ease Out"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Zero"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Easing In-Out"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Easing Out-In"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "File.."
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Dir.."
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Load"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Assign"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Error loading file: Not a resource!"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Couldn't load image"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Bit %d, val %d."
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "On"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Set"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Properties:"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Global"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Sections:"
+msgstr ""
+
+#: tools/editor/pvrtc_compress.cpp
+msgid "Could not execute PVRTC tool:"
+msgstr ""
+
+#: tools/editor/pvrtc_compress.cpp
+msgid "Can't load back converted image using PVRTC tool:"
+msgstr ""
+
+#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp
+msgid "Reparent Node"
+msgstr ""
+
+#: tools/editor/reparent_dialog.cpp
+msgid "Reparent Location (Select new Parent):"
+msgstr ""
+
+#: tools/editor/reparent_dialog.cpp
+msgid "Keep Global Transform"
+msgstr ""
+
+#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp
+msgid "Reparent"
+msgstr ""
+
+#: tools/editor/resources_dock.cpp
+msgid "Create New Resource"
+msgstr ""
+
+#: tools/editor/resources_dock.cpp
+msgid "Open Resource"
+msgstr ""
+
+#: tools/editor/resources_dock.cpp
+msgid "Save Resource"
+msgstr ""
+
+#: tools/editor/resources_dock.cpp
+msgid "Resource Tools"
+msgstr ""
+
+#: tools/editor/resources_dock.cpp
+msgid "Make Local"
+msgstr ""
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Run Mode:"
+msgstr ""
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Current Scene"
+msgstr ""
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Main Scene"
+msgstr ""
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Main Scene Arguments:"
+msgstr ""
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Scene Run Settings"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "OK :("
+msgstr "OK :("
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "No parent to instance a child at."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error loading scene from %s"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error instancing scene from %s"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Ok"
+msgstr "Ok"
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Cannot instance the scene '%s' because the current scene exists within one of "
+"its nodes."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Instance Scene(s)"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done on the tree root."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Node In Parent"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Nodes In Parent"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Duplicate Node(s)"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete Node(s)?"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done without a scene."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation requires a single selected node."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done on instanced scenes."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Save New Scene As.."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Makes Sense!"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes from a foreign scene!"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes the current scene inherits from!"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Remove Node(s)"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Create Node"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Couldn't save new scene. Likely dependencies (instances) couldn't be "
+"satisfied."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error saving scene."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error duplicating scene to save it."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "New Scene Root"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Inherit Scene"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add Child Node"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Instance Child Scene"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Change Type"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Edit Groups"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Edit Connections"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add Script"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Merge From Scene"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Save Branch as Scene"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete Node(s)"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add/Create a New Node"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Instance a scene file as a Node. Creates an inherited scene if no root node "
+"exists."
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid ""
+"This item cannot be made visible because the parent is hidden. Unhide the "
+"parent first."
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Toggle Spatial Visible"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Toggle CanvasItem Visible"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Instance:"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Invalid node name, the following characters are not allowed:"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Rename Node"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Scene Tree (Nodes):"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Editable Children"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Load As Placeholder"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Open in Editor"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear Inheritance"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear Inheritance? (No Undo!)"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear!"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Select a Node"
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Same source and destination files, doing nothing."
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Same source and destination paths, doing nothing."
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Can't move directories to within themselves."
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Can't operate on '..'"
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Pick New Name and Location For:"
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "No files selected!"
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Instance"
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Edit Dependencies.."
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "View Owners.."
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Rename or Move.."
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Move To.."
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Info"
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Show In File Manager"
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Previous Directory"
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Next Directory"
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Re-Scan Filesystem"
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Toggle folder status as Favorite"
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Instance the selected scene(s) as child of the selected node."
+msgstr ""
+
+#: tools/editor/scenes_dock.cpp
+msgid "Move"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid parent class name"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid chars:"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid class name"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid name"
+msgstr "有效名稱"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "N/A"
+msgstr "N/A"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Class name is invalid!"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Parent class name is invalid!"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid path!"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Could not create script in filesystem."
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Path is empty"
+msgstr "路徑為空"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Path is not local"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid base path"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "File exists"
+msgstr "檔案已存在"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid extension"
+msgstr "無效副檔名"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid path"
+msgstr "有效路徑"
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Class Name:"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Built-In Script"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Create Node Script"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Bytes:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Warning"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Error:"
+msgstr "錯誤:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Source:"
+msgstr "來源:"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Function:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Errors"
+msgstr "錯誤"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Child Process Connected"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Inspect Previous Instance"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Inspect Next Instance"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Stack Frames"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Variable"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Errors:"
+msgstr "錯誤"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Stack Trace (if applicable):"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Remote Inspector"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+#, fuzzy
+msgid "Live Scene Tree:"
+msgstr "儲存場景"
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Remote Object Properties: "
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Profiler"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Monitor"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Value"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Monitors"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "List of Video Memory Usage by Resource:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Total:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Video Mem"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Resource Path"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Type"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Usage"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Misc"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Clicked Control:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Clicked Control Type:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Live Edit Root:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Set From Tree"
+msgstr ""
+
+#: tools/editor/settings_config_dialog.cpp
+msgid "Plugin List:"
+msgstr "插件列表:"
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Light Radius"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Camera FOV"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Camera Size"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Sphere Shape Radius"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Box Shape Extents"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Radius"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Height"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Ray Shape Length"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Notifier Extents"
+msgstr ""